Merge branch 'hotfix/2.15.2'

This commit is contained in:
Michael Kirk 2017-08-04 13:11:53 -04:00
commit f99d4e9df9
16 changed files with 804 additions and 711 deletions

View file

@ -55,7 +55,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>2.15.2.1</string>
<string>2.15.2.2</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LOGS_EMAIL</key>

View file

@ -269,7 +269,7 @@
"CONFIRM_LINK_NEW_DEVICE_ACTION" = "ربط جهاز جديد";
/* Action sheet body presented when a user's SN have recently changed. Embeds {{contact's name or phone nubmer}} */
"CONFIRM_SENDING_TO_CHANGED_IDENTITY_BODY_FORMAT" = "%@ may have reinstalled or changed devices. Verify your safety number with them to ensure privacy.";
"CONFIRM_SENDING_TO_CHANGED_IDENTITY_BODY_FORMAT" = "ربما يكون %@ قد اعاد تثبيت التطبيق او غير جهازه. من أجل ضمان الخصوصية قم بالتحقق معهم من رقم الأمان.";
/* Action sheet title presented when a users's SN have recently changed. Embeds {{contact's name or phone number}} */
"CONFIRM_SENDING_TO_CHANGED_IDENTITY_TITLE_FORMAT" = "لقد تم تغيير رقم الأمان مع %@";
@ -599,7 +599,7 @@
"GROUP_MEMBERS_RESET_NO_LONGER_VERIFIED" = "مسح علامة التحقق للجميع";
/* Label for the 'reset all no-longer-verified group members' confirmation alert. */
"GROUP_MEMBERS_RESET_NO_LONGER_VERIFIED_ALERT_MESSAGE" = "This will clear the verification of all group members whose safety numbers have changed since they were last verified.";
"GROUP_MEMBERS_RESET_NO_LONGER_VERIFIED_ALERT_MESSAGE" = "سيؤدي ذلك إلى مسح علامة التحقق الخاص بجميع أعضاء المجموعة الذين تغيرت أرقام الأمان الخاصة بهم منذ آخر عملية تحقق لهم.";
/* Title for the 'members' section of the 'group members' view. */
"GROUP_MEMBERS_SECTION_TITLE_MEMBERS" = "الأعضاء";

View file

@ -776,7 +776,7 @@
"MESSAGES_VIEW_GROUP_1_MEMBER_BLOCKED" = "Heu blocat 1 membre d'aquest grup";
/* Indicates that some members of this group has been blocked. Embeds {{the number of blocked users in this group}}. */
"MESSAGES_VIEW_GROUP_N_MEMBERS_BLOCKED_FORMAT" = "You Blocked %@ Members of this Group";
"MESSAGES_VIEW_GROUP_N_MEMBERS_BLOCKED_FORMAT" = "Heu blocat %@ membres d'aquest grup";
/* Indicates that more than one member of this group conversation is no longer verified. */
"MESSAGES_VIEW_N_MEMBERS_NO_LONGER_VERIFIED" = "Més d'un membre del grup ja no és marcat com a verificat. Toqueu per a més opcions.";
@ -1346,31 +1346,31 @@
"SUCCESSFUL_VERIFICATION_TITLE" = "Els números de seguretat coincideixen!";
/* {{number of days}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 days}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_DAYS" = "%@ days";
"TIME_AMOUNT_DAYS" = "%@ dies";
/* {{number of hours}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 hours}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_HOURS" = "%@ hours";
"TIME_AMOUNT_HOURS" = "%@ hores";
/* {{number of minutes}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 minutes}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_MINUTES" = "%@ minutes";
"TIME_AMOUNT_MINUTES" = "%@ minuts";
/* {{number of seconds}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 seconds}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SECONDS" = "%@ seconds";
"TIME_AMOUNT_SECONDS" = "%@ segons";
/* {{1 day}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 day}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_DAY" = "%@ day";
"TIME_AMOUNT_SINGLE_DAY" = "%@ dia";
/* {{1 hour}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 hour}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_HOUR" = "%@ hour";
"TIME_AMOUNT_SINGLE_HOUR" = "%@ hora";
/* {{1 minute}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 minute}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_MINUTE" = "%@ minute";
"TIME_AMOUNT_SINGLE_MINUTE" = "%@ minut";
/* {{1 week}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 week}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_WEEK" = "%@ week";
"TIME_AMOUNT_SINGLE_WEEK" = "%@ setmana";
/* {{number of weeks}}, embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 weeks}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_WEEKS" = "%@ weeks";
"TIME_AMOUNT_WEEKS" = "%@ setmanes";
/* generic cancel text */
"TXT_CANCEL_TITLE" = "Cancel·la";
@ -1510,16 +1510,16 @@
// Strings Copied in from JSQMessagesViewController
"load_earlier_messages" = "Load Earlier Messages";
"load_earlier_messages" = "Carrega els missatges anteriors";
"send" = "Send";
"send" = "Envia";
"new_message" = "New Message";
"new_message" = "Missatge nou";
"text_message_accessibility_label" = "%@: %@";
"media_message_accessibility_label" = "%@: media message";
"media_message_accessibility_label" = "%@: missatge multimèdia";
"accessory_button_accessibility_label" = "Share media";
"accessory_button_accessibility_label" = "Comparteix el contingut";
"new_message_received_accessibility_announcement" = "New message received";
"new_message_received_accessibility_announcement" = "S'ha rebut un missatge nou";

File diff suppressed because it is too large Load diff

View file

