Compare commits

...

8 Commits

Author SHA1 Message Date
Greyson Parrelli
6b60a22879 Bump version to 7.2.4 2024-04-03 13:32:38 -04:00
Greyson Parrelli
bbded8caa8 Update translations and other static files. 2024-04-03 13:32:08 -04:00
Greyson Parrelli
3a6352d2a3 Don't show profile name in parens if it's the same as display name. 2024-04-03 13:19:37 -04:00
Greyson Parrelli
8293d6bc4c Allow last-name-only nicknames to be saved. 2024-04-03 11:54:07 -04:00
Greyson Parrelli
56bdb28c2f Fix bug around entering text in the middle of a full note.
There's likely other weirdness, but this at least addresses the most
commond variation, where entering text in the middle of a full note
would start chopping stuff off the end.
2024-04-03 11:20:35 -04:00
Greyson Parrelli
b081fb1e13 Improve recipient shortname selection. 2024-04-03 10:45:47 -04:00
Greyson Parrelli
58c1f64dfe Allow familyName-only nicknames in storage service. 2024-04-03 10:44:04 -04:00
Greyson Parrelli
92b7147dcd Always take the remote nickname. 2024-04-03 10:39:43 -04:00
12 changed files with 110 additions and 123 deletions

View File

@@ -21,8 +21,8 @@ plugins {
apply(from = "static-ips.gradle.kts")
val canonicalVersionCode = 1404
val canonicalVersionName = "7.2.3"
val canonicalVersionCode = 1405
val canonicalVersionName = "7.2.4"
val postFixSize = 100
val abiPostFix: Map<String, Int> = mapOf(

View File

@@ -19,11 +19,11 @@ data class NicknameState(
) {
private val isFormBlank: Boolean = firstName.isBlank() && lastName.isBlank() && note.isBlank()
private val hasFirstNameOrNote: Boolean = firstName.isNotBlank() || note.isNotBlank()
private val hasNameOrNote: Boolean = firstName.isNotBlank() || lastName.isNotBlank() || note.isNotBlank()
private val isFormReady: Boolean = formState == FormState.READY
private val isBlankFormDuringEdit: Boolean = isFormBlank && isEditing
val canSave: Boolean = isFormReady && (hasFirstNameOrNote || isBlankFormDuringEdit)
val canSave: Boolean = isFormReady && (hasNameOrNote || isBlankFormDuringEdit)
enum class FormState {
LOADING,
READY,

View File

@@ -78,15 +78,16 @@ class NicknameViewModel(
@MainThread
fun onNoteChanged(value: String) {
iteratorCompat.setText(value)
val trimmed = iteratorCompat.take(NOTE_MAX_LENGTH)
val count = iteratorCompat.run {
setText(trimmed)
countBreaks()
if (internalState.value.noteCharactersRemaining == 0 && value.graphemeCount > NOTE_MAX_LENGTH) {
return
}
iteratorCompat.setText(value)
val trimmed = iteratorCompat.take(NOTE_MAX_LENGTH)
val count = trimmed.graphemeCount
internalState.value = state.value.copy(
note = iteratorCompat.take(NOTE_MAX_LENGTH).toString(),
note = trimmed.toString(),
noteCharactersRemaining = NOTE_MAX_LENGTH - count
)
}
@@ -125,4 +126,10 @@ class NicknameViewModel(
internalState.value = state.value.copy(formState = NicknameState.FormState.SAVED)
}
}
private val CharSequence.graphemeCount: Int
get() {
iteratorCompat.setText(this)
return iteratorCompat.countBreaks()
}
}

View File

@@ -648,8 +648,11 @@ public class Recipient {
public @NonNull String getShortDisplayName(@NonNull Context context) {
String name = Util.getFirstNonEmpty(getGroupName(context),
getNickname().getGivenName(),
getNickname().toString(),
getSystemProfileName().getGivenName(),
getSystemProfileName().toString(),
getProfileName().getGivenName(),
getProfileName().toString(),
getUsername().orElse(null),
getDisplayName(context));

View File

@@ -93,22 +93,21 @@ class AboutSheet : ComposeBottomSheetDialogFragment() {
Content(
model = AboutModel(
isSelf = recipient.get().isSelf,
hasAvatar = recipient.get().profileAvatarFileDetails.hasFile(),
displayName = recipient.get().getDisplayName(requireContext()),
shortName = recipient.get().getShortDisplayName(requireContext()),
profileName = recipient.get().profileName.toString(),
hasUserSetDisplayName = recipient.get().hasAUserSetDisplayName(requireContext()),
about = recipient.get().about,
verified = verified,
hasAvatar = recipient.get().profileAvatarFileDetails.hasFile(),
recipientForAvatar = recipient.get(),
formattedE164 = if (recipient.get().hasE164() && recipient.get().shouldShowE164()) {
PhoneNumberFormatter.get(requireContext()).prettyPrintFormat(recipient.get().requireE164())
} else {
null
},
groupsInCommon = groupsInCommonCount,
profileSharing = recipient.get().isProfileSharing,
systemContact = recipient.get().isSystemContact,
groupsInCommon = groupsInCommonCount,
note = recipient.get().note ?: ""
),
onClickSignalConnections = this::openSignalConnectionsSheet,
@@ -138,7 +137,6 @@ private data class AboutModel(
val displayName: String,
val shortName: String,
val profileName: String,
val hasUserSetDisplayName: Boolean,
val about: String?,
val verified: Boolean,
val hasAvatar: Boolean,
@@ -193,7 +191,7 @@ private fun Content(
AboutRow(
startIcon = painterResource(R.drawable.symbol_person_24),
text = if (!model.isSelf && model.hasUserSetDisplayName && model.displayName.isNotBlank() && model.profileName.isNotBlank()) {
text = if (!model.isSelf && model.displayName.isNotBlank() && model.profileName.isNotBlank() && model.displayName != model.profileName) {
stringResource(id = R.string.AboutSheet__user_set_display_name_and_profile_name, model.displayName, model.profileName)
} else {
model.displayName
@@ -375,13 +373,12 @@ private fun ContentPreviewDefault() {
Content(
model = AboutModel(
isSelf = false,
hasAvatar = true,
displayName = "Peter Parker",
shortName = "Peter",
profileName = "Peter Parker",
hasUserSetDisplayName = false,
about = "Photographer for the Daily Bugle.",
verified = true,
hasAvatar = true,
recipientForAvatar = Recipient.UNKNOWN,
formattedE164 = "(123) 456-7890",
profileSharing = true,
@@ -406,13 +403,12 @@ private fun ContentPreviewWithUserSetDisplayName() {
Content(
model = AboutModel(
isSelf = false,
hasAvatar = true,
displayName = "Amazing Spider-man",
shortName = "Spiderman",
profileName = "Peter Parker",
hasUserSetDisplayName = true,
about = "Photographer for the Daily Bugle.",
verified = true,
hasAvatar = true,
recipientForAvatar = Recipient.UNKNOWN,
formattedE164 = "(123) 456-7890",
profileSharing = true,
@@ -437,13 +433,12 @@ private fun ContentPreviewForSelf() {
Content(
model = AboutModel(
isSelf = true,
hasAvatar = true,
displayName = "Amazing Spider-man",
shortName = "Spiderman",
profileName = "Peter Parker",
hasUserSetDisplayName = true,
about = "Photographer for the Daily Bugle.",
verified = true,
hasAvatar = true,
recipientForAvatar = Recipient.UNKNOWN,
formattedE164 = "(123) 456-7890",
profileSharing = true,
@@ -468,13 +463,12 @@ private fun ContentPreviewInContactsNotProfileSharing() {
Content(
model = AboutModel(
isSelf = false,
hasAvatar = true,
displayName = "Peter Parker",
shortName = "Peter",
profileName = "Peter Parker",
hasUserSetDisplayName = false,
about = "Photographer for the Daily Bugle.",
verified = false,
hasAvatar = true,
recipientForAvatar = Recipient.UNKNOWN,
formattedE164 = null,
profileSharing = false,
@@ -499,13 +493,12 @@ private fun ContentPreviewGroupsInCommonNoE164() {
Content(
model = AboutModel(
isSelf = false,
hasAvatar = true,
displayName = "Peter Parker",
shortName = "Peter",
profileName = "Peter Parker",
hasUserSetDisplayName = false,
about = "Photographer for the Daily Bugle.",
verified = false,
hasAvatar = true,
recipientForAvatar = Recipient.UNKNOWN,
formattedE164 = null,
profileSharing = true,
@@ -530,13 +523,12 @@ private fun ContentPreviewNotAConnection() {
Content(
model = AboutModel(
isSelf = false,
hasAvatar = true,
displayName = "Peter Parker",
shortName = "Peter",
profileName = "Peter Parker",
hasUserSetDisplayName = false,
about = "Photographer for the Daily Bugle.",
verified = false,
hasAvatar = true,
recipientForAvatar = Recipient.UNKNOWN,
formattedE164 = null,
profileSharing = false,

View File

@@ -153,23 +153,6 @@ public class ContactRecordProcessor extends DefaultStorageRecordProcessor<Signal
profileFamilyName = local.getProfileFamilyName().orElse("");
}
String nicknameGivenName;
String nicknameFamilyName;
if (remote.getNicknameGivenName().isPresent()) {
nicknameGivenName = remote.getNicknameGivenName().orElse("");
nicknameFamilyName = remote.getNicknameFamilyName().orElse("");
} else {
nicknameGivenName = local.getNicknameGivenName().orElse("");
nicknameFamilyName = local.getNicknameFamilyName().orElse("");
}
if (StringUtil.isVisuallyEmpty(nicknameGivenName) && !StringUtil.isVisuallyEmpty(nicknameFamilyName)) {
Log.w(TAG, "Processed invalid nickname. Missing given name.");
nicknameGivenName = "";
nicknameFamilyName = "";
}
IdentityState identityState;
byte[] identityKey;
@@ -234,6 +217,8 @@ public class ContactRecordProcessor extends DefaultStorageRecordProcessor<Signal
String systemGivenName = SignalStore.account().isPrimaryDevice() ? local.getSystemGivenName().orElse("") : remote.getSystemGivenName().orElse("");
String systemFamilyName = SignalStore.account().isPrimaryDevice() ? local.getSystemFamilyName().orElse("") : remote.getSystemFamilyName().orElse("");
String systemNickname = remote.getSystemNickname().orElse("");
String nicknameGivenName = remote.getNicknameGivenName().orElse("");
String nicknameFamilyName = remote.getNicknameFamilyName().orElse("");
boolean pniSignatureVerified = remote.isPniSignatureVerified() || local.isPniSignatureVerified();
String note = remote.getNote().or(local::getNote).orElse("");
boolean matchesRemote = doParamsMatch(remote, unknownFields, aci, pni, e164, profileGivenName, profileFamilyName, systemGivenName, systemFamilyName, systemNickname, profileKey, username, identityState, identityKey, blocked, profileSharing, archived, forcedUnread, muteUntil, hideStory, unregisteredTimestamp, hidden, pniSignatureVerified, nicknameGivenName, nicknameFamilyName, note);

View File

@@ -2065,7 +2065,7 @@
<string name="RegistrationActivity_unable_to_request_verification_code">Demande de code de vérification impossible. Vérifiez votre connexion réseau puis réessayez.</string>
<string name="RegistrationActivity_non_standard_number_format">Format de numéro non standard</string>
<string name="RegistrationActivity_the_number_you_entered_appears_to_be_a_non_standard">Le numéro que vous avez saisi (%1$s) semble avoir un format atypique.\n\nSerait-ce plutôt %2$s?</string>
<string name="RegistrationActivity_signal_android_phone_number_format">Signal pour Android format de numéro de téléphone</string>
<string name="RegistrationActivity_signal_android_phone_number_format">Signal pour Android Format de numéro de téléphone</string>
<!-- Small "toast" notification to the user confirming that they have requested a new code via voice call.-->
<string name="RegistrationActivity_call_requested">Appel demandé</string>
<!-- Small "toast" notification to the user confirming that they have requested a new code via SMS.-->
@@ -2926,17 +2926,17 @@
<string name="EditProfileFragment__group_description">Description du groupe</string>
<!-- Removed by excludeNonTranslatables <string name="EditProfileFragment__support_link" translatable="false">https://support.signal.org/hc/articles/360007459591</string> -->
<!-- The title of a dialog prompting user to update to the latest version of Signal. -->
<string name="EditProfileFragment_deprecated_dialog_title">Mettre Signal à jour</string>
<string name="EditProfileFragment_deprecated_dialog_title">Passez à la dernière version de Signal</string>
<!-- The body of a dialog prompting user to update to the latest version of Signal. -->
<string name="EditProfileFragment_deprecated_dialog_body">Cette version de Signal a expiré. Mettez Signal à jour pour continuer à utiliser lappli.</string>
<string name="EditProfileFragment_deprecated_dialog_body">Cette version de Signal est arrivée à expiration. Pour continuer dutiliser lapplication, une mise à jour est nécessaire.</string>
<!-- The button on a dialog prompting user to update to the latest version of Signal. When clicked, the user will be taken to the store to update their app. -->
<string name="EditProfileFragment_deprecated_dialog_update_button">Mise à jour</string>
<string name="EditProfileFragment_deprecated_dialog_update_button">Mettre à jour</string>
<!-- The title of a dialog informing the user that they cannot use this app feature when they are unregistered. -->
<string name="EditProfileFragment_unregistered_dialog_title">Appareil non enregistré</string>
<!-- The body of a dialog informing the user that they cannot use this app feature when they are unregistered. -->
<string name="EditProfileFragment_unregistered_dialog_body">This device is no longer registered. Re-register to make changes to your account.</string>
<string name="EditProfileFragment_unregistered_dialog_body">Cet appareil nest plus enregistré. Pour apporter des modifications à votre compte, vous devez le réenregistrer.</string>
<!-- The button on a dialog informing the user that they cannot use this app feature when they are unregistered. When clicked, the user will be taken to a screen to help them re-register. -->
<string name="EditProfileFragment_unregistered_dialog_reregister_button">Sinscrire de nouveau</string>
<string name="EditProfileFragment_unregistered_dialog_reregister_button">Réenregistrer lappareil</string>
<!-- EditProfileNameFragment -->
<string name="EditProfileNameFragment_your_name">Votre nom</string>
@@ -3033,7 +3033,7 @@
<item>Dons et macarons</item>
</string-array>
<!-- Subject of email when submitting debug logs to help debug slow notifications -->
<string name="DebugLogsPromptDialogFragment__signal_android_support_request">Soumission du journal de débogage de Signal Android</string>
<string name="DebugLogsPromptDialogFragment__signal_android_support_request">Journal de débogage de Signal pour Android</string>
<!-- Category to organize the support email sent -->
<string name="DebugLogsPromptDialogFragment__slow_notifications_category">Voir les notifications</string>
<!-- Category to organize the support email sent -->
@@ -5075,7 +5075,7 @@
<!-- Message of dialog telling user they need to re-register signal as it is no longer registered -->
<string name="ReregisterSignalDialog__message">Cet appareil nest plus enregistré. Inscrivez-vous à nouveau pour continuer à utiliser Signal sur cet appareil.</string>
<!-- Button text of re-registration dialog to re-register the device. -->
<string name="ReregisterSignalDialog__reregister_action">Sinscrire de nouveau</string>
<string name="ReregisterSignalDialog__reregister_action">Réenregistrer lappareil</string>
<!-- Button text of re-registration dialog to cancel the dialog. -->
<string name="ReregisterSignalDialog__cancel_action">Annuler</string>
@@ -6666,44 +6666,44 @@
<string name="FindByActivity__network_error_dialog">Une erreur réseau sest produite. Veuillez réessayer plus tard.</string>
<!-- Title for an alert letting someone know that one of their linked devices is inactive. -->
<string name="LinkedDeviceInactiveMegaphone_title">Inactive linked device</string>
<string name="LinkedDeviceInactiveMegaphone_title">Appareil associé inactif</string>
<!-- Body for an alert letting someone know that one of their linked devices is inactive. The string placeholder is the name of the device, and the number placeholder is the number of days before device is unlinked. -->
<plurals name="LinkedDeviceInactiveMegaphone_body">
<item quantity="one">To keep \"%1$s\" linked, open Signal on that device within %2$d day.</item>
<item quantity="other">To keep \"%1$s\" linked, open Signal on that device within %2$d days.</item>
<item quantity="one">Il vous reste %2$d jour pour ouvrir Signal sur lappareil \"%1$s\" avant quil ne soit dissocié.</item>
<item quantity="other">Il vous reste %2$d jours pour ouvrir Signal sur lappareil \"%1$s\" avant quil ne soit dissocié.</item>
</plurals>
<!-- Button label for an alert letting someone know that one of their linked devices is inactive. When clicked, the user will opt out of all future alerts. -->
<string name="LinkedDeviceInactiveMegaphone_dont_remind_button_label">Don\'t remind me</string>
<string name="LinkedDeviceInactiveMegaphone_dont_remind_button_label">Ne plus afficher de rappels</string>
<!-- Button label for an alert letting someone know that one of their linked devices is inactive. When clicked, the alert will be dismissed. -->
<string name="LinkedDeviceInactiveMegaphone_got_it_button_label">Compris</string>
<string name="LinkedDeviceInactiveMegaphone_got_it_button_label">Jai compris</string>
<!-- NicknameFragment -->
<!-- Title displayed at the top of the screen -->
<string name="NicknameActivity__nickname">Nickname</string>
<string name="NicknameActivity__nickname">Pseudo</string>
<!-- Subtitle displayed under title -->
<string name="NicknameActivity__nicknames_amp_notes">Nicknames &amp; notes are stored using Signal\'s end-to-end encrypted storage service. They are only visible to you.</string>
<string name="NicknameActivity__nicknames_amp_notes">Les pseudos et les notes sont conservés dans le service de stockage Signal chiffré de bout en bout. Vous seul y avez accès.</string>
<!-- Field label for given name -->
<string name="NicknameActivity__first_name">Prénom</string>
<!-- Content description for first name clear button -->
<string name="NicknameActivity__clear_first_name">Clear first name</string>
<string name="NicknameActivity__clear_first_name">Effacer le prénom</string>
<!-- Field label for family name -->
<string name="NicknameActivity__last_name">Nom de famille</string>
<string name="NicknameActivity__last_name">Nom</string>
<!-- Content description for last name clear button -->
<string name="NicknameActivity__clear_last_name">Clear last name</string>
<string name="NicknameActivity__clear_last_name">Effacer le nom</string>
<!-- Field label for note -->
<string name="NicknameActivity__note">Note</string>
<!-- Button label to save -->
<string name="NicknameActivity__save">Enregistrer</string>
<!-- Dialog title for note and name deletion -->
<string name="NicknameActivity__delete_nickname">Delete nickname?</string>
<string name="NicknameActivity__delete_nickname">Supprimer le pseudo ?</string>
<!-- Dialog message for note and name deletion -->
<string name="NicknameActivity__this_will_permanently_delete_this_nickname_and_note">This will permanently delete this nickname and note.</string>
<string name="NicknameActivity__this_will_permanently_delete_this_nickname_and_note">Cette action supprimera définitivement ce pseudo et cette note.</string>
<!-- ViewNoteBottomSheetDialogFragment -->
<!-- Sheet title -->
<string name="ViewNoteSheet__note">Note</string>
<!-- Content description for opening the note editor -->
<string name="ViewNoteSheet__edit_note">Edit note</string>
<string name="ViewNoteSheet__edit_note">Modifier la note</string>
<!-- EOF -->
</resources>

View File

@@ -3216,7 +3216,7 @@
<!-- The title of a dialog informing the user that they cannot use this app feature when they are unregistered. -->
<string name="EditProfileFragment_unregistered_dialog_title">Níl an gléas cláraithe</string>
<!-- The body of a dialog informing the user that they cannot use this app feature when they are unregistered. -->
<string name="EditProfileFragment_unregistered_dialog_body">This device is no longer registered. Re-register to make changes to your account.</string>
<string name="EditProfileFragment_unregistered_dialog_body">Níl an gléas seo cláraithe a thuilleadh. Athchláraigh chun athruithe a dhéanamh ar do chuntas.</string>
<!-- The button on a dialog informing the user that they cannot use this app feature when they are unregistered. When clicked, the user will be taken to a screen to help them re-register. -->
<string name="EditProfileFragment_unregistered_dialog_reregister_button">Athchláraigh</string>
@@ -7101,47 +7101,47 @@
<string name="FindByActivity__network_error_dialog">Tharla earráid líonra Déan arís é ar ball.</string>
<!-- Title for an alert letting someone know that one of their linked devices is inactive. -->
<string name="LinkedDeviceInactiveMegaphone_title">Inactive linked device</string>
<string name="LinkedDeviceInactiveMegaphone_title">Gléas neamhghníomhach nasctha</string>
<!-- Body for an alert letting someone know that one of their linked devices is inactive. The string placeholder is the name of the device, and the number placeholder is the number of days before device is unlinked. -->
<plurals name="LinkedDeviceInactiveMegaphone_body">
<item quantity="one">To keep \"%1$s\" linked, open Signal on that device within %2$d day.</item>
<item quantity="two">To keep \"%1$s\" linked, open Signal on that device within %2$d days.</item>
<item quantity="few">To keep \"%1$s\" linked, open Signal on that device within %2$d days.</item>
<item quantity="many">To keep \"%1$s\" linked, open Signal on that device within %2$d days.</item>
<item quantity="other">To keep \"%1$s\" linked, open Signal on that device within %2$d days.</item>
<item quantity="one">Chun \"%1$s\" a choinneáil nasctha, oscail Signal ar an ngléas sin laistigh de %2$d .</item>
<item quantity="two">Chun \"%1$s\" a choinneáil nasctha, oscail Signal ar an ngléas sin laistigh de %2$d .</item>
<item quantity="few">Chun \"%1$s\" a choinneáil nasctha, oscail Signal ar an ngléas sin laistigh de %2$d .</item>
<item quantity="many">Chun \"%1$s\" a choinneáil nasctha, oscail Signal ar an ngléas sin laistigh de %2$d .</item>
<item quantity="other">Chun \"%1$s\" a choinneáil nasctha, oscail Signal ar an ngléas sin laistigh de %2$d .</item>
</plurals>
<!-- Button label for an alert letting someone know that one of their linked devices is inactive. When clicked, the user will opt out of all future alerts. -->
<string name="LinkedDeviceInactiveMegaphone_dont_remind_button_label">Don\'t remind me</string>
<string name="LinkedDeviceInactiveMegaphone_dont_remind_button_label">Ná meabhraigh dom</string>
<!-- Button label for an alert letting someone know that one of their linked devices is inactive. When clicked, the alert will be dismissed. -->
<string name="LinkedDeviceInactiveMegaphone_got_it_button_label">Tuigim</string>
<!-- NicknameFragment -->
<!-- Title displayed at the top of the screen -->
<string name="NicknameActivity__nickname">Nickname</string>
<string name="NicknameActivity__nickname">Leasainm</string>
<!-- Subtitle displayed under title -->
<string name="NicknameActivity__nicknames_amp_notes">Nicknames &amp; notes are stored using Signal\'s end-to-end encrypted storage service. They are only visible to you.</string>
<string name="NicknameActivity__nicknames_amp_notes">Stóráiltear leasainmneacha agus nótaí le seirbhís stórála criptithe ó cheann ceann Signal. Níl siad infheicthe ach agatsa amháin.</string>
<!-- Field label for given name -->
<string name="NicknameActivity__first_name">Ainm</string>
<!-- Content description for first name clear button -->
<string name="NicknameActivity__clear_first_name">Clear first name</string>
<string name="NicknameActivity__clear_first_name">Glan an chéad ainm</string>
<!-- Field label for family name -->
<string name="NicknameActivity__last_name">Sloinne</string>
<!-- Content description for last name clear button -->
<string name="NicknameActivity__clear_last_name">Clear last name</string>
<string name="NicknameActivity__clear_last_name">Glan an sloinne</string>
<!-- Field label for note -->
<string name="NicknameActivity__note">Nóta</string>
<!-- Button label to save -->
<string name="NicknameActivity__save">Sábháil</string>
<!-- Dialog title for note and name deletion -->
<string name="NicknameActivity__delete_nickname">Delete nickname?</string>
<string name="NicknameActivity__delete_nickname">Scrios leasainm?</string>
<!-- Dialog message for note and name deletion -->
<string name="NicknameActivity__this_will_permanently_delete_this_nickname_and_note">This will permanently delete this nickname and note.</string>
<string name="NicknameActivity__this_will_permanently_delete_this_nickname_and_note">Scriosfar an leasainm agus an nóta seo go buan leis sin.</string>
<!-- ViewNoteBottomSheetDialogFragment -->
<!-- Sheet title -->
<string name="ViewNoteSheet__note">Nóta</string>
<!-- Content description for opening the note editor -->
<string name="ViewNoteSheet__edit_note">Edit note</string>
<string name="ViewNoteSheet__edit_note">Cuir nóta in eagar</string>
<!-- EOF -->
</resources>

View File

@@ -3122,7 +3122,7 @@
<!-- The title of a dialog informing the user that they cannot use this app feature when they are unregistered. -->
<string name="EditProfileFragment_unregistered_dialog_title">המכשיר לא רשום</string>
<!-- The body of a dialog informing the user that they cannot use this app feature when they are unregistered. -->
<string name="EditProfileFragment_unregistered_dialog_body">This device is no longer registered. Re-register to make changes to your account.</string>
<string name="EditProfileFragment_unregistered_dialog_body">המכשיר הזה כבר לא רשום. צריך לרשום אותו מחדש כדי לבצע שינויים בחשבון שלך.</string>
<!-- The button on a dialog informing the user that they cannot use this app feature when they are unregistered. When clicked, the user will be taken to a screen to help them re-register. -->
<string name="EditProfileFragment_unregistered_dialog_reregister_button">רשום מחדש</string>
@@ -6956,46 +6956,46 @@
<string name="FindByActivity__network_error_dialog">היישום נתקל בשגיאת רשת. נסה שוב מאוחר יותר.</string>
<!-- Title for an alert letting someone know that one of their linked devices is inactive. -->
<string name="LinkedDeviceInactiveMegaphone_title">Inactive linked device</string>
<string name="LinkedDeviceInactiveMegaphone_title">מכשיר מקושר לא פעיל</string>
<!-- Body for an alert letting someone know that one of their linked devices is inactive. The string placeholder is the name of the device, and the number placeholder is the number of days before device is unlinked. -->
<plurals name="LinkedDeviceInactiveMegaphone_body">
<item quantity="one">To keep \"%1$s\" linked, open Signal on that device within %2$d day.</item>
<item quantity="two">To keep \"%1$s\" linked, open Signal on that device within %2$d days.</item>
<item quantity="many">To keep \"%1$s\" linked, open Signal on that device within %2$d days.</item>
<item quantity="other">To keep \"%1$s\" linked, open Signal on that device within %2$d days.</item>
<item quantity="one">כדי להשאיר את ״%1$s״ מחובר, צריך לפתוח את Signal במכשיר הזה תוך יום %2$d.</item>
<item quantity="two">כדי להשאיר את ״%1$s״ מחובר, צריך לפתוח את Signal במכשיר הזה תוך יומיים.</item>
<item quantity="many">כדי להשאיר את ״%1$s״ מחובר, צריך לפתוח את Signal במכשיר הזה תוך %2$d ימים.</item>
<item quantity="other">כדי להשאיר את ״%1$s״ מחובר, צריך לפתוח את Signal במכשיר הזה תוך %2$d ימים.</item>
</plurals>
<!-- Button label for an alert letting someone know that one of their linked devices is inactive. When clicked, the user will opt out of all future alerts. -->
<string name="LinkedDeviceInactiveMegaphone_dont_remind_button_label">Don\'t remind me</string>
<string name="LinkedDeviceInactiveMegaphone_dont_remind_button_label">אל תזכירו לי</string>
<!-- Button label for an alert letting someone know that one of their linked devices is inactive. When clicked, the alert will be dismissed. -->
<string name="LinkedDeviceInactiveMegaphone_got_it_button_label">הבנתי</string>
<!-- NicknameFragment -->
<!-- Title displayed at the top of the screen -->
<string name="NicknameActivity__nickname">Nickname</string>
<string name="NicknameActivity__nickname">כינוי</string>
<!-- Subtitle displayed under title -->
<string name="NicknameActivity__nicknames_amp_notes">Nicknames &amp; notes are stored using Signal\'s end-to-end encrypted storage service. They are only visible to you.</string>
<string name="NicknameActivity__nicknames_amp_notes">כינויים והערות מאוחסנים באמצעות שירות האחסון המוצפן מקצה לקצה של Signal. הם גלויים רק לך.</string>
<!-- Field label for given name -->
<string name="NicknameActivity__first_name">שם פרטי</string>
<!-- Content description for first name clear button -->
<string name="NicknameActivity__clear_first_name">Clear first name</string>
<string name="NicknameActivity__clear_first_name">מחיקת שם פרטי</string>
<!-- Field label for family name -->
<string name="NicknameActivity__last_name">שם משפחה</string>
<!-- Content description for last name clear button -->
<string name="NicknameActivity__clear_last_name">Clear last name</string>
<string name="NicknameActivity__clear_last_name">מחיקת שם משפחה</string>
<!-- Field label for note -->
<string name="NicknameActivity__note">הערה</string>
<!-- Button label to save -->
<string name="NicknameActivity__save">שמירה</string>
<!-- Dialog title for note and name deletion -->
<string name="NicknameActivity__delete_nickname">Delete nickname?</string>
<string name="NicknameActivity__delete_nickname">למחוק כינוי?</string>
<!-- Dialog message for note and name deletion -->
<string name="NicknameActivity__this_will_permanently_delete_this_nickname_and_note">This will permanently delete this nickname and note.</string>
<string name="NicknameActivity__this_will_permanently_delete_this_nickname_and_note">זה ימחק לצמיתות את הכינוי וההערה האלה.</string>
<!-- ViewNoteBottomSheetDialogFragment -->
<!-- Sheet title -->
<string name="ViewNoteSheet__note">הערה</string>
<!-- Content description for opening the note editor -->
<string name="ViewNoteSheet__edit_note">Edit note</string>
<string name="ViewNoteSheet__edit_note">עריכת הערה</string>
<!-- EOF -->
</resources>

View File

@@ -2934,7 +2934,7 @@
<!-- The title of a dialog informing the user that they cannot use this app feature when they are unregistered. -->
<string name="EditProfileFragment_unregistered_dialog_title">ಸಾಧನವು ನೋಂದಾಯಿತಗೊಂಡಿಲ್ಲ</string>
<!-- The body of a dialog informing the user that they cannot use this app feature when they are unregistered. -->
<string name="EditProfileFragment_unregistered_dialog_body">This device is no longer registered. Re-register to make changes to your account.</string>
<string name="EditProfileFragment_unregistered_dialog_body">ಈ ಸಾಧನವು ಇನ್ನು ನೋಂದಾಯಿತವಾಗಿರುವುದಿಲ್ಲ. ನಿಮ್ಮ ಖಾತೆಗೆ ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡಲು ಮರು-ನೋಂದಾಯಿಸಿ.</string>
<!-- The button on a dialog informing the user that they cannot use this app feature when they are unregistered. When clicked, the user will be taken to a screen to help them re-register. -->
<string name="EditProfileFragment_unregistered_dialog_reregister_button">ಪುನಃ ನೋಂದಾಯಿಸಿ</string>
@@ -6666,44 +6666,44 @@
<string name="FindByActivity__network_error_dialog">ತಾತ್ಕಾಲಿಕ ನೆಟ್ವರ್ಕ್ ತೊಂದರೆ ಉಂಟಾಯಿತು . ನಂತರ ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ .</string>
<!-- Title for an alert letting someone know that one of their linked devices is inactive. -->
<string name="LinkedDeviceInactiveMegaphone_title">Inactive linked device</string>
<string name="LinkedDeviceInactiveMegaphone_title">ನಿಷ್ಕ್ರಿಯ ಲಿಂಕ್ ಆದ ಸಾಧನ</string>
<!-- Body for an alert letting someone know that one of their linked devices is inactive. The string placeholder is the name of the device, and the number placeholder is the number of days before device is unlinked. -->
<plurals name="LinkedDeviceInactiveMegaphone_body">
<item quantity="one">To keep \"%1$s\" linked, open Signal on that device within %2$d day.</item>
<item quantity="other">To keep \"%1$s\" linked, open Signal on that device within %2$d days.</item>
<item quantity="one">\"%1$s\" ಅನ್ನು ಲಿಂಕ್ ಮಾಡಿ ಇಟ್ಟುಕೊಳ್ಳಲು, ಆ ಸಾಧನದಲ್ಲಿ %2$d ದಿನದೊಳಗೆ Signal ಅನ್ನು ತೆರೆಯಿರಿ.</item>
<item quantity="other">\"%1$s\" ಅನ್ನು ಲಿಂಕ್ ಮಾಡಿ ಇಟ್ಟುಕೊಳ್ಳಲು, ಆ ಸಾಧನದಲ್ಲಿ %2$d ದಿನಗಳ ಒಳಗೆ Signal ಅನ್ನು ತೆರೆಯಿರಿ.</item>
</plurals>
<!-- Button label for an alert letting someone know that one of their linked devices is inactive. When clicked, the user will opt out of all future alerts. -->
<string name="LinkedDeviceInactiveMegaphone_dont_remind_button_label">Don\'t remind me</string>
<string name="LinkedDeviceInactiveMegaphone_dont_remind_button_label">ನನಗೆ ಜ್ಞಾಪಿಸಬೇಡಿ</string>
<!-- Button label for an alert letting someone know that one of their linked devices is inactive. When clicked, the alert will be dismissed. -->
<string name="LinkedDeviceInactiveMegaphone_got_it_button_label">ಅರ್ಥವಾಯಿತು</string>
<!-- NicknameFragment -->
<!-- Title displayed at the top of the screen -->
<string name="NicknameActivity__nickname">Nickname</string>
<string name="NicknameActivity__nickname">ಅಡ್ಡಹೆಸರು</string>
<!-- Subtitle displayed under title -->
<string name="NicknameActivity__nicknames_amp_notes">Nicknames &amp; notes are stored using Signal\'s end-to-end encrypted storage service. They are only visible to you.</string>
<string name="NicknameActivity__nicknames_amp_notes">ಅಡ್ಡಹೆಸರುಗಳು ಮತ್ತು ಟಿಪ್ಪಣಿಗಳನ್ನು Signalನ ಎಂಡ್-ಟು-ಎಂಡ್ ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಸಂಗ್ರಹಣಾ ಸೇವೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ. ಅವು ನಿಮಗೆ ಮಾತ್ರ ಗೋಚರಿಸುತ್ತವೆ.</string>
<!-- Field label for given name -->
<string name="NicknameActivity__first_name">ಮೊದಲ ಹೆಸರು</string>
<!-- Content description for first name clear button -->
<string name="NicknameActivity__clear_first_name">Clear first name</string>
<string name="NicknameActivity__clear_first_name">ಮೊದಲ ಹೆಸರನ್ನು ತೆರವುಗೊಳಿಸಿ</string>
<!-- Field label for family name -->
<string name="NicknameActivity__last_name">ಕೊನೆಯ ಹೆಸರು</string>
<!-- Content description for last name clear button -->
<string name="NicknameActivity__clear_last_name">Clear last name</string>
<string name="NicknameActivity__clear_last_name">ಕೊನೆಯ ಹೆಸರನ್ನು ತೆರವುಗೊಳಿಸಿ</string>
<!-- Field label for note -->
<string name="NicknameActivity__note">ಟಿಪ್ಪಣಿ</string>
<!-- Button label to save -->
<string name="NicknameActivity__save">ಉಳಿಸಿ</string>
<!-- Dialog title for note and name deletion -->
<string name="NicknameActivity__delete_nickname">Delete nickname?</string>
<string name="NicknameActivity__delete_nickname">ಅಡ್ಡಹೆಸರನ್ನು ಅಳಿಸಬೇಕೇ?</string>
<!-- Dialog message for note and name deletion -->
<string name="NicknameActivity__this_will_permanently_delete_this_nickname_and_note">This will permanently delete this nickname and note.</string>
<string name="NicknameActivity__this_will_permanently_delete_this_nickname_and_note">ಇದು ಈ ಅಡ್ಡಹೆಸರು ಮತ್ತು ಟಿಪ್ಪಣಿಯನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸುತ್ತದೆ.</string>
<!-- ViewNoteBottomSheetDialogFragment -->
<!-- Sheet title -->
<string name="ViewNoteSheet__note">ಟಿಪ್ಪಣಿ</string>
<!-- Content description for opening the note editor -->
<string name="ViewNoteSheet__edit_note">Edit note</string>
<string name="ViewNoteSheet__edit_note">ಟಿಪ್ಪಣಿ ಎಡಿಟ್ ಮಾಡಿ</string>
<!-- EOF -->
</resources>

View File

@@ -2840,7 +2840,7 @@
<!-- The title of a dialog informing the user that they cannot use this app feature when they are unregistered. -->
<string name="EditProfileFragment_unregistered_dialog_title">ئۈسكۈنە تىزىملىتىلمىغان</string>
<!-- The body of a dialog informing the user that they cannot use this app feature when they are unregistered. -->
<string name="EditProfileFragment_unregistered_dialog_body">This device is no longer registered. Re-register to make changes to your account.</string>
<string name="EditProfileFragment_unregistered_dialog_body">بۇ ئۈسكۈنە تىزىملاشتىن قالغان. قايتا تىزىملاتسىڭىز ھېساباتىڭىزدا ئۆزگىرىشلەر يۈز بېرىدۇ.</string>
<!-- The button on a dialog informing the user that they cannot use this app feature when they are unregistered. When clicked, the user will be taken to a screen to help them re-register. -->
<string name="EditProfileFragment_unregistered_dialog_reregister_button">قايتا تىزىملاش</string>
@@ -6521,43 +6521,43 @@
<string name="FindByActivity__network_error_dialog">تور خاتالىقىغا يولۇقتى. سەل تۇرۇپ قايتا سىناڭ.</string>
<!-- Title for an alert letting someone know that one of their linked devices is inactive. -->
<string name="LinkedDeviceInactiveMegaphone_title">Inactive linked device</string>
<string name="LinkedDeviceInactiveMegaphone_title">ئاكتىپ ئەمەس ئۇلانغان ئۈسكۈنە</string>
<!-- Body for an alert letting someone know that one of their linked devices is inactive. The string placeholder is the name of the device, and the number placeholder is the number of days before device is unlinked. -->
<plurals name="LinkedDeviceInactiveMegaphone_body">
<item quantity="other">To keep \"%1$s\" linked, open Signal on that device within %2$d days.</item>
<item quantity="other">«%1$s» نى ئۇلانغان ھالەتتە ساقلاش ئۈچۈن %2$d كۈن ئىچىدە Signal نى ئۇ ئۈسكۈنىدە ئېچىڭ.</item>
</plurals>
<!-- Button label for an alert letting someone know that one of their linked devices is inactive. When clicked, the user will opt out of all future alerts. -->
<string name="LinkedDeviceInactiveMegaphone_dont_remind_button_label">Don\'t remind me</string>
<string name="LinkedDeviceInactiveMegaphone_dont_remind_button_label">ئەسكەرتمەڭ</string>
<!-- Button label for an alert letting someone know that one of their linked devices is inactive. When clicked, the alert will be dismissed. -->
<string name="LinkedDeviceInactiveMegaphone_got_it_button_label">بىلدىم</string>
<!-- NicknameFragment -->
<!-- Title displayed at the top of the screen -->
<string name="NicknameActivity__nickname">Nickname</string>
<string name="NicknameActivity__nickname">لەقەم</string>
<!-- Subtitle displayed under title -->
<string name="NicknameActivity__nicknames_amp_notes">Nicknames &amp; notes are stored using Signal\'s end-to-end encrypted storage service. They are only visible to you.</string>
<string name="NicknameActivity__nicknames_amp_notes">لەقەم ۋە خاتىرىلەر Signal نىڭ ئۇچتىن ئۇچقا مەخپىيلەشتۈرۈلگەن بوشلۇق مۇلازىمىتى ئارقىلىق ساقلىنىدۇ. ئۇلارنى پەقەت سىز كۆرەلەيسىز.</string>
<!-- Field label for given name -->
<string name="NicknameActivity__first_name">ئات</string>
<!-- Content description for first name clear button -->
<string name="NicknameActivity__clear_first_name">Clear first name</string>
<string name="NicknameActivity__clear_first_name">ئىسىمنى ئۆچۈرۈش</string>
<!-- Field label for family name -->
<string name="NicknameActivity__last_name">فامىلە</string>
<!-- Content description for last name clear button -->
<string name="NicknameActivity__clear_last_name">Clear last name</string>
<string name="NicknameActivity__clear_last_name">فامىلەنى ئۆچۈرۈش</string>
<!-- Field label for note -->
<string name="NicknameActivity__note">ئىزاھات</string>
<string name="NicknameActivity__note">خاتىرە</string>
<!-- Button label to save -->
<string name="NicknameActivity__save">ساقلاش</string>
<!-- Dialog title for note and name deletion -->
<string name="NicknameActivity__delete_nickname">Delete nickname?</string>
<string name="NicknameActivity__delete_nickname">لەقەمنى ئۆچۈرەمسىز؟</string>
<!-- Dialog message for note and name deletion -->
<string name="NicknameActivity__this_will_permanently_delete_this_nickname_and_note">This will permanently delete this nickname and note.</string>
<string name="NicknameActivity__this_will_permanently_delete_this_nickname_and_note">بۇ مەشغۇلات بۇ لەقەم ۋە خاتىرىنى مەڭگۈلۈك ئۆچۈرىدۇ.</string>
<!-- ViewNoteBottomSheetDialogFragment -->
<!-- Sheet title -->
<string name="ViewNoteSheet__note">ئىزاھات</string>
<string name="ViewNoteSheet__note">خاتىرە</string>
<!-- Content description for opening the note editor -->
<string name="ViewNoteSheet__edit_note">Edit note</string>
<string name="ViewNoteSheet__edit_note">خاتىرە تەھرىرلەش</string>
<!-- EOF -->
</resources>

View File

@@ -5686,7 +5686,7 @@
<!-- Title of dialog confirming decision to hide a story -->
<string name="StoriesLandingFragment__hide_story">Приховати історію?</string>
<!-- Message of dialog confirming decision to hide a story -->
<string name="StoriesLandingFragment__new_story_updates">Нові історії користувача %1$s більше не з\'являтимуться вгорі переліку історій.</string>
<string name="StoriesLandingFragment__new_story_updates">Оновлення історії користувача %1$s більше не з\'являтимуться вгорі переліку історій.</string>
<!-- Positive action of dialog confirming decision to hide a story -->
<string name="StoriesLandingFragment__hide">Сховати</string>
<!-- Displayed in Snackbar after story is hidden -->
@@ -5815,7 +5815,7 @@
<item quantity="other">%1$d осіб</item>
</plurals>
<!-- My story privacy fine print about what the privacy settings are for -->
<string name="MyStorySettingsFragment__choose_who_can_view_your_story">Виберіть, хто зможе переглядати вашу історію. Зміни не вплинуть на вже створені історії.</string>
<string name="MyStorySettingsFragment__choose_who_can_view_your_story">Виберіть, хто зможе переглядати вашу історію. Зміни не вплинуть на вже надіслані історії.</string>
<!-- Section header for options related to replies and reactions -->
<string name="MyStorySettingsFragment__replies_amp_reactions">Відповіді і реакції</string>
<!-- Switchable option for allowing replies and reactions on your stories -->
@@ -5841,7 +5841,7 @@
<!-- Dialog title when attempting to remove someone from a custom story -->
<string name="PrivateStorySettingsFragment__remove_s">Вилучити %1$s?</string>
<!-- Dialog message when attempting to remove someone from a custom story -->
<string name="PrivateStorySettingsFragment__this_person_will_no_longer">Ця людина більше не зможе бачити ваші історії.</string>
<string name="PrivateStorySettingsFragment__this_person_will_no_longer">Ця людина більше не зможе бачити вашу історію.</string>
<!-- Positive action label when attempting to remove someone from a custom story -->
<string name="PrivateStorySettingsFragment__remove">Вилучити</string>
<!-- Dialog title when deleting a custom story -->
@@ -5857,7 +5857,7 @@
<!-- Displayed in text post creator when prompting user to enter text -->
<string name="TextStoryPostTextEntryFragment__add_text">Додати текст</string>
<!-- Content description for \'done\' button when adding text to a story post -->
<string name="TextStoryPostTextEntryFragment__done_adding_text">Додати до історії</string>
<string name="TextStoryPostTextEntryFragment__done_adding_text">Це весь текст</string>
<!-- Text label for media selection toggle -->
<string name="MediaSelectionActivity__text">Опис</string>
<!-- Camera label for media selection toggle -->