Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
300c3bfd26 | ||
|
|
6449d9962d | ||
|
|
12554e63e2 | ||
|
|
af60ee6edb | ||
|
|
fe31fc6df2 | ||
|
|
6d4f3cafbf | ||
|
|
fa23b8078c | ||
|
|
e3c0fe8857 | ||
|
|
fa568686b6 | ||
|
|
304357b43c | ||
|
|
1e76b14038 | ||
|
|
d0777350a2 | ||
|
|
c7c1e74240 | ||
|
|
c793e1399b | ||
|
|
c550a6ff51 | ||
|
|
05b0f719e0 | ||
|
|
4326df5069 | ||
|
|
ba24287f04 | ||
|
|
bd8f1b17dd | ||
|
|
2c21aeb83a | ||
|
|
9ccff808bc | ||
|
|
32e936dd71 | ||
|
|
58eebacd4f | ||
|
|
75b945e842 | ||
|
|
a9ea77f74f | ||
|
|
3df658165b | ||
|
|
40a6a77b8d | ||
|
|
301a33a176 | ||
|
|
8d6623786c | ||
|
|
a225eab6f2 |
@@ -1,5 +1,29 @@
|
||||
# Change Log
|
||||
|
||||
## 1.56.3
|
||||
* Fix parsing URLs in barcodes
|
||||
* Update French, Portuguese, Turkish and Taiwan translation
|
||||
|
||||
## 1.56.2
|
||||
* Fix generating 1D barcode text output
|
||||
|
||||
## 1.56.1
|
||||
* Allow pinching a barcode to its generated size
|
||||
* Fix view/frame transformation matrix
|
||||
* Fix handling of tab characters
|
||||
* Update Indonesian translation
|
||||
* Update Russian translation
|
||||
|
||||
## 1.56.0
|
||||
* Add an action item to lock/unlock free rotation
|
||||
* Support setting fore and background colors when creating barcodes
|
||||
* Fix creating barcodes with UTF-8 content
|
||||
|
||||
## 1.55.0
|
||||
* Make recreated barcode interactive
|
||||
* Update to latest ZXing C++
|
||||
* Update Italian translation
|
||||
|
||||
## 1.54.1
|
||||
* Update Russian translation
|
||||
* Update Turkish translation
|
||||
|
||||
+3
-3
@@ -9,8 +9,8 @@ android {
|
||||
minSdkVersion 9
|
||||
targetSdkVersion sdk_version
|
||||
|
||||
versionCode 104
|
||||
versionName '1.54.1'
|
||||
versionCode 111
|
||||
versionName '1.56.3'
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
@@ -66,5 +66,5 @@ dependencies {
|
||||
implementation "com.android.support:preference-v14:$support_version"
|
||||
implementation 'com.github.markusfisch:CameraView:1.9.1'
|
||||
implementation 'com.github.markusfisch:ScalingImageView:1.4.0'
|
||||
implementation 'com.github.markusfisch:zxing-cpp:v1.4.0.4'
|
||||
implementation 'com.github.markusfisch:zxing-cpp:v1.4.0.9'
|
||||
}
|
||||
|
||||
@@ -64,15 +64,6 @@
|
||||
<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="markusfisch.de"/>
|
||||
<data android:pathPrefix="/BinaryEye"/>
|
||||
<data android:scheme="http"/>
|
||||
<data android:scheme="https"/>
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
|
||||
@@ -7,9 +7,7 @@ import de.markusfisch.android.binaryeye.content.openUrl
|
||||
|
||||
object WebAction : IAction {
|
||||
private val colloquialRegex =
|
||||
"""^(http[s]*://)*([a-z0-9]+[a-z0-9-]*[a-z0-9]+[.])+[a-z]{2,}([?#/]+[\w/=&;._-]*)*$""".toRegex(
|
||||
RegexOption.IGNORE_CASE
|
||||
)
|
||||
"^(http[s]*://)*[A-Za-z0-9]{3,}\\.[A-Za-z]{2,}[^ \t\r\n]*$".toRegex()
|
||||
|
||||
override val iconResId: Int = R.drawable.ic_action_open
|
||||
override val titleResId: Int = R.string.open_url
|
||||
|
||||
@@ -45,6 +45,7 @@ class PickActivity : AppCompatActivity() {
|
||||
private lateinit var vibrator: Vibrator
|
||||
private lateinit var cropImageView: CropImageView
|
||||
private lateinit var detectorView: DetectorView
|
||||
private lateinit var freeRotationItem: MenuItem
|
||||
|
||||
private var result: Result? = null
|
||||
|
||||
@@ -81,7 +82,7 @@ class PickActivity : AppCompatActivity() {
|
||||
|
||||
cropImageView = findViewById(R.id.image) as CropImageView
|
||||
cropImageView.restrictTranslation = false
|
||||
cropImageView.freeRotation = true
|
||||
cropImageView.freeRotation = prefs.freeRotation
|
||||
cropImageView.setImageBitmap(bitmap)
|
||||
cropImageView.onScan = {
|
||||
scanWithinBounds(bitmap)
|
||||
@@ -179,6 +180,9 @@ class PickActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
menuInflater.inflate(R.menu.activity_pick, menu)
|
||||
freeRotationItem = menu.findItem(R.id.toggle_free).apply {
|
||||
updateFreeRotationIcon()
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -188,10 +192,26 @@ 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)
|
||||
}
|
||||
}
|
||||
|
||||
private fun MenuItem.updateFreeRotationIcon() {
|
||||
setIcon(
|
||||
if (prefs.freeRotation) {
|
||||
R.drawable.ic_action_rotation_unlocked
|
||||
} else {
|
||||
R.drawable.ic_action_rotation_locked
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
private fun rotateClockwise() {
|
||||
cropImageView.imageRotation = cropImageView.imageRotation + 90 % 360
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import android.os.Parcelable
|
||||
import android.text.format.DateFormat
|
||||
import de.markusfisch.android.zxingcpp.ZxingCpp
|
||||
import de.markusfisch.android.zxingcpp.ZxingCpp.ContentType
|
||||
import de.markusfisch.android.zxingcpp.ZxingCpp.Format
|
||||
import de.markusfisch.android.zxingcpp.ZxingCpp.Result
|
||||
|
||||
data class Scan(
|
||||
@@ -152,22 +153,13 @@ fun Result.toScan(): Scan {
|
||||
)
|
||||
}
|
||||
|
||||
fun Scan.recreate(
|
||||
size: Int = 128,
|
||||
margin: Int = -1
|
||||
): Bitmap? {
|
||||
if (content.isEmpty()) {
|
||||
return null
|
||||
}
|
||||
val ecLevel = when (errorCorrectionLevel) {
|
||||
"L" -> 0
|
||||
"M" -> 1
|
||||
"Q" -> 2
|
||||
"H" -> 3
|
||||
else -> -1
|
||||
}
|
||||
return try {
|
||||
val format = ZxingCpp.Format.valueOf(format)
|
||||
data class Recreation(
|
||||
val format: Format,
|
||||
val ecLevel: Int,
|
||||
val size: Int,
|
||||
val margin: Int
|
||||
) {
|
||||
fun encode(content: String): Bitmap? = try {
|
||||
ZxingCpp.encodeAsBitmap(
|
||||
content, format, size, size, margin, ecLevel
|
||||
)
|
||||
@@ -176,6 +168,26 @@ fun Scan.recreate(
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
)
|
||||
}
|
||||
|
||||
private fun getDateTime(
|
||||
time: Long = System.currentTimeMillis()
|
||||
) = DateFormat.format(
|
||||
|
||||
@@ -14,6 +14,8 @@ import de.markusfisch.android.binaryeye.app.hasWritePermission
|
||||
import de.markusfisch.android.binaryeye.content.copyToClipboard
|
||||
import de.markusfisch.android.binaryeye.content.shareFile
|
||||
import de.markusfisch.android.binaryeye.content.shareText
|
||||
import de.markusfisch.android.binaryeye.graphics.COLOR_BLACK
|
||||
import de.markusfisch.android.binaryeye.graphics.COLOR_WHITE
|
||||
import de.markusfisch.android.binaryeye.io.addSuffixIfNotGiven
|
||||
import de.markusfisch.android.binaryeye.io.toSaveResult
|
||||
import de.markusfisch.android.binaryeye.io.writeExternalFile
|
||||
@@ -23,6 +25,7 @@ import de.markusfisch.android.binaryeye.widget.ConfinedScalingImageView
|
||||
import de.markusfisch.android.binaryeye.widget.toast
|
||||
import de.markusfisch.android.zxingcpp.ZxingCpp
|
||||
import de.markusfisch.android.zxingcpp.ZxingCpp.Format
|
||||
import kotlin.math.min
|
||||
import kotlinx.coroutines.*
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
@@ -61,11 +64,11 @@ class BarcodeFragment : Fragment() {
|
||||
|
||||
val bitmap: Bitmap
|
||||
try {
|
||||
barcode = arguments?.toProperties() ?: throw IllegalArgumentException(
|
||||
barcode = arguments?.toBarcode() ?: throw IllegalArgumentException(
|
||||
"Illegal arguments"
|
||||
)
|
||||
// Catch exceptions from encoding.
|
||||
bitmap = barcode.bitmap
|
||||
bitmap = barcode.bitmap()
|
||||
} catch (e: Exception) {
|
||||
var message = e.message
|
||||
if (message == null || message.isEmpty()) {
|
||||
@@ -84,7 +87,10 @@ class BarcodeFragment : Fragment() {
|
||||
imageView.setImageBitmap(bitmap)
|
||||
imageView.post {
|
||||
// Make sure to invoke this after ScalingImageView.onLayout().
|
||||
imageView.minWidth /= 2f
|
||||
imageView.minWidth = min(
|
||||
imageView.minWidth / 2f,
|
||||
barcode.size.toFloat()
|
||||
)
|
||||
}
|
||||
|
||||
view.findViewById<View>(R.id.share).setOnClickListener {
|
||||
@@ -103,7 +109,7 @@ class BarcodeFragment : Fragment() {
|
||||
return view
|
||||
}
|
||||
|
||||
private fun Bundle.toProperties() = Barcode(
|
||||
private fun Bundle.toBarcode() = Barcode(
|
||||
getString(CONTENT) ?: throw IllegalArgumentException(
|
||||
"content cannot be null"
|
||||
),
|
||||
@@ -113,7 +119,8 @@ class BarcodeFragment : Fragment() {
|
||||
)
|
||||
),
|
||||
getInt(SIZE),
|
||||
getInt(EC_LEVEL)
|
||||
getInt(EC_LEVEL),
|
||||
Colors.values()[getInt(COLORS)]
|
||||
)
|
||||
|
||||
override fun onDestroyView() {
|
||||
@@ -129,7 +136,7 @@ class BarcodeFragment : Fragment() {
|
||||
return when (item.itemId) {
|
||||
R.id.copy_to_clipboard -> {
|
||||
context.apply {
|
||||
copyToClipboard(barcode.text)
|
||||
copyToClipboard(barcode.text())
|
||||
toast(R.string.copied_to_clipboard)
|
||||
}
|
||||
true
|
||||
@@ -181,19 +188,19 @@ class BarcodeFragment : Fragment() {
|
||||
addSuffixIfNotGiven(fileName, ".png"),
|
||||
MIME_PNG
|
||||
) {
|
||||
barcode.bitmap.saveAsPng(it)
|
||||
barcode.bitmap().saveAsPng(it)
|
||||
}
|
||||
FileType.SVG -> saveAs(
|
||||
addSuffixIfNotGiven(fileName, ".svg"),
|
||||
MIME_SVG
|
||||
) { outputStream ->
|
||||
outputStream.write(barcode.svg.toByteArray())
|
||||
outputStream.write(barcode.svg().toByteArray())
|
||||
}
|
||||
FileType.TXT -> saveAs(
|
||||
addSuffixIfNotGiven(fileName, ".txt"),
|
||||
MIME_TXT
|
||||
) { outputStream ->
|
||||
outputStream.write(barcode.text.toByteArray())
|
||||
outputStream.write(barcode.text().toByteArray())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -218,9 +225,9 @@ class BarcodeFragment : Fragment() {
|
||||
|
||||
private fun Context.shareAs(fileType: FileType) {
|
||||
when (fileType) {
|
||||
FileType.PNG -> share(barcode.bitmap)
|
||||
FileType.SVG -> shareText(barcode.svg, MIME_SVG)
|
||||
FileType.TXT -> shareText(barcode.text)
|
||||
FileType.PNG -> share(barcode.bitmap())
|
||||
FileType.SVG -> shareText(barcode.svg(), MIME_SVG)
|
||||
FileType.TXT -> shareText(barcode.text())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -253,6 +260,7 @@ class BarcodeFragment : Fragment() {
|
||||
private const val FORMAT = "format"
|
||||
private const val SIZE = "size"
|
||||
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"
|
||||
@@ -261,13 +269,15 @@ class BarcodeFragment : Fragment() {
|
||||
content: String,
|
||||
format: Format,
|
||||
size: Int,
|
||||
ecLevel: Int = -1
|
||||
ecLevel: Int = -1,
|
||||
colors: Int = 0
|
||||
): Fragment {
|
||||
val args = Bundle()
|
||||
args.putString(CONTENT, content)
|
||||
args.putString(FORMAT, format.name)
|
||||
args.putInt(SIZE, size)
|
||||
args.putInt(EC_LEVEL, ecLevel)
|
||||
args.putInt(COLORS, colors)
|
||||
val fragment = BarcodeFragment()
|
||||
fragment.arguments = args
|
||||
return fragment
|
||||
@@ -279,20 +289,59 @@ private data class Barcode(
|
||||
val content: String,
|
||||
val format: Format,
|
||||
val size: Int,
|
||||
val ecLevel: Int
|
||||
val ecLevel: Int,
|
||||
val colors: Colors
|
||||
) {
|
||||
val bitmap: Bitmap
|
||||
get() = ZxingCpp.encodeAsBitmap(
|
||||
content, format, size, size, -1, ecLevel
|
||||
private var _bitmap: Bitmap? = null
|
||||
fun bitmap(): Bitmap {
|
||||
val b = _bitmap ?: ZxingCpp.encodeAsBitmap(
|
||||
content, format, size, size, -1, ecLevel,
|
||||
setColor = colors.foregroundColor(),
|
||||
unsetColor = colors.backgroundColor()
|
||||
)
|
||||
val svg: String
|
||||
get() = ZxingCpp.encodeAsSvg(
|
||||
_bitmap = b
|
||||
return b
|
||||
}
|
||||
|
||||
private var _svg: String? = null
|
||||
fun svg(): String {
|
||||
val s = _svg ?: ZxingCpp.encodeAsSvg(
|
||||
content, format, -1, ecLevel
|
||||
)
|
||||
val text: String
|
||||
get() = ZxingCpp.encodeAsText(
|
||||
content, format, -1, ecLevel
|
||||
_svg = s
|
||||
return s
|
||||
}
|
||||
|
||||
private var _text: String? = null
|
||||
fun text(): String {
|
||||
val t = _text ?: ZxingCpp.encodeAsText(
|
||||
content, format, -1, ecLevel,
|
||||
inverted = colors == Colors.BLACK_ON_WHITE
|
||||
)
|
||||
_text = t
|
||||
return t
|
||||
}
|
||||
}
|
||||
|
||||
private enum class Colors {
|
||||
BLACK_ON_WHITE,
|
||||
WHITE_ON_BLACK,
|
||||
BLACK_ON_TRANSPARENT,
|
||||
WHITE_ON_TRANSPARENT;
|
||||
|
||||
fun foregroundColor(): Int = when (this) {
|
||||
BLACK_ON_WHITE,
|
||||
BLACK_ON_TRANSPARENT -> COLOR_BLACK
|
||||
WHITE_ON_BLACK,
|
||||
WHITE_ON_TRANSPARENT -> COLOR_WHITE
|
||||
}
|
||||
|
||||
fun backgroundColor(): Int = when (this) {
|
||||
BLACK_ON_WHITE -> COLOR_WHITE
|
||||
WHITE_ON_BLACK -> COLOR_BLACK
|
||||
BLACK_ON_TRANSPARENT,
|
||||
WHITE_ON_TRANSPARENT -> 0
|
||||
}
|
||||
}
|
||||
|
||||
private fun Bitmap.saveAsPng(outputStream: OutputStream, quality: Int = 90) =
|
||||
|
||||
@@ -12,6 +12,7 @@ import android.view.*
|
||||
import android.widget.*
|
||||
import de.markusfisch.android.binaryeye.R
|
||||
import de.markusfisch.android.binaryeye.actions.ActionRegistry
|
||||
import de.markusfisch.android.binaryeye.actions.IAction
|
||||
import de.markusfisch.android.binaryeye.actions.wifi.WifiAction
|
||||
import de.markusfisch.android.binaryeye.actions.wifi.WifiConnector
|
||||
import de.markusfisch.android.binaryeye.activity.MainActivity
|
||||
@@ -20,8 +21,9 @@ import de.markusfisch.android.binaryeye.app.*
|
||||
import de.markusfisch.android.binaryeye.content.copyToClipboard
|
||||
import de.markusfisch.android.binaryeye.content.shareText
|
||||
import de.markusfisch.android.binaryeye.content.toHexString
|
||||
import de.markusfisch.android.binaryeye.database.Recreation
|
||||
import de.markusfisch.android.binaryeye.database.Scan
|
||||
import de.markusfisch.android.binaryeye.database.recreate
|
||||
import de.markusfisch.android.binaryeye.database.toRecreation
|
||||
import de.markusfisch.android.binaryeye.io.askForFileName
|
||||
import de.markusfisch.android.binaryeye.io.toSaveResult
|
||||
import de.markusfisch.android.binaryeye.io.writeExternalFile
|
||||
@@ -36,9 +38,10 @@ class DecodeFragment : Fragment() {
|
||||
private lateinit var dataView: TableLayout
|
||||
private lateinit var metaView: TableLayout
|
||||
private lateinit var hexView: TextView
|
||||
private lateinit var format: String
|
||||
private lateinit var stampView: TextView
|
||||
private lateinit var recreationView: ImageView
|
||||
private lateinit var fab: FloatingActionButton
|
||||
private lateinit var format: String
|
||||
|
||||
private val parentJob = Job()
|
||||
private val scope: CoroutineScope = CoroutineScope(Dispatchers.Main + parentJob)
|
||||
@@ -50,8 +53,9 @@ class DecodeFragment : Fragment() {
|
||||
private var closeAutomatically = false
|
||||
private var action = ActionRegistry.DEFAULT_ACTION
|
||||
private var isBinary = false
|
||||
private var raw: ByteArray = ByteArray(0)
|
||||
private var originalBytes: ByteArray = ByteArray(0)
|
||||
private var id = 0L
|
||||
private var recreation: Recreation? = null
|
||||
|
||||
override fun onCreate(state: Bundle?) {
|
||||
super.onCreate(state)
|
||||
@@ -80,95 +84,36 @@ class DecodeFragment : Fragment() {
|
||||
@Suppress("DEPRECATION")
|
||||
arguments?.getParcelable(SCAN) as Scan?
|
||||
} ?: throw IllegalArgumentException("DecodeFragment needs a Scan")
|
||||
|
||||
val originalContent = scan.content
|
||||
isBinary = scan.raw != null
|
||||
originalBytes = scan.raw ?: originalContent.toByteArray()
|
||||
format = scan.format
|
||||
id = scan.id
|
||||
|
||||
val inputContent = scan.content
|
||||
isBinary = scan.raw != null
|
||||
raw = scan.raw ?: inputContent.toByteArray()
|
||||
format = scan.format
|
||||
|
||||
contentView = view.findViewById(R.id.content)
|
||||
stampView = view.findViewById(R.id.stamp)
|
||||
fab = view.findViewById(R.id.open)
|
||||
|
||||
if (!isBinary) {
|
||||
contentView.setText(inputContent)
|
||||
contentView.addTextChangedListener(object : TextWatcher {
|
||||
override fun afterTextChanged(s: Editable?) {
|
||||
updateViewsAndAction(content.toByteArray())
|
||||
}
|
||||
|
||||
override fun beforeTextChanged(
|
||||
s: CharSequence?,
|
||||
start: Int,
|
||||
count: Int,
|
||||
after: Int
|
||||
) {
|
||||
}
|
||||
|
||||
override fun onTextChanged(
|
||||
s: CharSequence?,
|
||||
start: Int,
|
||||
before: Int,
|
||||
count: Int
|
||||
) {
|
||||
}
|
||||
})
|
||||
fab.setOnClickListener {
|
||||
executeAction(content.toByteArray())
|
||||
}
|
||||
if (prefs.openImmediately) {
|
||||
executeAction(content.toByteArray())
|
||||
}
|
||||
} else {
|
||||
contentView.setText(String(raw).foldNonAlNum())
|
||||
contentView.isEnabled = false
|
||||
fab.setImageResource(R.drawable.ic_action_save)
|
||||
fab.setOnClickListener {
|
||||
askForFileNameAndSave(raw)
|
||||
}
|
||||
}
|
||||
|
||||
val trackingLink = generateDpTrackingLink(raw, scan.format)
|
||||
if (trackingLink != null) {
|
||||
stampView.apply {
|
||||
text = trackingLink.fromHtml()
|
||||
isClickable = true
|
||||
movementMethod = LinkMovementMethod.getInstance()
|
||||
}
|
||||
} else {
|
||||
stampView.visibility = View.GONE
|
||||
}
|
||||
|
||||
formatView = view.findViewById(R.id.format)
|
||||
dataView = view.findViewById(R.id.data)
|
||||
metaView = view.findViewById(R.id.meta)
|
||||
hexView = view.findViewById(R.id.hex)
|
||||
stampView = view.findViewById(R.id.stamp)
|
||||
recreationView = view.findViewById(R.id.recreation)
|
||||
fab = view.findViewById(R.id.open)
|
||||
|
||||
updateViewsAndAction(raw)
|
||||
|
||||
if (!isBinary) {
|
||||
fillDataView(dataView, inputContent)
|
||||
}
|
||||
initContentAndFab(originalContent)
|
||||
|
||||
if (prefs.showMetaData) {
|
||||
fillMetaView(metaView, scan)
|
||||
metaView.fillMetaView(scan)
|
||||
} else {
|
||||
metaView.visibility = View.GONE
|
||||
}
|
||||
if (prefs.showRecreation) {
|
||||
recreation = scan.toRecreation(
|
||||
(200f * dp).roundToInt()
|
||||
)
|
||||
}
|
||||
|
||||
view.findViewById<ImageView>(R.id.recreation).apply {
|
||||
scope.launch(Dispatchers.IO) {
|
||||
val bitmap = if (prefs.showRecreation) {
|
||||
scan.recreate((200f * dp).roundToInt())
|
||||
} else null
|
||||
withContext(Dispatchers.Main) {
|
||||
if (bitmap != null) {
|
||||
setImageBitmap(bitmap)
|
||||
} else {
|
||||
visibility = View.GONE
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
updateViewsAndFab(originalContent, originalBytes)
|
||||
|
||||
(view.findViewById(R.id.inset_layout) as View).setPaddingFromWindowInsets()
|
||||
(view.findViewById(R.id.scroll_view) as View).setPaddingFromWindowInsets()
|
||||
@@ -181,35 +126,104 @@ class DecodeFragment : Fragment() {
|
||||
parentJob.cancel()
|
||||
}
|
||||
|
||||
private fun updateViewsAndAction(bytes: ByteArray) {
|
||||
private fun initContentAndFab(originalContent: String) {
|
||||
if (isBinary) {
|
||||
contentView.setText(String(originalBytes).foldNonAlNum())
|
||||
contentView.isEnabled = false
|
||||
fab.setImageResource(R.drawable.ic_action_save)
|
||||
fab.setOnClickListener {
|
||||
askForFileNameAndSave(originalBytes)
|
||||
}
|
||||
} else {
|
||||
contentView.setText(originalContent)
|
||||
contentView.addTextChangedListener(object : TextWatcher {
|
||||
override fun afterTextChanged(s: Editable?) {
|
||||
updateViewsAndFab(s?.toString() ?: "")
|
||||
}
|
||||
|
||||
override fun beforeTextChanged(
|
||||
s: CharSequence?,
|
||||
start: Int,
|
||||
count: Int,
|
||||
after: Int
|
||||
) = Unit
|
||||
|
||||
override fun onTextChanged(
|
||||
s: CharSequence?,
|
||||
start: Int,
|
||||
before: Int,
|
||||
count: Int
|
||||
) = Unit
|
||||
})
|
||||
fab.setOnClickListener {
|
||||
executeAction(content)
|
||||
}
|
||||
if (prefs.openImmediately) {
|
||||
executeAction(content)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateViewsAndFab(text: String, bytes: ByteArray? = null) {
|
||||
val b = bytes ?: text.toByteArray()
|
||||
resolveActionAndUpdateFab(b)
|
||||
updateViews(text, b)
|
||||
}
|
||||
|
||||
private fun resolveActionAndUpdateFab(bytes: ByteArray) {
|
||||
val prevAction = action
|
||||
if (!prevAction.canExecuteOn(bytes)) {
|
||||
action = ActionRegistry.getAction(bytes)
|
||||
}
|
||||
if (prevAction !== action) {
|
||||
updateFab(action)
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateFab(action: IAction) {
|
||||
fab.setImageResource(action.iconResId)
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
|
||||
fab.setOnLongClickListener { v ->
|
||||
v.context.toast(action.titleResId)
|
||||
true
|
||||
}
|
||||
} else {
|
||||
fab.tooltipText = getString(action.titleResId)
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateViews(text: String, bytes: ByteArray) {
|
||||
formatView.text = resources.getQuantityString(
|
||||
R.plurals.barcode_info,
|
||||
bytes.size,
|
||||
prettifyFormatName(format),
|
||||
bytes.size
|
||||
)
|
||||
hexView.text = if (prefs.showHexDump) hexDump(bytes) else ""
|
||||
if (prevAction !== action) {
|
||||
fab.setImageResource(action.iconResId)
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
|
||||
fab.setOnLongClickListener { v ->
|
||||
v.context.toast(action.titleResId)
|
||||
true
|
||||
}
|
||||
} else {
|
||||
fab.tooltipText = getString(action.titleResId)
|
||||
hexView.showIf(prefs.showHexDump) { v ->
|
||||
v.text = hexDump(bytes)
|
||||
}
|
||||
recreationView.showIf(prefs.showRecreation) { v ->
|
||||
val r = recreation ?: return@showIf
|
||||
v.setImageBitmap(r.encode(text))
|
||||
v.setOnClickListener {
|
||||
fragmentManager?.addFragment(
|
||||
BarcodeFragment.newInstance(
|
||||
text,
|
||||
r.format,
|
||||
r.size,
|
||||
r.ecLevel
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
dataView.fillDataView(text)
|
||||
stampView.setTrackingLink(bytes, format)
|
||||
}
|
||||
|
||||
private fun fillDataView(tableLayout: TableLayout, content: String) {
|
||||
private fun TableLayout.fillDataView(text: String) {
|
||||
val items = LinkedHashMap<Int, String?>()
|
||||
if (action is WifiAction) {
|
||||
WifiConnector.parseMap(content)?.let { wifiData ->
|
||||
WifiConnector.parseMap(text)?.let { wifiData ->
|
||||
items.putAll(
|
||||
linkedMapOf(
|
||||
R.string.entry_type to getString(R.string.wifi_network),
|
||||
@@ -225,10 +239,10 @@ class DecodeFragment : Fragment() {
|
||||
)
|
||||
}
|
||||
}
|
||||
fillDataTable(tableLayout, items)
|
||||
fill(items)
|
||||
}
|
||||
|
||||
private fun fillMetaView(tableLayout: TableLayout, scan: Scan) {
|
||||
private fun TableLayout.fillMetaView(scan: Scan) {
|
||||
val items = linkedMapOf(
|
||||
R.string.error_correction_level to scan.errorCorrectionLevel,
|
||||
R.string.sequence_size to scan.sequenceSize.positiveToString(),
|
||||
@@ -255,32 +269,31 @@ class DecodeFragment : Fragment() {
|
||||
)
|
||||
)
|
||||
}
|
||||
fillDataTable(tableLayout, items)
|
||||
fill(items)
|
||||
}
|
||||
|
||||
private fun fillDataTable(
|
||||
tableLayout: TableLayout,
|
||||
private fun TableLayout.fill(
|
||||
items: LinkedHashMap<Int, String?>
|
||||
) {
|
||||
if (items.isEmpty()) {
|
||||
tableLayout.visibility = View.GONE
|
||||
return
|
||||
}
|
||||
val ctx = tableLayout.context
|
||||
val spaceBetween = (16f * dp).roundToInt()
|
||||
items.forEach { item ->
|
||||
val text = item.value
|
||||
if (!text.isNullOrBlank()) {
|
||||
val tr = TableRow(ctx)
|
||||
val keyView = TextView(ctx)
|
||||
keyView.setText(item.key)
|
||||
val valueView = TextView(ctx)
|
||||
valueView.setPadding(spaceBetween, 0, 0, 0)
|
||||
valueView.text = text
|
||||
tr.addView(keyView)
|
||||
tr.addView(valueView)
|
||||
tableLayout.addView(tr)
|
||||
removeAllViews()
|
||||
visibility = if (items.isEmpty()) View.GONE else {
|
||||
val ctx = context
|
||||
val spaceBetween = (16f * dp).roundToInt()
|
||||
items.forEach { item ->
|
||||
val text = item.value
|
||||
if (!text.isNullOrBlank()) {
|
||||
val tr = TableRow(ctx)
|
||||
val keyView = TextView(ctx)
|
||||
keyView.setText(item.key)
|
||||
val valueView = TextView(ctx)
|
||||
valueView.setPadding(spaceBetween, 0, 0, 0)
|
||||
valueView.text = text
|
||||
tr.addView(keyView)
|
||||
tr.addView(valueView)
|
||||
addView(tr)
|
||||
}
|
||||
}
|
||||
View.VISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
@@ -333,7 +346,7 @@ class DecodeFragment : Fragment() {
|
||||
}
|
||||
|
||||
private fun textOrHex() = if (isBinary) {
|
||||
raw.toHexString()
|
||||
originalBytes.toHexString()
|
||||
} else {
|
||||
content
|
||||
}
|
||||
@@ -372,7 +385,7 @@ class DecodeFragment : Fragment() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun executeAction(content: ByteArray) {
|
||||
private fun executeAction(content: String) {
|
||||
val ac = activity ?: return
|
||||
if (content.isNotEmpty()) {
|
||||
if (action is WifiAction &&
|
||||
@@ -382,7 +395,7 @@ class DecodeFragment : Fragment() {
|
||||
return
|
||||
}
|
||||
scope.launch {
|
||||
action.execute(ac, content)
|
||||
action.execute(ac, content.toByteArray())
|
||||
maybeBackOrFinish()
|
||||
}
|
||||
}
|
||||
@@ -425,7 +438,17 @@ class DecodeFragment : Fragment() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun Int.positiveToString() = if (this > -1) this.toString() else ""
|
||||
private inline fun <T : View> T.showIf(
|
||||
visible: Boolean,
|
||||
block: (T) -> Unit
|
||||
) {
|
||||
visibility = if (visible) {
|
||||
block.invoke(this)
|
||||
View.VISIBLE
|
||||
} else {
|
||||
View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
private val nonAlNum = "[^a-zA-Z0-9]".toRegex()
|
||||
private val multipleDots = "[…]+".toRegex()
|
||||
@@ -471,18 +494,31 @@ private fun hexDump(bytes: ByteArray, charsPerLine: Int = 33): String {
|
||||
return dump.toString()
|
||||
}
|
||||
|
||||
private fun generateDpTrackingLink(raw: ByteArray, format: String): String? {
|
||||
private fun Int.positiveToString() = if (this > -1) this.toString() else ""
|
||||
|
||||
private fun TextView.setTrackingLink(bytes: ByteArray, format: String) {
|
||||
val trackingLink = generateDpTrackingLink(bytes, format)
|
||||
if (trackingLink != null) {
|
||||
text = trackingLink.fromHtml()
|
||||
isClickable = true
|
||||
movementMethod = LinkMovementMethod.getInstance()
|
||||
} else {
|
||||
visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
private fun generateDpTrackingLink(bytes: ByteArray, format: String): String? {
|
||||
// Check for Deutsche Post Matrixcode stamp.
|
||||
var isStamp = false
|
||||
var rawData = raw
|
||||
var rawData = bytes
|
||||
if (format == "DATA_MATRIX" &&
|
||||
raw.toString(Charsets.ISO_8859_1).startsWith("DEA5")
|
||||
bytes.toString(Charsets.ISO_8859_1).startsWith("DEA5")
|
||||
) {
|
||||
if (raw.size == 47) {
|
||||
if (bytes.size == 47) {
|
||||
isStamp = true
|
||||
} else if (raw.size > 47) {
|
||||
} else if (bytes.size > 47) {
|
||||
// Transform back to original data.
|
||||
rawData = raw.toString(Charsets.UTF_8).toByteArray(
|
||||
rawData = bytes.toString(Charsets.UTF_8).toByteArray(
|
||||
Charsets.ISO_8859_1
|
||||
)
|
||||
if (rawData.size == 47) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.markusfisch.android.binaryeye.fragment
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.Fragment
|
||||
import android.view.LayoutInflater
|
||||
@@ -12,12 +13,15 @@ import de.markusfisch.android.binaryeye.app.addFragment
|
||||
import de.markusfisch.android.binaryeye.app.prefs
|
||||
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
|
||||
|
||||
class EncodeFragment : Fragment() {
|
||||
private lateinit var formatView: Spinner
|
||||
private lateinit var errorCorrectionLabel: TextView
|
||||
private lateinit var errorCorrectionLevel: Spinner
|
||||
private lateinit var ecLabel: TextView
|
||||
private lateinit var ecSpinner: Spinner
|
||||
private lateinit var colorsLabel: TextView
|
||||
private lateinit var colorsSpinner: Spinner
|
||||
private lateinit var sizeView: TextView
|
||||
private lateinit var sizeBarView: SeekBar
|
||||
private lateinit var contentView: EditText
|
||||
@@ -67,22 +71,26 @@ class EncodeFragment : Fragment() {
|
||||
position: Int,
|
||||
id: Long
|
||||
) {
|
||||
val visibility = if (
|
||||
val ecVisibility = if (
|
||||
writers[position] == Format.QR_CODE
|
||||
) {
|
||||
View.VISIBLE
|
||||
} else {
|
||||
View.GONE
|
||||
}
|
||||
errorCorrectionLabel.visibility = visibility
|
||||
errorCorrectionLevel.visibility = visibility
|
||||
) 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
|
||||
}
|
||||
|
||||
override fun onNothingSelected(parentView: AdapterView<*>?) {}
|
||||
}
|
||||
|
||||
errorCorrectionLabel = view.findViewById(R.id.error_correction_label)
|
||||
errorCorrectionLevel = view.findViewById(R.id.error_correction_level)
|
||||
ecLabel = view.findViewById(R.id.error_correction_label)
|
||||
ecSpinner = view.findViewById(R.id.error_correction_level)
|
||||
|
||||
colorsLabel = view.findViewById(R.id.colors_label)
|
||||
colorsSpinner = view.findViewById(R.id.colors)
|
||||
|
||||
sizeView = view.findViewById(R.id.size_display)
|
||||
sizeBarView = view.findViewById(R.id.size_bar)
|
||||
@@ -107,7 +115,7 @@ class EncodeFragment : Fragment() {
|
||||
}
|
||||
|
||||
view.findViewById<View>(R.id.encode).setOnClickListener {
|
||||
encode()
|
||||
it.context.encode()
|
||||
}
|
||||
|
||||
(view.findViewById(R.id.inset_layout) as View).setPaddingFromWindowInsets()
|
||||
@@ -121,25 +129,25 @@ class EncodeFragment : Fragment() {
|
||||
prefs.indexOfLastSelectedFormat = formatView.selectedItemPosition
|
||||
}
|
||||
|
||||
private fun encode() {
|
||||
private fun Context.encode() {
|
||||
val content = contentView.text.toString()
|
||||
if (content.isEmpty()) {
|
||||
Toast.makeText(
|
||||
context,
|
||||
R.string.error_no_content,
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
} else {
|
||||
activity?.hideSoftKeyboard(contentView)
|
||||
fragmentManager?.addFragment(
|
||||
BarcodeFragment.newInstance(
|
||||
content,
|
||||
writers[formatView.selectedItemPosition],
|
||||
getSize(sizeBarView.progress),
|
||||
errorCorrectionLevel.selectedItemPosition
|
||||
)
|
||||
)
|
||||
toast(R.string.error_no_content)
|
||||
return
|
||||
}
|
||||
hideSoftKeyboard(contentView)
|
||||
val writer = writers[formatView.selectedItemPosition]
|
||||
fragmentManager?.addFragment(
|
||||
BarcodeFragment.newInstance(
|
||||
content,
|
||||
writer,
|
||||
getSize(sizeBarView.progress),
|
||||
ecSpinner.selectedItemPosition,
|
||||
if (writer.canBeInverted()) {
|
||||
colorsSpinner.selectedItemPosition
|
||||
} else 0
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private fun initSizeBar() {
|
||||
@@ -185,6 +193,13 @@ class EncodeFragment : Fragment() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun Format.canBeInverted() = when (this) {
|
||||
Format.AZTEC,
|
||||
Format.DATA_MATRIX,
|
||||
Format.QR_CODE -> true
|
||||
else -> false
|
||||
}
|
||||
|
||||
private fun String.toFormat(default: Format = Format.QR_CODE): Format = try {
|
||||
Format.valueOf(this)
|
||||
} catch (_: IllegalArgumentException) {
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
package de.markusfisch.android.binaryeye.graphics
|
||||
|
||||
const val COLOR_BLACK = 0xff000000.toInt()
|
||||
const val COLOR_WHITE = 0xffffffff.toInt()
|
||||
@@ -19,10 +19,10 @@ fun Rect.setFrameRoi(
|
||||
) {
|
||||
Matrix().apply {
|
||||
// Map ROI from view coordinates to frame coordinates.
|
||||
setScale(1f / viewRect.width(), 1f / viewRect.height())
|
||||
setTranslate(-viewRect.left.toFloat(), -viewRect.top.toFloat())
|
||||
postScale(1f / viewRect.width(), 1f / viewRect.height())
|
||||
postRotate(-frameMetrics.orientation.toFloat(), .5f, .5f)
|
||||
postScale(frameMetrics.width.toFloat(), frameMetrics.height.toFloat())
|
||||
postTranslate(-viewRect.left.toFloat(), -viewRect.top.toFloat())
|
||||
val frameRoiF = RectF()
|
||||
val viewRoiF = RectF(
|
||||
viewRoi.left.toFloat(),
|
||||
|
||||
@@ -44,9 +44,9 @@ private fun Bitmap.analyzeTransparency(): Result {
|
||||
return Result(
|
||||
transparent > 0,
|
||||
if (bright > 0 && visible / bright < 2) {
|
||||
0xff000000.toInt()
|
||||
COLOR_BLACK
|
||||
} else {
|
||||
0xffffffff.toInt()
|
||||
COLOR_WHITE
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@@ -174,11 +174,9 @@ class Preferences {
|
||||
apply(INDEX_OF_LAST_SELECTED_FORMAT, value)
|
||||
field = value
|
||||
}
|
||||
var forceCompat = false
|
||||
var freeRotation = true
|
||||
set(value) {
|
||||
// Since the app may be about to crash when forceCompat is set,
|
||||
// it's necessary to `commit()` this synchronously.
|
||||
commit(FORCE_COMPAT, value)
|
||||
apply(FREE_ROTATION, value)
|
||||
field = value
|
||||
}
|
||||
|
||||
@@ -259,7 +257,7 @@ class Preferences {
|
||||
INDEX_OF_LAST_SELECTED_FORMAT,
|
||||
indexOfLastSelectedFormat
|
||||
)
|
||||
forceCompat = preferences.getBoolean(FORCE_COMPAT, forceCompat)
|
||||
freeRotation = preferences.getBoolean(FREE_ROTATION, freeRotation)
|
||||
}
|
||||
|
||||
private fun put(label: String, value: Boolean) =
|
||||
@@ -321,6 +319,6 @@ class Preferences {
|
||||
private const val SEND_SCAN_TYPE = "send_scan_type"
|
||||
private const val CUSTOM_LOCALE = "custom_locale"
|
||||
private const val INDEX_OF_LAST_SELECTED_FORMAT = "index_of_last_selected_format"
|
||||
private const val FORCE_COMPAT = "force_compat"
|
||||
private const val FREE_ROTATION = "free_rotation"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 0.9-2 2v10c0 1.1 0.9 2 2 2h12c1.1 0 2-0.9 2-2V10c0-1.1-0.9-2-2-2zm-6 9c-1.1 0-2-0.9-2-2s0.9-2 2-2 2 0.9 2 2-0.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,3 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M12 17c1.1 0 2-0.9 2-2s-0.9-2-2-2-2 0.9-2 2 0.9 2 2 2zm6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6h1.9c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2H6c-1.1 0-2 0.9-2 2v10c0 1.1 0.9 2 2 2h12c1.1 0 2-0.9 2-2V10c0-1.1-0.9-2-2-2zm0 12H6V10h12v10z"/>
|
||||
</vector>
|
||||
@@ -17,6 +17,6 @@
|
||||
style="@style/FAB"
|
||||
android:id="@+id/scan"
|
||||
android:contentDescription="@string/scan_code"
|
||||
android:src="@drawable/ic_action_search"/>
|
||||
android:src="@drawable/ic_action_next"/>
|
||||
</android.support.design.widget.CoordinatorLayout>
|
||||
</merge>
|
||||
|
||||
@@ -35,6 +35,18 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:entries="@array/error_correction_levels"/>
|
||||
<TextView
|
||||
android:id="@+id/colors_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:text="@string/colors"/>
|
||||
<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"
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
<menu
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:material="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/toggle_free"
|
||||
android:title="@string/toggle_free_rotation"
|
||||
android:icon="@drawable/ic_action_rotation_unlocked"
|
||||
material:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@+id/rotate"
|
||||
android:title="@string/rotate_image_cw"
|
||||
|
||||
@@ -15,6 +15,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">মধ্যম (~১৫% ঠিককরণ)</string>
|
||||
<string name="error_correction_level_q" formatted="false">বেশি (~২৫% ঠিককরণ)</string>
|
||||
<string name="error_correction_level_h" formatted="false">অনেক বেশি (~৩০% ঠিককরণ)</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>
|
||||
@@ -152,6 +157,7 @@
|
||||
<string name="export_database">এসকিউলাইট তথ্যভিত্তি</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="pick_code_to_scan">খুঁজার জন্য কোড নাও</string>
|
||||
<string name="shortcut_decode">বারকোড খুজো</string>
|
||||
|
||||
@@ -17,6 +17,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">Střední (~15% korekce)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Čtvrtinový (~25% korekce)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Vysoký (~30% 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>
|
||||
@@ -154,6 +159,7 @@
|
||||
<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="pick_code_to_scan">Vyberte kód k naskenování</string>
|
||||
<string name="shortcut_decode">Skenovat čárový kód</string>
|
||||
|
||||
@@ -15,6 +15,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% wiederherstellbar)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% wiederherstellbar)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% wiederherstellbar)</string>
|
||||
<string name="colors">Vor und Hintergrund</string>
|
||||
<string name="colors_black_on_white">Schwarz auf Weiss</string>
|
||||
<string name="colors_white_on_black">Weiss auf Schwarz</string>
|
||||
<string name="colors_black_on_transparent">Schwarz auf Transparent</string>
|
||||
<string name="colors_white_on_transparent">Weiss auf Transparent</string>
|
||||
<string name="sequence_size">Sequence size</string>
|
||||
<string name="sequence_index">Sequence index</string>
|
||||
<string name="sequence_id">Sequence ID</string>
|
||||
@@ -152,6 +157,7 @@
|
||||
<string name="export_database">SQLite Datenbank</string>
|
||||
<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_code_to_scan">Code im Bild auswählen</string>
|
||||
<string name="shortcut_decode">Barcode lesen</string>
|
||||
|
||||
@@ -15,6 +15,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">Medio (~15% de correción)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Cuartil (~25% de correción)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Alto (~30% de correción)</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>
|
||||
@@ -152,6 +157,7 @@
|
||||
<string name="export_database">Base de datos SQLite</string>
|
||||
<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_code_to_scan">Seleccione el código a escanear</string>
|
||||
<string name="shortcut_decode">Escanear un código</string>
|
||||
|
||||
@@ -15,6 +15,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">متوسط (~۱۵٪ تصحیح)</string>
|
||||
<string name="error_correction_level_q" formatted="false">یکچهارم (~۲۵٪ تصحیح)</string>
|
||||
<string name="error_correction_level_h" formatted="false">زیاد (~۳۰٪ تصحیح)</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>
|
||||
@@ -152,6 +157,7 @@
|
||||
<string name="export_database">پایگاهدادهٔ اسکیولایت</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="pick_code_to_scan">کدی را برای پویش برگزینید</string>
|
||||
<string name="shortcut_decode">پویش یک بارکد</string>
|
||||
|
||||
@@ -16,9 +16,14 @@
|
||||
<string name="error_correction_level_m" formatted="false">Moyen (~15% de correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% de correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Élevé (~30% de correction)</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">Premier plan et arrière-plan</string>
|
||||
<string name="colors_black_on_white">Noir sur blanc</string>
|
||||
<string name="colors_white_on_black">Blanc sur noir</string>
|
||||
<string name="colors_black_on_transparent">Noir sur transparent</string>
|
||||
<string name="colors_white_on_transparent">Blanc sur transparent</string>
|
||||
<string name="sequence_size">Taille de la séquence</string>
|
||||
<string name="sequence_index">Index de la séquence</string>
|
||||
<string name="sequence_id">ID de la séquence</string>
|
||||
<string name="gtin_issue_number">Numéro du problème</string>
|
||||
<string name="gtin_country">Pays de fabrication possible</string>
|
||||
<string name="gtin_price">Prix suggéré</string>
|
||||
@@ -89,8 +94,8 @@
|
||||
<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="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">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="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="default_search_engine">Ouvrir les données inconnues dans</string>
|
||||
@@ -153,6 +158,7 @@
|
||||
<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="shortcut_decode">Scanner un code-barres</string>
|
||||
|
||||
@@ -15,6 +15,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">Közepes (~15% javítás)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Kvartilis (~25% javítás)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Magas (~30% javítás)</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>
|
||||
@@ -152,6 +157,7 @@
|
||||
<string name="export_database">SQLite adatbázis</string>
|
||||
<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_code_to_scan">Kód kiválasztása a beolvasáshoz</string>
|
||||
<string name="shortcut_decode">Vonalkód beolvasása</string>
|
||||
|
||||
@@ -14,17 +14,22 @@
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% koreksi)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Kuartil (~25% koreksi)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Tinggi (~30% koreksi)</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">Muka dan latar belakang</string>
|
||||
<string name="colors_black_on_white">Hitam di atas putih</string>
|
||||
<string name="colors_white_on_black">Putih di atas hitam</string>
|
||||
<string name="colors_black_on_transparent">Hitam di atas tansparan</string>
|
||||
<string name="colors_white_on_transparent">Putih di atas tansparan</string>
|
||||
<string name="sequence_size">Ukuran sekuens</string>
|
||||
<string name="sequence_index">Indeks sekuens</string>
|
||||
<string name="sequence_id">ID Sekuens</string>
|
||||
<string name="gtin_issue_number">Nomor pindaian</string>
|
||||
<string name="gtin_country">Kemungkinan negara pembuat</string>
|
||||
<string name="gtin_price">Harga yang disarankan</string>
|
||||
<string name="gtin_add_on">Ekstensi UPC EAN</string>
|
||||
<string name="barcode_version_number">Version</string>
|
||||
<string name="qr_version_and_modules">%1$d (%2$d modules)</string>
|
||||
<string name="barcode_version_number">Versi</string>
|
||||
<string name="qr_version_and_modules">%1$d (%2$d modul)</string>
|
||||
<string name="toggle_flash">Nyala/matikan blitz</string>
|
||||
<string name="error_flash">Error toggling flash</string>
|
||||
<string name="error_flash">Galat nyala/matikan blitz</string>
|
||||
<string name="share">Bagikan</string>
|
||||
<string name="share_as">Bagikan sebagai?</string>
|
||||
<string name="copy_to_clipboard">Salin ke clipboard</string>
|
||||
@@ -45,16 +50,16 @@
|
||||
<string name="info">Info</string>
|
||||
<string name="switch_camera">Ganti kamera</string>
|
||||
<string name="bulk_mode">Pindai tanpa henti</string>
|
||||
<string name="bulk_mode_summary">Always start scanning continuously.</string>
|
||||
<string name="bulk_mode_delay">Delay between continuous scans</string>
|
||||
<string name="restrict_format">Restrict format</string>
|
||||
<string name="remove_restriction">Remove restriction</string>
|
||||
<string name="scan_format">Scan %s</string>
|
||||
<string name="quarter_second">A quarter second</string>
|
||||
<string name="half_second">Half a second</string>
|
||||
<string name="a_second">One second</string>
|
||||
<string name="two_seconds">Two seconds</string>
|
||||
<string name="five_seconds">Five seconds</string>
|
||||
<string name="bulk_mode_summary">Selalu mulai pemindaian tanpa henti.</string>
|
||||
<string name="bulk_mode_delay">Tundaan antara pemindaian tanpa henti</string>
|
||||
<string name="restrict_format">Batasi format</string>
|
||||
<string name="remove_restriction">Hapus pembatasan</string>
|
||||
<string name="scan_format">Pindai %s</string>
|
||||
<string name="quarter_second">Seperempat detik</string>
|
||||
<string name="half_second">Setengah detik</string>
|
||||
<string name="a_second">Satu detik</string>
|
||||
<string name="two_seconds">Dua detik</string>
|
||||
<string name="five_seconds">Lima detik</string>
|
||||
<string name="history">Riwayat</string>
|
||||
<string name="preferences">Preferensi</string>
|
||||
<string name="scan_category">Pemindaian</string>
|
||||
@@ -64,15 +69,15 @@
|
||||
<string name="follow_system_settings">Ikuti pengaturan sistem</string>
|
||||
<string name="show_crop_handle">Tampilkan pembatas pemotongan</string>
|
||||
<string name="show_crop_handle_summary">Batasi pemindaian ke batas area tertentu.</string>
|
||||
<string name="barcode_formats">Barcode formats</string>
|
||||
<string name="barcode_formats">Format barcode</string>
|
||||
<string name="zoom_by_swiping">Geser ke atas/bawah untuk memperbesar</string>
|
||||
<string name="zoom_by_swiping_summary">Geser layar kamera ke atas atau ke bawah untuk mengontrol perbesaran gambar.</string>
|
||||
<string name="auto_rotate">Kenali barcode vertikal 1D</string>
|
||||
<string name="auto_rotate_summary">Otomatis putar frame kamera mengenali barcode vertikal 1D. Tergantung pada perangkat, mungkin akan berpengaruh pada performa.</string>
|
||||
<string name="try_harder">Optimalkan akurasi pembaca</string>
|
||||
<string name="try_harder_summary">Aktifkan opsi ini untuk kode yang susah dibaca. Akan berpengaruh pada performa.</string>
|
||||
<string name="show_toast_in_bulk_mode">Show data in continuous mode</string>
|
||||
<string name="show_toast_in_bulk_mode_summary">Briefly show the scanned data when scanning continuously.</string>
|
||||
<string name="show_toast_in_bulk_mode">Tampilkan data dalam mode tanpa henti</string>
|
||||
<string name="show_toast_in_bulk_mode_summary">Tampilkan data secara singkat saat memindai tanpa henti.</string>
|
||||
<string name="vibrate">Bergetar saat mendeteksi</string>
|
||||
<string name="vibrate_summary">Aktifkan opsi ini jika anda ingin perangkat anda bergetar ketika kode berhasil dipindai.</string>
|
||||
<string name="use_history">Simpan riwayat pemindaian</string>
|
||||
@@ -87,29 +92,29 @@
|
||||
<string name="show_meta_data_summary">Tampilkan data tambahan tentang barcode yang dipindai.</string>
|
||||
<string name="show_hex_dump">Tampilkan hex dump</string>
|
||||
<string name="show_hex_dump_summary">Tampilkan hex dump dari konten hasil pemindaian.</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="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="default_search_engine">Open unknown data in</string>
|
||||
<string name="always_ask">Always ask</string>
|
||||
<string name="show_recreation">Tampilkan barcode yang dibuat ulang</string>
|
||||
<string name="show_recreation_summary">Buat ulang dan tampilkan barcode dari isi konten jika memungkinkan.</string>
|
||||
<string name="close_automatically">Kembali setelah Salin/Berbagi</string>
|
||||
<string name="close_automatically_summary">Otomatis kembali ke layar pemindaian setelah menyalin atau berbagi isi konten.</string>
|
||||
<string name="default_search_engine">Buka data tak dikenal di</string>
|
||||
<string name="always_ask">Selalu tanya</string>
|
||||
<string name="open_with_url">Buka data tak dikenal dengan URL</string>
|
||||
<string name="clear_network_suggestions">Clear network suggestions</string>
|
||||
<string name="clear_network_suggestions_summary">Remove all of the network suggestions that were previously provided by this app.</string>
|
||||
<string name="really_remove_all_networks">Really remove all networks?</string>
|
||||
<string name="clear_network_suggestions_success">Network suggestions cleared</string>
|
||||
<string name="clear_network_suggestions_nothing_to_remove">Nothing to remove</string>
|
||||
<string name="clear_network_suggestions">Hapus saran jaringan</string>
|
||||
<string name="clear_network_suggestions_summary">Hapus semua saran jaringan yang sebelumnya disediakan oleh aplikasi ini.</string>
|
||||
<string name="really_remove_all_networks">Yakin menghapus semua jaringan?</string>
|
||||
<string name="clear_network_suggestions_success">Saran jaringan dihapus</string>
|
||||
<string name="clear_network_suggestions_nothing_to_remove">Tidak ada yang perlu dihapus</string>
|
||||
<string name="send_category">Penerusan</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">Teruskan pemindaian</string>
|
||||
<string name="send_scan_active_summary">Aktifkan penerusan pemindaian ke URL berikut</string>
|
||||
<string name="send_scan_url">Kirim setiap pindaian ke URL</string>
|
||||
<string name="send_scan_type">Tipe permintaan untuk setiap pindaian</string>
|
||||
<string name="send_type_get_add_content">GET dan tambahkan konten</string>
|
||||
<string name="send_type_get_query_string">GET dengan kueri lema lengkap</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">Open in external browser</string>
|
||||
<string name="test_url">Test URL</string>
|
||||
<string name="send_type_external_browser">Buka di peramban eksternal</string>
|
||||
<string name="test_url">URL Tes</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>
|
||||
@@ -151,20 +156,21 @@
|
||||
<string name="export_database">Ekspor basis data SQLite</string>
|
||||
<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_code_to_scan">Pilih kode untuk dipindai</string>
|
||||
<string name="shortcut_decode">Pindai barcode</string>
|
||||
<string name="shortcut_encode">Buat barcode</string>
|
||||
<string name="shortcut_preferences">Pengaturan</string>
|
||||
<string name="background_request_failed">Permintaan latar belakang gagal</string>
|
||||
<string name="entry_type">Type</string>
|
||||
<string name="wifi_network">Wi-Fi network</string>
|
||||
<string name="wifi_ssid">Name</string>
|
||||
<string name="wifi_type">Authentication type</string>
|
||||
<string name="wifi_password">Password</string>
|
||||
<string name="wifi_hidden">Hidden network</string>
|
||||
<string name="wifi_eap">EAP method</string>
|
||||
<string name="wifi_anonymous_identity">Anonymous identity</string>
|
||||
<string name="wifi_identity">Identity</string>
|
||||
<string name="wifi_phase2">Phase 2 method</string>
|
||||
<string name="entry_type">Tipe</string>
|
||||
<string name="wifi_network">Jaringan Wi-Fi</string>
|
||||
<string name="wifi_ssid">Nama</string>
|
||||
<string name="wifi_type">Tipe otentikasi</string>
|
||||
<string name="wifi_password">Sandi</string>
|
||||
<string name="wifi_hidden">Jaringan tersembunyi</string>
|
||||
<string name="wifi_eap">Metode EAP</string>
|
||||
<string name="wifi_anonymous_identity">Identitas anonim</string>
|
||||
<string name="wifi_identity">Identitas</string>
|
||||
<string name="wifi_phase2">Metode fase 2</string>
|
||||
</resources>
|
||||
|
||||
@@ -15,6 +15,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">Medio (Correzione del ~15%)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (Correzione del ~25%)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Alto (Correzione del ~30%)</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">Dimensione della sequenza</string>
|
||||
<string name="sequence_index">Indice della sequenza</string>
|
||||
<string name="sequence_id">ID della sequenza</string>
|
||||
@@ -110,7 +115,7 @@
|
||||
<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">Apri nel browser esterno</string>
|
||||
<string name="test_url">URL di test</string>
|
||||
<string name="test_url">Prova URL</string>
|
||||
<string name="really_remove_scan">Vuoi veramente rimuovere la scansione?</string>
|
||||
<string name="really_remove_all_scans">Vuoi veramente rimuovere tutte le scansioni?</string>
|
||||
<string name="really_remove_selected_scans">Vuoi veramente rimuovere le scansioni selezionate?</string>
|
||||
@@ -152,6 +157,7 @@
|
||||
<string name="export_database">Database SQLite</string>
|
||||
<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">Toggle free rotation</string>
|
||||
<string name="pick_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>
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">中 (~15% の正確性)</string>
|
||||
<string name="error_correction_level_q" formatted="false">高 (~25% の正確性)</string>
|
||||
<string name="error_correction_level_h" formatted="false">最高 (~30% の正確性)</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>
|
||||
@@ -151,6 +156,7 @@
|
||||
<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="pick_code_to_scan">スキャンするバーコードを選択</string>
|
||||
<string name="shortcut_decode">バーコードをスキャン</string>
|
||||
|
||||
@@ -15,6 +15,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% correction)</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>
|
||||
@@ -152,6 +157,7 @@
|
||||
<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="pick_code_to_scan">აირჩიეთ შტრიხ-კოდი სკანირებისთვის</string>
|
||||
<string name="shortcut_decode">შტრიხ-კოდის სკანირება</string>
|
||||
|
||||
@@ -15,6 +15,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">Middelhoog (~15% correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Kwartiel (~25% correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Hoog (~30% correction)</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>
|
||||
@@ -152,6 +157,7 @@
|
||||
<string name="export_database">SQLite database</string>
|
||||
<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_code_to_scan">Kies code om te scannen</string>
|
||||
<string name="shortcut_decode">Een barcode scannen</string>
|
||||
|
||||
@@ -30,6 +30,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">Średni (~15% korekcji)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Kwartyl (~25% korekcji)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Wysoki (~30% korekcji)</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>
|
||||
@@ -46,6 +51,7 @@
|
||||
<string name="sms_error">Nie można wysłać SMS-a</string>
|
||||
<string name="mail_error">Nie można wysłać e-maila</string>
|
||||
<string name="rotate_image_cw">Obróć obraz zgodnie z ruchem wskazówek zegara</string>
|
||||
<string name="toggle_free_rotation">Toggle free rotation</string>
|
||||
<string name="edit_scan">Edytuj etykietę</string>
|
||||
<string name="enter_name_hint">Nazwa skanu</string>
|
||||
<string name="camera_error">Nie można uzyskać dostępu do kamery, spróbuj ponownie</string>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<resources>
|
||||
<string name="no_camera_no_fun">Infelizmente você não poderá usar este app sem conceder o acesso à câmera.</string>
|
||||
<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">Escaneie código</string>
|
||||
<string name="compose_barcode">Criar código</string>
|
||||
@@ -15,9 +15,14 @@
|
||||
<string name="error_correction_level_m" formatted="false">Médio (~15% correção)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartil (~25% correção)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Alto (~30% correção)</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">Modo de exibição</string>
|
||||
<string name="colors_black_on_white">Preto sobre fundo branco</string>
|
||||
<string name="colors_white_on_black">Branco sobre fundo preto</string>
|
||||
<string name="colors_black_on_transparent">Preto sobre fundo transparente</string>
|
||||
<string name="colors_white_on_transparent">Branco sobre fundo transparente</string>
|
||||
<string name="sequence_size">Tamanho de sequência</string>
|
||||
<string name="sequence_index">Índice de sequência</string>
|
||||
<string name="sequence_id">ID de sequência</string>
|
||||
<string name="gtin_issue_number">Número de emissão</string>
|
||||
<string name="gtin_country">Possível país de fabricação</string>
|
||||
<string name="gtin_price">Preço sugerido</string>
|
||||
@@ -26,22 +31,22 @@
|
||||
<string name="qr_version_and_modules">%1$d (%2$d modules)</string>
|
||||
<string name="toggle_flash">Ativar lanterna</string>
|
||||
<string name="error_flash">Falha ao ligar a lanterna</string>
|
||||
<string name="share">Compartilhar</string>
|
||||
<string name="share">Compartilhe</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="copied_password_to_clipboard">Senha copiada ao clipboard</string>
|
||||
<string name="open_url">Abrir a URL</string>
|
||||
<string name="cannot_resolve_action">Nenhum app pode abrir isto</string>
|
||||
<string name="cannot_resolve_action">Nenhum app consegue 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="input_content_here">Digite conteúdo aqui</string>
|
||||
<string name="input_content_here">Digite algum conteúdo aqui</string>
|
||||
<string name="encode">CODIFICAR</string>
|
||||
<string name="error_no_content">Conteúdo indisponível</string>
|
||||
<string name="error_encoding_barcode">Não foi possível gerar o código</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>
|
||||
<string name="view_barcode">Ver código</string>
|
||||
<string name="info">Detalhes</string>
|
||||
<string name="switch_camera">Alterar câmera</string>
|
||||
@@ -53,9 +58,9 @@
|
||||
<string name="scan_format">Escanear %s</string>
|
||||
<string name="quarter_second">Um quarto de segundo</string>
|
||||
<string name="half_second">Meio segundo</string>
|
||||
<string name="a_second">Um segundo</string>
|
||||
<string name="two_seconds">Dois segundos</string>
|
||||
<string name="five_seconds">Cinco segundos</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="scan_category">Digitalização</string>
|
||||
@@ -70,7 +75,7 @@
|
||||
<string name="zoom_by_swiping_summary">Deslize para baixo/cima na tela para ajustar zoom da câmera.</string>
|
||||
<string name="auto_rotate">Reconhecer códigos 1D verticais</string>
|
||||
<string name="auto_rotate_summary">Girar automaticamente a câmera para reconhecer códigos 1D verticais. Dependendo do dispositivo, isto pode afetar o desempenho.</string>
|
||||
<string name="try_harder">Otimizar o leitor para precisão</string>
|
||||
<string name="try_harder">Otimizar leitor para precisão</string>
|
||||
<string name="try_harder_summary">Ative esta opção para códigos muito difíceis de ler. Isto afetará o desempenho.</string>
|
||||
<string name="show_toast_in_bulk_mode">Mostrar dados em modo contínuo</string>
|
||||
<string name="show_toast_in_bulk_mode_summary">Mostrar brevemente os dados durante digitalização contínua.</string>
|
||||
@@ -81,17 +86,17 @@
|
||||
<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 o conteúdo no mesmo instante. Quando ativado, pode abrir conteúdo perigoso.</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 ao clipboard o conteúdo digitalizado. Tem cuidado porque outros apps podem examinar seu clipboard em segundo plano.</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="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 a impressão hexadecimal do conteúdo digitalizado.</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_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="close_automatically">Voltar após copiar/compartilhar</string>
|
||||
<string name="close_automatically_summary">Voltar automaticamente à tela de digitalização após copiar ou compartilhar o código examinado.</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>
|
||||
@@ -105,8 +110,8 @@
|
||||
<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_type">Tipo de solicitação</string>
|
||||
<string name="send_type_get_add_content">GET e somente adicionar o conteúdo</string>
|
||||
<string name="send_type_get_query_string">GET com sequência completa da consulta</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>
|
||||
<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">Abrir em navegador externo</string>
|
||||
@@ -118,7 +123,7 @@
|
||||
<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 a 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="no_barcode_found">Nenhum código encontrado</string>
|
||||
<string name="pick_list_separator">Como separar itens da lista?</string>
|
||||
@@ -126,7 +131,7 @@
|
||||
<string name="separator_ruler">Régua</string>
|
||||
<string name="save_as_file_name">Salvar para Downloads?</string>
|
||||
<string name="file_name">Nome do arquivo</string>
|
||||
<string name="error_saving_file">Não foi possível salvar o 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 via WiFi</string>
|
||||
<string name="wifi_config_failed">Não foi possível configurar WiFi</string>
|
||||
@@ -134,16 +139,16 @@
|
||||
<string name="sms_send">Envie SMS</string>
|
||||
<string name="sms_error">Não foi possível enviar SMS</string>
|
||||
<string name="tel_dial">Disque número</string>
|
||||
<string name="tel_error">Não foi possível discar o número</string>
|
||||
<string name="tel_error">Não foi possível discar este número</string>
|
||||
<string name="mail_send">Envie e-mail</string>
|
||||
<string name="mail_error">Não foi possível enviar o e-mail</string>
|
||||
<string name="mail_error">Não foi possível enviar este e-mail</string>
|
||||
<string name="vcard_add">Adicionar aos contatos</string>
|
||||
<string name="vcard_failed">Não foi possível adicionar aos contatos</string>
|
||||
<string name="vevent_add">Adicionar ao calendário</string>
|
||||
<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">Pesquisar na internet</string>
|
||||
<string name="search_scan">Pesquisar em conteúdo já digitalizado</string>
|
||||
<string name="search_web">Buscar na internet</string>
|
||||
<string name="search_scan">Buscar em digitalizações feitas</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>
|
||||
@@ -152,6 +157,7 @@
|
||||
<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_code_to_scan">Escolha código para digitalizar</string>
|
||||
<string name="shortcut_decode">Escaneie código</string>
|
||||
|
||||
@@ -17,6 +17,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">Средний (≈15% исправлений)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Квартиль (≈25% исправлений)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Высокий (≈30% исправлений)</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">Идентификатор последовательности</string>
|
||||
@@ -154,6 +159,7 @@
|
||||
<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_code_to_scan">Выберите штрих-код для сканирования</string>
|
||||
<string name="shortcut_decode">Сканировать штрих-код</string>
|
||||
|
||||
@@ -15,6 +15,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">Orta (~%15 düzeltim)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Dörtte Bir (~%25 düzeltim)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Yüksek (~%30 düzeltim)</string>
|
||||
<string name="colors">Ön ve arka plan</string>
|
||||
<string name="colors_black_on_white">Beyaz üzerine siyah</string>
|
||||
<string name="colors_white_on_black">Siyah üzerine beyaz</string>
|
||||
<string name="colors_black_on_transparent">Şeffaf üzerine siyah</string>
|
||||
<string name="colors_white_on_transparent">Şeffaf üzerine beyaz</string>
|
||||
<string name="sequence_size">Dizi boyutu</string>
|
||||
<string name="sequence_index">Dizi indeksi</string>
|
||||
<string name="sequence_id">Dizi kimliği</string>
|
||||
@@ -152,6 +157,7 @@
|
||||
<string name="export_database">SQLite veri tabanı olarak dışa aktar</string>
|
||||
<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_code_to_scan">Taranacak kod seç</string>
|
||||
<string name="shortcut_decode">Barkod tara</string>
|
||||
|
||||
@@ -16,6 +16,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">Середній (~15% виправлення)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Квартиль (~25% виправлення)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Високий (~30% виправлення)</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>
|
||||
@@ -153,6 +158,7 @@
|
||||
<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="pick_code_to_scan">Вибрати код для сканування</string>
|
||||
<string name="shortcut_decode">Сканувати штрих-код</string>
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">Trung bình (sửa ~15%)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Một phần tư (sửa ~25%)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Cao (sửa ~30%)</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>
|
||||
@@ -151,6 +156,7 @@
|
||||
<string name="export_database">Cơ sở dữ liệu SQLite</string>
|
||||
<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_code_to_scan">Chọn mã để quét</string>
|
||||
<string name="shortcut_decode">Quét mã vạch</string>
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% 准确度)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% 准确度)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% 准确度)</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>
|
||||
@@ -151,6 +156,7 @@
|
||||
<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="pick_code_to_scan">选择扫描编码</string>
|
||||
<string name="shortcut_decode">扫描条码</string>
|
||||
|
||||
@@ -14,17 +14,22 @@
|
||||
<string name="error_correction_level_m" formatted="false">中 (~15% 準確度)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% 準確度)</string>
|
||||
<string name="error_correction_level_h" formatted="false">高 (~30% 準確度)</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="barcode_version_number">版本</string>
|
||||
<string name="qr_version_and_modules">%1$d (%2$d modules)</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_as">以何種方式分享?</string>
|
||||
<string name="copy_to_clipboard">複製到剪貼簿</string>
|
||||
@@ -47,9 +52,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>
|
||||
@@ -59,7 +64,7 @@
|
||||
<string name="preferences">偏好設定</string>
|
||||
<string name="scan_category">掃描</string>
|
||||
<string name="content_category">內容</string>
|
||||
<string name="locale_category">語言</string>
|
||||
<string name="locale_category">語言</string>
|
||||
<string name="custom_locale">設定語言</string>
|
||||
<string name="follow_system_settings">跟隨系統設定</string>
|
||||
<string name="show_crop_handle">顯示裁切範圍選擇器</string>
|
||||
@@ -87,8 +92,8 @@
|
||||
<string name="show_meta_data_summary">顯示已掃描條碼的額外資訊。</string>
|
||||
<string name="show_hex_dump">顯示 Hex dump</string>
|
||||
<string name="show_hex_dump_summary">顯示已掃描條碼的 Hex dump。</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>
|
||||
@@ -100,15 +105,15 @@
|
||||
<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>
|
||||
<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">Open in external browser</string>
|
||||
<string name="send_type_external_browser">在外部瀏覽器中開啟</string>
|
||||
<string name="test_url">測試 URL</string>
|
||||
<string name="really_remove_scan">確定刪除記錄?</string>
|
||||
<string name="really_remove_all_scans">確定刪除全部掃描記錄?</string>
|
||||
@@ -151,6 +156,7 @@
|
||||
<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_code_to_scan">選擇要掃描的條碼</string>
|
||||
<string name="shortcut_decode">掃描條碼</string>
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<resources>
|
||||
<string-array name="colors">
|
||||
<item>@string/colors_black_on_white</item>
|
||||
<item>@string/colors_white_on_black</item>
|
||||
<item>@string/colors_black_on_transparent</item>
|
||||
<item>@string/colors_white_on_transparent</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -15,6 +15,11 @@
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% correction)</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>
|
||||
@@ -152,6 +157,7 @@
|
||||
<string name="export_database">SQLite database</string>
|
||||
<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_code_to_scan">Pick code to scan</string>
|
||||
<string name="shortcut_decode">Scan a barcode</string>
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
<item name="android:maxLines">1</item>
|
||||
</style>
|
||||
<style name="FAB" parent="Widget.Design.FloatingActionButton">
|
||||
<!-- Silence nonsense warning about setting a custom background. -->
|
||||
<item name="android:background">@null</item>
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:layout_margin">20dp</item>
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
* Make recreated barcode interactive
|
||||
* Update to latest ZXing C++
|
||||
* Update Italian translation
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
* Add an action item to lock/unlock free rotation
|
||||
* Support setting fore and background colors when creating barcodes
|
||||
* Fix creating barcodes with UTF-8 content
|
||||
|
||||
Reference in New Issue
Block a user