@ -8,37 +8,37 @@
"ADD_GROUP_MEMBER_VIEW_BUTTON" = "افزودن";
/* Title for the 'add contact' section of the 'add group member' view. */
"ADD_GROUP_MEMBER_VIEW_CONTACT_TITLE" = "Add Contact";
"ADD_GROUP_MEMBER_VIEW_CONTACT_TITLE" = "افزودن مخاطب";
/* Title for the 'add by phone number' section of the 'add group member' view. */
"ADD_GROUP_MEMBER_VIEW_PHONE_NUMBER_TITLE" = "Add by Phone Number";
"ADD_GROUP_MEMBER_VIEW_PHONE_NUMBER_TITLE" = "افزودن از طريق شماره تلفن";
/* Title for the 'add group member' view. */
"ADD_GROUP_MEMBER_VIEW_TITLE" = "Add Member";
"ADD_GROUP_MEMBER_VIEW_TITLE" = "افزودن عضو";
/* Message shown in conversation view that offers to add an unknown user to your phone's contacts. */
"ADD_TO_CONTACTS_OFFER" = "Would you like to add this user to your contacts?";
"ADD_TO_CONTACTS_OFFER" = "آيا تمايل داريد اين كاربر را به مخاطبينتان اضافه كنيد؟";
/* The label for the 'discard' button in alerts and action sheets. */
"ALERT_DISCARD_BUTTON" = "Discard";
"ALERT_DISCARD_BUTTON" = "ولش كن";
/* The label for the 'don't save' button in action sheets. */
"ALERT_DONT_SAVE" = "Don't Save";
"ALERT_DONT_SAVE" = "ذخيره نكن";
/* Title for a generic error alert. */
"ALERT_ERROR_TITLE" = "Error";
"ALERT_ERROR_TITLE" = "خطا";
/* The label for the 'save' button in action sheets. */
"ALERT_SAVE" = "Save";
"ALERT_SAVE" = "ذخيره كن";
/* A message for the alert shown while validating a signal account */
"ALERT_VALIDATE_RECIPIENT_MESSAGE" = "Checking that this is a valid Signal account.";
"ALERT_VALIDATE_RECIPIENT_MESSAGE" = "در حال بررسى صحت حساب كاربر";
/* A title for the alert shown while validating a signal account */
"ALERT_VALIDATE_RECIPIENT_TITLE" = "Validating";
"ALERT_VALIDATE_RECIPIENT_TITLE" = "در حال تاييد اعتبار";
/* registration button text */
"ALREADY_HAVE_ACCOUNT_BUTTON" = "Already have a Signal account?";
"ALREADY_HAVE_ACCOUNT_BUTTON" = "قبلاً عضو سيگنال شده ايد؟";
/* No comment provided by engineer. */
"ANSWER_CALL_BUTTON_TITLE" = "پاسخ دهید";
@ -56,16 +56,16 @@
"APN_MESSAGE_IN_GROUP_DETAILED" = "%@ از گروه %@: %@";
/* Message format for the 'new app version available' alert. Embeds: {{The latest app version number.}}. */
"APP_UPDATE_NAG_ALERT_MESSAGE_FORMAT" = "Version %@ is now available in the App Store.";
"APP_UPDATE_NAG_ALERT_MESSAGE_FORMAT" = "نسخه ى %@ هم اكنون در اپ استور موجود است";
/* Title for the 'new app version available' alert. */
"APP_UPDATE_NAG_ALERT_TITLE" = "A New Version of Signal is Available";
"APP_UPDATE_NAG_ALERT_TITLE" = "نسخه ى جديد سيگنال موجود مي باشد";
/* Label for the 'update' button in the 'new app version available' alert. */
"APP_UPDATE_NAG_ALERT_UPDATE_BUTTON" = "Update";
"APP_UPDATE_NAG_ALERT_UPDATE_BUTTON" = "به روز رسانى";
/* Name of application */
"APPLICATION_NAME" = "Signal";
"APPLICATION_NAME" = "سيگنال";
/* Pressing this button moves a thread from the inbox to the archive */
"ARCHIVE_ACTION" = "آرشیو کردن";
@ -77,181 +77,181 @@
"ATTACHMENT" = "فایل ضمیمه";
/* Title for the 'attachment approval' dialog. */
"ATTACHMENT_APPROVAL_DIALOG_TITLE" = "Attachment";
"ATTACHMENT_APPROVAL_DIALOG_TITLE" = "ضميمه";
/* Format string for file extension label in call interstitial view */
"ATTACHMENT_APPROVAL_FILE_EXTENSION_FORMAT" = "File type: %@";
"ATTACHMENT_APPROVAL_FILE_EXTENSION_FORMAT" = "نوع فايل: %@";
/* Format string for file size label in call interstitial view. Embeds: {{file size as 'N mb' or 'N kb'}}. */
"ATTACHMENT_APPROVAL_FILE_SIZE_FORMAT" = "Size: %@";
"ATTACHMENT_APPROVAL_FILE_SIZE_FORMAT" = "اندازه: %@";
/* Label for 'send' button in the 'attachment approval' dialog. */
"ATTACHMENT_APPROVAL_SEND_BUTTON" = "Send";
"ATTACHMENT_APPROVAL_SEND_BUTTON" = "بفرست";
/* Generic filename for an attachment with no known name */
"ATTACHMENT_DEFAULT_FILENAME" = "Attachment";
"ATTACHMENT_DEFAULT_FILENAME" = "ضميمه";
/* Status label when an attachment download has failed. */
"ATTACHMENT_DOWNLOADING_STATUS_FAILED" = "Failed. Tap to retry.";
"ATTACHMENT_DOWNLOADING_STATUS_FAILED" = "عدم موفقيت در دريافت، براى تلاش دوباره اينجا را كليك كنيد";
/* Status label when an attachment is currently downloading */
"ATTACHMENT_DOWNLOADING_STATUS_IN_PROGRESS" = "Downloading…";
"ATTACHMENT_DOWNLOADING_STATUS_IN_PROGRESS" = "در حال دريافت...";
/* Status label when an attachment is enqueued, but hasn't yet started downloading */
"ATTACHMENT_DOWNLOADING_STATUS_QUEUED" = "Queued";
"ATTACHMENT_DOWNLOADING_STATUS_QUEUED" = "در صف دانلود";
/* The title of the 'attachment error' alert. */
"ATTACHMENT_ERROR_ALERT_TITLE" = "Error Sending Attachment";
"ATTACHMENT_ERROR_ALERT_TITLE" = "خطا در ارسال فایل ضمیمه";
/* Attachment error message for image attachments which could not be converted to JPEG */
"ATTACHMENT_ERROR_COULD_NOT_CONVERT_TO_JPEG" = "Image attachment could not be resized.";
"ATTACHMENT_ERROR_COULD_NOT_CONVERT_TO_JPEG" = "فایل تصویری ضمیمه شده قادر به تغییر سایز نمی باشد";
/* Attachment error message for image attachments which cannot be parsed */
"ATTACHMENT_ERROR_COULD_NOT_PARSE_IMAGE" = "Image attachment could not be parsed.";
/* Attachment error message for attachments whose data exceed file size limits */
"ATTACHMENT_ERROR_FILE_SIZE_TOO_LARGE" = "Attachment is too large.";
"ATTACHMENT_ERROR_FILE_SIZE_TOO_LARGE" = "فایل ضمیمه خیلی بزرگ است";
/* Attachment error message for attachments with invalid data */
"ATTACHMENT_ERROR_INVALID_DATA" = "Attachment has invalid contents.";
"ATTACHMENT_ERROR_INVALID_DATA" = "فایل ضمیمه دارای محتویات غیر مجاز می باشد";
/* Attachment error message for attachments with an invalid file format */
"ATTACHMENT_ERROR_INVALID_FILE_FORMAT" = "Attachment has invalid file format.";
"ATTACHMENT_ERROR_INVALID_FILE_FORMAT" = "فرمت فایل ضمیمه نامعتبر است";
/* Attachment error message for attachments without any data */
"ATTACHMENT_ERROR_MISSING_DATA" = "Attachment is empty.";
"ATTACHMENT_ERROR_MISSING_DATA" = "فایل ضمیمه خالی است";
/* Accessibility hint describing what you can do with the attachment button */
"ATTACHMENT_HINT" = "Choose or take a picture and then send it";
"ATTACHMENT_HINT" = "تصویری را از گالری انتخاب یا بوسیله دوربین عکس بگیرید و آن را ارسال کنید";
/* Accessibility label for attaching photos */
"ATTACHMENT_LABEL" = "Attachment";
"ATTACHMENT_LABEL" = "ضمیمه";
/* Alert title when picking a document fails for an unknown reason */
"ATTACHMENT_PICKER_DOCUMENTS_FAILED_ALERT_TITLE" = "Failed to choose document.";
"ATTACHMENT_PICKER_DOCUMENTS_FAILED_ALERT_TITLE" = "خطا در انتخاب سند";
/* Alert body when picking a document fails because user picked a directory/bundle */
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "Signal can't handle that file as is. Try zipping it before sending.";
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "امکان ارسال این وجود ندارد، فایل را فشرده کرده و سپس دوباره تلاش کنید";
/* Alert title when picking a document fails because user picked a directory/bundle */
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "Unsupported File";
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "این نوع فایل پشتیبانی نمی شود";
/* Short text label for a voice message attachment, used for thread preview and on lockscreen */
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "Voice Message";
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "پیام صوتی";
/* action sheet button title to enable built in speaker during a call */
"AUDIO_ROUTE_BUILT_IN_SPEAKER" = "Speaker";
"AUDIO_ROUTE_BUILT_IN_SPEAKER" = "بلندگو";
/* An explanation of the consequences of blocking another user. */
"BLOCK_BEHAVIOR_EXPLANATION" = "Blocked users will not be able to call you or send you messages.";
"BLOCK_BEHAVIOR_EXPLANATION" = "کاربری که مسدود شده است، امکان تماس یا ارسال پیام برای شما را ندارد";
/* Button label for the 'block' button */
"BLOCK_LIST_BLOCK_BUTTON" = "Block";
"BLOCK_LIST_BLOCK_BUTTON" = "مسدود کردن";
/* A format for the 'block user' action sheet title. Embeds {{the blocked user's name or phone number}}. */
"BLOCK_LIST_BLOCK_TITLE_FORMAT" = "Block %@?";
"BLOCK_LIST_BLOCK_TITLE_FORMAT" = "%@ مسدود شود؟";
/* Button label for the 'unblock' button */
"BLOCK_LIST_UNBLOCK_BUTTON" = "Unblock";
"BLOCK_LIST_UNBLOCK_BUTTON" = "رفع مسدودی";
/* A format for the 'unblock user' action sheet title. Embeds {{the blocked user's name or phone number}}. */
"BLOCK_LIST_UNBLOCK_TITLE_FORMAT" = "Unblock %@?";
"BLOCK_LIST_UNBLOCK_TITLE_FORMAT" = "%@از حالت مسدود خارج شود؟";
/* A label for the block button in the block list view */
"BLOCK_LIST_VIEW_BLOCK_BUTTON" = "Block";
"BLOCK_LIST_VIEW_BLOCK_BUTTON" = "مسدود";
/* The title of the 'block user failed' alert. */
"BLOCK_LIST_VIEW_BLOCK_FAILED_ALERT_MESSAGE" = "Failed to Block User.";
"BLOCK_LIST_VIEW_BLOCK_FAILED_ALERT_MESSAGE" = "ناتوان در مسدود کردن کاربر";
/* The title of the 'block user failed' alert. */
"BLOCK_LIST_VIEW_BLOCK_FAILED_ALERT_TITLE" = "Error";
"BLOCK_LIST_VIEW_BLOCK_FAILED_ALERT_TITLE" = "خطا";
/* The message format of the 'user blocked' alert. Embeds {{the blocked user's name or phone number}}. */
"BLOCK_LIST_VIEW_BLOCKED_ALERT_MESSAGE_FORMAT" = "%@ has been blocked";
"BLOCK_LIST_VIEW_BLOCKED_ALERT_MESSAGE_FORMAT" = "%@مسدود شد";
/* The title of the 'user blocked' alert. */
"BLOCK_LIST_VIEW_BLOCKED_ALERT_TITLE" = "User Blocked";
"BLOCK_LIST_VIEW_BLOCKED_ALERT_TITLE" = "کاربر مسدود شده است";
/* The message of the 'You can't block yourself' alert. */
"BLOCK_LIST_VIEW_CANT_BLOCK_SELF_ALERT_MESSAGE" = "You can't block yourself.";
"BLOCK_LIST_VIEW_CANT_BLOCK_SELF_ALERT_MESSAGE" = "نمیتوانید خودتان را مسدود کنید";
/* The title of the 'You can't block yourself' alert. */
"BLOCK_LIST_VIEW_CANT_BLOCK_SELF_ALERT_TITLE" = "Error";
"BLOCK_LIST_VIEW_CANT_BLOCK_SELF_ALERT_TITLE" = "خطا";
/* The title of the 'unblock user failed' alert. */
"BLOCK_LIST_VIEW_UNBLOCK_FAILED_ALERT_MESSAGE" = "Failed to Unblock User.";
"BLOCK_LIST_VIEW_UNBLOCK_FAILED_ALERT_MESSAGE" = "ناتوان در خارج کردن کاربر از لیست سیاه";
/* The title of the 'unblock user failed' alert. */
"BLOCK_LIST_VIEW_UNBLOCK_FAILED_ALERT_TITLE" = "Error";
"BLOCK_LIST_VIEW_UNBLOCK_FAILED_ALERT_TITLE" = "خطا";
/* The message format of the 'user unblocked' alert. Embeds {{the blocked user's name or phone number}}. */
"BLOCK_LIST_VIEW_UNBLOCKED_ALERT_MESSAGE_FORMAT" = "%@ has been unblocked.";
"BLOCK_LIST_VIEW_UNBLOCKED_ALERT_MESSAGE_FORMAT" = "%@از حالت مسدودی خارج شد";
/* The title of the 'user unblocked' alert. */
"BLOCK_LIST_VIEW_UNBLOCKED_ALERT_TITLE" = "User Unblocked";
"BLOCK_LIST_VIEW_UNBLOCKED_ALERT_TITLE" = "کاربر از لیست مسدودی ها خارج شد";
/* Action sheet that will block an unknown user. */
"BLOCK_OFFER_ACTIONSHEET_BLOCK_ACTION" = "Block";
"BLOCK_OFFER_ACTIONSHEET_BLOCK_ACTION" = "مسدود کردن کاربر";
/* Title format for action sheet that offers to block an unknown user.Embeds {{the unknown user's name or phone number}}. */
"BLOCK_OFFER_ACTIONSHEET_TITLE_FORMAT" = "Block %@?";
"BLOCK_OFFER_ACTIONSHEET_TITLE_FORMAT" = "%@مسدود شود؟";
/* Alert message when calling and permissions for microphone are missing */
"CALL_AUDIO_PERMISSION_MESSAGE" = "Signal requires access to your microphone to make calls and record voice messages. You can grant this permission in the Settings app.";
"CALL_AUDIO_PERMISSION_MESSAGE" = "سیگنال برای برقرای تماس صوتی و ذخیره پیام های صوتی نیاز به دسترسی به میکروفن دارد. شما میتوانید مجوز این دسترسی را از تنظیمات برنامه تغییر دهید";
/* Alert title when calling and permissions for microphone are missing */
"CALL_AUDIO_PERMISSION_TITLE" = "Microphone Access Required";
"CALL_AUDIO_PERMISSION_TITLE" = "نیاز به دسترسی به میکروفن";
/* Accessibilty label for placing call button */
"CALL_LABEL" = "Call";
"CALL_LABEL" = "تماس";
/* Call setup status label after outgoing call times out */
"CALL_SCREEN_STATUS_NO_ANSWER" = "No Answer.";
"CALL_SCREEN_STATUS_NO_ANSWER" = "پاسخی دریافت نشد";
/* embeds {{Call Status}} in call screen label. For ongoing calls, {{Call Status}} is a seconds timer like 01:23, otherwise {{Call Status}} is a short text like 'Ringing', 'Busy', or 'Failed Call' */
"CALL_STATUS_FORMAT" = "Signal %@";
"CALL_STATUS_FORMAT" = "%@سیگنال";
/* Label for call button for alert offering to call a user. */
"CALL_USER_ALERT_CALL_BUTTON" = "Call";
"CALL_USER_ALERT_CALL_BUTTON" = "تماس";
/* Message format for alert offering to call a user. Embeds {{the user's display name or phone number}}. */
"CALL_USER_ALERT_MESSAGE_FORMAT" = "Would you like to call %@?";
"CALL_USER_ALERT_MESSAGE_FORMAT" = "آیا تمایل به تماس با %@ دارید؟";
/* Title for alert offering to call a user. */
"CALL_USER_ALERT_TITLE" = "Call?";
"CALL_USER_ALERT_TITLE" = "تماس؟";
/* Reminder to the user of the benefits of enabling CallKit and disabling CallKit privacy. */
"CALL_VIEW_SETTINGS_NAG_DESCRIPTION_ALL" = "You can answer calls directly from your lock screen and see the name and phone number for incoming calls if you change your settings.\n\nSee the privacy settings for details.";
"CALL_VIEW_SETTINGS_NAG_DESCRIPTION_ALL" = "اگر تنظیمات خود را تغییر دهید می توانید تماس ها را مستقیماً در زمانی که گوشی قفل است پاسخ دهید و اسامی و شماره تلفن کاربر تماس گیرنده را مشاهده کنید.\n\nبرای آگاهی از جزئیات، تنظیمات شخصی سازی را مشاهده کنید";
/* Reminder to the user of the benefits of disabling CallKit privacy. */
"CALL_VIEW_SETTINGS_NAG_DESCRIPTION_PRIVACY" = "You can see the name and phone number for incoming calls if you change your settings.\n\nSee the privacy settings for details.";
"CALL_VIEW_SETTINGS_NAG_DESCRIPTION_PRIVACY" = "اگر تنظیمات خود را تغییر دهید می توانید اسامی و شماره تلفن کاربر تماس گیرنده را مشاهده کنید.\n\nبرای آگاهی از جزئیات، تنظیمات شخصی سازی را مشاهده کنید";
/* Label for button that dismiss the call view's settings nag. */
"CALL_VIEW_SETTINGS_NAG_NOT_NOW_BUTTON" = "Not Now";
"CALL_VIEW_SETTINGS_NAG_NOT_NOW_BUTTON" = "الان نه";
/* Label for button that shows the privacy settings */
"CALL_VIEW_SETTINGS_NAG_SHOW_CALL_SETTINGS" = "Show Privacy Settings";
"CALL_VIEW_SETTINGS_NAG_SHOW_CALL_SETTINGS" = "نمایش تنظیمات حریم خصوصی";
/* notification action */
"CALLBACK_BUTTON_TITLE" = "Call Back";
"CALLBACK_BUTTON_TITLE" = "تماس";
/* The generic name used for calls if CallKit privacy is enabled */
"CALLKIT_ANONYMOUS_CONTACT_NAME" = "Signal User";
"CALLKIT_ANONYMOUS_CONTACT_NAME" = "کاربر سیگنال";
/* Message for alert explaining that a user cannot be verified. */
"CANT_VERIFY_IDENTITY_ALERT_MESSAGE" = "This user can't be verified until you've exchanged messages with them.";
"CANT_VERIFY_IDENTITY_ALERT_MESSAGE" = "این کاربر تا زمانی که پیامی بین شما رد و بدل نشود قابل تایید نیست";
/* Title for alert explaining that a user cannot be verified. */
"CANT_VERIFY_IDENTITY_ALERT_TITLE" = "Error";
"CANT_VERIFY_IDENTITY_ALERT_TITLE" = "خطا ";
/* Title for the 'censorship circumvention country' view. */
"CENSORSHIP_CIRCUMVENTION_COUNTRY_VIEW_TITLE" = "Select Country";
"CENSORSHIP_CIRCUMVENTION_COUNTRY_VIEW_TITLE" = "انتخاب کشود";
/* Activity Sheet label */
"COMPARE_SAFETY_NUMBER_ACTION" = "Compare with Clipboard";
/* Multiline label explaining why compose-screen contact picker is empty. */
"COMPOSE_SCREEN_MISSING_CONTACTS_PERMISSION" = "To see which of your contacts are Signal users, allow contacts access in your system settings.";
"COMPOSE_SCREEN_MISSING_CONTACTS_PERMISSION" = "برای مشاهده مخاطبینی که برنامه سیگنال را نصب کرده اند، از طریق تنظیمات گوشی اجازه دسترسی به مخاطبین را به سیگنال بدهید";
/* No comment provided by engineer. */
"CONFIRM_ACCOUNT_DESTRUCTION_TEXT" = "این کار ، برنامه را با پاک کردن پیام‌ها و حذف شماره ثبت شده شما از سرور ، به حالت اولیه باز می‌گرداند. برنامه بعد از پاک کردن داده‌ها بسته خواهد شد.";
@ -260,121 +260,121 @@
"CONFIRM_ACCOUNT_DESTRUCTION_TITLE" = "آیا از پاک کردن حساب کاربری خود اطمینان دارید؟";
/* Alert body */
"CONFIRM_LEAVE_GROUP_DESCRIPTION" = "You will no longer be able to send or receive messages in this group.";
"CONFIRM_LEAVE_GROUP_DESCRIPTION" = "شما دیگر قادر به ارسال یا دریافت پیام از این گروه نخواهید بود";
/* Alert title */
"CONFIRM_LEAVE_GROUP_TITLE" = "Do you really want to leave?";
"CONFIRM_LEAVE_GROUP_TITLE" = "آیا واقعا قصد ترک کردن دارید؟";
/* Button text */
"CONFIRM_LINK_NEW_DEVICE_ACTION" = "Link New Device";
"CONFIRM_LINK_NEW_DEVICE_ACTION" = "اتصال به دستگاه جدید";
/* Action sheet body presented when a user's SN have recently changed. Embeds {{contact's name or phone nubmer}} */
"CONFIRM_SENDING_TO_CHANGED_IDENTITY_BODY_FORMAT" = "%@ may have reinstalled or changed devices. Verify your safety number with them to ensure privacy.";
"CONFIRM_SENDING_TO_CHANGED_IDENTITY_BODY_FORMAT" = "%@ممکن است برنامه را مجددا نصب کرده باشد یا دستگاه را تغییر داده باشد. شماره خود را با آن ها تایید کنید تا از حریم خصوصی مطمعن شوید.";
/* Action sheet title presented when a users's SN have recently changed. Embeds {{contact's name or phone number}} */
"CONFIRM_SENDING_TO_CHANGED_IDENTITY_TITLE_FORMAT" = "Safety number with %@ has changed";
"CONFIRM_SENDING_TO_CHANGED_IDENTITY_TITLE_FORMAT" = "کلید هویت سنجی با %@تغییر یافته است";
/* Generic button text to proceed with an action */
"CONFIRMATION_TITLE" = "تأیید کنید";
/* An indicator that a contact has been blocked. */
"CONTACT_CELL_IS_BLOCKED" = "Blocked";
"CONTACT_CELL_IS_BLOCKED" = "مسدود شده";
/* An indicator that a contact is no longer verified. */
"CONTACT_CELL_IS_NO_LONGER_VERIFIED" = "Not Verified";
"CONTACT_CELL_IS_NO_LONGER_VERIFIED" = "تایید نشده";
/* No comment provided by engineer. */
"CONTACT_DETAIL_COMM_TYPE_INSECURE" = "شماره‌ی ثبت نشده";
/* table cell subtitle when contact card has no email */
"CONTACT_PICKER_NO_EMAILS_AVAILABLE" = "No email available.";
"CONTACT_PICKER_NO_EMAILS_AVAILABLE" = "هیچ ایمیلی در دسترس نیست";
/* table cell subtitle when contact card has no known phone number */
"CONTACT_PICKER_NO_PHONE_NUMBERS_AVAILABLE" = "No phone number available.";
"CONTACT_PICKER_NO_PHONE_NUMBERS_AVAILABLE" = "هیچ شماره ای در دسترس نیست";
/* title for conversation settings screen */
"CONVERSATION_SETTINGS" = "Conversation Settings";
"CONVERSATION_SETTINGS" = "تنظیمات گفت و گو";
/* Label for 'new contact' button in conversation settings view. */
"CONVERSATION_SETTINGS_ADD_TO_EXISTING_CONTACT" = "Add to Existing Contact";
"CONVERSATION_SETTINGS_ADD_TO_EXISTING_CONTACT" = "اضافه کردن به مخاطبین قبلی";
/* table cell label in conversation settings */
"CONVERSATION_SETTINGS_BLOCK_THIS_USER" = "Block this user";
"CONVERSATION_SETTINGS_BLOCK_THIS_USER" = "قرار دادن کاربر در لیست سیاه";
/* Navbar title when viewing settings for a 1-on-1 thread */
"CONVERSATION_SETTINGS_CONTACT_INFO_TITLE" = "Contact Info";
"CONVERSATION_SETTINGS_CONTACT_INFO_TITLE" = "اطلاعات مخاطب";
/* Navbar title when viewing settings for a group thread */
"CONVERSATION_SETTINGS_GROUP_INFO_TITLE" = "Group Info";
"CONVERSATION_SETTINGS_GROUP_INFO_TITLE" = "اطلاعات گروه";
/* Title of the 'mute this thread' action sheet. */
"CONVERSATION_SETTINGS_MUTE_ACTION_SHEET_TITLE" = "Mute";
"CONVERSATION_SETTINGS_MUTE_ACTION_SHEET_TITLE" = "حالت سکوت";
/* label for 'mute thread' cell in conversation settings */
"CONVERSATION_SETTINGS_MUTE_LABEL" = "Mute";
"CONVERSATION_SETTINGS_MUTE_LABEL" = "حالت سکوت";
/* Indicates that the current thread is not muted. */
"CONVERSATION_SETTINGS_MUTE_NOT_MUTED" = "Not muted";
"CONVERSATION_SETTINGS_MUTE_NOT_MUTED" = "در حالت سکوت نیست";
/* Label for button to mute a thread for a day. */
"CONVERSATION_SETTINGS_MUTE_ONE_DAY_ACTION" = "Mute for one day";
"CONVERSATION_SETTINGS_MUTE_ONE_DAY_ACTION" = "حالت سکوت برای یک روز";
/* Label for button to mute a thread for a hour. */
"CONVERSATION_SETTINGS_MUTE_ONE_HOUR_ACTION" = "Mute for one hour";
"CONVERSATION_SETTINGS_MUTE_ONE_HOUR_ACTION" = "حالت سکوت برای یک ساعت";
/* Label for button to mute a thread for a minute. */
"CONVERSATION_SETTINGS_MUTE_ONE_MINUTE_ACTION" = "Mute for one minute";
"CONVERSATION_SETTINGS_MUTE_ONE_MINUTE_ACTION" = "حالت سکوت برای یک دقیقه";
/* Label for button to mute a thread for a week. */
"CONVERSATION_SETTINGS_MUTE_ONE_WEEK_ACTION" = "Mute for one week";
"CONVERSATION_SETTINGS_MUTE_ONE_WEEK_ACTION" = "حالت سکوت برای یک هفته";
/* Label for button to mute a thread for a year. */
"CONVERSATION_SETTINGS_MUTE_ONE_YEAR_ACTION" = "Mute for one year";
"CONVERSATION_SETTINGS_MUTE_ONE_YEAR_ACTION" = "حالت سکوت برای یک سال";
/* Indicates that this thread is muted until a given date or time. Embeds {{The date or time which the thread is muted until}}. */
"CONVERSATION_SETTINGS_MUTED_UNTIL_FORMAT" = "until %@";
"CONVERSATION_SETTINGS_MUTED_UNTIL_FORMAT" = "تا %@";
/* Label for 'new contact' button in conversation settings view. */
"CONVERSATION_SETTINGS_NEW_CONTACT" = "Create New Contact";
"CONVERSATION_SETTINGS_NEW_CONTACT" = "ساخت مخاطب جدید";
/* Label for button to unmute a thread. */
"CONVERSATION_SETTINGS_UNMUTE_ACTION" = "Unmute";
"CONVERSATION_SETTINGS_UNMUTE_ACTION" = "خارج کردن از حالت سکوت";
/* ActionSheet title */
"CORRUPTED_SESSION_DESCRIPTION" = "Resetting your session will allow you to receive future messages from %@, but it will not recover any already corrupted messages.";
"CORRUPTED_SESSION_DESCRIPTION" = "برای دریافت پیام های آتی از طرف %@ نشست خود را دوباره راه اندازی کنید، اما پیام های قبل بازگردانده نخواهند شد";
/* No comment provided by engineer. */
"COUNTRYCODE_SELECT_TITLE" = "پیش‌شماره کشور را انتخاب کنید";
/* Accessibility label for the create group new group button */
"CREATE_NEW_GROUP" = "Create new group";
"CREATE_NEW_GROUP" = "ساخت گروه جدید";
/* Subtitle shown while the app is updating its database. */
"DATABASE_VIEW_OVERLAY_SUBTITLE" = "This can take a few minutes.";
"DATABASE_VIEW_OVERLAY_SUBTITLE" = "ممکن است چند دقیقه زمان ببرد";
/* Title shown while the app is updating its database. */
"DATABASE_VIEW_OVERLAY_TITLE" = "Updating Database";
"DATABASE_VIEW_OVERLAY_TITLE" = "به روز رسانی پایگاه داده";
/* {{Short Date}} when device last communicated with Signal Server. */
"DEVICE_LAST_ACTIVE_AT_LABEL" = "آخرین فعالیت: %@";
/* {{Short Date}} when device was linked. */
"DEVICE_LINKED_AT_LABEL" = "Linked: %@";
"DEVICE_LINKED_AT_LABEL" = "وصل شده : %@";
/* Alert title that can occur when viewing device manager. */
"DEVICE_LIST_UPDATE_FAILED_TITLE" = "موفق به به‌روزرسانی لیست دستگاه نشد";
/* table cell label in conversation settings */
"DISAPPEARING_MESSAGES" = "Disappearing Messages";
"DISAPPEARING_MESSAGES" = "محو کردن پیام ها";
/* subheading in conversation settings */
"DISAPPEARING_MESSAGES_DESCRIPTION" = "When enabled, messages sent and received in this conversation will disappear after they have been seen.";
"DISAPPEARING_MESSAGES_DESCRIPTION" = "با فعال سازی این مورد، پیام های ارسالی و دریافتی پس از مشاهده محو خواهند شد";
/* Accessibility hint that contains current timeout information */
"DISAPPEARING_MESSAGES_HINT" = "Currently messages disappear after %@";
"DISAPPEARING_MESSAGES_HINT" = "این پیغام پس از %@ محو خواهد شد";
/* Accessibility label for disappearing messages */
"DISAPPEARING_MESSAGES_LABEL" = "Disappearing messages settings";
"DISAPPEARING_MESSAGES_LABEL" = "تنظیمات محو سازی خودکار پیام ها";
/* Short text to dismiss current modal / actionsheet / screen */
"DISMISS_BUTTON_TEXT" = "انصراف";
@ -383,55 +383,55 @@
"DOMAIN_FRONTING_COUNTRY_VIEW_SECTION_HEADER" = "Censorship Circumvention Location";
/* Alert body for when the user has just tried to edit a contacts after declining to give Signal contacts permissions */
"EDIT_CONTACT_WITHOUT_CONTACTS_PERMISSION_ALERT_BODY" = "You can give access in the Settings app.";
"EDIT_CONTACT_WITHOUT_CONTACTS_PERMISSION_ALERT_BODY" = "شما میتوانید این دسترسی را از تنظیمات اعمال کنید";
/* Alert title for when the user has just tried to edit a contacts after declining to give Signal contacts permissions */
"EDIT_CONTACT_WITHOUT_CONTACTS_PERMISSION_ALERT_TITLE" = "Signal Needs Contact Access to Edit Contact Information";
"EDIT_CONTACT_WITHOUT_CONTACTS_PERMISSION_ALERT_TITLE" = "برای ویرایش اطلاعات مخاطبین، سیگنال نیاز به دسترسی به مخاطبین دارد";
/* table cell label in conversation settings */
"EDIT_GROUP_ACTION" = "Edit Group";
"EDIT_GROUP_ACTION" = "وایرایش گروه";
/* a title for the contacts section of the 'new/update group' view. */
"EDIT_GROUP_CONTACTS_SECTION_TITLE" = "Contacts";
"EDIT_GROUP_CONTACTS_SECTION_TITLE" = "مخاطبین";
/* The navbar title for the 'update group' view. */
"EDIT_GROUP_DEFAULT_TITLE" = "Edit Group";
"EDIT_GROUP_DEFAULT_TITLE" = "ویرایش گروه";
/* Label for the cell that lets you add a new member to a group. */
"EDIT_GROUP_MEMBERS_ADD_MEMBER" = "Add…";
"EDIT_GROUP_MEMBERS_ADD_MEMBER" = "اضافه کردن ...";
/* a title for the members section of the 'new/update group' view. */
"EDIT_GROUP_MEMBERS_SECTION_TITLE" = "Members";
"EDIT_GROUP_MEMBERS_SECTION_TITLE" = "اعضا";
/* An indicator that a user is a new member of the group. */
"EDIT_GROUP_NEW_MEMBER_LABEL" = "Added";
"EDIT_GROUP_NEW_MEMBER_LABEL" = "اضافه شده";
/* The title for the 'update group' button. */
"EDIT_GROUP_UPDATE_BUTTON" = "Update";
"EDIT_GROUP_UPDATE_BUTTON" = "به روزرسانی";
/* The alert message if user tries to exit update group view without saving changes. */
"EDIT_GROUP_VIEW_UNSAVED_CHANGES_MESSAGE" = "You've changed this group. Would you like to save these changes?";
"EDIT_GROUP_VIEW_UNSAVED_CHANGES_MESSAGE" = "شما این گروه را تغییر داده اید. آیا تمایل به ذخیره تغییرات دارید؟";
/* The alert title if user tries to exit update group view without saving changes. */
"EDIT_GROUP_VIEW_UNSAVED_CHANGES_TITLE" = "Unsaved Changes";
"EDIT_GROUP_VIEW_UNSAVED_CHANGES_TITLE" = "تغییرات ذخیره نشده";
/* Short name for edit menu item to copy contents of media message. */
"EDIT_ITEM_COPY_ACTION" = "Copy";
"EDIT_ITEM_COPY_ACTION" = "کپی";
/* Short name for edit menu item to save contents of media message. */
"EDIT_ITEM_SAVE_ACTION" = "ذخیره کن";
/* Short name for edit menu item to share contents of media message. */
"EDIT_ITEM_SHARE_ACTION" = "Share";
"EDIT_ITEM_SHARE_ACTION" = "اشتراک گذاری";
/* No comment provided by engineer. */
"EDIT_TXT" = "Edit";
"EDIT_TXT" = "ویرایش کنید";
/* body of email sent to contacts when inviting to install Signal. Embeds {{link to install Signal}} and {{link to WhisperSystems home page}} */
"EMAIL_INVITE_BODY" = "Hey,\n\nLately I've been using Signal to keep the conversations on my iPhone private. I'd like you to install it too, so we can be confident that only you and I can read our messages or hear our calls.\n\nSignal is available for iPhones and Android. Get it here: %@\n\nSignal works like your existing messaging app. We can send pictures and video, make calls, and start group chats. The best part is, no one else can see any of it, not even the people who make Signal!\n\nYou can read more about Open Whisper Systems, the people who make Signal, here: %@";
"EMAIL_INVITE_BODY" = "سلام، \n\nمدتیه از برنامه سیگنال برای مکالمات محرمانه و خصوصی روی آیفونم استفاده میکنم. دوست دارم شما هم این برنامه رو نصب کنید تا خیالمون از اینکه فقط من و شما به مکالمات و تماس ها دسترسی داریم، راحت باشه.\n\nبرنامه سگنال برای گوشی های ایفون و اندرویید موجود هست. دریاف برنامه از:%@\n\nسیگنال مثل برنامه ارسال پیام گوشی شما عمل میکنه. ما میتونیم از طریق این برنامه عکس و ویدیو بفرستیم، تماس صوتی بگیریم و گفت و گوی گروهی ایجاد کنیم. بهترین مورد درباره سیگنال اینه که هیچ کس جز خود ما نمیتونه پیام ها رو بخونه حتی سازندگان این برنامه.\n\nبرای کسب اطلاعات بیشتر راجع به شرکت Open Whisper System یعنی سازندگان برنامه سیگنال میتونید اینجا %@مطالعه کنید ";
/* subject of email sent to contacts when inviting to install Signal */
"EMAIL_INVITE_SUBJECT" = "Let's switch to Signal";
"EMAIL_INVITE_SUBJECT" = "به نرم افزار پیام رسان سیگنال بپیوندید";
/* No comment provided by engineer. */
"EMPTY_ARCHIVE_FIRST_TEXT" = "آیکن نوشتن را لمس کنید.";
@ -446,10 +446,10 @@
"EMPTY_ARCHIVE_TITLE" = "گفتگو‌های خود با دیگران را پاک کنید.";
/* Full width label displayed when attempting to compose message */
"EMPTY_CONTACTS_LABEL_LINE1" = "None of your contacts have Signal.";
"EMPTY_CONTACTS_LABEL_LINE1" = "هیچ کدام از مخاطبین شما برنامه سیگنال را نصب نکرده اند";
/* Full width label displayed when attempting to compose message */
"EMPTY_CONTACTS_LABEL_LINE2" = "Why don't you invite someone?";
"EMPTY_CONTACTS_LABEL_LINE2" = "چرا از کسی دعوت نمیکنید؟";
/* No comment provided by engineer. */
"EMPTY_INBOX_FIRST_TEXT" = "راهنمایی: گفتگویی را برای یادآوری اضافه کنید.";
@ -464,37 +464,37 @@
"EMPTY_INBOX_TITLE" = "خالی مثل جیب‌ها.";
/* Call setup status label */
"END_CALL_RESPONDER_IS_BUSY" = "Busy.";
"END_CALL_RESPONDER_IS_BUSY" = "مشغول.";
/* Call setup status label */
"END_CALL_UNCATEGORIZED_FAILURE" = "Call Failed.";
"END_CALL_UNCATEGORIZED_FAILURE" = "تماس ناموفق";
/* Generic notice when message failed to send. */
"ERROR_DESCRIPTION_CLIENT_SENDING_FAILURE" = "Failed to send message.";
"ERROR_DESCRIPTION_CLIENT_SENDING_FAILURE" = "ناتوان در ارسال پیام";
/* Error mesage indicating that message send is disabled due to prekey update failures */
"ERROR_DESCRIPTION_MESSAGE_SEND_DISABLED_PREKEY_UPDATE_FAILURES" = "Unable to send due to stale privacy data.";
/* Error mesage indicating that message send failed due to block list */
"ERROR_DESCRIPTION_MESSAGE_SEND_FAILED_DUE_TO_BLOCK_LIST" = "Failed to message user because you blocked them.";
"ERROR_DESCRIPTION_MESSAGE_SEND_FAILED_DUE_TO_BLOCK_LIST" = "با توجه به اینکه این کاربر را سابقاً مسدود کرده اید امکان ارسال پیام وجود ندارد";
/* Generic error used whenver Signal can't contact the server */
"ERROR_DESCRIPTION_NO_INTERNET" = "Signal was unable to connect to the internet. Please try from another WiFi network or use mobile data.";
"ERROR_DESCRIPTION_NO_INTERNET" = "امکان برقراری ارتباط سیگنال با اینترنت وجود ندارد، لطفاً از یک شبکه ی بیسیم دیگر و یا از اینترنت سیم کارت خود استفاده کنید";
/* Error indicating that an outgoing message had no valid recipients. */
"ERROR_DESCRIPTION_NO_VALID_RECIPIENTS" = "Message send failed due to a lack of valid recipients.";
"ERROR_DESCRIPTION_NO_VALID_RECIPIENTS" = "به دلیل عدم وجود گیرنده ی مشخص، پیام ارسال نشد";
/* Error message when attempting to send message */
"ERROR_DESCRIPTION_SENDING_UNAUTHORIZED" = "Your device is no longer registered for your phone number. You must remove and reinstall Signal.";
"ERROR_DESCRIPTION_SENDING_UNAUTHORIZED" = "این دستگاه با شماره تلفن شما هماهنگ نشده است، اطفاً برنامه ی سیگنال را حذف و دوباره نصب نماییید";
/* Generic server error */
"ERROR_DESCRIPTION_SERVER_FAILURE" = "Server Error. Please try again later.";
"ERROR_DESCRIPTION_SERVER_FAILURE" = "خطای سمت سرور. لطفا مجددا تلاش کنید";
/* Worst case generic error message */
"ERROR_DESCRIPTION_UNKNOWN_ERROR" = "An unknown error occurred.";
"ERROR_DESCRIPTION_UNKNOWN_ERROR" = "یک خطای ناشناخته رخ داده است";
/* Error message when attempting to send message */
"ERROR_DESCRIPTION_UNREGISTERED_RECIPIENT" = "Contact is not a Signal user.";
"ERROR_DESCRIPTION_UNREGISTERED_RECIPIENT" = "مخاطب مورد نظر، سیگنال ندارد";
/* No comment provided by engineer. */
"ERROR_MESSAGE_DUPLICATE_MESSAGE" = "پیامی تکراری دریافت شده است.";
@ -503,7 +503,7 @@
"ERROR_MESSAGE_INVALID_KEY_EXCEPTION" = "کلید دریافت کننده پبام معتبر نیست.";
/* No comment provided by engineer. */
"ERROR_MESSAGE_INVALID_MESSAGE" = "Received message was out of sync. Tap to reset your secure session.";
"ERROR_MESSAGE_INVALID_MESSAGE" = "پیام دریافت شده از لحاظ زمانی با زمان دستگاه شما مطابقت ندارد، برای تنظیم دوباره ی سیستم امنیتی خود اینجا را کلیلک کنید";
/* No comment provided by engineer. */
"ERROR_MESSAGE_INVALID_VERSION" = "پیامی ناسازگار با این نسخه برنامه دریافت شده است.";
@ -512,28 +512,28 @@
"ERROR_MESSAGE_NO_SESSION" = "هیج مسیری برای تبادل اطلاعات با این مخاطب فعال نیست.";
/* Shown when signal users safety numbers changed */
"ERROR_MESSAGE_NON_BLOCKING_IDENTITY_CHANGE" = "Safety number changed.";
"ERROR_MESSAGE_NON_BLOCKING_IDENTITY_CHANGE" = "شماره تغییر کرده است";
/* Shown when signal users safety numbers changed, embeds the user's {{name or phone number}} */
"ERROR_MESSAGE_NON_BLOCKING_IDENTITY_CHANGE_FORMAT" = "Your safety number with %@ has changed.";
"ERROR_MESSAGE_NON_BLOCKING_IDENTITY_CHANGE_FORMAT" = "کلید هویت سنجی شما با %@ تغییر یافته است";
/* No comment provided by engineer. */
"ERROR_MESSAGE_UNKNOWN_ERROR" = "An unknown error occurred.";
"ERROR_MESSAGE_UNKNOWN_ERROR" = "خطای نامشخصی رخ داده است";
/* No comment provided by engineer. */
"ERROR_MESSAGE_WRONG_TRUSTED_IDENTITY_KEY" = "Safety number changed. Tap to verify.";
"ERROR_MESSAGE_WRONG_TRUSTED_IDENTITY_KEY" = "کلید هویت سنجی تغییر یافته است، برای تایید دوباره اینجا را کلیلک کنید";
/* during registration */
"EXISTING_USER_REGISTRATION_ALERT_BODY" = "At this time Signal can only be active on one mobile device per phone number.";
"EXISTING_USER_REGISTRATION_ALERT_BODY" = "در حال حاضر برنامه ی سیگنال فقط می تواند با هر شماره تلفن روی یک گوشی موبایل فعال باشد";
/* during registration, embeds {{device type}}, e.g. \"iPhone\" or \"iPad\" */
"EXISTING_USER_REGISTRATION_ALERT_TITLE" = "Activating this %@ will disable Signal on any other device currently associated with this phone number.";
/* Message for the alert indicating the 'export with signal' file had an invalid filename. */
"EXPORT_WITH_SIGNAL_ERROR_MESSAGE_INVALID_FILENAME" = "Invalid filename.";
"EXPORT_WITH_SIGNAL_ERROR_MESSAGE_INVALID_FILENAME" = "نام فایل نامعتبر است";
/* Message for the alert indicating the 'export with signal' attachment couldn't be loaded. */
"EXPORT_WITH_SIGNAL_ERROR_MESSAGE_MISSING_ATTACHMENT" = "Couldn't load file.";
"EXPORT_WITH_SIGNAL_ERROR_MESSAGE_MISSING_ATTACHMENT" = "خطا در دریافت فایل";
/* Message for the alert indicating the 'export with signal' data couldn't be loaded. */
"EXPORT_WITH_SIGNAL_ERROR_MESSAGE_MISSING_DATA" = "Couldn't load file.";
@ -560,19 +560,19 @@
"FINGERPRINT_SHRED_KEYMATERIAL_BUTTON" = "بازگردانی این نشست به حالت اولیه";
/* Accessibilty label for finishing new group */
"FINISH_GROUP_CREATION_LABEL" = "Finish creating group";
"FINISH_GROUP_CREATION_LABEL" = "اتمام ساخت گروه";
/* A default label for attachment whose file extension cannot be determined. */
"GENERIC_ATTACHMENT_DEFAULT_TYPE" = "?";
"GENERIC_ATTACHMENT_DEFAULT_TYPE" = "؟";
/* A label for generic attachments. */
"GENERIC_ATTACHMENT_LABEL" = "Attachment";
"GENERIC_ATTACHMENT_LABEL" = "ضمیمه";
/* No comment provided by engineer. */
"GROUP_AVATAR_CHANGED" = "آواتار گروه تغییر کرده است.";
"GROUP_AVATAR_CHANGED" = "آواتار تغییر کرد.";
/* No comment provided by engineer. */
"GROUP_CREATED" = "Group created.";
"GROUP_CREATED" = "گروه ساخته شد.";
/* No comment provided by engineer. */
"GROUP_CREATING" = "ایجاد گروه جدید";
@ -581,7 +581,7 @@
"GROUP_CREATION_FAILED" = "Not all members could be added to the group. Tap to retry.";
/* Conversation settings table section title */
"GROUP_MANAGEMENT_SECTION" = "Group Management";
"GROUP_MANAGEMENT_SECTION" = "مدیریت گروه";
/* No comment provided by engineer. */
"GROUP_MEMBER_JOINED" = "%@ به گروه ملحق شد.";
@ -590,10 +590,10 @@
"GROUP_MEMBER_LEFT" = "%@ از گروه خارج شد.";
/* Button label to add information to an unknown contact */
"GROUP_MEMBERS_ADD_CONTACT_INFO" = "Add Contact";
"GROUP_MEMBERS_ADD_CONTACT_INFO" = "اضافه کردن مخاطب";
/* Button label for the 'call group member' button */
"GROUP_MEMBERS_CALL" = "Call";
"GROUP_MEMBERS_CALL" = "تماس";
/* Label for the button that clears all verification errors in the 'group members' view. */
"GROUP_MEMBERS_RESET_NO_LONGER_VERIFIED" = "Clear Verification For All";
@ -602,16 +602,16 @@
"GROUP_MEMBERS_RESET_NO_LONGER_VERIFIED_ALERT_MESSAGE" = "This will clear the verification of all group members whose safety numbers have changed since they were last verified.";
/* Title for the 'members' section of the 'group members' view. */
"GROUP_MEMBERS_SECTION_TITLE_MEMBERS" = "Members";
"GROUP_MEMBERS_SECTION_TITLE_MEMBERS" = "اعضا";
/* Title for the 'no longer verified' section of the 'group members' view. */
"GROUP_MEMBERS_SECTION_TITLE_NO_LONGER_VERIFIED" = "No Longer Marked as Verified";
/* Button label for the 'send message to group member' button */
"GROUP_MEMBERS_SEND_MESSAGE" = "Send Message";
"GROUP_MEMBERS_SEND_MESSAGE" = "ارسال پیام";
/* Button label for the 'show contact info' button */
"GROUP_MEMBERS_VIEW_CONTACT_INFO" = "Contact Info";
"GROUP_MEMBERS_VIEW_CONTACT_INFO" = "اطلاعات مخاطب";
/* No comment provided by engineer. */
"GROUP_REMOVING" = "ترک گروه %@";
@ -665,7 +665,7 @@
"INFO_MESSAGE_MISSED_CALL_DUE_TO_CHANGED_IDENITY" = "Missed call because their safety number has changed.";
/* Message for the alert indicating that an audio file is invalid. */
"INVALID_AUDIO_FILE_ALERT_ERROR_MESSAGE" = "Invalid audio file.";
"INVALID_AUDIO_FILE_ALERT_ERROR_MESSAGE" = "فایل صوتی نامعتبر";
/* Alert body when contacts disabled while trying to invite contacts to signal */
"INVITE_FLOW_REQUIRES_CONTACT_ACCESS_BODY" = "To invite your contacts, you need to allow Signal access to your contacts in the Settings app.";
@ -677,10 +677,10 @@
"INVITE_FRIENDS_CONTACT_TABLE_BUTTON" = "Invite Friends to Signal";
/* Search */
"INVITE_FRIENDS_PICKER_SEARCHBAR_PLACEHOLDER" = "Search";
"INVITE_FRIENDS_PICKER_SEARCHBAR_PLACEHOLDER" = "جست و جو";
/* Navbar title */
"INVITE_FRIENDS_PICKER_TITLE" = "Invite Friends";
"INVITE_FRIENDS_PICKER_TITLE" = "دعوت از دوستان";
/* Slider label embeds {{TIME_AMOUNT}}, e.g. '2 hours'. See *_TIME_AMOUNT strings for examples. */
"KEEP_MESSAGES_DURATION" = "Messages disappear after %@.";
@ -692,7 +692,7 @@
"LEAVE_BUTTON_TITLE" = "خروج از گروه";
/* table cell label in conversation settings */
"LEAVE_GROUP_ACTION" = "Leave Group";
"LEAVE_GROUP_ACTION" = "ترک کردن گروه";
/* report an invalid linking code */
"LINK_DEVICE_INVALID_CODE_BODY" = "This QR code is not valid, make sure you are scanning the QR code displayed on the device you want to link.";
@ -734,46 +734,46 @@
"ME_STRING" = "من";
/* media picker option to take photo or video */
"MEDIA_FROM_CAMERA_BUTTON" = "Camera";
"MEDIA_FROM_CAMERA_BUTTON" = "دوربین";
/* action sheet button title when choosing attachment type */
"MEDIA_FROM_DOCUMENT_PICKER_BUTTON" = "Document";
"MEDIA_FROM_DOCUMENT_PICKER_BUTTON" = "سند";
/* media picker option to choose from library */
"MEDIA_FROM_LIBRARY_BUTTON" = "Photo Library";
"MEDIA_FROM_LIBRARY_BUTTON" = "گالری";
/* No comment provided by engineer. */
"MESSAGE_COMPOSEVIEW_TITLE" = "پیام جدید";
/* message footer for delivered messages */
"MESSAGE_STATUS_DELIVERED" = "Delivered";
"MESSAGE_STATUS_DELIVERED" = "تحویل داده شده";
/* message footer for failed messages */
"MESSAGE_STATUS_FAILED" = "Sending failed. Tap for info.";
"MESSAGE_STATUS_FAILED" = "ارسال ناموفق. برای اطلاعات بیشتر فشار دهید";
/* message footer for sent messages */
"MESSAGE_STATUS_SENT" = "Sent";
"MESSAGE_STATUS_SENT" = "ارسال شد";
/* message footer while attachment is uploading */
"MESSAGE_STATUS_UPLOADING" = "Uploading…";
"MESSAGE_STATUS_UPLOADING" = "در حال ارسال ...";
/* Indicates that one member of this group conversation is no longer verified. Embeds {{user's name or phone number}}. */
"MESSAGES_VIEW_1_MEMBER_NO_LONGER_VERIFIED_FORMAT" = "%@ is no longer marked as verified. Tap for options.";
/* Indicates that this 1:1 conversation has been blocked. */
"MESSAGES_VIEW_CONTACT_BLOCKED" = "You Blocked this User";
"MESSAGES_VIEW_CONTACT_BLOCKED" = "شما این کاربر را مسدود کرده اید";
/* Indicates that this 1:1 conversation is no longer verified. Embeds {{user's name or phone number}}. */
"MESSAGES_VIEW_CONTACT_NO_LONGER_VERIFIED_FORMAT" = "%@ is no longer marked as verified. Tap for options.";
/* Action sheet title after tapping on failed download. */
"MESSAGES_VIEW_FAILED_DOWNLOAD_ACTIONSHEET_TITLE" = "Download Failed.";
"MESSAGES_VIEW_FAILED_DOWNLOAD_ACTIONSHEET_TITLE" = "دریافت ناموفق";
/* Action sheet button text */
"MESSAGES_VIEW_FAILED_DOWNLOAD_RETRY_ACTION" = "Download Again";
"MESSAGES_VIEW_FAILED_DOWNLOAD_RETRY_ACTION" = "دریافت مجدد";
/* Indicates that a single member of this group has been blocked. */
"MESSAGES_VIEW_GROUP_1_MEMBER_BLOCKED" = "You Blocked 1 Member of this Group";
"MESSAGES_VIEW_GROUP_1_MEMBER_BLOCKED" = "شما 1 عضو از این گروه را مسدود کرده اید";
/* Indicates that some members of this group has been blocked. Embeds {{the number of blocked users in this group}}. */
"MESSAGES_VIEW_GROUP_N_MEMBERS_BLOCKED_FORMAT" = "You Blocked %@ Members of this Group";
@ -782,10 +782,10 @@
"MESSAGES_VIEW_N_MEMBERS_NO_LONGER_VERIFIED" = "More than one member of this group is no longer marked as verified. Tap for options.";
/* The subtitle for the messages view title indicates that the title can be tapped to access settings for this conversation. */
"MESSAGES_VIEW_TITLE_SUBTITLE" = "Tap here for settings";
"MESSAGES_VIEW_TITLE_SUBTITLE" = "برای تنظیمات اینجا را فشار دهید";
/* Indicator that separates read from unread messages. */
"MESSAGES_VIEW_UNREAD_INDICATOR" = "Unread Messages";
"MESSAGES_VIEW_UNREAD_INDICATOR" = "پیام های خوانده نشده";
/* Messages that indicates that there are more unseen messages including safety number changes that be revealed by tapping the 'load earlier messages' button. Embeds {{the name of the 'load earlier messages' button}}. */
"MESSAGES_VIEW_UNREAD_INDICATOR_HAS_MORE_UNSEEN_MESSAGES_AND_SAFETY_NUMBER_CHANGES_FORMAT" = "There are more unread messages (including safety number changes) above. Tap \"%@\" to see them.";
@ -1424,7 +1424,7 @@
"UPGRADE_EXPERIENCE_CALLKIT_DESCRIPTION" = "Answering calls from your lock screen is easy with iOS call integration. We anonymize your caller by default, so it's private too.";
/* button label shown once when when user upgrades app, in context of call kit */
"UPGRADE_EXPERIENCE_CALLKIT_PRIVACY_SETTINGS_BUTTON" = "Learn more in your privacy settings.";
"UPGRADE_EXPERIENCE_CALLKIT_PRIVACY_SETTINGS_BUTTON" = "در مورد تنظیمات حریم خصوصی بیشتر بدانید";
/* Header for upgrade experience */
"UPGRADE_EXPERIENCE_CALLKIT_TITLE" = "Just Swipe to Answer";
@ -1454,13 +1454,13 @@
"VERIFICATION_CHALLENGE_SEND_VIA_VOICE" = "Call Me Instead";
/* button text during registration to request another SMS code be sent */
"VERIFICATION_CHALLENGE_SUBMIT_AGAIN" = "Resend Code by SMS";
"VERIFICATION_CHALLENGE_SUBMIT_AGAIN" = "ارسال مجدد کد با پیامک";
/* button text during registration to submit your SMS verification code */
"VERIFICATION_CHALLENGE_SUBMIT_CODE" = "کد تآیید را وارد نمایید";
/* Label indicating the phone number currently being verified. */
"VERIFICATION_PHONE_NUMBER_FORMAT" = "Enter the verification code we sent to %@.";
"VERIFICATION_PHONE_NUMBER_FORMAT" = "کد تایید ارسال شده به %@ را وارد کنید";
/* Format for info message indicating that the verification state was unverified on this device. Embeds {{user's name or phone number}}. */
"VERIFICATION_STATE_CHANGE_FORMAT_NOT_VERIFIED_LOCAL" = "You marked %@ as not verified.";
@ -1484,13 +1484,13 @@
"VERIFY_PRIVACY_MULTIPLE" = "Review Safety Numbers";
/* Indicates how to cancel a voice message. */
"VOICE_MESSAGE_CANCEL_INSTRUCTIONS" = "Slide to Cancel";
"VOICE_MESSAGE_CANCEL_INSTRUCTIONS" = "برای کنسل کردن به کناره بکشید";
/* Filename for voice messages. */
"VOICE_MESSAGE_FILE_NAME" = "Voice Message";
/* Message for the alert indicating the 'voice message' needs to be held to be held down to record. */
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "Tap and hold to record a voice message.";
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "برای ضبط و ارسال پیام صوتی اینجا را فشار داده و نگه دارید";
/* Title for the alert indicating the 'voice message' needs to be held to be held down to record. */
"VOICE_MESSAGE_TOO_SHORT_ALERT_TITLE" = "Voice Message";
@ -1502,15 +1502,15 @@
"WHISPER_NAV_BAR_TITLE" = "دریافت شده‌ها";
/* Info Message when you disable disappearing messages */
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "You disabled disappearing messages.";
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "شما حذف خودکار پیام ها را غیر فعال کردید";
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "You set disappearing message time to %@.";
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "شما زمان حذف خودکار پیام ها را به %@ تغییر دادید";
// Strings Copied in from JSQMessagesViewController
"load_earlier_messages" = "Load Earlier Messages";
"load_earlier_messages" = "نمایش پیام های قدیمی";
"send" = "Send";
@ -1520,6 +1520,6 @@
"media_message_accessibility_label" = "%@: media message";
"accessory_button_accessibility_label" = "Share media";
"accessory_button_accessibility_label" = "اشتراک گذاری فایل";
"new_message_received_accessibility_announcement" = "New message received";
"new_message_received_accessibility_announcement" = "پیام جدید دریافت شد";

