labels changed for language
This commit is contained in:
@@ -2,7 +2,9 @@ package de.softwareapp_hb.privateqrscanner
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.LocalActivityResultRegistryOwner
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.result.ActivityResultRegistryOwner
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Surface
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -23,13 +25,16 @@ class MainActivity : ComponentActivity() {
|
||||
super.onCreate(savedInstanceState)
|
||||
val container = (application as CleanScannerApp).appContainer
|
||||
setContent {
|
||||
PrivateQrLocalizedContent(container)
|
||||
PrivateQrLocalizedContent(container, activityResultRegistryOwner = this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun PrivateQrLocalizedContent(container: AppContainer) {
|
||||
private fun PrivateQrLocalizedContent(
|
||||
container: AppContainer,
|
||||
activityResultRegistryOwner: ActivityResultRegistryOwner
|
||||
) {
|
||||
val baseContext = LocalContext.current
|
||||
val localeOptions = remember(baseContext.applicationContext) {
|
||||
AppLocaleCatalog.load(baseContext.applicationContext)
|
||||
@@ -48,6 +53,7 @@ private fun PrivateQrLocalizedContent(container: AppContainer) {
|
||||
}
|
||||
|
||||
CompositionLocalProvider(
|
||||
LocalActivityResultRegistryOwner provides activityResultRegistryOwner,
|
||||
LocalContext provides localizedContext,
|
||||
LocalConfiguration provides localizedContext.resources.configuration
|
||||
) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.softwareapp_hb.privateqrscanner.ui.screens
|
||||
|
||||
import android.content.Context
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
@@ -107,7 +108,7 @@ fun HistoryScreen(
|
||||
val detailIsBase64 = detail.isBase64Encoded()
|
||||
AlertDialog(
|
||||
onDismissRequest = { selectedItem.value = null },
|
||||
title = { Text(text = detail.type) },
|
||||
title = { Text(text = detail.localizedDisplayType(context)) },
|
||||
text = {
|
||||
if (detailIsBase64) {
|
||||
Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||
@@ -239,7 +240,7 @@ fun HistoryScreen(
|
||||
text = stringResource(R.string.share_txt),
|
||||
enabled = history.isNotEmpty(),
|
||||
onClick = {
|
||||
val exportText = HistoryExportFormatter.formatText(history)
|
||||
val exportText = HistoryExportFormatter.formatText(localizedHistory(context, history))
|
||||
Intents.shareContent(context, exportText, "text/plain")
|
||||
}
|
||||
)
|
||||
@@ -247,7 +248,7 @@ fun HistoryScreen(
|
||||
text = stringResource(R.string.share_csv),
|
||||
enabled = history.isNotEmpty(),
|
||||
onClick = {
|
||||
val exportCsv = HistoryExportFormatter.formatCsv(history)
|
||||
val exportCsv = HistoryExportFormatter.formatCsv(localizedHistory(context, history))
|
||||
Intents.shareContent(context, exportCsv, "text/csv")
|
||||
}
|
||||
)
|
||||
@@ -255,7 +256,7 @@ fun HistoryScreen(
|
||||
text = stringResource(R.string.share_json),
|
||||
enabled = history.isNotEmpty(),
|
||||
onClick = {
|
||||
val exportJson = HistoryExportFormatter.formatJson(history)
|
||||
val exportJson = HistoryExportFormatter.formatJson(localizedHistory(context, history))
|
||||
Intents.shareContent(context, exportJson, "application/json")
|
||||
}
|
||||
)
|
||||
@@ -399,21 +400,33 @@ private fun LocalControlsCard(
|
||||
text = stringResource(R.string.share_txt),
|
||||
enabled = history.isNotEmpty(),
|
||||
onClick = {
|
||||
Intents.shareContent(context, HistoryExportFormatter.formatText(history), "text/plain")
|
||||
Intents.shareContent(
|
||||
context,
|
||||
HistoryExportFormatter.formatText(localizedHistory(context, history)),
|
||||
"text/plain"
|
||||
)
|
||||
}
|
||||
)
|
||||
ExportButton(
|
||||
text = stringResource(R.string.share_csv),
|
||||
enabled = history.isNotEmpty(),
|
||||
onClick = {
|
||||
Intents.shareContent(context, HistoryExportFormatter.formatCsv(history), "text/csv")
|
||||
Intents.shareContent(
|
||||
context,
|
||||
HistoryExportFormatter.formatCsv(localizedHistory(context, history)),
|
||||
"text/csv"
|
||||
)
|
||||
}
|
||||
)
|
||||
ExportButton(
|
||||
text = stringResource(R.string.share_json),
|
||||
enabled = history.isNotEmpty(),
|
||||
onClick = {
|
||||
Intents.shareContent(context, HistoryExportFormatter.formatJson(history), "application/json")
|
||||
Intents.shareContent(
|
||||
context,
|
||||
HistoryExportFormatter.formatJson(localizedHistory(context, history)),
|
||||
"application/json"
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -588,6 +601,7 @@ private fun HistoryRow(
|
||||
onDelete: (Long) -> Unit,
|
||||
onOpenDetails: () -> Unit
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val dismissState = rememberSwipeToDismissBoxState(
|
||||
confirmValueChange = {
|
||||
if (it == SwipeToDismissBoxValue.EndToStart || it == SwipeToDismissBoxValue.StartToEnd) {
|
||||
@@ -638,7 +652,7 @@ private fun HistoryRow(
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Text(
|
||||
text = item.type,
|
||||
text = item.localizedDisplayType(context),
|
||||
color = PrivateQrColors.TextPrimary,
|
||||
style = MaterialTheme.typography.titleMedium,
|
||||
fontWeight = FontWeight.ExtraBold
|
||||
@@ -678,6 +692,12 @@ private fun iconForType(type: String): ImageVector {
|
||||
}
|
||||
}
|
||||
|
||||
private fun localizedHistory(context: Context, history: List<ScanRecord>): List<ScanRecord> {
|
||||
return history.map { item ->
|
||||
item.copy(type = item.localizedDisplayType(context))
|
||||
}
|
||||
}
|
||||
|
||||
private fun ScanRecord.isBase64Encoded(): Boolean {
|
||||
return type.contains("base64", ignoreCase = true)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
package de.softwareapp_hb.privateqrscanner.ui.screens
|
||||
|
||||
import android.content.Context
|
||||
import androidx.annotation.StringRes
|
||||
import de.softwareapp_hb.privateqrscanner.R
|
||||
import de.softwareapp_hb.privateqrscanner.domain.ScanRecord
|
||||
import de.softwareapp_hb.privateqrscanner.domain.ScanResult
|
||||
|
||||
private const val DUPLICATE_TICKET_PREFIX = "Duplicate ticket ("
|
||||
private const val UNREGISTERED_TICKET_PREFIX = "Unregistered ticket ("
|
||||
private val base64SuffixRegex = Regex("""\s*\(Base64\)\s*$""", RegexOption.IGNORE_CASE)
|
||||
|
||||
internal fun ScanResult.localizedDisplayType(context: Context): String {
|
||||
return localizedScanType(
|
||||
context = context,
|
||||
type = type,
|
||||
isBase64Encoded = isBase64Encoded
|
||||
)
|
||||
}
|
||||
|
||||
internal fun ScanRecord.localizedDisplayType(context: Context): String {
|
||||
return localizedStoredScanType(context, type)
|
||||
}
|
||||
|
||||
private fun localizedStoredScanType(context: Context, rawType: String): String {
|
||||
val trimmed = rawType.trim()
|
||||
extractWrappedType(trimmed, DUPLICATE_TICKET_PREFIX)?.let { innerType ->
|
||||
return context.getString(
|
||||
R.string.scan_type_duplicate_ticket,
|
||||
localizedStoredScanType(context, innerType)
|
||||
)
|
||||
}
|
||||
extractWrappedType(trimmed, UNREGISTERED_TICKET_PREFIX)?.let { innerType ->
|
||||
return context.getString(
|
||||
R.string.scan_type_unregistered_ticket,
|
||||
localizedStoredScanType(context, innerType)
|
||||
)
|
||||
}
|
||||
if (base64SuffixRegex.containsMatchIn(trimmed)) {
|
||||
val innerType = base64SuffixRegex.replace(trimmed, "").trim()
|
||||
return context.getString(
|
||||
R.string.scan_type_base64_suffix,
|
||||
localizedCanonicalScanType(context, innerType)
|
||||
)
|
||||
}
|
||||
return localizedCanonicalScanType(context, trimmed)
|
||||
}
|
||||
|
||||
private fun localizedScanType(
|
||||
context: Context,
|
||||
type: String,
|
||||
isBase64Encoded: Boolean
|
||||
): String {
|
||||
val baseType = localizedCanonicalScanType(context, type)
|
||||
return if (isBase64Encoded && !type.contains("base64", ignoreCase = true)) {
|
||||
context.getString(R.string.scan_type_base64_suffix, baseType)
|
||||
} else {
|
||||
baseType
|
||||
}
|
||||
}
|
||||
|
||||
private fun localizedCanonicalScanType(context: Context, type: String): String {
|
||||
val stringRes = scanTypeStringRes(type)
|
||||
return if (stringRes != null) {
|
||||
context.getString(stringRes)
|
||||
} else {
|
||||
type.ifBlank { context.getString(R.string.scan_type_unknown) }
|
||||
}
|
||||
}
|
||||
|
||||
private fun extractWrappedType(type: String, prefix: String): String? {
|
||||
return if (type.startsWith(prefix, ignoreCase = true) && type.endsWith(")")) {
|
||||
type.substring(prefix.length, type.length - 1)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
@StringRes
|
||||
private fun scanTypeStringRes(type: String): Int? = when (type.trim().lowercase()) {
|
||||
"contact" -> R.string.scan_type_contact
|
||||
"url" -> R.string.scan_type_url
|
||||
"wifi", "wi-fi" -> R.string.scan_type_wifi
|
||||
"phone" -> R.string.scan_type_phone
|
||||
"sms" -> R.string.scan_type_sms
|
||||
"email", "e-mail" -> R.string.scan_type_email
|
||||
"calendar" -> R.string.scan_type_calendar
|
||||
"isbn" -> R.string.scan_type_isbn
|
||||
"product" -> R.string.scan_type_product
|
||||
"text" -> R.string.scan_type_text
|
||||
"geo" -> R.string.scan_type_geo
|
||||
"driver license", "driver licence" -> R.string.scan_type_driver_license
|
||||
"unknown" -> R.string.scan_type_unknown
|
||||
else -> null
|
||||
}
|
||||
+1
-1
@@ -394,7 +394,7 @@ internal fun GalleryScanPreviewDialog(
|
||||
}
|
||||
Column(modifier = Modifier.weight(1f)) {
|
||||
Text(
|
||||
text = candidate.result.displayType,
|
||||
text = candidate.result.localizedDisplayType(context),
|
||||
color = PrivateQrColors.TextPrimary,
|
||||
style = MaterialTheme.typography.titleMedium,
|
||||
fontWeight = FontWeight.ExtraBold
|
||||
|
||||
+5
-4
@@ -1,5 +1,6 @@
|
||||
package de.softwareapp_hb.privateqrscanner.ui.screens
|
||||
|
||||
import android.content.Context
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
@@ -115,7 +116,7 @@ internal fun BatchResultsPanel(
|
||||
)
|
||||
if (allowShare) {
|
||||
TextButton(
|
||||
onClick = { Intents.shareText(context, buildBatchExport(results)) },
|
||||
onClick = { Intents.shareText(context, buildBatchExport(context, results)) },
|
||||
enabled = results.isNotEmpty(),
|
||||
colors = ButtonDefaults.textButtonColors(
|
||||
containerColor = PrivateQrColors.Mint,
|
||||
@@ -143,7 +144,7 @@ internal fun BatchResultsPanel(
|
||||
) {
|
||||
Column(modifier = Modifier.weight(1f)) {
|
||||
Text(
|
||||
text = "${item.result.displayType}: $contentText",
|
||||
text = "${item.result.localizedDisplayType(context)}: $contentText",
|
||||
color = Color.White.copy(alpha = 0.92f),
|
||||
style = MaterialTheme.typography.titleMedium,
|
||||
fontWeight = FontWeight.Bold,
|
||||
@@ -218,12 +219,12 @@ internal fun BatchResultsPanel(
|
||||
}
|
||||
}
|
||||
|
||||
private fun buildBatchExport(results: List<BatchScanRecord>): String {
|
||||
private fun buildBatchExport(context: Context, results: List<BatchScanRecord>): String {
|
||||
if (results.isEmpty()) return ""
|
||||
val formatter = DateFormat.getDateTimeInstance()
|
||||
return results.joinToString(separator = "\n\n") { item ->
|
||||
val encoding = if (item.result.isBase64Encoded) "\nEncoding: Base64" else ""
|
||||
"${formatter.format(Date(item.timestamp))}\n${item.result.displayType}$encoding\n${item.result.content}"
|
||||
"${formatter.format(Date(item.timestamp))}\n${item.result.localizedDisplayType(context)}$encoding\n${item.result.content}"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+6
-3
@@ -22,6 +22,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Brush
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextDecoration
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
@@ -46,6 +47,7 @@ internal fun ResultVisualCard(
|
||||
onOpenUrl: ((String) -> Unit)? = null,
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val contact = remember(result) {
|
||||
if (result.isBase64Encoded) null else ScanContentParsers.parseContact(result.content)
|
||||
}
|
||||
@@ -79,7 +81,7 @@ internal fun ResultVisualCard(
|
||||
tint = PrivateQrColors.Teal700
|
||||
)
|
||||
Text(
|
||||
text = "Wi-Fi",
|
||||
text = result.localizedDisplayType(context),
|
||||
style = MaterialTheme.typography.headlineSmall
|
||||
)
|
||||
}
|
||||
@@ -90,7 +92,7 @@ internal fun ResultVisualCard(
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Text(
|
||||
text = result.displayType,
|
||||
text = result.localizedDisplayType(context),
|
||||
style = MaterialTheme.typography.headlineSmall,
|
||||
color = PrivateQrColors.TextPrimary
|
||||
)
|
||||
@@ -215,7 +217,8 @@ private fun ContactVisualCard(
|
||||
ContactCardTemplate.Playful -> Color(0xFF55657B)
|
||||
ContactCardTemplate.Minimal -> Color(0xFF475569)
|
||||
}
|
||||
val name = contact?.fullName ?: "Contact"
|
||||
val fallbackName = stringResource(R.string.scan_type_contact)
|
||||
val name = contact?.fullName ?: fallbackName
|
||||
val subtitle = listOfNotNull(contact?.title, contact?.organization).distinct().joinToString(" • ")
|
||||
val initials = remember(name) { initialsFromName(name) }
|
||||
|
||||
|
||||
@@ -46,9 +46,25 @@
|
||||
<string name="live_potential_detected">تم رصد رمز. ثبّت الجهاز أو اقترب.</string>
|
||||
<string name="live_readable_detected">تم اكتشاف رمز قابل للقراءة.</string>
|
||||
<string name="share_history">مشاركة السجل</string>
|
||||
<string name="share_txt">TXT</string>
|
||||
<string name="share_txt">نص</string>
|
||||
<string name="share_csv">CSV</string>
|
||||
<string name="share_json">JSON</string>
|
||||
<string name="scan_type_contact">جهة اتصال</string>
|
||||
<string name="scan_type_url">رابط</string>
|
||||
<string name="scan_type_wifi">Wi-Fi</string>
|
||||
<string name="scan_type_phone">هاتف</string>
|
||||
<string name="scan_type_sms">SMS</string>
|
||||
<string name="scan_type_email">بريد إلكتروني</string>
|
||||
<string name="scan_type_calendar">تقويم</string>
|
||||
<string name="scan_type_isbn">ISBN</string>
|
||||
<string name="scan_type_product">منتج</string>
|
||||
<string name="scan_type_text">نص</string>
|
||||
<string name="scan_type_geo">موقع</string>
|
||||
<string name="scan_type_driver_license">رخصة قيادة</string>
|
||||
<string name="scan_type_unknown">غير معروف</string>
|
||||
<string name="scan_type_base64_suffix">%1$s (Base64)</string>
|
||||
<string name="scan_type_duplicate_ticket">تذكرة مكررة (%1$s)</string>
|
||||
<string name="scan_type_unregistered_ticket">تذكرة غير مسجلة (%1$s)</string>
|
||||
<string name="history_header_subtitle">يبقى السجل الاختياري على جهازك</string>
|
||||
<string name="history_hero_title">راجع عمليات المسح السابقة محليًا</string>
|
||||
<string name="history_hero_subtitle">ابحث أو صدّر أو احذف عمليات المسح المحفوظة متى شئت.</string>
|
||||
|
||||
@@ -46,9 +46,25 @@
|
||||
<string name="live_potential_detected">Código encontrado. Mantenha firme ou aproxime-se.</string>
|
||||
<string name="live_readable_detected">Código legível detectado.</string>
|
||||
<string name="share_history">Compartilhar histórico</string>
|
||||
<string name="share_txt">TXT</string>
|
||||
<string name="share_txt">Texto</string>
|
||||
<string name="share_csv">CSV</string>
|
||||
<string name="share_json">JSON</string>
|
||||
<string name="scan_type_contact">Contato</string>
|
||||
<string name="scan_type_url">Link</string>
|
||||
<string name="scan_type_wifi">Wi-Fi</string>
|
||||
<string name="scan_type_phone">Telefone</string>
|
||||
<string name="scan_type_sms">SMS</string>
|
||||
<string name="scan_type_email">E-mail</string>
|
||||
<string name="scan_type_calendar">Calendário</string>
|
||||
<string name="scan_type_isbn">ISBN</string>
|
||||
<string name="scan_type_product">Produto</string>
|
||||
<string name="scan_type_text">Texto</string>
|
||||
<string name="scan_type_geo">Localização</string>
|
||||
<string name="scan_type_driver_license">Carteira de motorista</string>
|
||||
<string name="scan_type_unknown">Desconhecido</string>
|
||||
<string name="scan_type_base64_suffix">%1$s (Base64)</string>
|
||||
<string name="scan_type_duplicate_ticket">Ingresso duplicado (%1$s)</string>
|
||||
<string name="scan_type_unregistered_ticket">Ingresso não registrado (%1$s)</string>
|
||||
<string name="history_header_subtitle">O histórico opcional fica no seu dispositivo</string>
|
||||
<string name="history_hero_title">Revise leituras anteriores localmente</string>
|
||||
<string name="history_hero_subtitle">Pesquise, exporte ou exclua leituras salvas quando quiser.</string>
|
||||
|
||||
@@ -46,9 +46,25 @@
|
||||
<string name="live_potential_detected">Código detetado. Mantenha estável ou aproxime-se.</string>
|
||||
<string name="live_readable_detected">Código legível detetado.</string>
|
||||
<string name="share_history">Partilhar histórico</string>
|
||||
<string name="share_txt">TXT</string>
|
||||
<string name="share_txt">Texto</string>
|
||||
<string name="share_csv">CSV</string>
|
||||
<string name="share_json">JSON</string>
|
||||
<string name="scan_type_contact">Contacto</string>
|
||||
<string name="scan_type_url">Ligação</string>
|
||||
<string name="scan_type_wifi">Wi-Fi</string>
|
||||
<string name="scan_type_phone">Telefone</string>
|
||||
<string name="scan_type_sms">SMS</string>
|
||||
<string name="scan_type_email">E-mail</string>
|
||||
<string name="scan_type_calendar">Calendário</string>
|
||||
<string name="scan_type_isbn">ISBN</string>
|
||||
<string name="scan_type_product">Produto</string>
|
||||
<string name="scan_type_text">Texto</string>
|
||||
<string name="scan_type_geo">Localização</string>
|
||||
<string name="scan_type_driver_license">Carta de condução</string>
|
||||
<string name="scan_type_unknown">Desconhecido</string>
|
||||
<string name="scan_type_base64_suffix">%1$s (Base64)</string>
|
||||
<string name="scan_type_duplicate_ticket">Bilhete duplicado (%1$s)</string>
|
||||
<string name="scan_type_unregistered_ticket">Bilhete não registado (%1$s)</string>
|
||||
<string name="history_header_subtitle">O histórico opcional fica no seu dispositivo</string>
|
||||
<string name="history_hero_title">Reveja digitalizações anteriores localmente</string>
|
||||
<string name="history_hero_subtitle">Pesquise, exporte ou elimine digitalizações guardadas quando quiser.</string>
|
||||
|
||||
@@ -46,9 +46,25 @@
|
||||
<string name="live_potential_detected">发现代码。请保持稳定或靠近一些。</string>
|
||||
<string name="live_readable_detected">检测到可读取的代码。</string>
|
||||
<string name="share_history">分享历史记录</string>
|
||||
<string name="share_txt">TXT</string>
|
||||
<string name="share_txt">文本</string>
|
||||
<string name="share_csv">CSV</string>
|
||||
<string name="share_json">JSON</string>
|
||||
<string name="scan_type_contact">联系人</string>
|
||||
<string name="scan_type_url">链接</string>
|
||||
<string name="scan_type_wifi">Wi-Fi</string>
|
||||
<string name="scan_type_phone">电话</string>
|
||||
<string name="scan_type_sms">SMS</string>
|
||||
<string name="scan_type_email">电子邮件</string>
|
||||
<string name="scan_type_calendar">日历</string>
|
||||
<string name="scan_type_isbn">ISBN</string>
|
||||
<string name="scan_type_product">产品</string>
|
||||
<string name="scan_type_text">文本</string>
|
||||
<string name="scan_type_geo">位置</string>
|
||||
<string name="scan_type_driver_license">驾驶证</string>
|
||||
<string name="scan_type_unknown">未知</string>
|
||||
<string name="scan_type_base64_suffix">%1$s (Base64)</string>
|
||||
<string name="scan_type_duplicate_ticket">重复票券(%1$s)</string>
|
||||
<string name="scan_type_unregistered_ticket">未注册票券(%1$s)</string>
|
||||
<string name="history_header_subtitle">可选历史记录保留在你的设备上</string>
|
||||
<string name="history_hero_title">在本地查看过去的扫描</string>
|
||||
<string name="history_hero_subtitle">随时搜索、导出或删除已保存的扫描。</string>
|
||||
|
||||
@@ -46,9 +46,25 @@
|
||||
<string name="live_potential_detected">發現代碼。請保持穩定或靠近一些。</string>
|
||||
<string name="live_readable_detected">偵測到可讀取的代碼。</string>
|
||||
<string name="share_history">分享記錄</string>
|
||||
<string name="share_txt">TXT</string>
|
||||
<string name="share_txt">文字</string>
|
||||
<string name="share_csv">CSV</string>
|
||||
<string name="share_json">JSON</string>
|
||||
<string name="scan_type_contact">聯絡人</string>
|
||||
<string name="scan_type_url">連結</string>
|
||||
<string name="scan_type_wifi">Wi-Fi</string>
|
||||
<string name="scan_type_phone">電話</string>
|
||||
<string name="scan_type_sms">SMS</string>
|
||||
<string name="scan_type_email">電子郵件</string>
|
||||
<string name="scan_type_calendar">日曆</string>
|
||||
<string name="scan_type_isbn">ISBN</string>
|
||||
<string name="scan_type_product">產品</string>
|
||||
<string name="scan_type_text">文字</string>
|
||||
<string name="scan_type_geo">位置</string>
|
||||
<string name="scan_type_driver_license">駕駛執照</string>
|
||||
<string name="scan_type_unknown">未知</string>
|
||||
<string name="scan_type_base64_suffix">%1$s (Base64)</string>
|
||||
<string name="scan_type_duplicate_ticket">重複票券(%1$s)</string>
|
||||
<string name="scan_type_unregistered_ticket">未註冊票券(%1$s)</string>
|
||||
<string name="history_header_subtitle">可選記錄會保留在你的裝置上</string>
|
||||
<string name="history_hero_title">在本機查看過去的掃描</string>
|
||||
<string name="history_hero_subtitle">隨時搜尋、匯出或刪除已儲存的掃描。</string>
|
||||
|
||||
@@ -46,9 +46,25 @@
|
||||
<string name="live_potential_detected">Code erkannt. Ruhig halten oder näher rangehen.</string>
|
||||
<string name="live_readable_detected">Lesbarer Code erkannt.</string>
|
||||
<string name="share_history">Historie teilen</string>
|
||||
<string name="share_txt">TXT</string>
|
||||
<string name="share_txt">Text</string>
|
||||
<string name="share_csv">CSV</string>
|
||||
<string name="share_json">JSON</string>
|
||||
<string name="scan_type_contact">Kontakt</string>
|
||||
<string name="scan_type_url">Link</string>
|
||||
<string name="scan_type_wifi">WLAN</string>
|
||||
<string name="scan_type_phone">Telefon</string>
|
||||
<string name="scan_type_sms">SMS</string>
|
||||
<string name="scan_type_email">E-Mail</string>
|
||||
<string name="scan_type_calendar">Kalender</string>
|
||||
<string name="scan_type_isbn">ISBN</string>
|
||||
<string name="scan_type_product">Produkt</string>
|
||||
<string name="scan_type_text">Text</string>
|
||||
<string name="scan_type_geo">Standort</string>
|
||||
<string name="scan_type_driver_license">Führerschein</string>
|
||||
<string name="scan_type_unknown">Unbekannt</string>
|
||||
<string name="scan_type_base64_suffix">%1$s (Base64)</string>
|
||||
<string name="scan_type_duplicate_ticket">Doppeltes Ticket (%1$s)</string>
|
||||
<string name="scan_type_unregistered_ticket">Nicht registriertes Ticket (%1$s)</string>
|
||||
<string name="history_header_subtitle">Optionale Historie bleibt auf deinem Gerät</string>
|
||||
<string name="history_hero_title">Vergangene Scans lokal prüfen</string>
|
||||
<string name="history_hero_subtitle">Gespeicherte Scans jederzeit suchen, exportieren oder löschen.</string>
|
||||
|
||||
@@ -46,9 +46,25 @@
|
||||
<string name="live_potential_detected">Código detectado. Mantén el dispositivo estable o acércate.</string>
|
||||
<string name="live_readable_detected">Código legible detectado.</string>
|
||||
<string name="share_history">Compartir historial</string>
|
||||
<string name="share_txt">TXT</string>
|
||||
<string name="share_txt">Texto</string>
|
||||
<string name="share_csv">CSV</string>
|
||||
<string name="share_json">JSON</string>
|
||||
<string name="scan_type_contact">Contacto</string>
|
||||
<string name="scan_type_url">Enlace</string>
|
||||
<string name="scan_type_wifi">Wi-Fi</string>
|
||||
<string name="scan_type_phone">Teléfono</string>
|
||||
<string name="scan_type_sms">SMS</string>
|
||||
<string name="scan_type_email">Correo electrónico</string>
|
||||
<string name="scan_type_calendar">Calendario</string>
|
||||
<string name="scan_type_isbn">ISBN</string>
|
||||
<string name="scan_type_product">Producto</string>
|
||||
<string name="scan_type_text">Texto</string>
|
||||
<string name="scan_type_geo">Ubicación</string>
|
||||
<string name="scan_type_driver_license">Permiso de conducir</string>
|
||||
<string name="scan_type_unknown">Desconocido</string>
|
||||
<string name="scan_type_base64_suffix">%1$s (Base64)</string>
|
||||
<string name="scan_type_duplicate_ticket">Ticket duplicado (%1$s)</string>
|
||||
<string name="scan_type_unregistered_ticket">Ticket no registrado (%1$s)</string>
|
||||
<string name="history_header_subtitle">El historial opcional permanece en tu dispositivo</string>
|
||||
<string name="history_hero_title">Revisa escaneos anteriores localmente</string>
|
||||
<string name="history_hero_subtitle">Busca, exporta o elimina escaneos guardados cuando quieras.</string>
|
||||
|
||||
@@ -46,9 +46,25 @@
|
||||
<string name="live_potential_detected">Code repéré. Restez stable ou rapprochez-vous.</string>
|
||||
<string name="live_readable_detected">Code lisible détecté.</string>
|
||||
<string name="share_history">Partager l’historique</string>
|
||||
<string name="share_txt">TXT</string>
|
||||
<string name="share_txt">Texte</string>
|
||||
<string name="share_csv">CSV</string>
|
||||
<string name="share_json">JSON</string>
|
||||
<string name="scan_type_contact">Contact</string>
|
||||
<string name="scan_type_url">Lien</string>
|
||||
<string name="scan_type_wifi">Wi-Fi</string>
|
||||
<string name="scan_type_phone">Téléphone</string>
|
||||
<string name="scan_type_sms">SMS</string>
|
||||
<string name="scan_type_email">E-mail</string>
|
||||
<string name="scan_type_calendar">Calendrier</string>
|
||||
<string name="scan_type_isbn">ISBN</string>
|
||||
<string name="scan_type_product">Produit</string>
|
||||
<string name="scan_type_text">Texte</string>
|
||||
<string name="scan_type_geo">Emplacement</string>
|
||||
<string name="scan_type_driver_license">Permis de conduire</string>
|
||||
<string name="scan_type_unknown">Inconnu</string>
|
||||
<string name="scan_type_base64_suffix">%1$s (Base64)</string>
|
||||
<string name="scan_type_duplicate_ticket">Ticket en double (%1$s)</string>
|
||||
<string name="scan_type_unregistered_ticket">Ticket non enregistré (%1$s)</string>
|
||||
<string name="history_header_subtitle">L’historique facultatif reste sur votre appareil</string>
|
||||
<string name="history_hero_title">Consulter les scans passés localement</string>
|
||||
<string name="history_hero_subtitle">Recherchez, exportez ou supprimez les scans enregistrés quand vous le souhaitez.</string>
|
||||
|
||||
@@ -46,9 +46,25 @@
|
||||
<string name="live_potential_detected">Codice individuato. Tieni fermo o avvicinati.</string>
|
||||
<string name="live_readable_detected">Codice leggibile rilevato.</string>
|
||||
<string name="share_history">Condividi cronologia</string>
|
||||
<string name="share_txt">TXT</string>
|
||||
<string name="share_txt">Testo</string>
|
||||
<string name="share_csv">CSV</string>
|
||||
<string name="share_json">JSON</string>
|
||||
<string name="scan_type_contact">Contatto</string>
|
||||
<string name="scan_type_url">Link</string>
|
||||
<string name="scan_type_wifi">Wi-Fi</string>
|
||||
<string name="scan_type_phone">Telefono</string>
|
||||
<string name="scan_type_sms">SMS</string>
|
||||
<string name="scan_type_email">Email</string>
|
||||
<string name="scan_type_calendar">Calendario</string>
|
||||
<string name="scan_type_isbn">ISBN</string>
|
||||
<string name="scan_type_product">Prodotto</string>
|
||||
<string name="scan_type_text">Testo</string>
|
||||
<string name="scan_type_geo">Posizione</string>
|
||||
<string name="scan_type_driver_license">Patente di guida</string>
|
||||
<string name="scan_type_unknown">Sconosciuto</string>
|
||||
<string name="scan_type_base64_suffix">%1$s (Base64)</string>
|
||||
<string name="scan_type_duplicate_ticket">Ticket duplicato (%1$s)</string>
|
||||
<string name="scan_type_unregistered_ticket">Ticket non registrato (%1$s)</string>
|
||||
<string name="history_header_subtitle">La cronologia opzionale resta sul tuo dispositivo</string>
|
||||
<string name="history_hero_title">Rivedi localmente le scansioni passate</string>
|
||||
<string name="history_hero_subtitle">Cerca, esporta o elimina le scansioni salvate quando vuoi.</string>
|
||||
|
||||
@@ -46,9 +46,25 @@
|
||||
<string name="live_potential_detected">コードを検出しました。端末を安定させるか、近づけてください。</string>
|
||||
<string name="live_readable_detected">読み取り可能なコードを検出しました。</string>
|
||||
<string name="share_history">履歴を共有</string>
|
||||
<string name="share_txt">TXT</string>
|
||||
<string name="share_txt">テキスト</string>
|
||||
<string name="share_csv">CSV</string>
|
||||
<string name="share_json">JSON</string>
|
||||
<string name="scan_type_contact">連絡先</string>
|
||||
<string name="scan_type_url">リンク</string>
|
||||
<string name="scan_type_wifi">Wi-Fi</string>
|
||||
<string name="scan_type_phone">電話</string>
|
||||
<string name="scan_type_sms">SMS</string>
|
||||
<string name="scan_type_email">メール</string>
|
||||
<string name="scan_type_calendar">カレンダー</string>
|
||||
<string name="scan_type_isbn">ISBN</string>
|
||||
<string name="scan_type_product">製品</string>
|
||||
<string name="scan_type_text">テキスト</string>
|
||||
<string name="scan_type_geo">位置情報</string>
|
||||
<string name="scan_type_driver_license">運転免許証</string>
|
||||
<string name="scan_type_unknown">不明</string>
|
||||
<string name="scan_type_base64_suffix">%1$s (Base64)</string>
|
||||
<string name="scan_type_duplicate_ticket">重複チケット(%1$s)</string>
|
||||
<string name="scan_type_unregistered_ticket">未登録チケット(%1$s)</string>
|
||||
<string name="history_header_subtitle">任意の履歴は端末内に残ります</string>
|
||||
<string name="history_hero_title">過去のスキャンをローカルで確認</string>
|
||||
<string name="history_hero_subtitle">保存したスキャンをいつでも検索、エクスポート、削除できます。</string>
|
||||
|
||||
@@ -46,9 +46,25 @@
|
||||
<string name="live_potential_detected">코드를 찾았습니다. 기기를 고정하거나 더 가까이 이동하세요.</string>
|
||||
<string name="live_readable_detected">읽을 수 있는 코드가 감지되었습니다.</string>
|
||||
<string name="share_history">기록 공유</string>
|
||||
<string name="share_txt">TXT</string>
|
||||
<string name="share_txt">텍스트</string>
|
||||
<string name="share_csv">CSV</string>
|
||||
<string name="share_json">JSON</string>
|
||||
<string name="scan_type_contact">연락처</string>
|
||||
<string name="scan_type_url">링크</string>
|
||||
<string name="scan_type_wifi">Wi-Fi</string>
|
||||
<string name="scan_type_phone">전화</string>
|
||||
<string name="scan_type_sms">SMS</string>
|
||||
<string name="scan_type_email">이메일</string>
|
||||
<string name="scan_type_calendar">캘린더</string>
|
||||
<string name="scan_type_isbn">ISBN</string>
|
||||
<string name="scan_type_product">제품</string>
|
||||
<string name="scan_type_text">텍스트</string>
|
||||
<string name="scan_type_geo">위치</string>
|
||||
<string name="scan_type_driver_license">운전면허증</string>
|
||||
<string name="scan_type_unknown">알 수 없음</string>
|
||||
<string name="scan_type_base64_suffix">%1$s (Base64)</string>
|
||||
<string name="scan_type_duplicate_ticket">중복 티켓(%1$s)</string>
|
||||
<string name="scan_type_unregistered_ticket">등록되지 않은 티켓(%1$s)</string>
|
||||
<string name="history_header_subtitle">선택적 기록은 기기에 남습니다</string>
|
||||
<string name="history_hero_title">지난 스캔을 로컬에서 확인</string>
|
||||
<string name="history_hero_subtitle">저장된 스캔을 언제든 검색, 내보내기 또는 삭제할 수 있습니다.</string>
|
||||
|
||||
@@ -46,9 +46,25 @@
|
||||
<string name="live_potential_detected">Code spotted. Hold steady or move closer.</string>
|
||||
<string name="live_readable_detected">Readable code detected.</string>
|
||||
<string name="share_history">Share history</string>
|
||||
<string name="share_txt">TXT</string>
|
||||
<string name="share_txt">Text</string>
|
||||
<string name="share_csv">CSV</string>
|
||||
<string name="share_json">JSON</string>
|
||||
<string name="scan_type_contact">Contact</string>
|
||||
<string name="scan_type_url">Link</string>
|
||||
<string name="scan_type_wifi">Wi-Fi</string>
|
||||
<string name="scan_type_phone">Phone</string>
|
||||
<string name="scan_type_sms">SMS</string>
|
||||
<string name="scan_type_email">Email</string>
|
||||
<string name="scan_type_calendar">Calendar</string>
|
||||
<string name="scan_type_isbn">ISBN</string>
|
||||
<string name="scan_type_product">Product</string>
|
||||
<string name="scan_type_text">Text</string>
|
||||
<string name="scan_type_geo">Location</string>
|
||||
<string name="scan_type_driver_license">Driver license</string>
|
||||
<string name="scan_type_unknown">Unknown</string>
|
||||
<string name="scan_type_base64_suffix">%1$s (Base64)</string>
|
||||
<string name="scan_type_duplicate_ticket">Duplicate ticket (%1$s)</string>
|
||||
<string name="scan_type_unregistered_ticket">Unregistered ticket (%1$s)</string>
|
||||
<string name="history_header_subtitle">Optional history stays on your device</string>
|
||||
<string name="history_hero_title">Review past scans locally</string>
|
||||
<string name="history_hero_subtitle">Search, export, or delete saved scans whenever you choose.</string>
|
||||
|
||||
Reference in New Issue
Block a user