This commit is contained in:
Anton Chekulaev 2020-08-21 15:07:57 +10:00
commit a5408fa4f4
6 changed files with 131 additions and 142 deletions

View File

@ -185,8 +185,8 @@ dependencies {
implementation "com.opencsv:opencsv:4.6"
}
def canonicalVersionCode = 69
def canonicalVersionName = "1.4.2"
def canonicalVersionCode = 70
def canonicalVersionName = "1.4.3"
def postFixSize = 10
def abiPostFix = ['armeabi-v7a' : 1,

View File

@ -1220,211 +1220,179 @@
<!-- Session -->
<!--
<string name="continue_2">ادامه </string>
<string name="copy">رونویسی کردن</string>
<string name="copy">کپی کردن</string>
<string name="invalid_url">URL نامعتبر است</string>
<string name="copied_to_clipboard">در کلیپ بورد کپی شد</string>
<string name="device_linking_failed">پیوند دستگاه امکان پذیر نیست.</string>
<string name="next">بعد</string>
<string name="share">اشتراک گذاری</string>
<string name="invalid_session_id">شناسه نامعتبر جلسه</string>
<string name="copied_to_clipboard">در کلیپبورد کپی شد</string>
<string name="device_linking_failed">اتصال دستگاه ناموفق بود.</string>
<string name="next">بعدی</string>
<string name="share">اشتراکگذاری</string>
<string name="invalid_session_id">شناسه‌ی Session نامعتبر است.</string>
<string name="cancel">لغو</string>
<string name="your_session_id">شناسه جلسه شما</string>
<string name="your_session_id">شناسه‌ی Session شما</string>
<string name="activity_landing_title_2">جلسه شما از اینجا شروع می شود...</string>
<string name="activity_landing_register_button_title">شناسه جلسه را ایجاد کنید</string>
<string name="activity_landing_restore_button_title">جلسه خود را ادامه دهید</string>
<string name="activity_landing_title_2">Session شما از اینجا شروع می‌شود...</string>
<string name="activity_landing_register_button_title">شناسه‌ی Session را ایجاد کنید</string>
<string name="activity_landing_restore_button_title">Session خود را ادامه دهید</string>
<string name="activity_landing_link_button_title">پیوند به یک حساب کاربری موجود</string>
<string name="activity_landing_device_unlinked_dialog_title">ارتباط دستگاه شما با موفقیت انجام نشد</string>
<string name="activity_landing_device_unlinked_dialog_title">اتصال دستگاه شما با موفقیت قطع شد</string>
<string name="view_fake_chat_bubble_1">جلسه چیست؟</string>
<string name="view_fake_chat_bubble_2">این یک برنامه پیام رسانی غیرمتمرکز و رمزگذاری شده است</string>
<string name="view_fake_chat_bubble_3">بنابراین اطلاعات شخصی یا ابرداده گفتگوی من جمع نمی شود؟ چگونه کار می کند؟</string>
<string name="view_fake_chat_bubble_4">استفاده از ترکیبی از فن آوری های رمزگذاری پیشرفته مسیریابی ناشناس و پایان به پایان.</string>
<string name="view_fake_chat_bubble_5">دوستان اجازه نمی دهند تا دوستان از پیام رسان های مصالحه استفاده کنند. خواهش میکنم.</string>
<string name="view_fake_chat_bubble_1">Session چیست؟</string>
<string name="view_fake_chat_bubble_2">Session یک برنامه پیام‌رسان غیرمتمرکز و رمزگذاری شده است.</string>
<string name="view_fake_chat_bubble_3">پس اطلاعات شخصی من یا داده‌های گفت‌وگو‌هایم جمع‌آوری نمی‌شود؟ چگونه کار می‌کند؟</string>
<string name="view_fake_chat_bubble_4">Session با استفاده از ترکیبی از فناوری‌های پیشرفته مسیریابی ناشناس و رمزگذاری سرتاسری این کار را انجام می‌دهد.</string>
<string name="view_fake_chat_bubble_5">یک دوست هیچ‌وقت به دوستان خود اجازه استفاده از پیام‌رسان‌های در معرض خطر را نمی‌دهد.</string>
<string name="activity_register_title">سلام به شناسه جلسه خود</string>
<string name="activity_register_explanation">شناسه جلسه شما آدرس منحصر به فردی است که افراد می توانند از آنها برای تماس با شما در جلسه استفاده کنند. بدون ارتباط با هویت واقعی شما ، شناسه جلسه شما کاملاً ناشناس و خصوصی است.</string>
<string name="activity_register_public_key_copied_message">در کلیپ بورد کپی شد</string>
<string name="activity_register_title">به شناسه‌ی Session خود سلام کنید</string>
<string name="activity_register_explanation">شناسه‌ی Session شما آدرس منحصر به فردی است که افراد می‌توانند از طریق آن با شما در Session تماس بگیرند. شناسه‌ی Session شما، بدون اتصال با هویت واقعی شما، کاملاً ناشناس و خصوصی است.</string>
<string name="activity_register_public_key_copied_message">در کلیپبورد کپی شد</string>
<string name="activity_restore_title">حساب خود را بازیابی کنید</string>
<string name="activity_restore_explanation">عبارت بازیابی را هنگام ثبت نام برای بازیابی حساب خود وارد کنید.</string>
<string name="activity_restore_title">حساب کاربری خود را بازیابی کنید</string>
<string name="activity_restore_explanation">عبارت بازیابی را که هنگام نام‌نویسی برای بازیابی حساب به شما داده شده، وارد کنید.</string>
<string name="activity_restore_seed_edit_text_hint">عبارت بازیابی خود را وارد کنید</string>
<string name="activity_link_device_title">دستگاه پیوند</string>
<string name="activity_link_device_enter_session_id_tab_title">شناسه جلسه را وارد کنید</string>
<string name="activity_link_device_scan_qr_code_tab_title">اسکن کد QR</string>
<string name="activity_link_device_scan_qr_code_explanation">به تنظیمات &gt; دستگاه ها &gt; پیوند دستگاه در دستگاه دیگر خود بروید و سپس کد QR را که برای شروع کار پیوند داده است ، اسکن کنید.</string>
<string name="activity_link_device_title">اتصال دستگاه</string>
<string name="activity_link_device_enter_session_id_tab_title">شناسه‌ی Session را وارد کنید</string>
<string name="activity_link_device_scan_qr_code_tab_title">کد QR را اسکن کنید</string>
<string name="activity_link_device_scan_qr_code_explanation">در دستگاه دیگر خود به "تنظیمات" بروید، و بعد دستگاه‌ها و سپس اتصال دستگاه را انتخاب کنید. سپس کد QR را برای اتصال دستگاه، اسکن کنید.</string>
<string name="fragment_enter_session_id_title">دستگاه خود را پیوند دهید</string>
<string name="fragment_enter_session_id_explanation">به تنظیمات &gt; دستگاه ها &gt; پیوند دستگاه در دستگاه دیگر خود بروید و سپس شناسه جلسه خود را در اینجا وارد کنید تا فرایند پیوند آغاز شود.</string>
<string name="fragment_enter_session_id_edit_text_hint">شناسه جلسه خود را وارد کنید</string>
<string name="fragment_enter_session_id_title">دستگاه خود را متصل کنید</string>
<string name="fragment_enter_session_id_explanation">در دستگاه دیگر خود به "تنظیمات" بروید، و بعد دستگاه‌ها و سپس اتصال دستگاه را انتخاب کنید. سپس شناسه‌ی Session خود را در اینجا وارد کنید تا کار اتصال شروع شود.</string>
<string name="fragment_enter_session_id_edit_text_hint">شناسه‌ی Session خود را وارد کنید</string>
<string name="activity_display_name_title_2">نام صفحه نمایش خود را انتخاب کنید</string>
<string name="activity_display_name_explanation">این نام شما هنگام استفاده از جلسه خواهد بود. این می تواند نام واقعی شما باشد ، نام مستعار یا هر چیز دیگری که دوست دارید.</string>
<string name="activity_display_name_edit_text_hint">نام نمایشگر را وارد کنید</string>
<string name="activity_display_name_display_name_missing_error">لطفاً نام نمایشگر را انتخاب کنید</string>
<string name="activity_display_name_display_name_invalid_error">لطفاً یک نام نمایشگر را انتخاب کنید که فقط از نویسه های Az ، AZ ، 0-9 و _ تشکیل شده باشد</string>
<string name="activity_display_name_display_name_too_long_error">لطفاً نام نمایشگر کوتاه تری انتخاب کنید</string>
<string name="activity_display_name_title_2">نام خود را برای نمایش انتخاب کنید</string>
<string name="activity_display_name_explanation">این نام شما هنگام استفاده از Session خواهد بود. این نام می‌تواند نام واقعی شما، نام مستعار یا هر چیز دیگری که دوست دارید، باشد.</string>
<string name="activity_display_name_edit_text_hint">نام نمایشی را وارد کنید</string>
<string name="activity_display_name_display_name_missing_error">لطفا نام نمایشی را انتخاب کنید</string>
<string name="activity_display_name_display_name_invalid_error">لطفا یک نام نمایشی را انتخاب کنید که فقط از اعداد و حروف Az ، AZ ، 0-9 و _ تشکیل شده باشد</string>
<string name="activity_display_name_display_name_too_long_error">لطفا نام نمایشی کوتاه‌تری انتخاب کنید</string>
<string name="activity_pn_mode_title">اعلانهای فشار</string>
<string name="activity_pn_mode_explanation">دو راه وجود دارد که جلسه می تواند اعلان های فشار را کنترل کند. حتما قبل از انتخاب توضیحات را با دقت بخوانید.</string>
<string name="activity_pn_mode_fcm_option_title">پیام ابری فایربیس</string>
<string name="activity_pn_mode_fcm_option_explanation">جلسه برای دریافت اعلان های فشار از سرویس پیام ابری فایربیس استفاده می کند. با اطمینان و بلافاصله از پیامهای جدید مطلع خواهید شد. استفاده از FCM بدان معنا است که آدرس IP و نشانه دستگاه شما در معرض گوگل قرار خواهد گرفت. اگر از اعلانهای فشار برای سایر برنامه ها استفاده می کنید ، این مورد در حال حاضر اینگونه خواهد بود. آدرس IP و نشانه دستگاه شما نیز در معرض Loki قرار خواهد گرفت ، اما پیام های شما هنوز هم از طریق رمزگذاری شده توسط اونیون و رمزگذاری نهایی به پایان می رسد ، بنابراین محتوای پیام های شما کاملاً خصوصی خواهد بود.</string>
<string name="activity_pn_mode_background_polling_option_title">زمینه رای گیری</string>
<string name="activity_pn_mode_background_polling_option_explanation">جلسه گاه به گاه پیام های جدید را در پس زمینه بررسی می کند. این محافظت کامل از ابرداده را تضمین می کند ، اما اعلان های پیام ممکن است به میزان قابل توجهی به تأخیر بیفتند.</string>
<string name="activity_pn_mode_recommended_option_tag">توصیه شده</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">لطفا گزینه ای را انتخاب کنید</string>
<string name="activity_pn_mode_recommended_option_tag">گزینه پیشنهادی</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">لطفا یک گزینه را انتخاب کنید</string>
<string name="activity_home_empty_state_message">شما هنوز هیچ تماسی ندارید</string>
<string name="activity_home_empty_state_button_title">شروع جلسه</string>
<string name="activity_home_leave_group_dialog_message">آیا مطمئن هستید که می خواهید این گروه را ترک کنید؟</string>
<string name="activity_home_leaving_group_failed_message">نمی توان گروه را ترک کرد</string>
<string name="activity_home_delete_conversation_dialog_message">آیا مطمئن هستید که می خواهید این مکالمه را حذف کنید؟</string>
<string name="activity_home_empty_state_message">فهرست مخاطبان شما خالی است.</string>
<string name="activity_home_empty_state_button_title">شروع Session</string>
<string name="activity_home_leave_group_dialog_message">آیا مطمئن هستید که می‌خواهید این گروه را ترک کنید؟</string>
<string name="activity_home_leaving_group_failed_message">ترک گروه انجام نشد</string>
<string name="activity_home_delete_conversation_dialog_message">آیا مطمئن هستید که می‌خواهید این مکالمه را حذف کنید؟</string>
<string name="activity_home_conversation_deleted_message">مکالمه حذف شد</string>
<string name="sheet_pn_mode_title">اعلانهای فشار</string>
<string name="sheet_pn_mode_explanation">جلسه اکنون دو راه برای رسیدگی به اعلان های فشار دارد. حتما قبل از انتخاب توضیحات را با دقت بخوانید.</string>
<string name="sheet_pn_mode_fcm_option_title">پیام ابری فایربیس</string>
<string name="sheet_pn_mode_fcm_option_explanation">جلسه برای دریافت اعلان های فشار از سرویس پیام ابری فایربیس استفاده می کند. با اطمینان و بلافاصله از پیامهای جدید مطلع خواهید شد. استفاده از FCM بدان معنا است که آدرس IP و نشانه دستگاه شما در معرض گوگل قرار خواهد گرفت. اگر از اعلانهای فشار برای سایر برنامه ها استفاده می کنید ، این مورد در حال حاضر اینگونه خواهد بود. آدرس IP و نشانه دستگاه شما نیز در معرض Loki قرار خواهد گرفت ، اما پیام های شما هنوز هم از طریق رمزگذاری شده توسط پیاز و رمزگذاری نهایی به پایان می رسد ، بنابراین محتوای پیام های شما کاملاً خصوصی خواهد بود.</string>
<string name="sheet_pn_mode_background_polling_option_title">زمینه رای گیری</string>
<string name="sheet_pn_mode_background_polling_option_explanation">جلسه گاه به گاه پیام های جدید را در پس زمینه بررسی می کند. این محافظت کامل از ابرداده را تضمین می کند ، اما اعلان های پیام ممکن است به میزان قابل توجهی به تأخیر بیفتند.</string>
<string name="sheet_pn_mode_recommended_option_tag">توصیه شده</string>
<string name="sheet_pn_mode_no_option_picked_dialog_title">لطفا گزینه ای را انتخاب کنید</string>
<string name="sheet_pn_mode_confirm_button_title">تایید</string>
<string name="sheet_pn_mode_skip_button_title">رد</string>
<string name="activity_seed_title">عبارت بازیابی شما</string>
<string name="activity_seed_title_2">با عبارت بازیابی خود مطابقت داشته باشید</string>
<string name="activity_seed_explanation">عبارت بازیابی شما کلید اصلی شناسه جلسه شما است - در صورت عدم دسترسی به دستگاه خود می توانید از آن برای بازگرداندن شناسه جلسه استفاده کنید. عبارت بازیابی خود را در مکانی امن ذخیره کنید و آن را به کسی ندهید.</string>
<string name="activity_seed_reveal_button_title">نگه دارید تا فاش شود</string>
<string name="activity_seed_title_2">این عبارت بازیابی شماست</string>
<string name="activity_seed_explanation">عبارت بازیابی شما کلید اصلی شناسه‌ی Session شما است - در صورت عدم دسترسی به دستگاه خود می توانید از آن برای بازگرداندن شناسه‌ی Session خود استفاده کنید. عبارت بازیابی خود را در مکانی امن ذخیره کنید و آن را به کسی ندهید.</string>
<string name="activity_seed_reveal_button_title">نگه دارید تا نشان داده شود</string>
<string name="view_seed_reminder_subtitle_1">با ذخیره کردن عبارت بازیابی ، حساب خود را ایمن کنید</string>
<string name="view_seed_reminder_subtitle_2">برای فاش کردن عبارت بازیابی ، بر روی کلمات redacted ضربه زده و نگه دارید ، سپس با خیال راحت آن را ذخیره کنید تا شناسه جلسه خود را ایمن نمایید.</string>
<string name="view_seed_reminder_subtitle_1">با ذخیره کردن عبارت بازیابی، از حساب خود را محافظت کنید</string>
<string name="view_seed_reminder_subtitle_2">برای فاش کردن عبارت بازیابی، بر روی کلمات redacted ضربه زده و نگه دارید، سپس با خیال راحت آن را ذخیره کنید تا از شناسه‌ی Session خود محافظت نمایید.</string>
<string name="view_seed_reminder_subtitle_3">حتماً عبارت بازیابی خود را در مکانی امن ذخیره کنید</string>
<string name="activity_path_title">مسیر</string>
<string name="activity_path_explanation">جلسه IP شما را با گزاف گویی پیام های خود از طریق چندین گره سرویس در شبکه غیرمتمرکز جلسه مخفی می کند. اینها کشورهایی هستند که اتصال شما در حال حاضر از طریق آن فراخوانی می شوند:</string>
<string name="activity_path_explanation">اپ Session، ‌آی‌پی شما را با استفاده از فرستادن پیام‌های‌تان از طریق چندین سرویسِ گره در شبکه غیرمتمرکز Session مخفی می‌کند. اینها کشورهایی هستند که اتصال شما در حال حاضر از طریق آن فراخوانی می‌شوند:</string>
<string name="activity_path_device_row_title">شما</string>
<string name="activity_path_guard_node_row_title">گره ورود</string>
<string name="activity_path_guard_node_row_title">گره ورودی</string>
<string name="activity_path_service_node_row_title">گره سرویس</string>
<string name="activity_path_destination_row_title">مقصد</string>
<string name="activity_path_learn_more_button_title">بیشتر بدانید</string>
<string name="activity_create_private_chat_title">جلسه جدید</string>
<string name="activity_create_private_chat_enter_session_id_tab_title">شناسه جلسه را وارد کنید</string>
<string name="activity_create_private_chat_scan_qr_code_tab_title">اسکن کد QR</string>
<string name="activity_create_private_chat_scan_qr_code_explanation">برای شروع جلسه ، کد QR کاربر را اسکن کنید. با ضربه زدن روی نماد کد QR در تنظیمات حساب ، کدهای QR را می توان یافت.</string>
<string name="activity_create_private_chat_title">Session جدید</string>
<string name="activity_create_private_chat_enter_session_id_tab_title">شناسه‌ی Session را وارد کنید</string>
<string name="activity_create_private_chat_scan_qr_code_tab_title">کد QR را اسکن کنید</string>
<string name="activity_create_private_chat_scan_qr_code_explanation">برای شروع Session، کد QR کاربر را اسکن کنید. با ضربه زدن روی نماد کد QR در تنظیمات حساب کاربری، کدهای QR را می‌توان یافت.</string>
<string name="fragment_enter_public_key_edit_text_hint">شناسه گیرنده را وارد کنید</string>
<string name="fragment_enter_public_key_explanation">کاربران می توانند با وارد کردن به تنظیمات حساب خود و ضربه زدن به Share Share Session ID یا با به اشتراک گذاشتن کد QR خود ، شناسه جلسه خود را به اشتراک بگذارند.</string>
<string name="fragment_enter_public_key_explanation">کاربران می‌توانند شناسه‌ی Session خود را با رفتن به تنظیمات حساب خود و ضربه زدن به Share Session ID یا با به اشتراک گذاشتن کد QR خود‌، با دیگران به اشتراک بگذارند.</string>
<string name="fragment_scan_qr_code_camera_access_explanation">جلسه برای اسکن کدهای QR به دوربین دسترسی دارد</string>
<string name="fragment_scan_qr_code_grant_camera_access_button_title">دسترسی به کمک دوربین</string>
<string name="fragment_scan_qr_code_camera_access_explanation">اپ Session برای اسکن کدهای QR احتیاج دارد به دوربین دسترسی داشته باشد</string>
<string name="fragment_scan_qr_code_grant_camera_access_button_title">اجازه دسترسی به دوربین</string>
<string name="activity_create_closed_group_title">گروه بسته شده جدید</string>
<string name="activity_create_closed_group_title">گروه خصوصی جدید</string>
<string name="activity_create_closed_group_edit_text_hint">نام گروه را وارد کنید</string>
<string name="activity_create_closed_group_explanation">گروه های بسته تا 10 عضو را پشتیبانی می کنند و همان محافظت از حریم خصوصی را به عنوان جلسات یک به یک ارائه می دهند.</string>
<string name="activity_create_closed_group_empty_state_message">شما هنوز هیچ تماسی ندارید</string>
<string name="activity_create_closed_group_empty_state_button_title">شروع جلسه</string>
<string name="activity_create_closed_group_group_name_missing_error">لطفاً یک نام گروه وارد کنید</string>
<string name="activity_create_closed_group_group_name_too_long_error">لطفاً نام گروه کوتاه تری وارد کنید</string>
<string name="activity_create_closed_group_not_enough_group_members_error">لطفا حداقل 2 عضو گروه را انتخاب کنید</string>
<string name="activity_create_closed_group_too_many_group_members_error">یک گروه بسته نمی تواند بیش از 10 عضو داشته باشد</string>
<string name="activity_create_closed_group_explanation">گروه‌های خصوصی تا ۱۰ عضو را پشتیبانی می‌کنند و همان شکل از محافظت از حریم خصوصی را که در Sessionهای فرد به فرد وجود دارد، ارائه می‌دهند.</string>
<string name="activity_create_closed_group_empty_state_message">فهرست مخاطبان شما خالی است</string>
<string name="activity_create_closed_group_empty_state_button_title">شروع Session</string>
<string name="activity_create_closed_group_group_name_missing_error">لطفا یک نام گروه وارد کنید</string>
<string name="activity_create_closed_group_group_name_too_long_error">لطفا نام گروه کوتاه‌تری وارد کنید</string>
<string name="activity_create_closed_group_not_enough_group_members_error">لطفا حداقل ۲ عضو برای گروه انتخاب کنید</string>
<string name="activity_create_closed_group_too_many_group_members_error">یک گروه خصوصی نمی‌تواند بیش از ۱۰ عضو داشته باشد</string>
<string name="activity_create_closed_group_invalid_session_id_error">یکی از اعضای گروه شما دارای شناسه نامعتبر است</string>
<string name="activity_join_public_chat_title">به گروه باز بپیوندید</string>
<string name="activity_join_public_chat_error">امکان پیوستن به گروه نیست</string>
<string name="activity_join_public_chat_enter_group_url_tab_title">آدرس اینترنتی گروه را باز کنید</string>
<string name="activity_join_public_chat_scan_qr_code_tab_title">اسکن کد QR</string>
<string name="activity_join_public_chat_scan_qr_code_explanation">کد QR گروه باز را که می خواهید بپیوندید اسکن کنید</string>
<string name="activity_join_public_chat_scan_qr_code_explanation">کد QR متعلق به گروه باز را که می‌خواهید به آن بپیوندید، اسکن کنید</string>
<string name="fragment_enter_chat_url_edit_text_hint">یک URL گروه باز وارد کنید</string>
<string name="fragment_enter_chat_url_privacy_warning">گروه های باز می توانند توسط هر کسی بپیوندند و محافظت کامل از حریم خصوصی ارائه نمی دهند</string>
<string name="activity_settings_title">تنظیمات</string>
<string name="activity_settings_display_name_edit_text_hint">نام نمایشگر را وارد کنید</string>
<string name="activity_settings_display_name_missing_error">لطفاً نام نمایشگر را انتخاب کنید</string>
<string name="activity_settings_invalid_display_name_error">لطفاً یک نام نمایشگر را انتخاب کنید که فقط از نویسه های Az ، AZ ، 0-9 و _ تشکیل شده باشد</string>
<string name="activity_settings_display_name_too_long_error">لطفاً نام نمایشگر کوتاه تری انتخاب کنید</string>
<string name="activity_settings_display_name_edit_text_hint">یک نام نمایشی را وارد کنید</string>
<string name="activity_settings_display_name_missing_error">لطفا یک نام نمایشی را انتخاب کنید</string>
<string name="activity_settings_invalid_display_name_error">لطفا یک نام نمایشی را انتخاب کنید که فقط از اعداد و حروف Az ، AZ ، 0-9 و _ تشکیل شده باشد</string>
<string name="activity_settings_display_name_too_long_error">لطفا یک نام نمایشی کوتاه‌تر انتخاب کنید</string>
<string name="activity_settings_privacy_button_title">حریم خصوصی</string>
<string name="activity_settings_notifications_button_title">اطلاعیه</string>
<string name="activity_settings_chats_button_title">چت</string>
<string name="activity_settings_devices_button_title">دستگاه ها</string>
<string name="activity_settings_notifications_button_title">اعلان‌ها</string>
<string name="activity_settings_chats_button_title">گفت‌وگوها</string>
<string name="activity_settings_devices_button_title">دستگاهها</string>
<string name="activity_settings_recovery_phrase_button_title">عبارت بازیابی</string>
<string name="activity_settings_clear_all_data_button_title">اطلاعات روشن</string>
<string name="activity_settings_clear_all_data_button_title">پاک کردن اطلاعات</string>
<string name="activity_notification_settings_title">اطلاعیه</string>
<string name="activity_notification_settings_style_section_title">سبک اطلاع رسانی</string>
<string name="activity_notification_settings_content_section_title">محتوای اطلاع رسانی</string>
<string name="activity_notification_settings_title">اعلان‌ها</string>
<string name="activity_notification_settings_style_section_title">نحوه اطلاع‌رسانی</string>
<string name="activity_notification_settings_content_section_title">محتوای اعلان</string>
<string name="activity_privacy_settings_title">حریم خصوصی</string>
<string name="activity_chat_settings_title">چت</string>
<string name="activity_chat_settings_title">گفت‌وگوها</string>
<string name="activity_linked_devices_title">دستگاه ها</string>
<string name="activity_linked_devices_multi_device_limit_reached_dialog_title">دستگاه محدود شد</string>
<string name="activity_linked_devices_multi_device_limit_reached_dialog_explanation">در حال حاضر مجاز به پیوند بیش از یک دستگاه نیست.</string>
<string name="activity_linked_devices_unlinking_failed_message">دستگاه را نمی توان ارتباط برقرار کرد.</string>
<string name="activity_linked_devices_unlinking_successful_message">دستگاه شما با موفقیت ارتباط برقرار نشد</string>
<string name="activity_linked_devices_linking_failed_message">پیوند دستگاه امکان پذیر نیست.</string>
<string name="activity_linked_devices_empty_state_message">شما هنوز هیچ دستگاهی را پیوند نداده اید</string>
<string name="activity_linked_devices_empty_state_button_title">پیوند یک دستگاه (بتا)</string>
<string name="activity_linked_devices_title">دستگاهها</string>
<string name="activity_linked_devices_multi_device_limit_reached_dialog_title">امکان اضافه کردن دستگاه دیگری نیست</string>
<string name="activity_linked_devices_multi_device_limit_reached_dialog_explanation">در حال حاضر اتصال بیشتر از یک دستگاه مجاز نیست.</string>
<string name="activity_linked_devices_unlinking_failed_message">اتصال دستگاه انجام نشد</string>
<string name="activity_linked_devices_unlinking_successful_message">اتصال دستگاه شما با موفقیت قطع شد</string>
<string name="activity_linked_devices_linking_failed_message">اتصال دستگاه انجام نشد</string>
<string name="activity_linked_devices_empty_state_message">شما هنوز هیچ دستگاهی را متصل نکرده‌اید</string>
<string name="activity_linked_devices_empty_state_button_title">اتصال یک دستگاه (بتا)</string>
<string name="preferences_notifications_strategy_category_title">استراتژی اعلان</string>
<string name="preferences_notifications_use_fcm_option_title">از FCM استفاده کنید</string>
<string name="preferences_notifications_use_fcm_option_explanation">با استفاده از پیام ابری فایربیس، اعلان های فشار قابل اطمینان تر امکان پذیر است ، اما نشانگر IP و دستگاه شما را در گوگل و لوکی قرار می دهد.</string>
<string name="dialog_link_device_slave_mode_title_1">در انتظار مجوز</string>
<string name="dialog_link_device_slave_mode_title_2">پیوند دستگاه مجاز است</string>
<string name="dialog_link_device_slave_mode_explanation_1">لطفاً بررسی کنید که کلمات زیر با کلمات نشان داده شده در دستگاه دیگر شما مطابقت دارند.</string>
<string name="dialog_link_device_slave_mode_explanation_2">دستگاه شما با موفقیت پیوند خورده است</string>
<string name="dialog_link_device_slave_mode_explanation_2">دستگاه شما با موفقیت متصل شد</string>
<string name="dialog_link_device_master_mode_title_1">منتظر دستگاه</string>
<string name="dialog_link_device_master_mode_title_2">درخواست پیوند دریافت شد</string>
<string name="dialog_link_device_master_mode_title_3">پیوند دستگاه مجاز</string>
<string name="dialog_link_device_master_mode_explanation_1">جلسه را در دستگاه دیگر خود دانلود کرده و روی پیوند به یک حساب موجود در پایین صفحه فرود ضربه بزنید. اگر در حال حاضر دارای یک حساب کاربری در دستگاه دیگر خود هستید ، ابتدا باید آن حساب را حذف کنید.</string>
<string name="dialog_link_device_master_mode_title_2">درخواست اتصال دریافت شد</string>
<string name="dialog_link_device_master_mode_title_3">در حال مجوز صادر کردن برای اتصال دستگاه</string>
<string name="dialog_link_device_master_mode_explanation_1">اپ Session را در دستگاه دیگر خود دانلود کنید و روی "اتصال به یک حساب موجود" در پایین صفحه ورودی ضربه بزنید. اگر در حال حاضر دارای یک حساب کاربری در دستگاه دیگر خود هستید، ابتدا باید آن حساب را حذف کنید.</string>
<string name="dialog_link_device_master_mode_explanation_2">لطفاً بررسی کنید که کلمات زیر با کلمات نشان داده شده در دستگاه دیگر شما مطابقت دارند.</string>
<string name="dialog_link_device_master_mode_explanation_3">لطفاً منتظر بمانید تا پیوند دستگاه ایجاد شود. این ممکن است تا یک دقیقه طول بکشد.</string>
<string name="dialog_link_device_master_mode_explanation_3">لطفاً منتظر بمانید تا اتصال دستگاه ایجاد شود. این ممکن است تا یک دقیقه طول بکشد.</string>
<string name="dialog_link_device_master_mode_authorize_button_title">اجازه دهید</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">تغییر نام</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">دستگاه را جدا کنید</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">قطع اتصال دستگاه</string>
<string name="dialog_edit_device_name_edit_text_hint">یک نام وارد کنید</string>
<string name="dialog_seed_title">عبارت بازیابی شما</string>
<string name="dialog_seed_explanation">این عبارت بازیابی شماست. با استفاده از آن ، می توانید شناسه جلسه خود را به دستگاه جدید بازیابی یا انتقال دهید.</string>
<string name="dialog_seed_explanation">این عبارت بازیابی شماست. با استفاده از آن می‌توانید شناسه‌ی Session خود را به دستگاه جدید بازیابی یا انتقال دهید.</string>
<string name="dialog_clear_all_data_title">پاک کردن همه داده ها</string>
<string name="dialog_clear_all_data_explanation">این به طور دائم پیام ها، جلسات و مخاطبین شما را حذف می کند.</string>
<string name="dialog_clear_all_data_title">پاک کردن همه دادهها</string>
<string name="dialog_clear_all_data_explanation">این به طور دائم پیام‌ها، جلسات و مخاطبین شما را حذف می‌کند.</string>
<string name="activity_qr_code_title">کد QR</string>
<string name="activity_qr_code_view_my_qr_code_tab_title">مشاهده کد QR من</string>
<string name="activity_qr_code_view_scan_qr_code_tab_title">اسکن کد QR</string>
<string name="activity_qr_code_view_scan_qr_code_explanation">برای شروع مکالمه با آنها ، کد QR شخصی را اسکن کنید</string>
<string name="activity_qr_code_view_scan_qr_code_explanation">برای شروع مکالمه با دیگران، کد QR شخصی را اسکن کنید</string>
<string name="fragment_view_my_qr_code_explanation">این کد QR شماست. سایر کاربران می توانند برای شروع جلسه با شما آن را اسکن کنند.</string>
<string name="fragment_view_my_qr_code_explanation">این کد QR شماست. سایر کاربران می‌توانند برای شروع Session با شما آن را اسکن کنند.</string>
<string name="fragment_view_my_qr_code_share_title">کد QR را به اشتراک بگذارید</string>
<string name="view_friend_request_accept_button_title">تایید کنید</string>
<string name="view_friend_request_reject_button_title">کاهش می یابد</string>
<string name="view_friend_request_incoming_pending_message">%1$s برای شما درخواست جلسه ارسال کرد</string>
<string name="view_friend_request_incoming_accepted_message">شما قبول کرده اید %1$s درخواست جلسه</string>
<string name="view_friend_request_incoming_declined_message">شما کاهش داده اید %1$s درخواست جلسه</string>
<string name="view_friend_request_incoming_expired_message">%1$s درخواست جلسه منقضی شده است</string>
<string name="view_friend_request_outgoing_pending_message">شما ارسال کرده اید %1$s درخواست جلسه</string>
<string name="view_friend_request_outgoing_accepted_message">%1$s درخواست جلسه خود را پذیرفته اید</string>
<string name="view_friend_request_outgoing_expired_message">درخواست جلسه شما به %1$s منقضی شده است</string>
<string name="session_reset_banner_message">آیا می خواهید جلسه خود را با آن بازیابی کنید %s ؟</string>
<string name="session_reset_banner_message">آیا می‌خواهید Session خود را با آن بازیابی کنید %s ؟</string>
<string name="session_reset_banner_dismiss_button_title">رد</string>
<string name="session_reset_banner_restore_button_title">بازگرداندن</string>
<string name="session_reset_banner_restore_button_title">بازیابی</string>
<string name="fragment_contact_selection_contacts_title">مخاطبین</string>
<string name="fragment_contact_selection_closed_groups_title">گروه های بسته</string>
<string name="fragment_contact_selection_open_groups_title">باز کردن گروه ها</string>
-->
<string name="fragment_contact_selection_closed_groups_title">گروه‌های خصوصی</string>
<string name="fragment_contact_selection_open_groups_title">گروه‌های باز</string>
</resources>

View File

@ -123,7 +123,7 @@
<string name="ConversationActivity_add_attachment">Ajouter une pièce jointe</string>
<string name="ConversationActivity_select_contact_info">Sélectionner les renseignements du contact</string>
<string name="ConversationActivity_compose_message">Rédiger un message</string>
<string name="ConversationActivity_sorry_there_was_an_error_setting_your_attachment">Désolé, une erreur de mise en place de votre pièce jointe est survenue.</string>
<string name="ConversationActivity_sorry_there_was_an_error_setting_your_attachment">Une erreur est survenue lors du chargement de la pièce jointe.</string>
<string name="ConversationActivity_recipient_is_not_a_valid_sms_or_email_address_exclamation">Le destinataire nest pas une adresse texto ou courriel valide!</string>
<string name="ConversationActivity_message_is_empty_exclamation">Le message est vide!</string>
<string name="ConversationActivity_group_members">Membres du groupe</string>
@ -145,7 +145,7 @@
<string name="ConversationActivity_you_will_once_again_be_able_to_receive_messages_and_calls_from_this_contact">Vous pourrez de nouveau recevoir les messages et appels de ce contact.</string>
<string name="ConversationActivity_unblock_this_group_description">Les membres actuels pourront vous ajouter au groupe de nouveau.</string>
<string name="ConversationActivity_unblock">Débloquer</string>
<string name="ConversationActivity_attachment_exceeds_size_limits">La pièce jointe dépasse la limite de taille pour le type de message que vous envoyé.</string>
<string name="ConversationActivity_attachment_exceeds_size_limits">La pièce jointe dépasse la limite de taille autorisée.</string>
<string name="ConversationActivity_quick_camera_unavailable">Lappareil photo nest pas disponible</string>
<string name="ConversationActivity_unable_to_record_audio">Impossible denregistrer laudio !</string>
<string name="ConversationActivity_there_is_no_app_available_to_handle_this_link_on_your_device">Il ny a aucune appli pour gérer ce lien sur votre appareil.</string>

View File

@ -433,7 +433,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
});
sessionRestoreBannerView.setOnRestore(() -> {
SessionManagementProtocol.startSessionReset(this, recipient, threadId);
SessionManagementProtocol.startSessionReset(this, recipient.getAddress().serialize());
updateSessionRestoreBanner();
return Unit.INSTANCE;
});