View file

@ -2,55 +2,55 @@
"AB_PERMISSION_MISSING_ACTION_NOT_NOW" = "Not Now";
/* Action sheet item */
"ACCEPT_NEW_IDENTITY_ACTION" = "Accept New Safety Number";
"ACCEPT_NEW_IDENTITY_ACTION" = "אשר/י מספר ביטחון חדש";
/* A label for the 'add by phone number' button in the 'add group member' view */
"ADD_GROUP_MEMBER_VIEW_BUTTON" = "Add";
"ADD_GROUP_MEMBER_VIEW_BUTTON" = "הוסף";
/* Title for the 'add contact' section of the 'add group member' view. */
"ADD_GROUP_MEMBER_VIEW_CONTACT_TITLE" = "Add Contact";
"ADD_GROUP_MEMBER_VIEW_CONTACT_TITLE" = "הוסף איש קשר";
/* Title for the 'add by phone number' section of the 'add group member' view. */
"ADD_GROUP_MEMBER_VIEW_PHONE_NUMBER_TITLE" = "Add by Phone Number";
"ADD_GROUP_MEMBER_VIEW_PHONE_NUMBER_TITLE" = "הוסף לפי מספר טלפון";
/* Title for the 'add group member' view. */
"ADD_GROUP_MEMBER_VIEW_TITLE" = "Add Member";
/* Message shown in conversation view that offers to add an unknown user to your phone's contacts. */
"ADD_TO_CONTACTS_OFFER" = "Would you like to add this user to your contacts?";
"ADD_TO_CONTACTS_OFFER" = "האם ברצונך להוסיף משתמש זה לרשימת אנשי הקשר שלך?";
/* The label for the 'discard' button in alerts and action sheets. */
"ALERT_DISCARD_BUTTON" = "Discard";
"ALERT_DISCARD_BUTTON" = "התעלם";
/* The label for the 'don't save' button in action sheets. */
"ALERT_DONT_SAVE" = "Don't Save";
"ALERT_DONT_SAVE" = "אל תשמור";
/* Title for a generic error alert. */
"ALERT_ERROR_TITLE" = "Error";
"ALERT_ERROR_TITLE" = "תקלה";
/* The label for the 'save' button in action sheets. */
"ALERT_SAVE" = "Save";
"ALERT_SAVE" = "שמור";
/* A message for the alert shown while validating a signal account */
"ALERT_VALIDATE_RECIPIENT_MESSAGE" = "Checking that this is a valid Signal account.";
/* A title for the alert shown while validating a signal account */
"ALERT_VALIDATE_RECIPIENT_TITLE" = "Validating";
"ALERT_VALIDATE_RECIPIENT_TITLE" = "מאמת";
/* registration button text */
"ALREADY_HAVE_ACCOUNT_BUTTON" = "כבר יש לך חשבון בסיגנל?";
"ALREADY_HAVE_ACCOUNT_BUTTON" = "כבר יש לך משתמש Signal?";
/* No comment provided by engineer. */
"ANSWER_CALL_BUTTON_TITLE" = "לענות";
"ANSWER_CALL_BUTTON_TITLE" = "ענה";
/* No comment provided by engineer. */
"APN_Message" = "מסר חדש!";
"APN_Message" = "הודעה חדשה!";
/* No comment provided by engineer. */
"APN_MESSAGE_FROM" = "מסר מאת";
"APN_MESSAGE_FROM" = "הודעה מ-";
/* No comment provided by engineer. */
"APN_MESSAGE_IN_GROUP" = "מסר בקבוצה";
"APN_MESSAGE_IN_GROUP" = "הודעה בקבוצה";
/* No comment provided by engineer. */
"APN_MESSAGE_IN_GROUP_DETAILED" = "%@ בקבוצה %@: %@";
@ -59,7 +59,7 @@
"APP_UPDATE_NAG_ALERT_MESSAGE_FORMAT" = "Version %@ is now available in the App Store.";
/* Title for the 'new app version available' alert. */
"APP_UPDATE_NAG_ALERT_TITLE" = "A New Version of Signal is Available";
"APP_UPDATE_NAG_ALERT_TITLE" = "גרסה חדשה של Signal זמינה להורדה";
/* Label for the 'update' button in the 'new app version available' alert. */
"APP_UPDATE_NAG_ALERT_UPDATE_BUTTON" = "Update";
@ -68,7 +68,7 @@
"APPLICATION_NAME" = "סיגנל";
/* Pressing this button moves a thread from the inbox to the archive */
"ARCHIVE_ACTION" = "לשלוח לארכיון";
"ARCHIVE_ACTION" = "העבר לארכיון";
/* No comment provided by engineer. */
"ARCHIVE_NAV_BAR_TITLE" = "ארכיון";
@ -83,25 +83,25 @@
"ATTACHMENT_APPROVAL_FILE_EXTENSION_FORMAT" = "File type: %@";
/* Format string for file size label in call interstitial view. Embeds: {{file size as 'N mb' or 'N kb'}}. */
"ATTACHMENT_APPROVAL_FILE_SIZE_FORMAT" = "Size: %@";
"ATTACHMENT_APPROVAL_FILE_SIZE_FORMAT" = "גודל: %@";
/* Label for 'send' button in the 'attachment approval' dialog. */
"ATTACHMENT_APPROVAL_SEND_BUTTON" = "Send";
/* Generic filename for an attachment with no known name */
"ATTACHMENT_DEFAULT_FILENAME" = "Attachment";
"ATTACHMENT_DEFAULT_FILENAME" = "קובץ מצורף";
/* Status label when an attachment download has failed. */
"ATTACHMENT_DOWNLOADING_STATUS_FAILED" = "Failed. Tap to retry.";
"ATTACHMENT_DOWNLOADING_STATUS_FAILED" = "השליחה נכשלה. הקש לשליחה מחדש.";
/* Status label when an attachment is currently downloading */
"ATTACHMENT_DOWNLOADING_STATUS_IN_PROGRESS" = "Downloading…";
"ATTACHMENT_DOWNLOADING_STATUS_IN_PROGRESS" = "מוריד...";
/* Status label when an attachment is enqueued, but hasn't yet started downloading */
"ATTACHMENT_DOWNLOADING_STATUS_QUEUED" = "Queued";
"ATTACHMENT_DOWNLOADING_STATUS_QUEUED" = "ממתין להורדה";
/* The title of the 'attachment error' alert. */
"ATTACHMENT_ERROR_ALERT_TITLE" = "Error Sending Attachment";
"ATTACHMENT_ERROR_ALERT_TITLE" = "שגיאה בשליחת קובץ מצורף";
/* Attachment error message for image attachments which could not be converted to JPEG */
"ATTACHMENT_ERROR_COULD_NOT_CONVERT_TO_JPEG" = "Image attachment could not be resized.";
@ -110,16 +110,16 @@
"ATTACHMENT_ERROR_COULD_NOT_PARSE_IMAGE" = "Image attachment could not be parsed.";
/* Attachment error message for attachments whose data exceed file size limits */
"ATTACHMENT_ERROR_FILE_SIZE_TOO_LARGE" = "Attachment is too large.";
"ATTACHMENT_ERROR_FILE_SIZE_TOO_LARGE" = "הקובץ המצורף גדול מידי";
/* Attachment error message for attachments with invalid data */
"ATTACHMENT_ERROR_INVALID_DATA" = "Attachment has invalid contents.";
"ATTACHMENT_ERROR_INVALID_DATA" = "הקובץ המצורף מכיל תוכן לא תקין";
/* Attachment error message for attachments with an invalid file format */
"ATTACHMENT_ERROR_INVALID_FILE_FORMAT" = "Attachment has invalid file format.";
/* Attachment error message for attachments without any data */
"ATTACHMENT_ERROR_MISSING_DATA" = "Attachment is empty.";
"ATTACHMENT_ERROR_MISSING_DATA" = "הקובץ המצורף ריק מתוכן";
/* Accessibility hint describing what you can do with the attachment button */
"ATTACHMENT_HINT" = "תצלם או בחר/י צילום ושלח/י";
@ -128,79 +128,79 @@
"ATTACHMENT_LABEL" = "קובץ";
/* Alert title when picking a document fails for an unknown reason */
"ATTACHMENT_PICKER_DOCUMENTS_FAILED_ALERT_TITLE" = "Failed to choose document.";
"ATTACHMENT_PICKER_DOCUMENTS_FAILED_ALERT_TITLE" = "שגיאה בבחירת קובץ";
/* Alert body when picking a document fails because user picked a directory/bundle */
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "Signal can't handle that file as is. Try zipping it before sending.";
/* Alert title when picking a document fails because user picked a directory/bundle */
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "Unsupported File";
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "קובץ לא נתמך";
/* Short text label for a voice message attachment, used for thread preview and on lockscreen */
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "Voice Message";
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "הודעה קולית";
/* action sheet button title to enable built in speaker during a call */
"AUDIO_ROUTE_BUILT_IN_SPEAKER" = "Speaker";
"AUDIO_ROUTE_BUILT_IN_SPEAKER" = "רמקול";
/* An explanation of the consequences of blocking another user. */
"BLOCK_BEHAVIOR_EXPLANATION" = "Blocked users will not be able to call you or send you messages.";
"BLOCK_BEHAVIOR_EXPLANATION" = "אנשי קשר חסומים לא יוכלו להתקשר אליך או לשלוח לך הודעות";
/* Button label for the 'block' button */
"BLOCK_LIST_BLOCK_BUTTON" = "Block";
"BLOCK_LIST_BLOCK_BUTTON" = "חסום";
/* A format for the 'block user' action sheet title. Embeds {{the blocked user's name or phone number}}. */
"BLOCK_LIST_BLOCK_TITLE_FORMAT" = "Block %@?";
"BLOCK_LIST_BLOCK_TITLE_FORMAT" = "לחסום את %@?";
/* Button label for the 'unblock' button */
"BLOCK_LIST_UNBLOCK_BUTTON" = "Unblock";
"BLOCK_LIST_UNBLOCK_BUTTON" = "בטל חסימה";
/* A format for the 'unblock user' action sheet title. Embeds {{the blocked user's name or phone number}}. */
"BLOCK_LIST_UNBLOCK_TITLE_FORMAT" = "Unblock %@?";
"BLOCK_LIST_UNBLOCK_TITLE_FORMAT" = "לבטל את חסימת %@?";
/* A label for the block button in the block list view */
"BLOCK_LIST_VIEW_BLOCK_BUTTON" = "Block";
"BLOCK_LIST_VIEW_BLOCK_BUTTON" = "חסום";
/* The title of the 'block user failed' alert. */
"BLOCK_LIST_VIEW_BLOCK_FAILED_ALERT_MESSAGE" = "Failed to Block User.";
"BLOCK_LIST_VIEW_BLOCK_FAILED_ALERT_MESSAGE" = "חסימת משתמש נכשלה";
/* The title of the 'block user failed' alert. */
"BLOCK_LIST_VIEW_BLOCK_FAILED_ALERT_TITLE" = "Error";
"BLOCK_LIST_VIEW_BLOCK_FAILED_ALERT_TITLE" = "שגיאה";
/* The message format of the 'user blocked' alert. Embeds {{the blocked user's name or phone number}}. */
"BLOCK_LIST_VIEW_BLOCKED_ALERT_MESSAGE_FORMAT" = "%@ has been blocked";
"BLOCK_LIST_VIEW_BLOCKED_ALERT_MESSAGE_FORMAT" = "%@ נחסם";
/* The title of the 'user blocked' alert. */
"BLOCK_LIST_VIEW_BLOCKED_ALERT_TITLE" = "User Blocked";
"BLOCK_LIST_VIEW_BLOCKED_ALERT_TITLE" = "המשתמש נחסם";
/* The message of the 'You can't block yourself' alert. */
"BLOCK_LIST_VIEW_CANT_BLOCK_SELF_ALERT_MESSAGE" = "You can't block yourself.";
"BLOCK_LIST_VIEW_CANT_BLOCK_SELF_ALERT_MESSAGE" = "אין אפשרות לחסום את עצמך";
/* The title of the 'You can't block yourself' alert. */
"BLOCK_LIST_VIEW_CANT_BLOCK_SELF_ALERT_TITLE" = "Error";
"BLOCK_LIST_VIEW_CANT_BLOCK_SELF_ALERT_TITLE" = "שגיאה";
/* The title of the 'unblock user failed' alert. */
"BLOCK_LIST_VIEW_UNBLOCK_FAILED_ALERT_MESSAGE" = "Failed to Unblock User.";
/* The title of the 'unblock user failed' alert. */
"BLOCK_LIST_VIEW_UNBLOCK_FAILED_ALERT_TITLE" = "Error";
"BLOCK_LIST_VIEW_UNBLOCK_FAILED_ALERT_TITLE" = "שגיאה";
/* The message format of the 'user unblocked' alert. Embeds {{the blocked user's name or phone number}}. */
"BLOCK_LIST_VIEW_UNBLOCKED_ALERT_MESSAGE_FORMAT" = "%@ has been unblocked.";
"BLOCK_LIST_VIEW_UNBLOCKED_ALERT_MESSAGE_FORMAT" = "הוסרה חסימת %@";
/* The title of the 'user unblocked' alert. */
"BLOCK_LIST_VIEW_UNBLOCKED_ALERT_TITLE" = "User Unblocked";
"BLOCK_LIST_VIEW_UNBLOCKED_ALERT_TITLE" = "הוסרה חסימת המשתמש";
/* Action sheet that will block an unknown user. */
"BLOCK_OFFER_ACTIONSHEET_BLOCK_ACTION" = "Block";
"BLOCK_OFFER_ACTIONSHEET_BLOCK_ACTION" = "חסום";
/* Title format for action sheet that offers to block an unknown user.Embeds {{the unknown user's name or phone number}}. */
"BLOCK_OFFER_ACTIONSHEET_TITLE_FORMAT" = "Block %@?";
"BLOCK_OFFER_ACTIONSHEET_TITLE_FORMAT" = "לחסום את %@?";
/* Alert message when calling and permissions for microphone are missing */
"CALL_AUDIO_PERMISSION_MESSAGE" = "Signal requires access to your microphone to make calls and record voice messages. You can grant this permission in the Settings app.";
"CALL_AUDIO_PERMISSION_MESSAGE" = "Signal צריך גישה למיקרופון המכשיר בשביל לאפשר שיחות טלפון והודעות שמע. אפשר לאשר זאת בהגדרות המכשיר.";
/* Alert title when calling and permissions for microphone are missing */
"CALL_AUDIO_PERMISSION_TITLE" = "Microphone Access Required";
"CALL_AUDIO_PERMISSION_TITLE" = "נדרשת גישה למיקרופון";
/* Accessibilty label for placing call button */
"CALL_LABEL" = "התקשר";

