This commit is contained in:
callebtc 2026-07-27 02:12:19 +02:00
parent e1d07f99f5
commit ea0660e717
38 changed files with 240 additions and 202 deletions

View File

@ -46,6 +46,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
@ -206,7 +207,9 @@ internal fun AboutTabBar(
HorizontalDivider(thickness = 1.dp, color = palette.outlineVariant)
Box(
modifier = Modifier
.offset(x = indicatorOffset)
// Lambda overload: the offset is animated every frame, and the non-lambda
// version would invalidate composition rather than just layout.
.offset { IntOffset(x = indicatorOffset.roundToPx(), y = 0) }
.width(tabWidth)
.height(2.dp)
.background(colorScheme.primary)
@ -355,8 +358,8 @@ internal fun AboutFeatureCard(modifier: Modifier = Modifier) {
val features = listOf(
Triple(
Icons.Filled.WifiOff,
R.string.about_offline_comm_title,
R.string.about_offline_comm_desc
R.string.about_offline_mesh_title,
R.string.about_offline_mesh_desc
),
Triple(
Icons.Outlined.Lock,
@ -365,8 +368,8 @@ internal fun AboutFeatureCard(modifier: Modifier = Modifier) {
),
Triple(
Icons.Outlined.Public,
R.string.about_local_channels_title,
R.string.about_local_channels_desc
R.string.about_online_geohash_title,
R.string.about_online_geohash_desc
),
Triple(
Icons.Outlined.VisibilityOff,
@ -380,7 +383,7 @@ internal fun AboutFeatureCard(modifier: Modifier = Modifier) {
),
Triple(
Icons.Filled.DeleteForever,
R.string.about_panic_title,
R.string.about_emergency_title,
R.string.about_panic_desc
),
)

View File

@ -246,7 +246,6 @@ fun AboutSheet(
val colorScheme = MaterialTheme.colorScheme
val palette = LocalBitchatPalette.current
val isDark = palette.isDark
var selectedTab by remember { mutableStateOf(AboutTab.HowToUse) }
if (isPresented) {

View File

@ -120,26 +120,30 @@ fun NoiseSessionIcon(
sessionState: String?,
modifier: Modifier = Modifier
) {
val palette = LocalBitchatPalette.current
// The pre-redesign colours for the first two states were `0x87878700`, i.e. alpha 0x87 with
// an all-but-transparent RGB - the icons were effectively invisible. They now use the
// palette's secondary text colour.
val (icon, color, contentDescription) = when (sessionState) {
"uninitialized" -> Triple(
Icons.Outlined.NoEncryption,
Color(0x87878700), // Grey - ready to establish
palette.textSecondary,
stringResource(R.string.cd_ready_for_handshake)
)
"handshaking" -> Triple(
Icons.Outlined.Sync,
Color(0x87878700), // Grey - in progress
palette.textSecondary,
stringResource(R.string.cd_handshake_in_progress)
)
"established" -> Triple(
Icons.Filled.Lock,
Color(0xFFFF9500), // Orange - secure
palette.accentOrange,
stringResource(R.string.cd_encrypted)
)
else -> { // "failed" or any other state
Triple(
Icons.Outlined.Warning,
Color(0xFFFF4444), // Red - error
palette.accentRed,
stringResource(R.string.cd_handshake_failed)
)
}
@ -400,28 +404,36 @@ private fun MainHeader(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
// MARK: - Identity cluster
BitChatBrandButton(
onClick = onTitleClick,
onTripleClick = onTripleTitleClick,
contentDescription = stringResource(R.string.cd_open_about),
)
// MARK: - Identity cluster.
//
// Weighted so it yields space to the status cluster rather than pushing it off screen.
// Compose measures unweighted children first, so the icons on the right always get the
// width they need and a long nickname simply scrolls within what is left.
Row(
modifier = Modifier.weight(1f),
verticalAlignment = Alignment.CenterVertically
) {
BitChatBrandButton(
onClick = onTitleClick,
onTripleClick = onTripleTitleClick,
contentDescription = stringResource(R.string.cd_open_about),
modifier = Modifier.size(HeaderTapTarget),
)
Text(
text = "/",
style = MaterialTheme.typography.bodyMedium,
// Dimmed: the slash is a separator, not content. At full brightness it competed
// with the nickname beside it.
color = colorScheme.primary.copy(alpha = 0.45f),
modifier = Modifier.padding(horizontal = 2.dp)
)
Text(
text = "/",
style = MaterialTheme.typography.bodyMedium,
// Dimmed: the slash is a separator, not content. At full brightness it competed
// with the nickname beside it.
color = colorScheme.primary.copy(alpha = 0.45f),
modifier = Modifier.padding(horizontal = 2.dp)
)
NicknameEditor(
value = nickname,
onValueChange = onNicknameChange
)
Spacer(modifier = Modifier.weight(1f))
NicknameEditor(
value = nickname,
onValueChange = onNicknameChange
)
}
// MARK: - Status cluster. Order matches the design: bookmark, channel, people.
Row(

View File

@ -7,7 +7,6 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.unit.sp
import com.bitchat.android.model.BitchatMessage
import com.bitchat.android.mesh.MeshService
import com.bitchat.android.ui.theme.BASE_FONT_SIZE
import com.bitchat.android.ui.theme.BitchatPalette
import java.text.SimpleDateFormat
@ -49,11 +48,11 @@ fun getRSSIColor(rssi: Int): Color {
fun formatTextMessageSender(
message: BitchatMessage,
currentUserNickname: String,
meshService: MeshService,
myPeerID: String,
palette: BitchatPalette
): AnnotatedString {
val builder = AnnotatedString.Builder()
val isSelf = message.isFromSelf(currentUserNickname, meshService.myPeerID)
val isSelf = message.isFromSelf(currentUserNickname, myPeerID)
val senderColor = if (isSelf) palette.accentOrange else getPeerColor(message, palette.isDark)
val senderWeight = if (isSelf) FontWeight.Bold else FontWeight.SemiBold
val (baseName, suffix) = splitSuffix(message.sender)
@ -213,13 +212,13 @@ fun formatSystemMessage(
fun formatMessageHeaderAnnotatedString(
message: BitchatMessage,
currentUserNickname: String,
meshService: MeshService,
myPeerID: String,
palette: BitchatPalette,
timeFormatter: SimpleDateFormat = SimpleDateFormat("HH:mm:ss", Locale.getDefault()),
includeSender: Boolean = true
): AnnotatedString {
val builder = AnnotatedString.Builder()
val isSelf = message.isFromSelf(currentUserNickname, meshService.myPeerID)
val isSelf = message.isFromSelf(currentUserNickname, myPeerID)
if (message.sender == "system") {
return formatSystemMessage(message, palette, timeFormatter)

View File

@ -298,7 +298,7 @@ fun LocationChannelsSheet(
// Bookmarked geohashes
if (bookmarks.isNotEmpty()) {
item(key = "bookmarked_header") {
SheetSectionLabel(text = stringResource(R.string.section_bookmarked))
SheetSectionLabel(text = stringResource(R.string.bookmarked))
}
items(bookmarks) { gh ->
val level = levelForLength(gh.length)
@ -571,7 +571,7 @@ fun LocationChannelsSheet(
item(key = "location_toggle") {
SheetDestructiveButton(
text = if (locationServicesEnabled) {
stringResource(R.string.remove_location_access)
stringResource(R.string.disable_location_services)
} else {
stringResource(R.string.enable_location_services)
},

View File

@ -130,7 +130,7 @@ fun MeshPeerListSheet(
// Channels section
if (joinedChannels.isNotEmpty()) {
item(key = "channels_header") {
SheetSectionLabel(text = stringResource(R.string.section_channels))
SheetSectionLabel(text = stringResource(R.string.channels))
}
items(
@ -316,7 +316,7 @@ fun PeopleSection(
val palette = LocalBitchatPalette.current
Column(modifier = modifier) {
SheetSectionLabel(text = stringResource(R.string.section_mesh))
SheetSectionLabel(text = stringResource(R.string.people))
if (connectedPeers.isEmpty()) {
Text(

View File

@ -300,7 +300,7 @@ fun MessageItem(
val headerText = formatMessageHeaderAnnotatedString(
message = message,
currentUserNickname = currentUserNickname,
meshService = meshService,
myPeerID = meshService.myPeerID,
palette = palette,
timeFormatter = timeFormatter,
includeSender = showSender
@ -368,15 +368,24 @@ fun MessageItem(
.align(Alignment.TopEnd)
.padding(4.dp)
.size(22.dp)
.background(Color.Gray.copy(alpha = 0.6f), CircleShape)
.background(palette.surfaceVariant.copy(alpha = 0.85f), CircleShape)
.clickable { onCancelTransfer?.invoke(message) },
contentAlignment = Alignment.Center
) {
Icon(imageVector = Icons.Filled.Close, contentDescription = stringResource(R.string.cd_cancel), tint = Color.White, modifier = Modifier.size(14.dp))
Icon(
imageVector = Icons.Filled.Close,
contentDescription = stringResource(R.string.cd_cancel),
tint = palette.textPrimary,
modifier = Modifier.size(14.dp)
)
}
}
} else {
Text(text = stringResource(R.string.file_unavailable), fontFamily = FontFamily.Monospace, color = Color.Gray)
Text(
text = stringResource(R.string.file_unavailable),
fontFamily = FontFamily.Monospace,
color = palette.textTertiary
)
}
}
}
@ -468,7 +477,7 @@ internal fun TextMessageLayout(
formatTextMessageSender(
message = message,
currentUserNickname = currentUserNickname,
meshService = meshService,
myPeerID = myPeerId,
palette = palette,
)
}
@ -548,6 +557,7 @@ internal fun TextMessageLayout(
@Composable
fun DeliveryStatusIcon(status: DeliveryStatus) {
val colorScheme = MaterialTheme.colorScheme
val palette = LocalBitchatPalette.current
when (status) {
is DeliveryStatus.Sending -> {
@ -577,7 +587,7 @@ fun DeliveryStatusIcon(status: DeliveryStatus) {
Text(
text = stringResource(R.string.status_delivered),
fontSize = 10.sp,
color = Color(0xFF007AFF), // Blue
color = palette.accentBlue,
fontWeight = FontWeight.Bold
)
}
@ -585,7 +595,7 @@ fun DeliveryStatusIcon(status: DeliveryStatus) {
Text(
text = stringResource(R.string.status_failed),
fontSize = 10.sp,
color = Color.Red.copy(alpha = 0.8f)
color = palette.accentRed
)
}
is DeliveryStatus.PartiallyDelivered -> {

View File

@ -53,7 +53,7 @@ fun AudioMessageItem(
val headerText = com.bitchat.android.ui.formatMessageHeaderAnnotatedString(
message = message,
currentUserNickname = currentUserNickname,
meshService = meshService,
myPeerID = meshService.myPeerID,
palette = palette,
timeFormatter = timeFormatter,
includeSender = showSender

View File

@ -51,7 +51,7 @@ fun ImageMessageItem(
val headerText = com.bitchat.android.ui.formatMessageHeaderAnnotatedString(
message = message,
currentUserNickname = currentUserNickname,
meshService = meshService,
myPeerID = meshService.myPeerID,
palette = palette,
timeFormatter = timeFormatter,
includeSender = showSender

View File

@ -72,7 +72,6 @@
<!-- ترويسة الدردشة وسهولة الوصول -->
<string name="chat_back">رجوع</string>
<string name="chat_channel_prefix">القناة: %1$s</string>
<string name="chat_leave">مغادرة</string>
<string name="cd_nostr_reachable">يمكن الوصول عبر Nostr</string>
<string name="cd_unread_private_messages">رسائل خاصة غير مقروءة</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">تواصل مع أشخاص بالقرب منك عبر قنوات تعتمد على geohash. وسّع الشبكة عبر مرحلات الإنترنت العامة.</string>
<string name="about_e2e_title">تشفير طرف إلى طرف</string>
<string name="about_e2e_desc">الرسائل الخاصة مشفّرة. رسائل القنوات عامة.</string>
<string name="about_appearance">المظهر</string>
<string name="about_system">النظام</string>
<string name="about_light">فاتح</string>
<string name="about_dark">داكن</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">حالة Tor: %1$s، التمهيد %2$d%%</string>
<string name="about_last">آخر: %1$s</string>
<string name="about_emergency_title">مسح البيانات الطارئ</string>
<string name="about_emergency_tip">تلميح: انقر ثلاث مرات على عنوان التطبيق لمسح كل البيانات المحفوظة بما في ذلك الرسائل والمفاتيح والإعدادات.</string>
<string name="about_debug_settings">إعدادات التصحيح</string>
<string name="about_footer">مفتوح المصدر • الخصوصية أولاً • لامركزي</string>
<string name="close_plain">إغلاق</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">فتح الخريطة</string>
<string name="cd_remove_bookmark">إزالة الإشارة المرجعية</string>
<string name="cd_teleport">انتقال</string>
<string name="cd_selected">محدد</string>
<string name="cd_leave_channel">مغادرة القناة</string>
<string name="cd_reachable_via_nostr">يمكن الوصول عبر Nostr</string>
<string name="cd_offline_favorite">مفضل (غير متصل)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">الأذونات</string>
<string name="grant_permissions">منح الأذونات</string>
<string name="location_tracking_warning">bitchat لا يتتبع موقعك</string>
<string name="geohash_people_header">الأشخاص</string>
<string name="nobody_around">لا أحد هنا…</string>
<string name="you_suffix"> (أنت)</string>
<string name="pan_zoom_instruction">حرّك وقرّب لاختيار geohash</string>

View File

@ -72,7 +72,6 @@
<!-- চ্যাট হেডার ও অ্যাক্সেসিবিলিটি -->
<string name="chat_back">ফিরে যান</string>
<string name="chat_channel_prefix">চ্যানেল: %1$s</string>
<string name="chat_leave">ছেড়ে দিন</string>
<string name="cd_nostr_reachable">Nostr এর মাধ্যমে পৌঁছানো যায়</string>
<string name="cd_unread_private_messages">অপঠিত ব্যক্তিগত বার্তা</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">জিওহ্যাশ-ভিত্তিক চ্যানেলের মাধ্যমে আপনার এলাকার মানুষদের সাথে সংযুক্ত হন। পাবলিক ইন্টারনেট রিলেগুলির মাধ্যমে মেশ বিস্তৃত করুন।</string>
<string name="about_e2e_title">এন্ড-টু-এন্ড এনক্রিপশন</string>
<string name="about_e2e_desc">ব্যক্তিগত বার্তাগুলি এনক্রিপ্ট করা। চ্যানেল বার্তাগুলি পাবলিক।</string>
<string name="about_appearance">চেহারা</string>
<string name="about_system">সিস্টেম</string>
<string name="about_light">হালকা</string>
<string name="about_dark">অন্ধকার</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Tor অবস্থা: %1$s, বুটস্ট্র্যাপ %2$d%%</string>
<string name="about_last">শেষ: %1$s</string>
<string name="about_emergency_title">জরুরী ডেটা ক্লিয়ার</string>
<string name="about_emergency_tip">টিপ: সংরক্ষিত সমস্ত ডেটা বার্তা, কী এবং সেটিংস সহ সাফ করতে অ্যাপ শিরোনামে তিনবার ট্যাপ করুন।</string>
<string name="about_debug_settings">ডিবাগ সেটিংস</string>
<string name="about_footer">ওপেন সোর্স • গোপনীয়তা প্রথম • বিকেন্দ্রীভূত</string>
<string name="close_plain">বন্ধ করুন</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">মানচিত্র খুলুন</string>
<string name="cd_remove_bookmark">বুকমার্ক সরান</string>
<string name="cd_teleport">টেলিপোর্ট</string>
<string name="cd_selected">নির্বাচিত</string>
<string name="cd_leave_channel">চ্যানেল ছেড়ে দিন</string>
<string name="cd_reachable_via_nostr">Nostr এর মাধ্যমে পৌঁছানো যায়</string>
<string name="cd_offline_favorite">প্রিয় (অফলাইন)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">অনুমতি</string>
<string name="grant_permissions">অনুমতি দিন</string>
<string name="location_tracking_warning">bitchat আপনার অবস্থান ট্র্যাক করে না</string>
<string name="geohash_people_header">মানুষ</string>
<string name="nobody_around">কেউ আশেপাশে নেই …</string>
<string name="you_suffix"> (আপনি)</string>
<string name="pan_zoom_instruction">জিওহ্যাশ নির্বাচন করতে প্যান এবং জুম করুন</string>

View File

@ -72,7 +72,6 @@
<!-- ChatKopf &amp; Barrierefreiheit -->
<string name="chat_back">zurück</string>
<string name="chat_channel_prefix">Kanal: %1$s</string>
<string name="chat_leave">verlassen</string>
<string name="cd_nostr_reachable">Über Nostr erreichbar</string>
<string name="cd_unread_private_messages">Ungelesene private Nachrichten</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">Vernetze dich mit Menschen in deiner Umgebung über geohashbasierte Kanäle. Erweitere das Mesh über öffentliche InternetRelays.</string>
<string name="about_e2e_title">EndezuEndeVerschlüsselung</string>
<string name="about_e2e_desc">Private Nachrichten sind verschlüsselt. KanalNachrichten sind öffentlich.</string>
<string name="about_appearance">Darstellung</string>
<string name="about_system">System</string>
<string name="about_light">Hell</string>
<string name="about_dark">Dunkel</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">TorStatus: %1$s, Bootstrap %2$d%%</string>
<string name="about_last">Zuletzt: %1$s</string>
<string name="about_emergency_title">NotfallDatenlöschung</string>
<string name="about_emergency_tip">Tipp: Dreifach auf den AppTitel tippen, um alle gespeicherten Daten einschließlich Nachrichten, Schlüssel und Einstellungen zu löschen.</string>
<string name="about_debug_settings">DebugEinstellungen</string>
<string name="about_footer">Open Source • Privacy First • Dezentral</string>
<string name="close_plain">Schließen</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">Karte öffnen</string>
<string name="cd_remove_bookmark">Lesezeichen entfernen</string>
<string name="cd_teleport">Teleportieren</string>
<string name="cd_selected">Ausgewählt</string>
<string name="cd_leave_channel">Kanal verlassen</string>
<string name="cd_reachable_via_nostr">Über Nostr erreichbar</string>
<string name="cd_offline_favorite">Favorit (offline)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">Berechtigungen</string>
<string name="grant_permissions">Berechtigungen erteilen</string>
<string name="location_tracking_warning">bitchat verfolgt NICHT deinen Standort</string>
<string name="geohash_people_header">PERSONEN</string>
<string name="nobody_around">niemand da …</string>
<string name="you_suffix"> (du)</string>
<string name="pan_zoom_instruction">schwenken und zoomen, um einen Geohash auszuwählen</string>

View File

@ -72,7 +72,6 @@
<!-- Encabezado de chat y accesibilidad -->
<string name="chat_back">atrás</string>
<string name="chat_channel_prefix">Canal: %1$s</string>
<string name="chat_leave">salir</string>
<string name="cd_nostr_reachable">Accesible vía Nostr</string>
<string name="cd_unread_private_messages">Mensajes privados sin leer</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">Conéctate con personas cerca de ti a través de canales basados en geohash. Extiende la red mesh a través de repetidores de internet público.</string>
<string name="about_e2e_title">Cifrado de extremo a extremo</string>
<string name="about_e2e_desc">Los mensajes privados están cifrados. Los mensajes de canal son públicos.</string>
<string name="about_appearance">Apariencia</string>
<string name="about_system">Sistema</string>
<string name="about_light">Claro</string>
<string name="about_dark">Oscuro</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Estado de Tor: %1$s, bootstrap %2$d%%</string>
<string name="about_last">Último: %1$s</string>
<string name="about_emergency_title">Borrado de datos de emergencia</string>
<string name="about_emergency_tip">Consejo: Toca tres veces en el título de la app para borrar todos los datos almacenados, incluyendo mensajes, claves y configuraciones.</string>
<string name="about_debug_settings">Configuraciones de depuración</string>
<string name="about_footer">Código abierto • Privacidad primero • Descentralizado</string>
<string name="close_plain">Cerrar</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">Abrir mapa</string>
<string name="cd_remove_bookmark">Quitar marcador</string>
<string name="cd_teleport">Teletransportar</string>
<string name="cd_selected">Seleccionado</string>
<string name="cd_leave_channel">Salir del canal</string>
<string name="cd_reachable_via_nostr">Accesible vía Nostr</string>
<string name="cd_offline_favorite">Favorito (sin conexión)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">Permisos</string>
<string name="grant_permissions">Otorgar permisos</string>
<string name="location_tracking_warning">bitchat NO rastrea tu ubicación</string>
<string name="geohash_people_header">PERSONAS</string>
<string name="nobody_around">nadie por aquí…</string>
<string name="you_suffix"> (tú)</string>
<string name="pan_zoom_instruction">desplaza y hace zoom para seleccionar un geohash</string>

View File

@ -72,7 +72,6 @@
<!-- سربرگ چت و دسترسی‌پذیری -->
<string name="chat_back">بازگشت</string>
<string name="chat_channel_prefix">کانال: %1$s</string>
<string name="chat_leave">خروج</string>
<string name="cd_nostr_reachable">قابل دسترس از طریق Nostr</string>
<string name="cd_unread_private_messages">پیام‌های خصوصی خوانده‌نشده</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">از طریق کانال‌های مبتنی بر geohash با افراد منطقهٔ خود ارتباط برقرار کنید. مِش را از طریق رله‌های عمومی اینترنت گسترش دهید.</string>
<string name="about_e2e_title">رمزگذاری سرتاسری</string>
<string name="about_e2e_desc">پیام‌های خصوصی رمزگذاری می‌شوند. پیام‌های کانال عمومی هستند.</string>
<string name="about_appearance">نما</string>
<string name="about_system">سامانه</string>
<string name="about_light">روشن</string>
<string name="about_dark">تیره</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">وضعیت Tor: %1$s، بوت‌استرپ %2$d%%</string>
<string name="about_last">آخرین: %1$s</string>
<string name="about_emergency_title">پاکسازی اضطراری داده</string>
<string name="about_emergency_tip">نکته: برای پاک کردن همهٔ داده‌های ذخیره‌شده — شامل پیام‌ها، کلیدها و تنظیمات — سه بار روی عنوان برنامه ضربه بزنید.</string>
<string name="about_debug_settings">تنظیمات اشکال‌زدایی</string>
<string name="about_footer">متن‌باز • حریم خصوصی در اولویت • غیرمتمرکز</string>
<string name="close_plain">بستن</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">باز کردن نقشه</string>
<string name="cd_remove_bookmark">حذف نشانک</string>
<string name="cd_teleport">انتقال</string>
<string name="cd_selected">انتخاب شد</string>
<string name="cd_leave_channel">خروج از کانال</string>
<string name="cd_reachable_via_nostr">قابل دسترس از طریق Nostr</string>
<string name="cd_offline_favorite">دلخواه (آفلاین)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">مجوزها</string>
<string name="grant_permissions">اعطای مجوزها</string>
<string name="location_tracking_warning">bitchat موقعیت شما را پیگیری نمی‌کند</string>
<string name="geohash_people_header">افراد</string>
<string name="nobody_around">کسی در اطراف نیست …</string>
<string name="you_suffix"> (شما)</string>
<string name="pan_zoom_instruction">برای انتخاب geohash، جابه‌جا و زوم کنید</string>

View File

@ -72,7 +72,6 @@
<!-- Header at accessibility -->
<string name="chat_back">bumalik</string>
<string name="chat_channel_prefix">channel: %1$s</string>
<string name="chat_leave">umalis</string>
<string name="cd_nostr_reachable">Maabot sa Nostr</string>
<string name="cd_unread_private_messages">Hindi nabasang pribadong mensahe</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">Makipagugnayan sa mga tao sa paligid gamit ang geohashbased na mga channel. Palawakin ang mesh sa pampublikong internet relays.</string>
<string name="about_e2e_title">EndtoEnd Encryption</string>
<string name="about_e2e_desc">Ang mga pribadong mensahe ay nakaencrypt. Ang mga mensahe sa channel ay publiko.</string>
<string name="about_appearance">hitsura</string>
<string name="about_system">system</string>
<string name="about_light">light</string>
<string name="about_dark">dark</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">katayuan ng Tor: %1$s, bootstrap %2$d%%</string>
<string name="about_last">Huli: %1$s</string>
<string name="about_emergency_title">Emergency Data Deletion</string>
<string name="about_emergency_tip">Tip: itap ang pamagat ng app nang 3 beses para burahin ang lahat ng data (mga mensahe, susi, setting).</string>
<string name="about_debug_settings">Debug Settings</string>
<string name="about_footer">Open Source • Privacy First • Desentralisado</string>
<string name="close_plain">Isara</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">Buksan ang mapa</string>
<string name="cd_remove_bookmark">Alisin ang bookmark</string>
<string name="cd_teleport">Teleport</string>
<string name="cd_selected">Napili</string>
<string name="cd_leave_channel">Umalis sa channel</string>
<string name="cd_reachable_via_nostr">Maabot sa Nostr</string>
<string name="cd_offline_favorite">Paborito (offline)</string>
@ -280,7 +276,6 @@
<string name="location_tracking_warning">HINDI sinusubaybayan ng bitchat ang lokasyon mo</string>
<string name="at_symbol">@</string>
<string name="channel_count_prefix"> · ⧉ </string>
<string name="geohash_people_header">TAO</string>
<string name="nobody_around">walang tao sa paligid…</string>
<string name="you_suffix"> (ikaw)</string>
<string name="pan_zoom_instruction">ipan at izoom para pumili ng geohash</string>

View File

@ -72,7 +72,6 @@
<!-- Entête de chat &amp; accessibilité -->
<string name="chat_back">retour</string>
<string name="chat_channel_prefix">canal : %1$s</string>
<string name="chat_leave">quitter</string>
<string name="cd_nostr_reachable">Joignable via Nostr</string>
<string name="cd_unread_private_messages">Messages privés non lus</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">Discute avec des personnes proches via des canaux basés sur geohash. Étends le mesh grâce à des relais internet publics.</string>
<string name="about_e2e_title">Chiffrement de bout en bout</string>
<string name="about_e2e_desc">Les messages privés sont chiffrés. Les messages de canal sont publics.</string>
<string name="about_appearance">apparence</string>
<string name="about_system">système</string>
<string name="about_light">clair</string>
<string name="about_dark">sombre</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">statut Tor : %1$s, bootstrap %2$d%%</string>
<string name="about_last">Dernier : %1$s</string>
<string name="about_emergency_title">Suppression durgence des données</string>
<string name="about_emergency_tip">Astuce : tapote 3 fois le titre de lapp pour supprimer toutes les données (messages, clés, paramètres).</string>
<string name="about_debug_settings">Paramètres de debug</string>
<string name="about_footer">Open Source • Privacy First • Décentralisé</string>
<string name="close_plain">Fermer</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">Ouvrir la carte</string>
<string name="cd_remove_bookmark">Retirer le signet</string>
<string name="cd_teleport">Téléporter</string>
<string name="cd_selected">Sélectionné</string>
<string name="cd_leave_channel">Quitter le canal</string>
<string name="cd_reachable_via_nostr">Joignable via Nostr</string>
<string name="cd_offline_favorite">Favori (horsligne)</string>
@ -281,7 +277,6 @@
<string name="location_tracking_warning">bitchat ne suit PAS ta position</string>
<string name="at_symbol">@</string>
<string name="channel_count_prefix"> · ⧉ </string>
<string name="geohash_people_header">PERSONNES</string>
<string name="nobody_around">personne aux alentours…</string>
<string name="you_suffix"> (toi)</string>
<string name="pan_zoom_instruction">déplacer et zoomer pour choisir un geohash</string>

View File

@ -72,7 +72,6 @@
<!-- चैट हेडर &amp; एक्सेसिबिलिटी -->
<string name="chat_back">वापस</string>
<string name="chat_channel_prefix">चैनल: %1$s</string>
<string name="chat_leave">छोड़ें</string>
<string name="cd_nostr_reachable">Nostr के माध्यम से उपलब्ध</string>
<string name="cd_unread_private_messages">अपठित निजी संदेश</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">geohash आधारित चैनलों के माध्यम से अपने आस‑पास के लोगों से जुड़ें। सार्वजनिक इंटरनेट रिले के माध्यम से मेष का विस्तार करें।</string>
<string name="about_e2e_title">एंड‑टू‑एंड एन्क्रिप्शन</string>
<string name="about_e2e_desc">निजी संदेश एन्क्रिप्टेड हैं। चैनल संदेश सार्वजनिक हैं।</string>
<string name="about_appearance">रूप</string>
<string name="about_system">सिस्टम</string>
<string name="about_light">लाइट</string>
<string name="about_dark">डार्क</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Tor स्थिति: %1$s, बूटस्ट्रैप %2$d%%</string>
<string name="about_last">अंतिम: %1$s</string>
<string name="about_emergency_title">आपातकालीन डेटा मिटाना</string>
<string name="about_emergency_tip">संकेत: सभी सहेजे डेटा संदेश, कुंजियाँ और सेटिंग्स सहित मिटाने के लिए ऐप शीर्षक पर तीन बार टैप करें।</string>
<string name="about_debug_settings">डिबग सेटिंग्स</string>
<string name="about_footer">ओपन सोर्स • गोपनीयता पहले • विकेन्द्रीकृत</string>
<string name="close_plain">बंद करें</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">मानचित्र खोलें</string>
<string name="cd_remove_bookmark">बुकमार्क हटाएँ</string>
<string name="cd_teleport">टेलीपोर्ट</string>
<string name="cd_selected">चयनित</string>
<string name="cd_leave_channel">चैनल छोड़ें</string>
<string name="cd_reachable_via_nostr">Nostr के माध्यम से उपलब्ध</string>
<string name="cd_offline_favorite">पसंदीदा (ऑफ़लाइन)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">अनुमतियाँ</string>
<string name="grant_permissions">अनुमतियाँ दें</string>
<string name="location_tracking_warning">bitchat आपकी लोकेशन ट्रैक नहीं करती</string>
<string name="geohash_people_header">लोग</string>
<string name="nobody_around">आस‑पास कोई नहीं…</string>
<string name="you_suffix"> (आप)</string>
<string name="pan_zoom_instruction">geohash चुनने के लिए पैन/ज़ूम करें</string>

View File

@ -72,7 +72,6 @@
<!-- Header chat &amp; aksesibilitas -->
<string name="chat_back">kembali</string>
<string name="chat_channel_prefix">Channel: %1$s</string>
<string name="chat_leave">keluar</string>
<string name="cd_nostr_reachable">Dapat dijangkau melalui Nostr</string>
<string name="cd_unread_private_messages">Pesan pribadi yang belum dibaca</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">Terhubung dengan orang-orang di area Anda melalui channel berbasis geohash. Perluas mesh melalui relay Internet publik.</string>
<string name="about_e2e_title">Enkripsi end-to-end</string>
<string name="about_e2e_desc">Pesan pribadi dienkripsi. Pesan channel bersifat publik.</string>
<string name="about_appearance">Tampilan</string>
<string name="about_system">Sistem</string>
<string name="about_light">Terang</string>
<string name="about_dark">Gelap</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Status Tor: %1$s, Bootstrap %2$d%%</string>
<string name="about_last">Terakhir: %1$s</string>
<string name="about_emergency_title">Hapus data darurat</string>
<string name="about_emergency_tip">Tips: Ketuk tiga kali pada judul aplikasi untuk menghapus semua data tersimpan termasuk pesan, kunci, dan pengaturan.</string>
<string name="about_debug_settings">Pengaturan debug</string>
<string name="about_footer">Sumber Terbuka • Privasi Pertama • Terdesentralisasi</string>
<string name="close_plain">Tutup</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">Buka peta</string>
<string name="cd_remove_bookmark">Hapus bookmark</string>
<string name="cd_teleport">Teleportasi</string>
<string name="cd_selected">Dipilih</string>
<string name="cd_leave_channel">Keluar dari channel</string>
<string name="cd_reachable_via_nostr">Dapat dijangkau melalui Nostr</string>
<string name="cd_offline_favorite">Favorit (offline)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">Izin</string>
<string name="grant_permissions">Berikan izin</string>
<string name="location_tracking_warning">bitchat TIDAK melacak lokasi Anda</string>
<string name="geohash_people_header">ORANG</string>
<string name="nobody_around">tidak ada orang di sekitar …</string>
<string name="you_suffix"> (Anda)</string>
<string name="pan_zoom_instruction">geser dan zoom untuk memilih geohash</string>

View File

@ -72,7 +72,6 @@
<!-- Intestazione chat e accessibilità -->
<string name="chat_back">indietro</string>
<string name="chat_channel_prefix">canale: %1$s</string>
<string name="chat_leave">esci</string>
<string name="cd_nostr_reachable">Raggiungibile via Nostr</string>
<string name="cd_unread_private_messages">Messaggi privati non letti</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">Connettiti con persone nella tua area usando canali basati su geohash. Estendi la rete mesh usando relay internet pubblici.</string>
<string name="about_e2e_title">Crittografia end-to-end</string>
<string name="about_e2e_desc">I messaggi privati sono crittografati. I messaggi dei canali sono pubblici.</string>
<string name="about_appearance">aspetto</string>
<string name="about_system">sistema</string>
<string name="about_light">chiaro</string>
<string name="about_dark">scuro</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Stato Tor: %1$s, bootstrap %2$d%%</string>
<string name="about_last">Ultimo: %1$s</string>
<string name="about_emergency_title">Eliminazione dati di emergenza</string>
<string name="about_emergency_tip">Suggerimento: fai triplo clic sul titolo dell\'app per eliminare in emergenza tutti i dati memorizzati, inclusi messaggi, chiavi e impostazioni.</string>
<string name="about_debug_settings">Impostazioni di debug</string>
<string name="about_footer">Open Source • Privacy First • Decentralizzato</string>
<string name="close_plain">Chiudi</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">Apri mappa</string>
<string name="cd_remove_bookmark">Rimuovi segnalibro</string>
<string name="cd_teleport">Teletrasporta</string>
<string name="cd_selected">Selezionato</string>
<string name="cd_leave_channel">Esci dal canale</string>
<string name="cd_reachable_via_nostr">Raggiungibile via Nostr</string>
<string name="cd_offline_favorite">Preferito offline</string>
@ -285,7 +281,6 @@
<string name="permissions_header">permessi</string>
<string name="grant_permissions">Concedi permessi</string>
<string name="location_tracking_warning">bitchat NON traccia la tua posizione</string>
<string name="geohash_people_header">PERSONE</string>
<string name="nobody_around">nessuno nei dintorni…</string>
<string name="you_suffix"> (tu)</string>
<string name="pan_zoom_instruction">scorri e ingrandisci per selezionare un geohash</string>

View File

@ -72,7 +72,6 @@
<!-- チャットヘッダー &amp; アクセシビリティ -->
<string name="chat_back">戻る</string>
<string name="chat_channel_prefix">チャンネル: %1$s</string>
<string name="chat_leave">退出</string>
<string name="cd_nostr_reachable">Nostr 経由で到達可能</string>
<string name="cd_unread_private_messages">未読のプライベートメッセージ</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">Geohash ベースのチャンネルで近くの人々とつながります。公開インターネットのリレーを介してメッシュを拡張します。</string>
<string name="about_e2e_title">エンドツーエンド暗号化</string>
<string name="about_e2e_desc">プライベートメッセージは暗号化されます。チャンネルメッセージは公開です。</string>
<string name="about_appearance">表示</string>
<string name="about_system">システム</string>
<string name="about_light">ライト</string>
<string name="about_dark">ダーク</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Tor ステータス: %1$s、ブートストラップ %2$d%%</string>
<string name="about_last">最終: %1$s</string>
<string name="about_emergency_title">緊急データ消去</string>
<string name="about_emergency_tip">ヒント: アプリタイトルを 3 回タップすると、メッセージ・鍵・設定を含む保存データをすべて消去します。</string>
<string name="about_debug_settings">デバッグ設定</string>
<string name="about_footer">オープンソース • プライバシーファースト • 分散型</string>
<string name="close_plain">閉じる</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">地図を開く</string>
<string name="cd_remove_bookmark">ブックマークを削除</string>
<string name="cd_teleport">テレポート</string>
<string name="cd_selected">選択済み</string>
<string name="cd_leave_channel">チャンネルから退出</string>
<string name="cd_reachable_via_nostr">Nostr 経由で到達可能</string>
<string name="cd_offline_favorite">お気に入り (オフライン)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">権限</string>
<string name="grant_permissions">権限を付与</string>
<string name="location_tracking_warning">bitchat はあなたの位置情報を追跡しません</string>
<string name="geohash_people_header">人々</string>
<string name="nobody_around">誰もいません…</string>
<string name="you_suffix"> (あなた)</string>
<string name="pan_zoom_instruction">パン/ズームして geohash を選択</string>

View File

@ -72,7 +72,6 @@
<!-- ჩათის სათაური &amp; ხელმისაწვდომობა -->
<string name="chat_back">უკან</string>
<string name="chat_channel_prefix">არხი: %1$s</string>
<string name="chat_leave">გასვლა</string>
<string name="cd_nostr_reachable">მისაწვდომია Nostr-ით</string>
<string name="cd_unread_private_messages">წაუკითხავი პირადი შეტყობინებები</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">დაუკავშირდით ახლომდებარე ხალხს geohash-ზე დაფუძნებული არხებით. გააფართოვეთ mesh საჯარო ინტერნეტ რილეებით.</string>
<string name="about_e2e_title">ბოლო-მდე დაშიფვრა</string>
<string name="about_e2e_desc">პირადი შეტყობინებები დაშიფრულია. არხის შეტყობინებები საჯაროა.</string>
<string name="about_appearance">გარეგნობა</string>
<string name="about_system">სისტემა</string>
<string name="about_light">ღია</string>
<string name="about_dark">მუქი</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Tor სტატუსი: %1$s, ჩატვირთვა %2$d%%</string>
<string name="about_last">ბოლო: %1$s</string>
<string name="about_emergency_title">სასწრაფო მონაცემების წაშლა</string>
<string name="about_emergency_tip">რჩევა: დააჭირეთ აპის სათაურს სამჯერ ყველა შენახული მონაცემის შეტყობინებების, გასაღებებისა და პარამეტრების წასაშლელად.</string>
<string name="about_debug_settings">დebug პარამეტრები</string>
<string name="about_footer">ღია კოდი • კონფიდენციალობა პირველია • დეცენტრალიზებული</string>
<string name="close_plain">დახურვა</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">რუკის გახსნა</string>
<string name="cd_remove_bookmark">სანიშნეს წაშლა</string>
<string name="cd_teleport">ტელეპორტი</string>
<string name="cd_selected">მონიშნული</string>
<string name="cd_leave_channel">არხიდან გამოსვლა</string>
<string name="cd_reachable_via_nostr">მისაწვდომია Nostr-ით</string>
<string name="cd_offline_favorite">რჩეული (ოფლაინ)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">ნებართვები</string>
<string name="grant_permissions">ნებართვების მინიჭება</string>
<string name="location_tracking_warning">bitchat არ აკონტროლებს თქვენს მდებარეობას</string>
<string name="geohash_people_header">ხალხი</string>
<string name="nobody_around">არავინ არის ახლოს…</string>
<string name="you_suffix"> (თქვენ)</string>
<string name="pan_zoom_instruction">პანორამირება/ზუმი geohash-ის ასარჩევად</string>

View File

@ -72,7 +72,6 @@
<!-- 채팅 헤더 &amp; 접근성 -->
<string name="chat_back">뒤로</string>
<string name="chat_channel_prefix">채널: %1$s</string>
<string name="chat_leave">나가기</string>
<string name="cd_nostr_reachable">Nostr로 연결 가능</string>
<string name="cd_unread_private_messages">읽지 않은 개인 메시지</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">geohash 기반 채널을 통해 주변 사람들과 연결하세요. 공용 인터넷 릴레이로 메쉬를 확장합니다.</string>
<string name="about_e2e_title">종단간 암호화</string>
<string name="about_e2e_desc">개인 메시지는 암호화됩니다. 채널 메시지는 공개입니다.</string>
<string name="about_appearance">모양</string>
<string name="about_system">시스템</string>
<string name="about_light">라이트</string>
<string name="about_dark">다크</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Tor 상태: %1$s, 부트스트랩 %2$d%%</string>
<string name="about_last">마지막: %1$s</string>
<string name="about_emergency_title">긴급 데이터 삭제</string>
<string name="about_emergency_tip">팁: 저장된 모든 데이터(메시지, 키, 설정 포함)를 삭제하려면 앱 제목을 세 번 탭하세요.</string>
<string name="about_debug_settings">디버그 설정</string>
<string name="about_footer">오픈 소스 • 프라이버시 우선 • 탈중앙</string>
<string name="close_plain">닫기</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">지도 열기</string>
<string name="cd_remove_bookmark">북마크 제거</string>
<string name="cd_teleport">텔레포트</string>
<string name="cd_selected">선택됨</string>
<string name="cd_leave_channel">채널 나가기</string>
<string name="cd_reachable_via_nostr">Nostr로 연결 가능</string>
<string name="cd_offline_favorite">즐겨찾기 (오프라인)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">권한</string>
<string name="grant_permissions">권한 허용</string>
<string name="location_tracking_warning">bitchat은 사용자의 위치를 추적하지 않습니다</string>
<string name="geohash_people_header">사람들</string>
<string name="nobody_around">주변에 아무도 없음 …</string>
<string name="you_suffix"> (나)</string>
<string name="pan_zoom_instruction">geohash를 선택하려면 이동하고 확대/축소하세요</string>

View File

@ -72,7 +72,6 @@
<!-- Lohan\'ny resaka &amp; fahafaha-miditra -->
<string name="chat_back">miverina</string>
<string name="chat_channel_prefix">fantsona: %1$s</string>
<string name="chat_leave">hiala</string>
<string name="cd_nostr_reachable">Azo tratrarina amin\'ny alalan\'ny Nostr</string>
<string name="cd_unread_private_messages">Hafatra manokana tsy voavaky</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">Mifandray amin\'ny olona eo amin\'ny faritra misy anao amin\'ny fampiasana fantsona mifototra amin\'ny geohash. Manitatra ny mesh amin\'ny fampiasana relay Internet ho an\'ny daholobe.</string>
<string name="about_e2e_title">Fandokoana Farany amin\'ny Farany</string>
<string name="about_e2e_desc">Voafono ny hafatra manokana. Hafatra ho an\'ny daholobe ny hafatra fantsona.</string>
<string name="about_appearance">endrika</string>
<string name="about_system">rafitra</string>
<string name="about_light">mazava</string>
<string name="about_dark">maizina</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Toe-javatra Tor: %1$s, bootstrap %2$d%%</string>
<string name="about_last">Farany: %1$s</string>
<string name="about_emergency_title">Famafana Angona Maika</string>
<string name="about_emergency_tip">Toro-hevitra: Tsindrio in-telo ny anaran\'ny fampiharana mba hamafana maika ny angona rehetra voatahiry ao anatin\'izany ny hafatra, ny lakile ary ny fametrahana.</string>
<string name="about_debug_settings">Fametrahana Debug</string>
<string name="about_footer">Loharanom-baovao misokatra • Fiainana manokana voalohany • Tsy misy foibe</string>
<string name="close_plain">Hanakatona</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">Hanokatra sarintany</string>
<string name="cd_remove_bookmark">Hanesorana bookmark</string>
<string name="cd_teleport">Hamindra toerana</string>
<string name="cd_selected">Voafidy</string>
<string name="cd_leave_channel">Hiala amin\'ny fantsona</string>
<string name="cd_reachable_via_nostr">Azo tratrarina amin\'ny alalan\'ny Nostr</string>
<string name="cd_offline_favorite">Ankafizina tsy an-tserasera</string>
@ -289,7 +285,6 @@
<string name="location_tracking_warning">Ny bitchat dia TSY manaraka ny toerananao</string>
<string name="at_symbol">@</string>
<string name="channel_count_prefix"> · ⧉ </string>
<string name="geohash_people_header">OLONA</string>
<string name="nobody_around">tsy misy olona manodidina...</string>
<string name="you_suffix"> (ianao)</string>
<string name="pan_zoom_instruction">ahetsika sy ataovy lehibe mba hifidianana geohash</string>

View File

@ -72,7 +72,6 @@
<!-- च्याट शीर्षक / पहुँचयोग्यता -->
<string name="chat_back">पछाडि</string>
<string name="chat_channel_prefix">च्यानल: %1$s</string>
<string name="chat_leave">छोड्नुहोस्</string>
<string name="cd_nostr_reachable">Nostr मार्फत पुग्न सकिने</string>
<string name="cd_unread_private_messages">नपढिएका निजी सन्देश</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">Geohash आधारित च्यानलमार्फत नजिकका मानिसहरूसँग जोडिनुहोस्। सार्वजनिक इन्टरनेट रिलेलाई प्रयोग गरेर मेष विस्तार गर्नुहोस्।</string>
<string name="about_e2e_title">एन्ड‑टु‑एन्ड इन्क्रिप्सन</string>
<string name="about_e2e_desc">निजी सन्देश इन्क्रिप्टेड हुन्छन्। च्यानल सन्देश सार्वजनिक हुन्छन्।</string>
<string name="about_appearance">देखावट</string>
<string name="about_system">सिस्टम</string>
<string name="about_light">हल्का</string>
<string name="about_dark">गाढा</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Tor स्थिति: %1$s, बुटस्ट्र्याप %2$d%%</string>
<string name="about_last">अन्तिम: %1$s</string>
<string name="about_emergency_title">आपतकालीन डेटा मेटाउने</string>
<string name="about_emergency_tip">सुझाव: एप शीर्षक तीन पटक ट्याप गरी सबै डेटा (सन्देश, कुञ्जी, सेटिङ) मेटाउनुहोस्।</string>
<string name="about_debug_settings">डिबग सेटिङ</string>
<string name="about_footer">Open Source • Privacy First • विकेन्द्रित</string>
<string name="close_plain">बन्द गर्नुहोस्</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">नक्सा खोल्नुहोस्</string>
<string name="cd_remove_bookmark">बुकमार्क हटाउनुहोस्</string>
<string name="cd_teleport">टेलिपोर्ट</string>
<string name="cd_selected">छानिएको</string>
<string name="cd_leave_channel">च्यानल छोड्नुहोस्</string>
<string name="cd_reachable_via_nostr">Nostr बाट पहुँचयोग्य</string>
<string name="cd_offline_favorite">मनपर्ने (अफलाइन)</string>
@ -280,7 +276,6 @@
<string name="location_tracking_warning">bitchat ले तपाईंको स्थान पछ्याउँदैन</string>
<string name="at_symbol">@</string>
<string name="channel_count_prefix"> · ⧉ </string>
<string name="geohash_people_header">मानिसहरू</string>
<string name="nobody_around">वरिपरि कोही छैन…</string>
<string name="you_suffix"> (तपाईं)</string>
<string name="pan_zoom_instruction">geohash छान्न प्यान र जुम गर्नुहोस्</string>

View File

@ -72,7 +72,6 @@
<!-- Chatkop &amp; toegankelijkheid -->
<string name="chat_back">terug</string>
<string name="chat_channel_prefix">kanaal: %1$s</string>
<string name="chat_leave">verlaten</string>
<string name="cd_nostr_reachable">Bereikbaar via Nostr</string>
<string name="cd_unread_private_messages">Ongelezen privéberichten</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">Maak contact met mensen in uw omgeving met geohash-gebaseerde kanalen. Breid het mesh uit met openbare internetrelays.</string>
<string name="about_e2e_title">End-to-end-versleuteling</string>
<string name="about_e2e_desc">Privéberichten zijn versleuteld. Kanaalberichten zijn openbaar.</string>
<string name="about_appearance">uiterlijk</string>
<string name="about_system">systeem</string>
<string name="about_light">licht</string>
<string name="about_dark">donker</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Tor-status: %1$s, bootstrap %2$d%%</string>
<string name="about_last">Laatste: %1$s</string>
<string name="about_emergency_title">Noodgegevensverwijdering</string>
<string name="about_emergency_tip">Tip: Driedubbel klik op de app-titel om alle opgeslagen gegevens inclusief berichten, sleutels en instellingen noodmatig te verwijderen.</string>
<string name="about_debug_settings">Debug-instellingen</string>
<string name="about_footer">Open Source • Privacy First • Gedecentraliseerd</string>
<string name="close_plain">Sluiten</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">Kaart openen</string>
<string name="cd_remove_bookmark">Bladwijzer verwijderen</string>
<string name="cd_teleport">Teleporteren</string>
<string name="cd_selected">Geselecteerd</string>
<string name="cd_leave_channel">Kanaal verlaten</string>
<string name="cd_reachable_via_nostr">Bereikbaar via Nostr</string>
<string name="cd_offline_favorite">Offline favoriet</string>
@ -285,7 +281,6 @@
<string name="permissions_header">toestemmingen</string>
<string name="grant_permissions">Toestemmingen verlenen</string>
<string name="location_tracking_warning">bitchat volgt NIET uw locatie</string>
<string name="geohash_people_header">PERSONEN</string>
<string name="nobody_around">niemand in de buurt…</string>
<string name="you_suffix"> (jij)</string>
<string name="pan_zoom_instruction">pan en zoom om een geohash te selecteren</string>

View File

@ -72,7 +72,6 @@
<!-- چیٹ ہیڈر &amp; رسائی پذیری -->
<string name="chat_back">واپس</string>
<string name="chat_channel_prefix">چینل: %1$s</string>
<string name="chat_leave">باہر آؤ</string>
<string name="cd_nostr_reachable">Nostr راہین پہنچ ممکن اے</string>
<string name="cd_unread_private_messages">انہ پڑھیا ذاتی پیغام</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">geohash بیسڈ چینلاں راہین اپنے علاقے دے لوکاں نال جڑو۔ پبلک انٹرنیٹ ریلے راہین میش نوں وسیع کرو۔</string>
<string name="about_e2e_title">اینڈ ٹو اینڈ انکرپشن</string>
<string name="about_e2e_desc">ذاتی پیغام انکرپٹڈ ہوندے نیں۔ چینل پیغام پبلک ہوندے نیں۔</string>
<string name="about_appearance">دِکھ</string>
<string name="about_system">سسٹم</string>
<string name="about_light">ہلکا</string>
<string name="about_dark">گھُپ</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Tor حالت: %1$s، بوٹ اسٹرَیپ %2$d%%</string>
<string name="about_last">آخری: %1$s</string>
<string name="about_emergency_title">ایمرجنسی ڈیٹا صاف</string>
<string name="about_emergency_tip">ٹِپ: سارے محفوظ ڈیٹا (پیغام، کُنجیاں، سیٹنگا) مٹاؤن لئی ایپ دے عنوان تے تین وار ٹیپ کرو۔</string>
<string name="about_debug_settings">ڈی بگ سیٹنگا</string>
<string name="about_footer">اوپن سورس • پرائیویسی پہلے • غیر مرکزی</string>
<string name="close_plain">بند کرو</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">نقشہ کھولو</string>
<string name="cd_remove_bookmark">بُک مارک ہٹاؤ</string>
<string name="cd_teleport">ٹیلپورٹ</string>
<string name="cd_selected">چُنے ہوۓ</string>
<string name="cd_leave_channel">چینل چھوڑو</string>
<string name="cd_reachable_via_nostr">Nostr راہین پہنچ ممکن اے</string>
<string name="cd_offline_favorite">پسندیدہ (آف لائن)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">اجازتاں</string>
<string name="grant_permissions">اجازت دو</string>
<string name="location_tracking_warning">bitchat توانڈی لوکیشن نئیں ٹریک کردا</string>
<string name="geohash_people_header">لوگ</string>
<string name="nobody_around">کوئی وی نیڑے نئیں …</string>
<string name="you_suffix"> (تُسی)</string>
<string name="pan_zoom_instruction">geohash چُنن لئی پین تے زوم کرو</string>

View File

@ -72,7 +72,6 @@
<!-- Cabeçalho do chat &amp; acessibilidade -->
<string name="chat_back">voltar</string>
<string name="chat_channel_prefix">Canal: %1$s</string>
<string name="chat_leave">sair</string>
<string name="cd_nostr_reachable">Acessível via Nostr</string>
<string name="cd_unread_private_messages">Mensagens privadas não lidas</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">Conecte-se com pessoas próximas através de canais baseados em geohash. Expanda a mesh por meio de relays públicos na internet.</string>
<string name="about_e2e_title">Criptografia de ponta a ponta</string>
<string name="about_e2e_desc">Mensagens privadas são criptografadas. Mensagens de canal são públicas.</string>
<string name="about_appearance">Aparência</string>
<string name="about_system">Sistema</string>
<string name="about_light">Claro</string>
<string name="about_dark">Escuro</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Status do Tor: %1$s, bootstrap %2$d%%</string>
<string name="about_last">Último: %1$s</string>
<string name="about_emergency_title">Limpeza de dados de emergência</string>
<string name="about_emergency_tip">Dica: Toque 3 vezes no título do app para apagar todos os dados salvos incluindo mensagens, chaves e configurações.</string>
<string name="about_debug_settings">Configurações de depuração</string>
<string name="about_footer">Código aberto • Privacidade em primeiro lugar • Descentralizado</string>
<string name="close_plain">Fechar</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">Abrir mapa</string>
<string name="cd_remove_bookmark">Remover favorito</string>
<string name="cd_teleport">Teletransportar</string>
<string name="cd_selected">Selecionado</string>
<string name="cd_leave_channel">Sair do canal</string>
<string name="cd_reachable_via_nostr">Acessível via Nostr</string>
<string name="cd_offline_favorite">Favorito (offline)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">Permissões</string>
<string name="grant_permissions">Conceder permissões</string>
<string name="location_tracking_warning">O bitchat NÃO rastreia sua localização</string>
<string name="geohash_people_header">PESSOAS</string>
<string name="nobody_around">ninguém por perto…</string>
<string name="you_suffix"> (você)</string>
<string name="pan_zoom_instruction">arraste/amplie para selecionar um geohash</string>

View File

@ -72,7 +72,6 @@
<!-- Cabeçalho do chat e acessibilidade -->
<string name="chat_back">voltar</string>
<string name="chat_channel_prefix">Canal: %1$s</string>
<string name="chat_leave">sair</string>
<string name="cd_nostr_reachable">Alcançável via Nostr</string>
<string name="cd_unread_private_messages">Mensagens privadas não lidas</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">Conecte-se com pessoas perto de si através de canais baseados em geohash. Estenda a mesh através de repetidores de internet pública.</string>
<string name="about_e2e_title">Encriptação ponto a ponto</string>
<string name="about_e2e_desc">Mensagens privadas são encriptadas. Mensagens de canal são públicas.</string>
<string name="about_appearance">Aparência</string>
<string name="about_system">Sistema</string>
<string name="about_light">Claro</string>
<string name="about_dark">Escuro</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Estado do Tor: %1$s, bootstrap %2$d%%</string>
<string name="about_last">Último: %1$s</string>
<string name="about_emergency_title">Limpeza de dados de emergência</string>
<string name="about_emergency_tip">Dica: Toque três vezes no título da aplicação para apagar todos os dados guardados incluindo mensagens, chaves e definições.</string>
<string name="about_debug_settings">Definições de depuração</string>
<string name="about_footer">Código aberto • Privacidade primeiro • Descentralizado</string>
<string name="close_plain">Fechar</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">Abrir mapa</string>
<string name="cd_remove_bookmark">Remover marcador</string>
<string name="cd_teleport">Teletransportar</string>
<string name="cd_selected">Selecionado</string>
<string name="cd_leave_channel">Sair do canal</string>
<string name="cd_reachable_via_nostr">Alcançável via Nostr</string>
<string name="cd_offline_favorite">Favorito (offline)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">Permissões</string>
<string name="grant_permissions">Conceder permissões</string>
<string name="location_tracking_warning">O bitchat NÃO rastreia a sua localização</string>
<string name="geohash_people_header">PESSOAS</string>
<string name="nobody_around">ninguém por perto…</string>
<string name="you_suffix"> (você)</string>
<string name="pan_zoom_instruction">arraste e amplie para selecionar um geohash</string>

View File

@ -64,7 +64,6 @@
<string name="cd_add_bookmark">Добавить закладку</string>
<string name="chat_back">назад</string>
<string name="chat_channel_prefix">канал: %1$s</string>
<string name="chat_leave">выйти</string>
<string name="cd_nostr_reachable">Доступен через Nostr</string>
<string name="cd_unread_private_messages">Непрочитанные личные</string>
@ -92,7 +91,6 @@
<string name="about_online_geohash_desc">Общайся с людьми поблизости через каналы на основе geohash. Расширяй mesh через публичные ретрансляторы.</string>
<string name="about_e2e_title">Сквозное шифрование</string>
<string name="about_e2e_desc">Личные сообщения — зашифрованы. Канальные — публичны.</string>
<string name="about_appearance">оформление</string>
<string name="about_system">система</string>
<string name="about_light">светлая</string>
<string name="about_dark">тёмная</string>
@ -116,7 +114,6 @@
<string name="about_tor_status">статус Tor: %1$s, загрузка %2$d%%</string>
<string name="about_last">Последнее: %1$s</string>
<string name="about_emergency_title">Экстренное удаление данных</string>
<string name="about_emergency_tip">Совет: тройной тап по заголовку — удалить все данные (сообщения, ключи, настройки).</string>
<string name="about_debug_settings">Настройки отладки</string>
<string name="about_footer">Open Source • Privacy First • Децентрализация</string>
<string name="close_plain">Закрыть</string>
@ -135,7 +132,6 @@
<string name="cd_open_map">Открыть карту</string>
<string name="cd_remove_bookmark">Удалить закладку</string>
<string name="cd_teleport">Телепорт</string>
<string name="cd_selected">Выбрано</string>
<string name="cd_leave_channel">Покинуть канал</string>
<string name="cd_reachable_via_nostr">Доступен через Nostr</string>
<string name="cd_offline_favorite">Избранное (оффлайн)</string>
@ -264,7 +260,6 @@
<string name="location_tracking_warning">bitchat НЕ отслеживает вашу геопозицию</string>
<string name="at_symbol">@</string>
<string name="channel_count_prefix"> · ⧉ </string>
<string name="geohash_people_header">ЛЮДИ</string>
<string name="nobody_around">никого рядом…</string>
<string name="you_suffix"> (вы)</string>
<string name="pan_zoom_instruction">прокрутите/масштабируйте для выбора geohash</string>

View File

@ -64,7 +64,6 @@
<string name="cd_add_bookmark">Lägg till bokmärke</string>
<string name="chat_back">tillbaka</string>
<string name="chat_channel_prefix">kanal: %1$s</string>
<string name="chat_leave">lämna</string>
<string name="cd_nostr_reachable">Nås via Nostr</string>
<string name="cd_unread_private_messages">Olästa privata meddelanden</string>
@ -92,7 +91,6 @@
<string name="about_online_geohash_desc">Anslut med personer i närheten via geohashkanaler. Utöka mesh via publika internetreläer.</string>
<string name="about_e2e_title">Ändatilländakryptering</string>
<string name="about_e2e_desc">Privata meddelanden är krypterade. Kanalmeddelanden är publika.</string>
<string name="about_appearance">utseende</string>
<string name="about_system">system</string>
<string name="about_light">ljus</string>
<string name="about_dark">mörk</string>
@ -116,7 +114,6 @@
<string name="about_tor_status">Torstatus: %1$s, bootstrap %2$d%%</string>
<string name="about_last">Senast: %1$s</string>
<string name="about_emergency_title">Nödradering av data</string>
<string name="about_emergency_tip">Tips: tryck tre gånger på appens titel för att radera alla data (meddelanden, nycklar, inställningar).</string>
<string name="about_debug_settings">Felsökningsinställningar</string>
<string name="about_footer">Open Source • Privacy First • Decentraliserad</string>
<string name="close_plain">Stäng</string>
@ -135,7 +132,6 @@
<string name="cd_open_map">Öppna karta</string>
<string name="cd_remove_bookmark">Ta bort bokmärke</string>
<string name="cd_teleport">Teleportera</string>
<string name="cd_selected">Vald</string>
<string name="cd_leave_channel">Lämna kanal</string>
<string name="cd_reachable_via_nostr">Nås via Nostr</string>
<string name="cd_offline_favorite">Favorit (offline)</string>
@ -264,7 +260,6 @@
<string name="location_tracking_warning">bitchat spårar INTE din plats</string>
<string name="at_symbol">@</string>
<string name="channel_count_prefix"> · ⧉ </string>
<string name="geohash_people_header">PERSONER</string>
<string name="nobody_around">ingen i närheten…</string>
<string name="you_suffix"> (du)</string>
<string name="pan_zoom_instruction">panorera och zooma för att välja geohash</string>

View File

@ -72,7 +72,6 @@
<!-- ส่วนหัวแชท &amp; การช่วยสำหรับการเข้าถึง -->
<string name="chat_back">กลับ</string>
<string name="chat_channel_prefix">ช่อง: %1$s</string>
<string name="chat_leave">ออก</string>
<string name="cd_nostr_reachable">ติดต่อได้ผ่าน Nostr</string>
<string name="cd_unread_private_messages">ข้อความส่วนตัวยังไม่ได้อ่าน</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">เชื่อมต่อกับผู้คนใกล้คุณผ่านช่องที่อ้างอิง geohash ขยายเมชผ่านรีเลย์อินเทอร์เน็ตสาธารณะ</string>
<string name="about_e2e_title">การเข้ารหัสแบบปลายทางถึงปลายทาง</string>
<string name="about_e2e_desc">ข้อความส่วนตัวถูกเข้ารหัส ข้อความในช่องเป็นสาธารณะ</string>
<string name="about_appearance">ลักษณะ</string>
<string name="about_system">ระบบ</string>
<string name="about_light">สว่าง</string>
<string name="about_dark">มืด</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">สถานะ Tor: %1$s, การบูต %2$d%%</string>
<string name="about_last">ล่าสุด: %1$s</string>
<string name="about_emergency_title">ลบข้อมูลฉุกเฉิน</string>
<string name="about_emergency_tip">เคล็ดลับ: แตะชื่อแอปสามครั้งเพื่อลบข้อมูลที่บันทึกทั้งหมด รวมทั้งข้อความ กุญแจ และการตั้งค่า</string>
<string name="about_debug_settings">การตั้งค่าดีบัก</string>
<string name="about_footer">โอเพนซอร์ส • ความเป็นส่วนตัวมาก่อน • กระจายศูนย์</string>
<string name="close_plain">ปิด</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">เปิดแผนที่</string>
<string name="cd_remove_bookmark">เอาที่คั่นหน้าออก</string>
<string name="cd_teleport">เทเลพอร์ต</string>
<string name="cd_selected">ที่เลือก</string>
<string name="cd_leave_channel">ออกจากช่อง</string>
<string name="cd_reachable_via_nostr">ติดต่อได้ผ่าน Nostr</string>
<string name="cd_offline_favorite">รายการโปรด (ออฟไลน์)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">สิทธิ์</string>
<string name="grant_permissions">ให้สิทธิ์</string>
<string name="location_tracking_warning">bitchat ไม่ติดตามตำแหน่งของคุณ</string>
<string name="geohash_people_header">ผู้คน</string>
<string name="nobody_around">ไม่มีใครอยู่ใกล้…</string>
<string name="you_suffix"> (คุณ)</string>
<string name="pan_zoom_instruction">ลาก/ซูมเพื่อเลือก geohash</string>

View File

@ -64,7 +64,6 @@
<string name="cd_add_bookmark">Yer imi ekle</string>
<string name="chat_back">geri</string>
<string name="chat_channel_prefix">kanal: %1$s</string>
<string name="chat_leave">ayrıl</string>
<string name="cd_nostr_reachable">Nostr üzerinden ulaşılabilir</string>
<string name="cd_unread_private_messages">Okunmamış özel mesaj</string>
@ -92,7 +91,6 @@
<string name="about_online_geohash_desc">Geohash tabanlı kanallarla yakınındaki insanlarla bağlantı kur. Herkese açık internet röleleriyle meshi genişlet.</string>
<string name="about_e2e_title">Uçtan Uca Şifreleme</string>
<string name="about_e2e_desc">Özel mesajlar şifrelidir. Kanal mesajları herkese açıktır.</string>
<string name="about_appearance">görünüm</string>
<string name="about_system">sistem</string>
<string name="about_light">ık</string>
<string name="about_dark">koyu</string>
@ -116,7 +114,6 @@
<string name="about_tor_status">Tor durumu: %1$s, önyükleme %2$d%%</string>
<string name="about_last">Son: %1$s</string>
<string name="about_emergency_title">Acil veri silme</string>
<string name="about_emergency_tip">İpucu: tüm verileri silmek için uygulama başlığına üç kez dokun (mesajlar, anahtarlar, ayarlar).</string>
<string name="about_debug_settings">Hata ayıklama ayarları</string>
<string name="about_footer">Open Source • Privacy First • Merkezsiz</string>
<string name="close_plain">Kapat</string>
@ -135,7 +132,6 @@
<string name="cd_open_map">Haritayı</string>
<string name="cd_remove_bookmark">Yer imini kaldır</string>
<string name="cd_teleport">Teleport</string>
<string name="cd_selected">Seçildi</string>
<string name="cd_leave_channel">Kanaldan ayrıl</string>
<string name="cd_reachable_via_nostr">Nostr üzerinden erişilebilir</string>
<string name="cd_offline_favorite">Favori (çevrimdışı)</string>
@ -264,7 +260,6 @@
<string name="location_tracking_warning">bitchat konumunu takip etmez</string>
<string name="at_symbol">@</string>
<string name="channel_count_prefix"> · ⧉ </string>
<string name="geohash_people_header">KİŞİLER</string>
<string name="nobody_around">yakında kimse yok…</string>
<string name="you_suffix"> (sen)</string>
<string name="pan_zoom_instruction">geohash seçmek için kaydır/zoom yap</string>

View File

@ -72,7 +72,6 @@
<!-- چیٹ ہیڈر اور رسائی -->
<string name="chat_back">واپس</string>
<string name="chat_channel_prefix">چینل: %1$s</string>
<string name="chat_leave">چھوڑیں</string>
<string name="cd_nostr_reachable">Nostr کے ذریعے رسائی</string>
<string name="cd_unread_private_messages">غیر پڑھے ہوئے نجی پیغامات</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">geohash پر مبنی چینلز کے ذریعے اپنے قریب کے لوگوں سے جڑیں۔ عوامی انٹرنیٹ ریلے کے ذریعے میش کو پھیلائیں۔</string>
<string name="about_e2e_title">اینڈ‑ٹو‑اینڈ انکرپشن</string>
<string name="about_e2e_desc">نجی پیغامات انکرپٹڈ ہیں۔ چینل پیغامات عوامی ہیں۔</string>
<string name="about_appearance">ظاہری شکل</string>
<string name="about_system">سسٹم</string>
<string name="about_light">ہلکا</string>
<string name="about_dark">گہرا</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Tor کی کیفیت: %1$s، بوٹ اسٹریپ %2$d%%</string>
<string name="about_last">آخری: %1$s</string>
<string name="about_emergency_title">ہنگامی ڈیٹا صافی</string>
<string name="about_emergency_tip">تجویز: تمام محفوظ شدہ ڈیٹا پیغامات، کلیدیں اور سیٹنگز سمیت صاف کرنے کے لیے ایپ کے ٹائٹل پر تین بار ٹیپ کریں۔</string>
<string name="about_debug_settings">ڈیبگ سیٹنگز</string>
<string name="about_footer">اوپن سورس • پرائیویسی پہلے • غیر مرکزی</string>
<string name="close_plain">بند کریں</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">نقشہ کھولیں</string>
<string name="cd_remove_bookmark">بک مارک ہٹائیں</string>
<string name="cd_teleport">ٹیلی پورٹ</string>
<string name="cd_selected">منتخب</string>
<string name="cd_leave_channel">چینل چھوڑیں</string>
<string name="cd_reachable_via_nostr">Nostr کے ذریعے رسائی</string>
<string name="cd_offline_favorite">پسندیدہ (آف لائن)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">اجازات</string>
<string name="grant_permissions">اجازات دیں</string>
<string name="location_tracking_warning">bitchat آپ کا مقام ٹریک نہیں کرتا</string>
<string name="geohash_people_header">لوگ</string>
<string name="nobody_around">یہاں کوئی نہیں…</string>
<string name="you_suffix"> (آپ)</string>
<string name="pan_zoom_instruction">geohash منتخب کرنے کے لیے پین/زوم کریں</string>

View File

@ -72,7 +72,6 @@
<!-- Header trò chuyện &amp; khả năng truy cập -->
<string name="chat_back">quay lại</string>
<string name="chat_channel_prefix">Kênh: %1$s</string>
<string name="chat_leave">rời khỏi</string>
<string name="cd_nostr_reachable">Có thể tiếp cận qua Nostr</string>
<string name="cd_unread_private_messages">Tin nhắn riêng chưa đọc</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">Kết nối với những người trong khu vực của bạn qua các kênh dựa trên geohash. Mở rộng mesh qua các relay Internet công cộng.</string>
<string name="about_e2e_title">Mã hóa đầu cuối</string>
<string name="about_e2e_desc">Tin nhắn riêng được mã hóa. Tin nhắn kênh là công khai.</string>
<string name="about_appearance">Giao diện</string>
<string name="about_system">Hệ thống</string>
<string name="about_light">Sáng</string>
<string name="about_dark">Tối</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Trạng thái Tor: %1$s, Bootstrap %2$d%%</string>
<string name="about_last">Cuối cùng: %1$s</string>
<string name="about_emergency_title">Xóa dữ liệu khẩn cấp</string>
<string name="about_emergency_tip">Mẹo: Nhấn ba lần vào tiêu đề ứng dụng để xóa tất cả dữ liệu đã lưu bao gồm tin nhắn, khóa và cài đặt.</string>
<string name="about_debug_settings">Cài đặt debug</string>
<string name="about_footer">Mã nguồn mở • Quyền riêng tư trước tiên • Phi tập trung</string>
<string name="close_plain">Đóng</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">Mở bản đồ</string>
<string name="cd_remove_bookmark">Xóa bookmark</string>
<string name="cd_teleport">Dịch chuyển</string>
<string name="cd_selected">Đã chọn</string>
<string name="cd_leave_channel">Rời khỏi kênh</string>
<string name="cd_reachable_via_nostr">Có thể tiếp cận qua Nostr</string>
<string name="cd_offline_favorite">Yêu thích (ngoại tuyến)</string>
@ -285,7 +281,6 @@
<string name="permissions_header">Quyền</string>
<string name="grant_permissions">Cấp quyền</string>
<string name="location_tracking_warning">bitchat KHÔNG theo dõi vị trí của bạn</string>
<string name="geohash_people_header">MỌI NGƯỜI</string>
<string name="nobody_around">không có ai xung quanh …</string>
<string name="you_suffix"> (bạn)</string>
<string name="pan_zoom_instruction">di chuyển và zoom để chọn geohash</string>

View File

@ -72,7 +72,6 @@
<!-- 聊天头部 / 可访问性 -->
<string name="chat_back">返回</string>
<string name="chat_channel_prefix">频道:%1$s</string>
<string name="chat_leave">离开</string>
<string name="cd_nostr_reachable">可通过 Nostr 联系</string>
<string name="cd_unread_private_messages">未读私信</string>
@ -102,7 +101,6 @@
<string name="about_online_geohash_desc">使用基于 geohash 的频道与附近的人交流。通过公共互联网中继扩展 mesh。</string>
<string name="about_e2e_title">端到端加密</string>
<string name="about_e2e_desc">私信加密;频道消息为公开。</string>
<string name="about_appearance">外观</string>
<string name="about_system">系统</string>
<string name="about_light">浅色</string>
<string name="about_dark">深色</string>
@ -126,7 +124,6 @@
<string name="about_tor_status">Tor 状态:%1$s引导 %2$d%%</string>
<string name="about_last">最近:%1$s</string>
<string name="about_emergency_title">紧急数据删除</string>
<string name="about_emergency_tip">提示:三击应用标题以删除所有数据,包括消息、密钥和设置。</string>
<string name="about_debug_settings">调试设置</string>
<string name="about_footer">Open Source • Privacy First • 去中心化</string>
<string name="close_plain">关闭</string>
@ -146,7 +143,6 @@
<string name="cd_open_map">打开地图</string>
<string name="cd_remove_bookmark">移除书签</string>
<string name="cd_teleport">传送</string>
<string name="cd_selected">已选择</string>
<string name="cd_leave_channel">离开频道</string>
<string name="cd_reachable_via_nostr">可通过 Nostr 联系</string>
<string name="cd_offline_favorite">收藏(离线)</string>
@ -280,7 +276,6 @@
<string name="location_tracking_warning">bitchat 不会跟踪你的位置</string>
<string name="at_symbol">@</string>
<string name="channel_count_prefix"> · ⧉ </string>
<string name="geohash_people_header">成员</string>
<string name="nobody_around">附近无人…</string>
<string name="you_suffix"> (你)</string>
<string name="pan_zoom_instruction">拖动/缩放以选择 geohash</string>

View File

@ -73,7 +73,6 @@
<!-- Chat header &amp; accessibility -->
<string name="chat_back">back</string>
<string name="chat_channel_prefix">channel: %1$s</string>
<string name="chat_leave">leave</string>
<string name="cd_nostr_reachable">Nostr reachable</string>
<string name="cd_unread_private_messages">Unread private messages</string>
@ -131,15 +130,10 @@
<string name="about_section_settings">Settings</string>
<!-- About sheet: feature list -->
<string name="about_offline_comm_title">Offline Communication</string>
<string name="about_offline_comm_desc">Chat over a Bluetooth mesh with no internet and no servers. Messages relay through nearby devices to extend range.</string>
<string name="about_local_channels_title">Local Channels</string>
<string name="about_local_channels_desc">Geohash channels connect you with people nearby, extending the mesh over public relays.</string>
<string name="about_no_tracking_title">No Tracking</string>
<string name="about_no_tracking_desc">No servers, accounts, or data collection.</string>
<string name="about_ephemeral_title">Ephemeral Identity</string>
<string name="about_ephemeral_desc">A new peer ID is generated regularly.</string>
<string name="about_panic_title">Panic Mode</string>
<string name="about_panic_desc">Triple-tap the logo to instantly clear all data.</string>
<!-- About sheet: security warning -->
@ -153,13 +147,12 @@
<string name="about_tor_connected">Connected (%1$d%%)</string>
<string name="about_tor_disconnected">Disconnected</string>
<string name="about_offline_mesh_title">Offline Mesh Chat</string>
<string name="about_offline_mesh_desc">Communicate directly via Bluetooth LE without internet or servers. Messages relay through nearby devices to extend range.</string>
<string name="about_online_geohash_title">Online Geohash Channels</string>
<string name="about_online_geohash_desc">Connect with people in your area using geohash-based channels. Extend the mesh using public internet relays.</string>
<string name="about_offline_mesh_title">Offline Communication</string>
<string name="about_offline_mesh_desc">Chat over a Bluetooth mesh with no internet and no servers. Messages relay through nearby devices to extend range.</string>
<string name="about_online_geohash_title">Local Channels</string>
<string name="about_online_geohash_desc">Geohash channels connect you with people nearby, extending the mesh over public relays.</string>
<string name="about_e2e_title">End-to-End Encryption</string>
<string name="about_e2e_desc">Private messages are encrypted. Channel messages are public.</string>
<string name="about_appearance">appearance</string>
<string name="about_system">system</string>
<string name="about_light">light</string>
<string name="about_dark">dark</string>
@ -182,8 +175,7 @@
<string name="about_tor_route">route internet over tor for enhanced privacy.</string>
<string name="about_tor_status">tor Status: %1$s, bootstrap %2$d%%</string>
<string name="about_last">Last: %1$s</string>
<string name="about_emergency_title">Emergency Data Deletion</string>
<string name="about_emergency_tip">Tip: Triple-click the app title to emergency delete all stored data including messages, keys, and settings.</string>
<string name="about_emergency_title">Panic Mode</string>
<string name="about_debug_settings">Debug Settings</string>
<string name="about_footer">Open Source • Privacy First • Decentralized</string>
<string name="close_plain">Close</string>
@ -204,7 +196,6 @@
<string name="cd_open_map">Open map</string>
<string name="cd_remove_bookmark">Remove bookmark</string>
<string name="cd_teleport">Teleport</string>
<string name="cd_selected">Selected</string>
<string name="notification_action_quit_bitchat">Quit bitchat</string>
<string name="about_background_title">run in background</string>
<string name="about_background_desc">keep mesh active when app is closed (foreground service)</string>
@ -260,19 +251,15 @@
<string name="location_channels_desc">chat with people near you using geohash channels. only a coarse geohash is shared, never exact gps. do not screenshot or share this screen to protect your privacy.</string>
<!-- Location channels sheet: sections and Tor routing -->
<string name="section_bookmarked">Bookmarked</string>
<string name="section_nearby">Nearby</string>
<string name="location_tor_routing_title">Tor Routing</string>
<string name="location_tor_routing_desc">Hides your IP for location channels.</string>
<string name="badge_recommended">Recommended</string>
<string name="remove_location_access">Remove location access</string>
<!-- People sheet -->
<string name="people_count_title">People (%1$d)</string>
<string name="section_on_location">On location</string>
<string name="section_teleported_in">Teleported in</string>
<string name="section_channels">Channels</string>
<string name="section_mesh">Mesh</string>
<string name="grant_location_permission">grant location permission</string>
<string name="location_permission_denied">location permission denied. enable in settings to use location channels.</string>
@ -284,7 +271,7 @@
<string name="geohash_placeholder">geohash</string>
<string name="invalid_geohash">invalid geohash</string>
<string name="teleport">teleport</string>
<string name="disable_location_services">disable location services</string>
<string name="disable_location_services">Remove location access</string>
<string name="enable_location_services">enable location services</string>
<string name="mesh_label">mesh</string>
<string name="location_level_block">block</string>
@ -433,7 +420,6 @@
<string name="at_symbol">@</string>
<string name="cd_open_about">Open About</string>
<string name="channel_count_prefix"> · ⧉ </string>
<string name="geohash_people_header">PEOPLE</string>
<string name="nobody_around">nobody around...</string>
<string name="you_suffix"> (you)</string>
<string name="pan_zoom_instruction">pan and zoom to select a geohash</string>

View File

@ -12,7 +12,14 @@ import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
/**
* Runs under Robolectric because URL detection in message bodies goes through
* `android.util.Patterns.WEB_URL`, which is null on a bare JVM.
*/
@RunWith(RobolectricTestRunner::class)
class ChatUIUtilsTest {
private val timeFormatter = SimpleDateFormat("HH:mm:ss", Locale.ROOT).apply {
timeZone = java.util.TimeZone.getTimeZone("UTC")
@ -226,7 +233,7 @@ class ChatUIUtilsTest {
val sender = formatTextMessageSender(
message = message("hi", sender = "carol#04af"),
currentUserNickname = "bob",
meshService = FakeMeshServiceIds.stub(),
myPeerID = "peer-me",
palette = palette,
)
@ -246,7 +253,7 @@ class ChatUIUtilsTest {
val other = formatTextMessageSender(
message = message("hi", sender = "carol#04af"),
currentUserNickname = "bob",
meshService = FakeMeshServiceIds.stub(),
myPeerID = "peer-me",
palette = palette,
)
assertEquals(1, other.getStringAnnotations("nickname_click", 0, other.length).size)
@ -254,7 +261,7 @@ class ChatUIUtilsTest {
val mine = formatTextMessageSender(
message = message("hi", sender = "bob"),
currentUserNickname = "bob",
meshService = FakeMeshServiceIds.stub(),
myPeerID = "peer-me",
palette = palette,
)
assertTrue(mine.getStringAnnotations("nickname_click", 0, mine.length).isEmpty())

View File

@ -0,0 +1,152 @@
package com.bitchat.android.ui
import androidx.compose.ui.unit.dp
import com.bitchat.android.model.BitchatMessage
import java.util.Date
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
/**
* Grouping decides whether a message repeats its author's name. Getting it wrong either spams
* the transcript with redundant labels or, worse, silently attributes one person's message to
* another hence the emphasis on the negative cases here.
*/
class MessageGroupingTest {
private val base = 1_700_000_000_000L
private fun message(
sender: String = "alice",
senderPeerId: String? = "peer-alice",
offsetMs: Long = 0L,
isPrivate: Boolean = false,
channel: String? = null,
content: String = "hello",
) = BitchatMessage(
sender = sender,
content = content,
timestamp = Date(base + offsetMs),
isPrivate = isPrivate,
senderPeerID = senderPeerId,
channel = channel,
)
@Test
fun `first message in a list never groups`() {
assertFalse(MessageGrouping.shouldGroup(previous = null, current = message()))
}
@Test
fun `consecutive messages from the same peer group`() {
val first = message(offsetMs = 0)
val second = message(offsetMs = 30_000)
assertTrue(MessageGrouping.shouldGroup(first, second))
}
@Test
fun `messages from different peers do not group`() {
val first = message(sender = "alice", senderPeerId = "peer-alice")
val second = message(sender = "bob", senderPeerId = "peer-bob", offsetMs = 1_000)
assertFalse(MessageGrouping.shouldGroup(first, second))
}
@Test
fun `same nickname but different peer id does not group`() {
// Two people can pick the same nickname; peer ID is the authority.
val first = message(sender = "alice", senderPeerId = "peer-one")
val second = message(sender = "alice", senderPeerId = "peer-two", offsetMs = 1_000)
assertFalse(MessageGrouping.shouldGroup(first, second))
}
@Test
fun `falls back to display name when peer ids are unavailable`() {
val first = message(sender = "alice#04af", senderPeerId = null)
val second = message(sender = "alice#04af", senderPeerId = null, offsetMs = 1_000)
val other = message(sender = "bob#1122", senderPeerId = null, offsetMs = 2_000)
assertTrue(MessageGrouping.shouldGroup(first, second))
assertFalse(MessageGrouping.shouldGroup(second, other))
}
@Test
fun `messages outside the grouping window start a new group`() {
val first = message(offsetMs = 0)
val justInside = message(offsetMs = MessageGrouping.GROUPING_WINDOW_MS)
val justOutside = message(offsetMs = MessageGrouping.GROUPING_WINDOW_MS + 1)
assertTrue(MessageGrouping.shouldGroup(first, justInside))
assertFalse(MessageGrouping.shouldGroup(first, justOutside))
}
@Test
fun `out of order timestamps do not group`() {
// Mesh delivery can surface messages out of order; a negative delta means we cannot
// reason about adjacency, so fall back to showing the sender.
val later = message(offsetMs = 60_000)
val earlier = message(offsetMs = 0)
assertFalse(MessageGrouping.shouldGroup(later, earlier))
}
@Test
fun `system messages never group in either direction`() {
val system = message(sender = "system", senderPeerId = null, content = "tor started")
val user = message(offsetMs = 1_000)
assertFalse(MessageGrouping.shouldGroup(system, user))
assertFalse(MessageGrouping.shouldGroup(user, system.copyWithOffset(2_000)))
assertFalse(MessageGrouping.shouldGroup(system, system.copyWithOffset(1_000)))
}
@Test
fun `grouping does not cross the public private boundary`() {
val public = message(isPrivate = false)
val private = message(isPrivate = true, offsetMs = 1_000)
assertFalse(MessageGrouping.shouldGroup(public, private))
}
@Test
fun `grouping does not cross channels`() {
val inGeneral = message(channel = "#general")
val inRandom = message(channel = "#random", offsetMs = 1_000)
val inNoChannel = message(channel = null, offsetMs = 2_000)
assertFalse(MessageGrouping.shouldGroup(inGeneral, inRandom))
assertFalse(MessageGrouping.shouldGroup(inGeneral, inNoChannel))
}
@Test
fun `peer id comparison ignores case`() {
val first = message(senderPeerId = "PEER-Alice")
val second = message(senderPeerId = "peer-alice", offsetMs = 1_000)
assertTrue(MessageGrouping.shouldGroup(first, second))
}
// MARK: - Spacing
@Test
fun `spacing is zero for the very first row`() {
assertEquals(0.dp, MessageGrouping.topSpacingFor(isGrouped = false, isFirstInList = true))
assertEquals(0.dp, MessageGrouping.topSpacingFor(isGrouped = true, isFirstInList = true))
}
@Test
fun `grouped rows sit tighter than the start of a new group`() {
val grouped = MessageGrouping.topSpacingFor(isGrouped = true, isFirstInList = false)
val newGroup = MessageGrouping.topSpacingFor(isGrouped = false, isFirstInList = false)
assertEquals(MessageGrouping.GROUPED_SPACING, grouped)
assertEquals(MessageGrouping.NEW_GROUP_SPACING, newGroup)
assertTrue("a new speaker needs more air than a continuation", newGroup > grouped)
}
private fun BitchatMessage.copyWithOffset(offsetMs: Long) =
copy(timestamp = Date(base + offsetMs))
}