View File

@ -98,6 +98,7 @@ import org.thoughtcrime.securesms.util.Hex;
import org.thoughtcrime.securesms.util.IdentityUtil;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.whispersystems.libsignal.InvalidMessageException;
import org.whispersystems.libsignal.loki.SessionResetProtocol;
import org.whispersystems.libsignal.state.SignalProtocolStore;
import org.whispersystems.libsignal.util.guava.Optional;
@ -354,14 +355,14 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
} catch (ProtocolInvalidMessageException e) {
Log.w(TAG, e);
if (!isPushNotification) { // This can be triggered if a PN encrypted with an old session comes in after the user performed a session reset
handleCorruptMessage(e.getSender(), e.getSenderDevice(), envelope.getTimestamp(), smsMessageId);
handleCorruptMessage(e.getSender(), e.getSenderDevice(), envelope.getTimestamp(), smsMessageId, e);
}
} catch (ProtocolInvalidKeyIdException | ProtocolInvalidKeyException | ProtocolUntrustedIdentityException e) {
Log.w(TAG, e);
handleCorruptMessage(e.getSender(), e.getSenderDevice(), envelope.getTimestamp(), smsMessageId);
handleCorruptMessage(e.getSender(), e.getSenderDevice(), envelope.getTimestamp(), smsMessageId, e);
} catch (StorageFailedException e) {
Log.w(TAG, e);
handleCorruptMessage(e.getSender(), e.getSenderDevice(), envelope.getTimestamp(), smsMessageId);
handleCorruptMessage(e.getSender(), e.getSenderDevice(), envelope.getTimestamp(), smsMessageId, e);
} catch (ProtocolNoSessionException e) {
Log.w(TAG, e);
handleNoSessionMessage(e.getSender(), e.getSenderDevice(), envelope.getTimestamp(), smsMessageId);
@ -1069,7 +1070,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
}
private void handleCorruptMessage(@NonNull String sender, int senderDevice, long timestamp,
@NonNull Optional<Long> smsMessageId)
@NonNull Optional<Long> smsMessageId, @NonNull Throwable e)
{
SmsDatabase smsDatabase = DatabaseFactory.getSmsDatabase(context);
@ -1083,6 +1084,22 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
} else {
smsDatabase.markAsDecryptFailed(smsMessageId.get());
}
// FIXME: This is a temporary patch for bad mac issues. At least with this people will be able to message again. We have to figure out the root cause of the issue though.
if (e.getCause() != null) {
Throwable e2 = e.getCause();
if (e2.getCause() != null) {
Throwable e3 = e2.getCause();
if (e3 instanceof InvalidMessageException) {
String message = e3.getMessage();
if (message != null && message.startsWith("Bad Mac!")) {
SessionManagementProtocol.startSessionReset(context, sender);
return; // Don't trigger the session restoration UI
}
}
}
}
SessionManagementProtocol.triggerSessionRestorationUI(context, sender);
}