View file

@ -776,7 +776,7 @@
"MESSAGES_VIEW_GROUP_1_MEMBER_BLOCKED" = "このグループの1人を拒否しました";
/* Indicates that some members of this group has been blocked. Embeds {{the number of blocked users in this group}}. */
"MESSAGES_VIEW_GROUP_N_MEMBERS_BLOCKED_FORMAT" = "You Blocked %@ Members of this Group";
"MESSAGES_VIEW_GROUP_N_MEMBERS_BLOCKED_FORMAT" = "グループ内の%@人を拒否しました";
/* Indicates that more than one member of this group conversation is no longer verified. */
"MESSAGES_VIEW_N_MEMBERS_NO_LONGER_VERIFIED" = "複数のメンバーが要確認となっています。タップして選択肢をご覧ください。";
@ -1346,31 +1346,31 @@
"SUCCESSFUL_VERIFICATION_TITLE" = "安全番号が一致しました";
/* {{number of days}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 days}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_DAYS" = "%@ days";
"TIME_AMOUNT_DAYS" = "%@";
/* {{number of hours}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 hours}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_HOURS" = "%@ hours";
"TIME_AMOUNT_HOURS" = "%@時間";
/* {{number of minutes}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 minutes}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_MINUTES" = "%@ minutes";
"TIME_AMOUNT_MINUTES" = "%@";
/* {{number of seconds}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 seconds}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SECONDS" = "%@ seconds";
"TIME_AMOUNT_SECONDS" = "%@";
/* {{1 day}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 day}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_DAY" = "%@ day";
"TIME_AMOUNT_SINGLE_DAY" = "%@";
/* {{1 hour}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 hour}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_HOUR" = "%@ hour";
"TIME_AMOUNT_SINGLE_HOUR" = "%@時間";
/* {{1 minute}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 minute}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_MINUTE" = "%@ minute";
"TIME_AMOUNT_SINGLE_MINUTE" = "%@";
/* {{1 week}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 week}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_WEEK" = "%@ week";
"TIME_AMOUNT_SINGLE_WEEK" = "%@週間";
/* {{number of weeks}}, embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 weeks}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_WEEKS" = "%@ weeks";
"TIME_AMOUNT_WEEKS" = "%@週間";
/* generic cancel text */
"TXT_CANCEL_TITLE" = "キャンセル";
@ -1510,16 +1510,16 @@
// Strings Copied in from JSQMessagesViewController
"load_earlier_messages" = "Load Earlier Messages";
"load_earlier_messages" = "以前のメッセージを読み込む";
"send" = "Send";
"send" = "送る";
"new_message" = "New Message";
"new_message" = "新しいメッセージ";
"text_message_accessibility_label" = "%@: %@";
"text_message_accessibility_label" = "%@%@";
"media_message_accessibility_label" = "%@: media message";
"media_message_accessibility_label" = "%@:メディア・メッセージ";
"accessory_button_accessibility_label" = "Share media";
"accessory_button_accessibility_label" = "メディアを共有する";
"new_message_received_accessibility_announcement" = "New message received";
"new_message_received_accessibility_announcement" = "新着メッセージ";