View File

@ -1,6 +1,7 @@
package org.thoughtcrime.securesms.loki.protocol
import android.content.Context
import android.os.AsyncTask
import android.util.Log
import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
@ -23,15 +24,18 @@ import java.util.*
object SessionManagementProtocol {
@JvmStatic
fun startSessionReset(context: Context, recipient: Recipient, threadID: Long) {
fun startSessionReset(context: Context, publicKey: String) {
val recipient = recipient(context, publicKey)
if (recipient.isGroupRecipient) { return }
val lokiThreadDB = DatabaseFactory.getLokiThreadDatabase(context)
val smsDB = DatabaseFactory.getSmsDatabase(context)
if (lokiThreadDB.getSessionResetStatus(publicKey) != SessionResetStatus.NONE) { return }
val threadID = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(recipient)
val devices = lokiThreadDB.getSessionRestoreDevices(threadID)
for (device in devices) {
val endSessionMessage = OutgoingEndSessionMessage(OutgoingTextMessage(recipient, "TERMINATE", 0, -1))
MessageSender.send(context, endSessionMessage, threadID, false, null)
}
val smsDB = DatabaseFactory.getSmsDatabase(context)
val infoMessage = OutgoingTextMessage(recipient, "", 0, 0)
val infoMessageID = smsDB.insertMessageOutbox(threadID, infoMessage, false, System.currentTimeMillis(), null)
if (infoMessageID > -1) {