View file

@ -1346,31 +1346,31 @@
"SUCCESSFUL_VERIFICATION_TITLE" = "Saugumo numeris sutampa!";
/* {{number of days}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 days}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_DAYS" = "%@ days";
"TIME_AMOUNT_DAYS" = "%@ dienas(-ų)";
/* {{number of hours}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 hours}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_HOURS" = "%@ hours";
"TIME_AMOUNT_HOURS" = "%@ valandas(-ų)";
/* {{number of minutes}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 minutes}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_MINUTES" = "%@ minutes";
"TIME_AMOUNT_MINUTES" = "%@ minutes(-ių)";
/* {{number of seconds}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 seconds}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SECONDS" = "%@ seconds";
"TIME_AMOUNT_SECONDS" = "%@ sekundes(-ių)";
/* {{1 day}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 day}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_DAY" = "%@ day";
"TIME_AMOUNT_SINGLE_DAY" = "%@ dieną";
/* {{1 hour}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 hour}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_HOUR" = "%@ hour";
"TIME_AMOUNT_SINGLE_HOUR" = "%@ valandą";
/* {{1 minute}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 minute}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_MINUTE" = "%@ minute";
"TIME_AMOUNT_SINGLE_MINUTE" = "%@ minutę";
/* {{1 week}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 week}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_WEEK" = "%@ week";
"TIME_AMOUNT_SINGLE_WEEK" = "%@ savaitę";
/* {{number of weeks}}, embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 weeks}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_WEEKS" = "%@ weeks";
"TIME_AMOUNT_WEEKS" = "%@ savaites(-ių)";
/* generic cancel text */
"TXT_CANCEL_TITLE" = "Atsisakyti";
@ -1518,8 +1518,8 @@
"text_message_accessibility_label" = "%@: %@";
"media_message_accessibility_label" = "%@: media message";
"media_message_accessibility_label" = "%@: medija žinutė";
"accessory_button_accessibility_label" = "Share media";
"accessory_button_accessibility_label" = "Dalintis medija";
"new_message_received_accessibility_announcement" = "Gauta nauja žinutė";

View file

@ -56,13 +56,13 @@
"APN_MESSAGE_IN_GROUP_DETAILED" = "%@ no grupo %@: %@";
/* Message format for the 'new app version available' alert. Embeds: {{The latest app version number.}}. */
"APP_UPDATE_NAG_ALERT_MESSAGE_FORMAT" = "Version %@ is now available in the App Store.";
"APP_UPDATE_NAG_ALERT_MESSAGE_FORMAT" = "Versão %@ está disponível na App Store.";
/* Title for the 'new app version available' alert. */
"APP_UPDATE_NAG_ALERT_TITLE" = "A New Version of Signal is Available";
"APP_UPDATE_NAG_ALERT_TITLE" = "Uma nova versão do Signal está disponível";
/* Label for the 'update' button in the 'new app version available' alert. */
"APP_UPDATE_NAG_ALERT_UPDATE_BUTTON" = "Update";
"APP_UPDATE_NAG_ALERT_UPDATE_BUTTON" = "Atualizar";
/* Name of application */
"APPLICATION_NAME" = "Signal";
@ -140,7 +140,7 @@
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "Mensagem de voz";
/* action sheet button title to enable built in speaker during a call */
"AUDIO_ROUTE_BUILT_IN_SPEAKER" = "Speaker";
"AUDIO_ROUTE_BUILT_IN_SPEAKER" = "Caixa de som";
/* An explanation of the consequences of blocking another user. */
"BLOCK_BEHAVIOR_EXPLANATION" = "Usuários bloqueados não poderão efetuar ligações ou enviar mensagens para você.";
@ -233,7 +233,7 @@
"CALL_VIEW_SETTINGS_NAG_SHOW_CALL_SETTINGS" = "Mostrar configurações de privacidade";
/* notification action */
"CALLBACK_BUTTON_TITLE" = "Call Back";
"CALLBACK_BUTTON_TITLE" = "Retornar a chamada";
/* The generic name used for calls if CallKit privacy is enabled */
"CALLKIT_ANONYMOUS_CONTACT_NAME" = "Usuário do Signal";
@ -296,7 +296,7 @@
"CONVERSATION_SETTINGS" = "Configurações de Conversa";
/* Label for 'new contact' button in conversation settings view. */
"CONVERSATION_SETTINGS_ADD_TO_EXISTING_CONTACT" = "Add to Existing Contact";
"CONVERSATION_SETTINGS_ADD_TO_EXISTING_CONTACT" = "Adicionar à Lista de Contatos";
/* table cell label in conversation settings */
"CONVERSATION_SETTINGS_BLOCK_THIS_USER" = "Bloqueie este usuário";
@ -335,7 +335,7 @@
"CONVERSATION_SETTINGS_MUTED_UNTIL_FORMAT" = "até %@";
/* Label for 'new contact' button in conversation settings view. */
"CONVERSATION_SETTINGS_NEW_CONTACT" = "Create New Contact";
"CONVERSATION_SETTINGS_NEW_CONTACT" = "Criar Novo Contato";
/* Label for button to unmute a thread. */
"CONVERSATION_SETTINGS_UNMUTE_ACTION" = "Ativer o som";
@ -380,7 +380,7 @@
"DISMISS_BUTTON_TEXT" = "Ignorar";
/* Section title for the 'domain fronting country' view. */
"DOMAIN_FRONTING_COUNTRY_VIEW_SECTION_HEADER" = "Localização para Contorno de Censura";
"DOMAIN_FRONTING_COUNTRY_VIEW_SECTION_HEADER" = "Localização para Driblagem de Censura";
/* Alert body for when the user has just tried to edit a contacts after declining to give Signal contacts permissions */
"EDIT_CONTACT_WITHOUT_CONTACTS_PERMISSION_ALERT_BODY" = "Você pode autorizar o acesso em Configurações do app.";
@ -578,7 +578,7 @@
"GROUP_CREATING" = "Criando um novo grupo";
/* Message shown in conversation view that indicates there were issues with group creation. */
"GROUP_CREATION_FAILED" = "Not all members could be added to the group. Tap to retry.";
"GROUP_CREATION_FAILED" = "Não foi possível adicional todos os membros ao grupo. Toque para tentar de novo. ";
/* Conversation settings table section title */
"GROUP_MANAGEMENT_SECTION" = "Gerenciamento do Grupo";
@ -596,16 +596,16 @@
"GROUP_MEMBERS_CALL" = "Chamar";
/* Label for the button that clears all verification errors in the 'group members' view. */
"GROUP_MEMBERS_RESET_NO_LONGER_VERIFIED" = "Clear Verification For All";
"GROUP_MEMBERS_RESET_NO_LONGER_VERIFIED" = "Apagar Verificação Para Todos os Contatos";
/* Label for the 'reset all no-longer-verified group members' confirmation alert. */
"GROUP_MEMBERS_RESET_NO_LONGER_VERIFIED_ALERT_MESSAGE" = "This will clear the verification of all group members whose safety numbers have changed since they were last verified.";
"GROUP_MEMBERS_RESET_NO_LONGER_VERIFIED_ALERT_MESSAGE" = "Esta opção apagará a verificação de todos os membros do grupo cujos números de segurança tiverem mudado desde a última vez em que eles foram verificados. ";
/* Title for the 'members' section of the 'group members' view. */
"GROUP_MEMBERS_SECTION_TITLE_MEMBERS" = "Membros";
/* Title for the 'no longer verified' section of the 'group members' view. */
"GROUP_MEMBERS_SECTION_TITLE_NO_LONGER_VERIFIED" = "No Longer Marked as Verified";
"GROUP_MEMBERS_SECTION_TITLE_NO_LONGER_VERIFIED" = "Deixou de Ser Marcado como Verificado";
/* Button label for the 'send message to group member' button */
"GROUP_MEMBERS_SEND_MESSAGE" = "Enviar mensagem";
@ -644,7 +644,7 @@
"IN_CALL_TERMINATED" = "Chamada Encerrada.";
/* Label reminding the user that they are in archive mode. */
"INBOX_VIEW_ARCHIVE_MODE_REMINDER" = "You are viewing your archived messages. Tap to return to your Inbox.";
"INBOX_VIEW_ARCHIVE_MODE_REMINDER" = "Você está consultando suas mensagens arquivadas. Toque para retornar à Caixa de Entrada. ";
/* Multiline label explaining how to show names instead of phone numbers in your inbox */
"INBOX_VIEW_MISSING_CONTACTS_PERMISSION" = "Para ver o nome de seus contatos, atualize suas configurações de sistema para habilitar o acesso aos contatos.";
@ -656,13 +656,13 @@
"INCOMING_CALL_FROM" = "Chamada de %@";
/* info message recorded in conversation history when local user declined a call */
"INCOMING_DECLINED_CALL" = "You declined a call";
"INCOMING_DECLINED_CALL" = "Você recusou uma chamada";
/* No comment provided by engineer. */
"INCOMING_INCOMPLETE_CALL" = "Chamada nao completada, de ";
/* info message text shown in conversation view */
"INFO_MESSAGE_MISSED_CALL_DUE_TO_CHANGED_IDENITY" = "Missed call because their safety number has changed.";
"INFO_MESSAGE_MISSED_CALL_DUE_TO_CHANGED_IDENITY" = "Chamada perdida porque o número de segurança dessa pessoa mudou.";
/* Message for the alert indicating that an audio file is invalid. */
"INVALID_AUDIO_FILE_ALERT_ERROR_MESSAGE" = "Arquivo de áudio inválido.";
@ -749,7 +749,7 @@
"MESSAGE_STATUS_DELIVERED" = "Recebido";
/* message footer for failed messages */
"MESSAGE_STATUS_FAILED" = "Sending failed. Tap for info.";
"MESSAGE_STATUS_FAILED" = "Falha no envio. Toque para mais informações .";
/* message footer for sent messages */
"MESSAGE_STATUS_SENT" = "Enviado";
@ -758,13 +758,13 @@
"MESSAGE_STATUS_UPLOADING" = "Enviando...";
/* Indicates that one member of this group conversation is no longer verified. Embeds {{user's name or phone number}}. */
"MESSAGES_VIEW_1_MEMBER_NO_LONGER_VERIFIED_FORMAT" = "%@ is no longer marked as verified. Tap for options.";
"MESSAGES_VIEW_1_MEMBER_NO_LONGER_VERIFIED_FORMAT" = "%@ não está mais marcado como verificado. Toque para ver as opções.";
/* Indicates that this 1:1 conversation has been blocked. */
"MESSAGES_VIEW_CONTACT_BLOCKED" = "Você bloqueou este usuário";
/* Indicates that this 1:1 conversation is no longer verified. Embeds {{user's name or phone number}}. */
"MESSAGES_VIEW_CONTACT_NO_LONGER_VERIFIED_FORMAT" = "%@ is no longer marked as verified. Tap for options.";
"MESSAGES_VIEW_CONTACT_NO_LONGER_VERIFIED_FORMAT" = "%@ não está mais marcado como verificado. Toque para ver as opções.";
/* Action sheet title after tapping on failed download. */
"MESSAGES_VIEW_FAILED_DOWNLOAD_ACTIONSHEET_TITLE" = "Falha na transferência";
@ -776,31 +776,31 @@
"MESSAGES_VIEW_GROUP_1_MEMBER_BLOCKED" = "Você bloqueou 1 membro deste grupo";
/* Indicates that some members of this group has been blocked. Embeds {{the number of blocked users in this group}}. */
"MESSAGES_VIEW_GROUP_N_MEMBERS_BLOCKED_FORMAT" = "You Blocked %@ Members of this Group";
"MESSAGES_VIEW_GROUP_N_MEMBERS_BLOCKED_FORMAT" = "Você Bloqueou %@ Membros deste Grupo";
/* Indicates that more than one member of this group conversation is no longer verified. */
"MESSAGES_VIEW_N_MEMBERS_NO_LONGER_VERIFIED" = "More than one member of this group is no longer marked as verified. Tap for options.";
"MESSAGES_VIEW_N_MEMBERS_NO_LONGER_VERIFIED" = "Ao menos um membro deste grupo não está mais marcado como verificado. Toque para ver as opções.";
/* The subtitle for the messages view title indicates that the title can be tapped to access settings for this conversation. */
"MESSAGES_VIEW_TITLE_SUBTITLE" = "Toque aqui para configura";
/* Indicator that separates read from unread messages. */
"MESSAGES_VIEW_UNREAD_INDICATOR" = "Unread Messages";
"MESSAGES_VIEW_UNREAD_INDICATOR" = "Mensagens Não Lidas. ";
/* Messages that indicates that there are more unseen messages including safety number changes that be revealed by tapping the 'load earlier messages' button. Embeds {{the name of the 'load earlier messages' button}}. */
"MESSAGES_VIEW_UNREAD_INDICATOR_HAS_MORE_UNSEEN_MESSAGES_AND_SAFETY_NUMBER_CHANGES_FORMAT" = "There are more unread messages (including safety number changes) above. Tap \"%@\" to see them.";
"MESSAGES_VIEW_UNREAD_INDICATOR_HAS_MORE_UNSEEN_MESSAGES_AND_SAFETY_NUMBER_CHANGES_FORMAT" = "Há mais mensagens não lidas acima (incluindo mudanças de números de segurança) . Toque em \"%@\" para consultá-las.";
/* Messages that indicates that there are more unseen messages that be revealed by tapping the 'load earlier messages' button. Embeds {{the name of the 'load earlier messages' button}} */
"MESSAGES_VIEW_UNREAD_INDICATOR_HAS_MORE_UNSEEN_MESSAGES_FORMAT" = "There are more unread messages above. Tap \"%@\" to see them.";
"MESSAGES_VIEW_UNREAD_INDICATOR_HAS_MORE_UNSEEN_MESSAGES_FORMAT" = "Há mais mensagens não lidas acima. Toque em \"%@\" para consultá-las.";
/* notification title */
"MISSED_CALL" = "Chamada perdida";
/* notification title. Embeds {{caller's name or phone number}} */
"MISSED_CALL_WITH_CHANGED_IDENTITY_BODY_WITH_CALLER_NAME" = "Missed call from %@ because their safety number changed.";
"MISSED_CALL_WITH_CHANGED_IDENTITY_BODY_WITH_CALLER_NAME" = "Chamada perdida porque o número de segurança de %@ mudou.";
/* notification title */
"MISSED_CALL_WITH_CHANGED_IDENTITY_BODY_WITHOUT_CALLER_NAME" = "Missed call because the caller's safety number changed.";
"MISSED_CALL_WITH_CHANGED_IDENTITY_BODY_WITHOUT_CALLER_NAME" = "Chamada perdida porque o número de segurança da pessoa que telefonou mudou.";
/* Alert body
Alert body when camera is not authorized */
@ -811,7 +811,7 @@
"MISSING_CAMERA_PERMISSION_TITLE" = "O Signal precisa acessar sua câmera.";
/* No comment provided by engineer. */
"MSGVIEW_MISSED_CALL_BECAUSE_OF_CHANGED_IDENTITY" = "Missed call because their safety number has changed.";
"MSGVIEW_MISSED_CALL_BECAUSE_OF_CHANGED_IDENTITY" = "Chamada perdida porque o número de segurança dessa pessoa mudou.";
/* notification title. Embeds {{caller's name or phone number}} */
"MSGVIEW_MISSED_CALL_WITH_NAME" = "Chamada perdida de %@";
@ -841,7 +841,7 @@
"NETWORK_ERROR_RECOVERY" = "Por favor, verifique se você está online e tente de novo.";
/* Indicates to the user that censorship circumvention has been activated. */
"NETWORK_STATUS_CENSORSHIP_CIRCUMVENTION_ACTIVE" = "Censorship Circumvention: On";
"NETWORK_STATUS_CENSORSHIP_CIRCUMVENTION_ACTIVE" = "Driblagem de Censura: Ativada";
/* No comment provided by engineer. */
"NETWORK_STATUS_CONNECTED" = "Conectado";
@ -938,7 +938,7 @@
"OUTGOING_CALL" = "Chamada efetuada";
/* No comment provided by engineer. */
"OUTGOING_INCOMPLETE_CALL" = "Unanswered outgoing call";
"OUTGOING_INCOMPLETE_CALL" = "Chamadas realizadas não respondidas";
/* A display format for oversize text messages. */
"OVERSIZE_TEXT_DISPLAY_FORMAT" = "%@… [Toque para mais]";
@ -986,22 +986,22 @@
"PHONE_NUMBER_TYPE_WORK_FAX" = "Fax no Trabalho";
/* Label indicating that the user is not verified. Embeds {{the user's name or phone number}}. */
"PRIVACY_IDENTITY_IS_NOT_VERIFIED_FORMAT" = "You have not marked %@ as verified.";
"PRIVACY_IDENTITY_IS_NOT_VERIFIED_FORMAT" = "Você não marcou %@ como verificado.";
/* Badge indicating that the user is verified. */
"PRIVACY_IDENTITY_IS_VERIFIED_BADGE" = "Verified";
"PRIVACY_IDENTITY_IS_VERIFIED_BADGE" = "Verificado";
/* Label indicating that the user is verified. Embeds {{the user's name or phone number}}. */
"PRIVACY_IDENTITY_IS_VERIFIED_FORMAT" = "%@ is verified.";
"PRIVACY_IDENTITY_IS_VERIFIED_FORMAT" = "%@ foi verificado.";
/* Label for a link to more information about safety numbers and verification. */
"PRIVACY_SAFETY_NUMBERS_LEARN_MORE" = "Learn More";
"PRIVACY_SAFETY_NUMBERS_LEARN_MORE" = "Saiba Mais";
/* Button that shows the 'scan with camera' view. */
"PRIVACY_TAP_TO_SCAN" = "Tap to Scan";
"PRIVACY_TAP_TO_SCAN" = "Toque para Procurar";
/* Button that lets user mark another user's identity as unverified. */
"PRIVACY_UNVERIFY_BUTTON" = "Clear Verification";
"PRIVACY_UNVERIFY_BUTTON" = "Apagar Verificação";
/* Alert body when verifying with {{contact name}} */
"PRIVACY_VERIFICATION_FAILED_I_HAVE_WRONG_KEY_FOR_THEM" = "Este não é o seu número de segurança com %@. Você está verificando o contato correto?";
@ -1031,13 +1031,13 @@
"PRIVACY_VERIFICATION_TITLE" = "Verificar Número de Segurança";
/* Button that lets user mark another user's identity as verified. */
"PRIVACY_VERIFY_BUTTON" = "Mark as Verified";
"PRIVACY_VERIFY_BUTTON" = "Marcar como Verificado";
/* No comment provided by engineer. */
"PROCEED_BUTTON" = "Prosseguir";
/* No comment provided by engineer. */
"PUSH_MANAGER_MARKREAD" = "Mark as Read";
"PUSH_MANAGER_MARKREAD" = "Marcar como Lida";
/* No comment provided by engineer. */
"PUSH_MANAGER_REPLY" = "Responder";
@ -1139,13 +1139,13 @@
"RETRY_BUTTON_TEXT" = "Tentar Novamente";
/* button title to confirm adding a recipient to a group when their safety number has recently changed */
"SAFETY_NUMBER_CHANGED_CONFIRM_ADD_TO_GROUP_ACTION" = "Add to Group Anyway";
"SAFETY_NUMBER_CHANGED_CONFIRM_ADD_TO_GROUP_ACTION" = "Adicionar ao Grupo Assim Mesmo";
/* alert button text to confirm placing an outgoing call after the recipients Safety Number has changed. */
"SAFETY_NUMBER_CHANGED_CONFIRM_CALL_ACTION" = "Call Anyway";
"SAFETY_NUMBER_CHANGED_CONFIRM_CALL_ACTION" = "Chamar Assim Mesmo";
/* button title to confirm sending to a recipient whose safety number recently changed */
"SAFETY_NUMBER_CHANGED_CONFIRM_SEND_ACTION" = "Send Anyway";
"SAFETY_NUMBER_CHANGED_CONFIRM_SEND_ACTION" = "Enviar Assim Mesmo";
/* Snippet to share {{safety number}} with a friend. sent e.g. via SMS */
"SAFETY_NUMBER_SHARE_FORMAT" = "Nosso Número de Segurança Signal:\n%@";
@ -1157,7 +1157,7 @@
"SCAN_CODE_INSTRUCTIONS" = "Escaneie o Código QR no dispositivo do seu contato.";
/* Title for the 'scan QR code' view. */
"SCAN_QR_CODE_VIEW_TITLE" = "Scan QR Code";
"SCAN_QR_CODE_VIEW_TITLE" = "Scanear o Código QR";
/* No comment provided by engineer. */
"SEARCH_BYNAMEORNUMBER_PLACEHOLDER_TEXT" = "Buscar por nome ou número";
@ -1205,25 +1205,25 @@
"SETTINGS_ADD_TO_BLOCK_LIST_TITLE" = "Bloquear";
/* Label for the 'manual censorship circumvention' switch. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION" = "Censorship Circumvention";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION" = "Driblagem de Censura";
/* Label for the 'manual censorship circumvention' country. Embeds {{the manual censorship circumvention country}}. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_COUNTRY_FORMAT" = "Location: %@";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_COUNTRY_FORMAT" = "Lugar: %@";
/* Table footer for the 'censorship circumvention' section when censorship circumvention can be manually enabled. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER" = "If enabled, Signal will attempt to circumvent censorship. Do not enable this feature unless you are in a location where Signal is censored.";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER" = "Se ativado, Signal tentará driblar a censura. Não ative esta função ao menos que você esteja em um lugar onde Signal é censurado. ";
/* Table footer for the 'censorship circumvention' section shown when censorship circumvention has been auto-enabled based on local phone number. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_AUTO_ENABLED" = "Censorship circumvention has been activated based on your account's phone number.";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_AUTO_ENABLED" = "A driblagem de censura foi ativada tendo como base o número de telefone da sua conta.";
/* Table footer for the 'censorship circumvention' section shown when the app is not connected to the internet. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_NO_CONNECTION" = "Censorship circumvention can only be activated when connected to the internet.";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_NO_CONNECTION" = "A driblagem de censura pode ser ativada somente durante uma conexão à Internet.";
/* Table footer for the 'censorship circumvention' section shown when the app is connected to the Signal service. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_WEBSOCKET_CONNECTED" = "Censorship circumvention is not necessary; you are already connected to the Signal service.";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_WEBSOCKET_CONNECTED" = "A driblagem de censura não é necessária. Você já está conectada/o ao serviço Signal.";
/* Table header for the 'censorship circumvention' section. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_HEADER" = "Censorship Circumvention";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_HEADER" = "Driblagem de Censura";
/* No comment provided by engineer. */
"SETTINGS_ADVANCED_DEBUGLOG" = "Habilitar log de depuração";
@ -1331,46 +1331,46 @@
"SHARE_ACTION_TWEET" = "Twitter";
/* Action sheet item */
"SHOW_SAFETY_NUMBER_ACTION" = "Show New Safety Number";
"SHOW_SAFETY_NUMBER_ACTION" = "Exibir Novo Número de Segurança ";
/* notification action */
"SHOW_THREAD_BUTTON_TITLE" = "Show Conversation";
"SHOW_THREAD_BUTTON_TITLE" = "Exibir Conversa";
/* body sent to contacts when inviting to Install Signal */
"SMS_INVITE_BODY" = "Estou convidando você a instalar Signal. Aqui está o link:";
/* Alert body after verifying privacy with {{other user's name}} */
"SUCCESSFUL_VERIFICATION_DESCRIPTION" = "Your safety number with %@ matches. You can mark this contact as verified.";
"SUCCESSFUL_VERIFICATION_DESCRIPTION" = "O número de segurança entre você e %@ coincide. Você pode marcar este contato como verificado.";
/* No comment provided by engineer. */
"SUCCESSFUL_VERIFICATION_TITLE" = "Safety Number Matches!";
"SUCCESSFUL_VERIFICATION_TITLE" = "Número de Segurança Coincide!";
/* {{number of days}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 days}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_DAYS" = "%@ days";
"TIME_AMOUNT_DAYS" = "%@ dias";
/* {{number of hours}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 hours}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_HOURS" = "%@ hours";
"TIME_AMOUNT_HOURS" = "%@ horas";
/* {{number of minutes}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 minutes}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_MINUTES" = "%@ minutes";
"TIME_AMOUNT_MINUTES" = "%@ minutos";
/* {{number of seconds}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 seconds}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SECONDS" = "%@ seconds";
"TIME_AMOUNT_SECONDS" = "%@ secundos";
/* {{1 day}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 day}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_DAY" = "%@ day";
"TIME_AMOUNT_SINGLE_DAY" = "%@ dia";
/* {{1 hour}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 hour}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_HOUR" = "%@ hour";
"TIME_AMOUNT_SINGLE_HOUR" = "%@ hora";
/* {{1 minute}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 minute}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_MINUTE" = "%@ minute";
"TIME_AMOUNT_SINGLE_MINUTE" = "%@ minuto";
/* {{1 week}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 week}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_WEEK" = "%@ week";
"TIME_AMOUNT_SINGLE_WEEK" = "%@ semana";
/* {{number of weeks}}, embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 weeks}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_WEEKS" = "%@ weeks";
"TIME_AMOUNT_WEEKS" = "%@ semanas";
/* generic cancel text */
"TXT_CANCEL_TITLE" = "Cancelar";
@ -1463,25 +1463,25 @@
"VERIFICATION_PHONE_NUMBER_FORMAT" = "Entre com o código de verificação enviado para %@";
/* Format for info message indicating that the verification state was unverified on this device. Embeds {{user's name or phone number}}. */
"VERIFICATION_STATE_CHANGE_FORMAT_NOT_VERIFIED_LOCAL" = "You marked %@ as not verified.";
"VERIFICATION_STATE_CHANGE_FORMAT_NOT_VERIFIED_LOCAL" = "Você marcou %@ como não verificado.";
/* Format for info message indicating that the verification state was unverified on another device. Embeds {{user's name or phone number}}. */
"VERIFICATION_STATE_CHANGE_FORMAT_NOT_VERIFIED_OTHER_DEVICE" = "You marked %@ as not verified on another device.";
"VERIFICATION_STATE_CHANGE_FORMAT_NOT_VERIFIED_OTHER_DEVICE" = "Você marcou %@ como não verificado. em um outro aparelho.";
/* Format for info message indicating that the verification state was verified on this device. Embeds {{user's name or phone number}}. */
"VERIFICATION_STATE_CHANGE_FORMAT_VERIFIED_LOCAL" = "Você marcou %@ como verificado.";
/* Format for info message indicating that the verification state was verified on another device. Embeds {{user's name or phone number}}. */
"VERIFICATION_STATE_CHANGE_FORMAT_VERIFIED_OTHER_DEVICE" = "You marked %@ as verified on another device.";
"VERIFICATION_STATE_CHANGE_FORMAT_VERIFIED_OTHER_DEVICE" = " Você marcou%@ como verificado em um outro aparelho.";
/* Generic message indicating that verification state changed for a given user. */
"VERIFICATION_STATE_CHANGE_GENERIC" = "Verification state changed.";
"VERIFICATION_STATE_CHANGE_GENERIC" = "Estado da verificação mudou.";
/* Label for button or row which allows users to verify the safety number of another user. */
"VERIFY_PRIVACY" = "Show Safety Number";
"VERIFY_PRIVACY" = "Exibir Número de Segurança";
/* Label for button or row which allows users to verify the safety numbers of multiple users. */
"VERIFY_PRIVACY_MULTIPLE" = "Review Safety Numbers";
"VERIFY_PRIVACY_MULTIPLE" = "Editar Números de Segurança";
/* Indicates how to cancel a voice message. */
"VOICE_MESSAGE_CANCEL_INSTRUCTIONS" = "Deslize para cancelar";
@ -1510,16 +1510,16 @@
// Strings Copied in from JSQMessagesViewController
"load_earlier_messages" = "Load Earlier Messages";
"load_earlier_messages" = "Carregar Mensagens Precedentes";
"send" = "Send";
"send" = "Enviar";
"new_message" = "New Message";
"new_message" = "Nova Mensagem";
"text_message_accessibility_label" = "%@: %@";
"media_message_accessibility_label" = "%@: media message";
"media_message_accessibility_label" = "%@: mensagem de mídia";
"accessory_button_accessibility_label" = "Share media";
"accessory_button_accessibility_label" = "Compartilhar mídia";
"new_message_received_accessibility_announcement" = "New message received";
"new_message_received_accessibility_announcement" = "Nova mensagem recebida";

View file

@ -776,7 +776,7 @@
"MESSAGES_VIEW_GROUP_1_MEMBER_BLOCKED" = "Вы заблокировали 1 участника в этой группе";
/* Indicates that some members of this group has been blocked. Embeds {{the number of blocked users in this group}}. */
"MESSAGES_VIEW_GROUP_N_MEMBERS_BLOCKED_FORMAT" = "You Blocked %@ Members of this Group";
"MESSAGES_VIEW_GROUP_N_MEMBERS_BLOCKED_FORMAT" = "Вы заблокировали %@ участников этой группы";
/* Indicates that more than one member of this group conversation is no longer verified. */
"MESSAGES_VIEW_N_MEMBERS_NO_LONGER_VERIFIED" = "Больше, чем один участник этой группы больше не отмечен как проверенный. Нажмите для опций.";
@ -1346,31 +1346,31 @@
"SUCCESSFUL_VERIFICATION_TITLE" = "Коды безопасности совпадают!";
/* {{number of days}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 days}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_DAYS" = "%@ days";
"TIME_AMOUNT_DAYS" = "%@ дней";
/* {{number of hours}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 hours}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_HOURS" = "%@ hours";
"TIME_AMOUNT_HOURS" = "%@ часов";
/* {{number of minutes}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 minutes}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_MINUTES" = "%@ minutes";
"TIME_AMOUNT_MINUTES" = "%@ минут";
/* {{number of seconds}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 seconds}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SECONDS" = "%@ seconds";
"TIME_AMOUNT_SECONDS" = "%@ секунд";
/* {{1 day}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 day}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_DAY" = "%@ day";
"TIME_AMOUNT_SINGLE_DAY" = "%@ дня";
/* {{1 hour}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 hour}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_HOUR" = "%@ hour";
"TIME_AMOUNT_SINGLE_HOUR" = "%@ часа";
/* {{1 minute}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 minute}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_MINUTE" = "%@ minute";
"TIME_AMOUNT_SINGLE_MINUTE" = "%@ минуты";
/* {{1 week}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 week}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_WEEK" = "%@ week";
"TIME_AMOUNT_SINGLE_WEEK" = "%@ недели";
/* {{number of weeks}}, embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 weeks}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_WEEKS" = "%@ weeks";
"TIME_AMOUNT_WEEKS" = "%@ недель";
/* generic cancel text */
"TXT_CANCEL_TITLE" = "Отменить";
@ -1510,16 +1510,16 @@
// Strings Copied in from JSQMessagesViewController
"load_earlier_messages" = "Load Earlier Messages";
"load_earlier_messages" = "Загрузить более ранние сообщения";
"send" = "Send";
"send" = "Отправить";
"new_message" = "New Message";
"new_message" = "Новое сообщение";
"text_message_accessibility_label" = "%@: %@";
"media_message_accessibility_label" = "%@: media message";
"media_message_accessibility_label" = "%@: медиасообщение";
"accessory_button_accessibility_label" = "Share media";
"accessory_button_accessibility_label" = "Поделиться медиа";
"new_message_received_accessibility_announcement" = "New message received";
"new_message_received_accessibility_announcement" = "Получено новое сообщение";

View file

@ -56,13 +56,13 @@
"APN_MESSAGE_IN_GROUP_DETAILED" = "%@ i grupp %@: %@";
/* Message format for the 'new app version available' alert. Embeds: {{The latest app version number.}}. */
"APP_UPDATE_NAG_ALERT_MESSAGE_FORMAT" = "Version %@ is now available in the App Store.";
"APP_UPDATE_NAG_ALERT_MESSAGE_FORMAT" = "Version %@ finns nu tillgänglig i App Store.";
/* Title for the 'new app version available' alert. */
"APP_UPDATE_NAG_ALERT_TITLE" = "A New Version of Signal is Available";
"APP_UPDATE_NAG_ALERT_TITLE" = "En Ny Version av Signal Finns Nu Tillgänglig.";
/* Label for the 'update' button in the 'new app version available' alert. */
"APP_UPDATE_NAG_ALERT_UPDATE_BUTTON" = "Update";
"APP_UPDATE_NAG_ALERT_UPDATE_BUTTON" = "Uppdatera";
/* Name of application */
"APPLICATION_NAME" = "Signal";
@ -140,7 +140,7 @@
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "Röstmeddelande";
/* action sheet button title to enable built in speaker during a call */
"AUDIO_ROUTE_BUILT_IN_SPEAKER" = "Speaker";
"AUDIO_ROUTE_BUILT_IN_SPEAKER" = "Talare";
/* An explanation of the consequences of blocking another user. */
"BLOCK_BEHAVIOR_EXPLANATION" = "Blockerade användare kommer inte kunna ringa eller skicka meddelanden till dig.";
@ -296,7 +296,7 @@
"CONVERSATION_SETTINGS" = "Konversationsinställningar";
/* Label for 'new contact' button in conversation settings view. */
"CONVERSATION_SETTINGS_ADD_TO_EXISTING_CONTACT" = "Add to Existing Contact";
"CONVERSATION_SETTINGS_ADD_TO_EXISTING_CONTACT" = "Lägg Till för Existerande Kontakt";
/* table cell label in conversation settings */
"CONVERSATION_SETTINGS_BLOCK_THIS_USER" = "Blockera denna användare";
@ -308,37 +308,37 @@
"CONVERSATION_SETTINGS_GROUP_INFO_TITLE" = "Gruppinfo";
/* Title of the 'mute this thread' action sheet. */
"CONVERSATION_SETTINGS_MUTE_ACTION_SHEET_TITLE" = "Mute";
"CONVERSATION_SETTINGS_MUTE_ACTION_SHEET_TITLE" = "Tysta";
/* label for 'mute thread' cell in conversation settings */
"CONVERSATION_SETTINGS_MUTE_LABEL" = "Mute";
"CONVERSATION_SETTINGS_MUTE_LABEL" = "Tysta";
/* Indicates that the current thread is not muted. */
"CONVERSATION_SETTINGS_MUTE_NOT_MUTED" = "Not muted";
"CONVERSATION_SETTINGS_MUTE_NOT_MUTED" = "Inte tystad";
/* Label for button to mute a thread for a day. */
"CONVERSATION_SETTINGS_MUTE_ONE_DAY_ACTION" = "Mute for one day";
"CONVERSATION_SETTINGS_MUTE_ONE_DAY_ACTION" = "Tysta för en dag";
/* Label for button to mute a thread for a hour. */
"CONVERSATION_SETTINGS_MUTE_ONE_HOUR_ACTION" = "Mute for one hour";
"CONVERSATION_SETTINGS_MUTE_ONE_HOUR_ACTION" = "Tysta för en timme";
/* Label for button to mute a thread for a minute. */
"CONVERSATION_SETTINGS_MUTE_ONE_MINUTE_ACTION" = "Mute for one minute";
"CONVERSATION_SETTINGS_MUTE_ONE_MINUTE_ACTION" = "Tysta en minut";
/* Label for button to mute a thread for a week. */
"CONVERSATION_SETTINGS_MUTE_ONE_WEEK_ACTION" = "Mute for one week";
"CONVERSATION_SETTINGS_MUTE_ONE_WEEK_ACTION" = "Tysta för en vecka";
/* Label for button to mute a thread for a year. */
"CONVERSATION_SETTINGS_MUTE_ONE_YEAR_ACTION" = "Mute for one year";
"CONVERSATION_SETTINGS_MUTE_ONE_YEAR_ACTION" = "Tysta för ett år";
/* Indicates that this thread is muted until a given date or time. Embeds {{The date or time which the thread is muted until}}. */
"CONVERSATION_SETTINGS_MUTED_UNTIL_FORMAT" = "tills %@";
/* Label for 'new contact' button in conversation settings view. */
"CONVERSATION_SETTINGS_NEW_CONTACT" = "Create New Contact";
"CONVERSATION_SETTINGS_NEW_CONTACT" = "Skapa Ny Kontakt";
/* Label for button to unmute a thread. */
"CONVERSATION_SETTINGS_UNMUTE_ACTION" = "Unmute";
"CONVERSATION_SETTINGS_UNMUTE_ACTION" = "Av-tysta";
/* ActionSheet title */
"CORRUPTED_SESSION_DESCRIPTION" = "Att återställa din session låter dig ta emot nya meddelanden från %@, men kommer inte att återställa meddelanden som redan är korrupta.";
@ -380,7 +380,7 @@
"DISMISS_BUTTON_TEXT" = "Avfärda";
/* Section title for the 'domain fronting country' view. */
"DOMAIN_FRONTING_COUNTRY_VIEW_SECTION_HEADER" = "Censorship Circumvention Location";
"DOMAIN_FRONTING_COUNTRY_VIEW_SECTION_HEADER" = "Kringgå censur för platsen";
/* Alert body for when the user has just tried to edit a contacts after declining to give Signal contacts permissions */
"EDIT_CONTACT_WITHOUT_CONTACTS_PERMISSION_ALERT_BODY" = "Du kan ge åtkomst i appen Inställningar.";
@ -596,16 +596,16 @@
"GROUP_MEMBERS_CALL" = "Ring";
/* Label for the button that clears all verification errors in the 'group members' view. */
"GROUP_MEMBERS_RESET_NO_LONGER_VERIFIED" = "Clear Verification For All";
"GROUP_MEMBERS_RESET_NO_LONGER_VERIFIED" = "Rensa verifiering för alla";
/* Label for the 'reset all no-longer-verified group members' confirmation alert. */
"GROUP_MEMBERS_RESET_NO_LONGER_VERIFIED_ALERT_MESSAGE" = "This will clear the verification of all group members whose safety numbers have changed since they were last verified.";
"GROUP_MEMBERS_RESET_NO_LONGER_VERIFIED_ALERT_MESSAGE" = "Det här kommer rensa verifieringen av alla gruppmedlemmarna vars säkerhetsnummer har ändrats sen förra verifieringen.";
/* Title for the 'members' section of the 'group members' view. */
"GROUP_MEMBERS_SECTION_TITLE_MEMBERS" = "Medlemmar";
/* Title for the 'no longer verified' section of the 'group members' view. */
"GROUP_MEMBERS_SECTION_TITLE_NO_LONGER_VERIFIED" = "No Longer Marked as Verified";
"GROUP_MEMBERS_SECTION_TITLE_NO_LONGER_VERIFIED" = "Inte markerad som verifierad längre";
/* Button label for the 'send message to group member' button */
"GROUP_MEMBERS_SEND_MESSAGE" = "Skicka meddelande";
@ -644,7 +644,7 @@
"IN_CALL_TERMINATED" = "Samtalet avslutades.";
/* Label reminding the user that they are in archive mode. */
"INBOX_VIEW_ARCHIVE_MODE_REMINDER" = "You are viewing your archived messages. Tap to return to your Inbox.";
"INBOX_VIEW_ARCHIVE_MODE_REMINDER" = "Du ser de arkiverade meddelandena. Tryck för att gå tillbaka till din Inbox.";
/* Multiline label explaining how to show names instead of phone numbers in your inbox */
"INBOX_VIEW_MISSING_CONTACTS_PERMISSION" = "Om du vill se namnen på dina kontakter, uppdatera Systeminställningarna för att tillåta åtkomst till kontakter.";
@ -656,7 +656,7 @@
"INCOMING_CALL_FROM" = "Inkommande samtal från %@";
/* info message recorded in conversation history when local user declined a call */
"INCOMING_DECLINED_CALL" = "You declined a call";
"INCOMING_DECLINED_CALL" = "Du avvisade ett samtal";
/* No comment provided by engineer. */
"INCOMING_INCOMPLETE_CALL" = "Ofullständigt inkommande samtal från";
@ -758,13 +758,13 @@
"MESSAGE_STATUS_UPLOADING" = "Laddar upp...";
/* Indicates that one member of this group conversation is no longer verified. Embeds {{user's name or phone number}}. */
"MESSAGES_VIEW_1_MEMBER_NO_LONGER_VERIFIED_FORMAT" = "%@ is no longer marked as verified. Tap for options.";
"MESSAGES_VIEW_1_MEMBER_NO_LONGER_VERIFIED_FORMAT" = "%@ är inte markerad som verifierad längre. Tryck för alternativ.";
/* Indicates that this 1:1 conversation has been blocked. */
"MESSAGES_VIEW_CONTACT_BLOCKED" = "Du blockerade denna användare";
/* Indicates that this 1:1 conversation is no longer verified. Embeds {{user's name or phone number}}. */
"MESSAGES_VIEW_CONTACT_NO_LONGER_VERIFIED_FORMAT" = "%@ is no longer marked as verified. Tap for options.";
"MESSAGES_VIEW_CONTACT_NO_LONGER_VERIFIED_FORMAT" = "%@ är inte markerad som verifierad längre. Tryck för alternativ.";
/* Action sheet title after tapping on failed download. */
"MESSAGES_VIEW_FAILED_DOWNLOAD_ACTIONSHEET_TITLE" = "Kunde inte hämta.";
@ -776,10 +776,10 @@
"MESSAGES_VIEW_GROUP_1_MEMBER_BLOCKED" = "Du blockerade 1 medlem i denna grupp";
/* Indicates that some members of this group has been blocked. Embeds {{the number of blocked users in this group}}. */
"MESSAGES_VIEW_GROUP_N_MEMBERS_BLOCKED_FORMAT" = "You Blocked %@ Members of this Group";
"MESSAGES_VIEW_GROUP_N_MEMBERS_BLOCKED_FORMAT" = "Du blockerade %@ medlemmar ur den här gruppen";
/* Indicates that more than one member of this group conversation is no longer verified. */
"MESSAGES_VIEW_N_MEMBERS_NO_LONGER_VERIFIED" = "More than one member of this group is no longer marked as verified. Tap for options.";
"MESSAGES_VIEW_N_MEMBERS_NO_LONGER_VERIFIED" = "Mer än en medlem i denna grupp är inte längre markerad som verifierad. Tryck för alternativ.";
/* The subtitle for the messages view title indicates that the title can be tapped to access settings for this conversation. */
"MESSAGES_VIEW_TITLE_SUBTITLE" = "Tryck här för inställningar";
@ -835,13 +835,13 @@
"MULTIDEVICE_PAIRING_MAX_RECOVERY" = "Du har nått max antal enheter som du kan koppla ihop med ditt konto. Ta bort en enhet eller gör ett nytt försök lite senare.";
/* An explanation of the consequences of muting a thread. */
"MUTE_BEHAVIOR_EXPLANATION" = "You will not receive notifications for muted conversations.";
"MUTE_BEHAVIOR_EXPLANATION" = "Du kommer inte få notiser för tystade konversationer.";
/* No comment provided by engineer. */
"NETWORK_ERROR_RECOVERY" = "Kontrollera att du är online och försök igen.";
/* Indicates to the user that censorship circumvention has been activated. */
"NETWORK_STATUS_CENSORSHIP_CIRCUMVENTION_ACTIVE" = "Kringå censur: På";
"NETWORK_STATUS_CENSORSHIP_CIRCUMVENTION_ACTIVE" = "Kringgå censur: På";
/* No comment provided by engineer. */
"NETWORK_STATUS_CONNECTED" = "Ansluten";
@ -880,7 +880,7 @@
"NEW_GROUP_NON_CONTACTS_SECTION_TITLE" = "Andra användare";
/* The alert message if user tries to exit the new group view without saving changes. */
"NEW_GROUP_VIEW_UNSAVED_CHANGES_MESSAGE" = "Would you like to discard these changes?";
"NEW_GROUP_VIEW_UNSAVED_CHANGES_MESSAGE" = "Vill du ångra dina ändringar?";
/* The alert title if user tries to exit the new group view without saving changes. */
"NEW_GROUP_VIEW_UNSAVED_CHANGES_TITLE" = "Osparade ändringar";
@ -938,7 +938,7 @@
"OUTGOING_CALL" = "Utgående samtal";
/* No comment provided by engineer. */
"OUTGOING_INCOMPLETE_CALL" = "Unanswered outgoing call";
"OUTGOING_INCOMPLETE_CALL" = "Obesvarat utgående samtal";
/* A display format for oversize text messages. */
"OVERSIZE_TEXT_DISPLAY_FORMAT" = "%@... [Tryck för mer]";
@ -962,7 +962,7 @@
"PHONE_NUMBER_TYPE_IPHONE" = "iPhone";
/* Label for 'Main' phone numbers. */
"PHONE_NUMBER_TYPE_MAIN" = "Main";
"PHONE_NUMBER_TYPE_MAIN" = "Huvudnr";
/* Label for 'Mobile' phone numbers. */
"PHONE_NUMBER_TYPE_MOBILE" = "Mobil";
@ -1205,25 +1205,25 @@
"SETTINGS_ADD_TO_BLOCK_LIST_TITLE" = "Blockera";
/* Label for the 'manual censorship circumvention' switch. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION" = "Kringå censur";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION" = "Kringgå censur";
/* Label for the 'manual censorship circumvention' country. Embeds {{the manual censorship circumvention country}}. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_COUNTRY_FORMAT" = "Plats: %@";
/* Table footer for the 'censorship circumvention' section when censorship circumvention can be manually enabled. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER" = "Om påslaget så kommer Signal försöka kringå censur. Slå bara på den här funktionen om du är på en plats där Signal censureras.";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER" = "Om påslaget så kommer Signal försöka kringgå censur. Slå bara på den här funktionen om du är på en plats där Signal censureras.";
/* Table footer for the 'censorship circumvention' section shown when censorship circumvention has been auto-enabled based on local phone number. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_AUTO_ENABLED" = "Kringå censur har aktiverats baserat på ditt kontos telefonnummer";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_AUTO_ENABLED" = "Kringgå censur har aktiverats baserat på ditt kontos telefonnummer";
/* Table footer for the 'censorship circumvention' section shown when the app is not connected to the internet. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_NO_CONNECTION" = "Kringå censur kan bara aktiveras när då internet är tillgängligt";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_NO_CONNECTION" = "Kringgå censur kan bara aktiveras när då internet är tillgängligt";
/* Table footer for the 'censorship circumvention' section shown when the app is connected to the Signal service. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_WEBSOCKET_CONNECTED" = "Kringå censur är inte nödvändigt; du är redan uppkopplad mot Signal-tjänsten.";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_FOOTER_WEBSOCKET_CONNECTED" = "Kringgå censur är inte nödvändigt; du är redan uppkopplad mot Signal-tjänsten.";
/* Table header for the 'censorship circumvention' section. */
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_HEADER" = "Kringå censur";
"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION_HEADER" = "Kringgå censur";
/* No comment provided by engineer. */
"SETTINGS_ADVANCED_DEBUGLOG" = "Slå på debug-log";
@ -1346,31 +1346,31 @@
"SUCCESSFUL_VERIFICATION_TITLE" = "Säkerhetsnumret stämmer!";
/* {{number of days}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 days}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_DAYS" = "%@ days";
"TIME_AMOUNT_DAYS" = "%@ dagar";
/* {{number of hours}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 hours}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_HOURS" = "%@ hours";
"TIME_AMOUNT_HOURS" = "%@ timmar";
/* {{number of minutes}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 minutes}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_MINUTES" = "%@ minutes";
"TIME_AMOUNT_MINUTES" = "%@ minuter";
/* {{number of seconds}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 seconds}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SECONDS" = "%@ seconds";
"TIME_AMOUNT_SECONDS" = "%@ sekunder";
/* {{1 day}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 day}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_DAY" = "%@ day";
"TIME_AMOUNT_SINGLE_DAY" = "%@ dag";
/* {{1 hour}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 hour}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_HOUR" = "%@ hour";
"TIME_AMOUNT_SINGLE_HOUR" = "%@ timme";
/* {{1 minute}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 minute}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_MINUTE" = "%@ minute";
"TIME_AMOUNT_SINGLE_MINUTE" = "%@ minut";
/* {{1 week}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{1 week}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_SINGLE_WEEK" = "%@ week";
"TIME_AMOUNT_SINGLE_WEEK" = "%@ vecka";
/* {{number of weeks}}, embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 weeks}}'. See other *_TIME_AMOUNT strings */
"TIME_AMOUNT_WEEKS" = "%@ weeks";
"TIME_AMOUNT_WEEKS" = "%@ veckor";
/* generic cancel text */
"TXT_CANCEL_TITLE" = "Avbryt";
@ -1510,16 +1510,16 @@
// Strings Copied in from JSQMessagesViewController
"load_earlier_messages" = "Load Earlier Messages";
"load_earlier_messages" = "Ladda tidigare meddelanden";
"send" = "Send";
"send" = "Skicka";
"new_message" = "New Message";
"new_message" = "Nytt meddelande";
"text_message_accessibility_label" = "%@: %@";
"media_message_accessibility_label" = "%@: media message";
"media_message_accessibility_label" = "%@: media-meddelande";
"accessory_button_accessibility_label" = "Share media";
"accessory_button_accessibility_label" = "Dela media";
"new_message_received_accessibility_announcement" = "New message received";
"new_message_received_accessibility_announcement" = "Nytt meddelande mottaget";

View file

@ -355,12 +355,12 @@ if __name__ == "__main__":
event_names_header_file_path = os.path.join(git_repo_path, 'SignalServiceKit', 'src', 'Util', 'OWSAnalyticsEvents.h')
if not os.path.exists(event_names_header_file_path):
print 'Macros header does not exist:', event_names_header_file_path
print 'event_names_header_file_path does not exist:', event_names_header_file_path
sys.exit(1)
event_names_source_file_path = os.path.join(git_repo_path, 'SignalServiceKit', 'src', 'Util', 'OWSAnalyticsEvents.m')
if not os.path.exists(event_names_source_file_path):
print 'Macros header does not exist:', event_names_source_file_path
print 'event_names_source_file_path does not exist:', event_names_source_file_path
sys.exit(1)
for rootdir, dirnames, filenames in os.walk(git_repo_path):

View file

@ -43,20 +43,6 @@
NS_ASSUME_NONNULL_BEGIN
// The debug logs can be more verbose than the analytics events.
//
// In this case `descriptionForEnvelope` is valuable enough to
// log but too dangerous to include in the analytics event.
#define OWSProdErrorWEnvelope(__analyticsEventName, __envelope) \
{ \
DDLogError(@"%s:%d %@: %@", \
__PRETTY_FUNCTION__, \
__LINE__, \
__analyticsEventName, \
[self descriptionForEnvelope:__envelope]); \
OWSProdError(__analyticsEventName) \
}
@interface TSMessagesManager ()
@property (nonatomic, readonly) id<OWSCallMessageHandler> callMessageHandler;
@ -279,6 +265,7 @@ NS_ASSUME_NONNULL_BEGIN
completion:(nullable MessageManagerCompletionBlock)completionHandler
{
OWSAssert([NSThread isMainThread]);
OWSAssert([TSAccountManager isRegistered]);
// Ensure that completionHandler is called on the main thread,
// and handle the nil case.
@ -367,6 +354,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)handleDeliveryReceipt:(OWSSignalServiceProtosEnvelope *)envelope
{
OWSAssert([NSThread isMainThread]);
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
TSInteraction *interaction =
[TSInteraction interactionForTimestamp:envelope.timestamp withTransaction:transaction];
@ -381,6 +369,7 @@ NS_ASSUME_NONNULL_BEGIN
completion:(void (^)(NSError *_Nullable error))completion
{
OWSAssert([NSThread isMainThread]);
@synchronized(self) {
TSStorageManager *storageManager = [TSStorageManager sharedManager];
NSString *recipientId = messageEnvelope.source;
@ -520,7 +509,7 @@ NS_ASSUME_NONNULL_BEGIN
DDLogInfo(@"%@ handling dataMessage: %@", self.tag, [self descriptionForDataMessage:dataMessage]);
[self handleIncomingEnvelope:envelope withDataMessage:dataMessage];
} else {
DDLogWarn(@"%@ Ignoring envelope with neither DataMessage nor Content.", self.tag);
OWSProdInfoWEnvelope([OWSAnalyticsEvents messageManagerErrorEnvelopeNoActionablePayload], envelope);
}
}
@ -600,7 +589,7 @@ NS_ASSUME_NONNULL_BEGIN
} else if (callMessage.hasBusy) {
[self.callMessageHandler receivedBusy:callMessage.busy fromCallerId:incomingEnvelope.source];
} else {
DDLogWarn(@"%@ Ignoring Received CallMessage without actionable content: %@", self.tag, callMessage);
OWSProdInfoWEnvelope([OWSAnalyticsEvents messageManagerErrorCallMessageNoActionablePayload], incomingEnvelope);
}
}
@ -609,6 +598,7 @@ NS_ASSUME_NONNULL_BEGIN
{
OWSAssert([NSThread isMainThread]);
TSGroupThread *groupThread = [TSGroupThread getOrCreateThreadWithGroupIdData:dataMessage.group.id];
OWSAssert(groupThread);
OWSAttachmentsProcessor *attachmentsProcessor =
[[OWSAttachmentsProcessor alloc] initWithAttachmentProtos:@[ dataMessage.group.avatar ]
timestamp:envelope.timestamp
@ -637,6 +627,7 @@ NS_ASSUME_NONNULL_BEGIN
{
OWSAssert([NSThread isMainThread]);
TSThread *thread = [self threadForEnvelope:envelope dataMessage:dataMessage];
OWSAssert(thread);
OWSAttachmentsProcessor *attachmentsProcessor =
[[OWSAttachmentsProcessor alloc] initWithAttachmentProtos:dataMessage.attachments
timestamp:envelope.timestamp
@ -674,6 +665,15 @@ NS_ASSUME_NONNULL_BEGIN
withSyncMessage:(OWSSignalServiceProtosSyncMessage *)syncMessage
{
OWSAssert([NSThread isMainThread]);
OWSAssert([TSAccountManager isRegistered]);
NSString *localNumber = [TSAccountManager localNumber];
if (![localNumber isEqualToString:messageEnvelope.source]) {
// Sync messages should only come from linked devices.
OWSProdErrorWEnvelope([OWSAnalyticsEvents messageManagerErrorSyncMessageFromUnknownSource], messageEnvelope);
return;
}
if (syncMessage.hasSent) {
OWSIncomingSentMessageTranscript *transcript =
[[OWSIncomingSentMessageTranscript alloc] initWithProto:syncMessage.sent relay:messageEnvelope.relay];
@ -786,6 +786,7 @@ NS_ASSUME_NONNULL_BEGIN
enabled:NO
durationSeconds:OWSDisappearingMessagesConfigurationDefaultExpirationDuration];
}
OWSAssert(disappearingMessagesConfiguration);
[disappearingMessagesConfiguration save];
NSString *name = [self.contactsManager displayNameForPhoneIdentifier:envelope.source];
OWSDisappearingConfigurationUpdateInfoMessage *message =
@ -807,6 +808,7 @@ NS_ASSUME_NONNULL_BEGIN
{
OWSAssert([NSThread isMainThread]);
OWSAssert(gThread);
OWSAssert(gThread.groupModel);
OWSAssert(message);
if (gThread.groupModel.groupImage) {
@ -1032,30 +1034,30 @@ NS_ASSUME_NONNULL_BEGIN
__block TSErrorMessage *errorMessage;
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
if ([exception.name isEqualToString:NoSessionException]) {
OWSProdErrorWEnvelope(@"message_manager_error_no_session", envelope);
OWSProdErrorWEnvelope([OWSAnalyticsEvents messageManagerErrorNoSession], envelope);
errorMessage = [TSErrorMessage missingSessionWithEnvelope:envelope withTransaction:transaction];
} else if ([exception.name isEqualToString:InvalidKeyException]) {
OWSProdErrorWEnvelope(@"message_manager_error_invalid_key", envelope);
OWSProdErrorWEnvelope([OWSAnalyticsEvents messageManagerErrorInvalidKey], envelope);
errorMessage = [TSErrorMessage invalidKeyExceptionWithEnvelope:envelope withTransaction:transaction];
} else if ([exception.name isEqualToString:InvalidKeyIdException]) {
OWSProdErrorWEnvelope(@"message_manager_error_invalid_key_id", envelope);
OWSProdErrorWEnvelope([OWSAnalyticsEvents messageManagerErrorInvalidKeyId], envelope);
errorMessage = [TSErrorMessage invalidKeyExceptionWithEnvelope:envelope withTransaction:transaction];
} else if ([exception.name isEqualToString:DuplicateMessageException]) {
// Duplicate messages are dismissed
return;
} else if ([exception.name isEqualToString:InvalidVersionException]) {
OWSProdErrorWEnvelope(@"message_manager_error_invalid_message_version", envelope);
OWSProdErrorWEnvelope([OWSAnalyticsEvents messageManagerErrorInvalidMessageVersion], envelope);
errorMessage = [TSErrorMessage invalidVersionWithEnvelope:envelope withTransaction:transaction];
} else if ([exception.name isEqualToString:UntrustedIdentityKeyException]) {
// Should no longer get here, since we now record the new identity for incoming messages.
OWSProdErrorWEnvelope(@"message_manager_error_untrusted_identity_key_exception", envelope);
OWSProdErrorWEnvelope([OWSAnalyticsEvents messageManagerErrorUntrustedIdentityKeyException], envelope);
OWSFail(@"%@ Failed to trust identity on incoming message from: %@.%d",
self.tag,
envelope.source,
envelope.sourceDevice);
return;
} else {
OWSProdErrorWEnvelope(@"message_manager_error_corrupt_message", envelope);
OWSProdErrorWEnvelope([OWSAnalyticsEvents messageManagerErrorCorruptMessage], envelope);
errorMessage = [TSErrorMessage corruptedMessageWithEnvelope:envelope withTransaction:transaction];
}

View file

@ -134,4 +134,32 @@ typedef NSDictionary<NSString *, id> *_Nonnull (^OWSProdAssertParametersBlock)()
#define OWSProdCritical(__eventName) OWSProdEventWParams(OWSAnalyticsSeverityCritical, __eventName, nil)
#pragma mark - TSMessagesManager macros
// Defined here rather than in TSMessagesManager so that our analytic event extraction script
// can properly detect the event names.
//
// The debug logs can be more verbose than the analytics events.
//
// In this case `descriptionForEnvelope` is valuable enough to
// log but too dangerous to include in the analytics event.
#define OWSProdErrorWEnvelope(__analyticsEventName, __envelope) \
{ \
DDLogError(@"%s:%d %@: %@", \
__PRETTY_FUNCTION__, \
__LINE__, \
__analyticsEventName, \
[self descriptionForEnvelope:__envelope]); \
OWSProdError(__analyticsEventName) \
}
#define OWSProdInfoWEnvelope(__analyticsEventName, __envelope) \
{ \
DDLogInfo(@"%s:%d %@: %@", \
__PRETTY_FUNCTION__, \
__LINE__, \
__analyticsEventName, \
[self descriptionForEnvelope:__envelope]); \
OWSProdInfo(__analyticsEventName) \
}
NS_ASSUME_NONNULL_END

View file

@ -96,24 +96,42 @@ NS_ASSUME_NONNULL_BEGIN
+ (NSString *)errorUpdateAttributesRequestFailed;
+ (NSString *)messageManagerErrorCallMessageNoActionablePayload;
+ (NSString *)messageManagerErrorCorruptMessage;
+ (NSString *)messageManagerErrorCouldNotHandlePrekeyBundle;
+ (NSString *)messageManagerErrorCouldNotHandleSecureMessage;
+ (NSString *)messageManagerErrorEnvelopeNoActionablePayload;
+ (NSString *)messageManagerErrorEnvelopeTypeKeyExchange;
+ (NSString *)messageManagerErrorEnvelopeTypeOther;
+ (NSString *)messageManagerErrorEnvelopeTypeUnknown;
+ (NSString *)messageManagerErrorInvalidKey;
+ (NSString *)messageManagerErrorInvalidKeyId;
+ (NSString *)messageManagerErrorInvalidMessageVersion;
+ (NSString *)messageManagerErrorInvalidProtocolMessage;
+ (NSString *)messageManagerErrorMessageEnvelopeHasNoContent;
+ (NSString *)messageManagerErrorNoSession;
+ (NSString *)messageManagerErrorOversizeMessage;
+ (NSString *)messageManagerErrorPrekeyBundleEnvelopeHasNoContent;
+ (NSString *)messageManagerErrorSyncMessageFromUnknownSource;
+ (NSString *)messageManagerErrorUntrustedIdentityKeyException;
+ (NSString *)messageReceiverErrorLargeMessage;
+ (NSString *)messageReceiverErrorOversizeMessage;

View file

@ -222,6 +222,16 @@ NS_ASSUME_NONNULL_BEGIN
return @"error_update_attributes_request_failed";
}
+ (NSString *)messageManagerErrorCallMessageNoActionablePayload
{
return @"message_manager_error_call_message_no_actionable_payload";
}
+ (NSString *)messageManagerErrorCorruptMessage
{
return @"message_manager_error_corrupt_message";
}
+ (NSString *)messageManagerErrorCouldNotHandlePrekeyBundle
{
return @"message_manager_error_could_not_handle_prekey_bundle";
@ -232,6 +242,11 @@ NS_ASSUME_NONNULL_BEGIN
return @"message_manager_error_could_not_handle_secure_message";
}
+ (NSString *)messageManagerErrorEnvelopeNoActionablePayload
{
return @"message_manager_error_envelope_no_actionable_payload";
}
+ (NSString *)messageManagerErrorEnvelopeTypeKeyExchange
{
return @"message_manager_error_envelope_type_key_exchange";
@ -247,6 +262,21 @@ NS_ASSUME_NONNULL_BEGIN
return @"message_manager_error_envelope_type_unknown";
}
+ (NSString *)messageManagerErrorInvalidKey
{
return @"message_manager_error_invalid_key";
}
+ (NSString *)messageManagerErrorInvalidKeyId
{
return @"message_manager_error_invalid_key_id";
}
+ (NSString *)messageManagerErrorInvalidMessageVersion
{
return @"message_manager_error_invalid_message_version";
}
+ (NSString *)messageManagerErrorInvalidProtocolMessage
{
return @"message_manager_error_invalid_protocol_message";
@ -257,6 +287,11 @@ NS_ASSUME_NONNULL_BEGIN
return @"message_manager_error_message_envelope_has_no_content";
}
+ (NSString *)messageManagerErrorNoSession
{
return @"message_manager_error_no_session";
}
+ (NSString *)messageManagerErrorOversizeMessage
{
return @"message_manager_error_oversize_message";
@ -267,6 +302,16 @@ NS_ASSUME_NONNULL_BEGIN
return @"message_manager_error_prekey_bundle_envelope_has_no_content";
}
+ (NSString *)messageManagerErrorSyncMessageFromUnknownSource
{
return @"message_manager_error_sync_message_from_unknown_source";
}
+ (NSString *)messageManagerErrorUntrustedIdentityKeyException
{
return @"message_manager_error_untrusted_identity_key_exception";
}
+ (NSString *)messageReceiverErrorLargeMessage
{
return @"message_receiver_error_large_message";