Copione merged onto master
continuous-integration/drone/push Build was killed Details

master
blallo 2020-05-05 00:00:48 +00:00
commit 0a87bca366
25 changed files with 669 additions and 106 deletions

View File

@ -80,8 +80,8 @@ protobuf {
}
}
def canonicalVersionCode = 626
def canonicalVersionName = "4.59.6"
def canonicalVersionCode = 628
def canonicalVersionName = "4.59.8"
def postFixSize = 10
def abiPostFix = ['universal' : 0,

View File

@ -1196,7 +1196,8 @@ public class AttachmentDatabase extends Database {
boolean useTemplateUpload = template.getUploadTimestamp() > attachment.getUploadTimestamp() &&
template.getTransferState() == TRANSFER_PROGRESS_DONE &&
template.getTransformProperties().shouldSkipTransform();
template.getTransformProperties().shouldSkipTransform() &&
!attachment.getTransformProperties().isVideoEdited();
ContentValues contentValues = new ContentValues();
contentValues.put(MMS_ID, mmsId);

View File

@ -400,7 +400,7 @@ public class RecipientDatabase extends Database {
if (cursor != null && cursor.moveToNext()) {
return getRecipientSettings(context, cursor);
} else {
throw new MissingRecipientError(id);
throw new MissingRecipientException(id);
}
}
}
@ -1928,8 +1928,8 @@ public class RecipientDatabase extends Database {
}
}
public static class MissingRecipientError extends AssertionError {
public MissingRecipientError(@Nullable RecipientId id) {
public static class MissingRecipientException extends IllegalStateException {
public MissingRecipientException(@Nullable RecipientId id) {
super("Failed to find recipient with ID: " + id);
}
}

View File

@ -1,15 +1,20 @@
package org.thoughtcrime.securesms.lock.v2;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.EditText;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.PluralsRes;
import androidx.autofill.HintConstants;
import androidx.core.content.ContextCompat;
import androidx.core.view.ViewCompat;
import androidx.lifecycle.ViewModelProviders;
import androidx.navigation.Navigation;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.SpanUtil;
public class CreateKbsPinFragment extends BaseKbsPinFragment<CreateKbsPinViewModel> {
@ -47,6 +52,15 @@ public class CreateKbsPinFragment extends BaseKbsPinFragment<CreateKbsPinViewMod
CreateKbsPinFragmentArgs args = CreateKbsPinFragmentArgs.fromBundle(requireArguments());
viewModel.getNavigationEvents().observe(getViewLifecycleOwner(), e -> onConfirmPin(e.getUserEntry(), e.getKeyboard(), args.getIsPinChange()));
viewModel.getErrorEvents().observe(getViewLifecycleOwner(), e -> {
if (e == CreateKbsPinViewModel.PinErrorEvent.WEAK_PIN) {
getLabel().setText(SpanUtil.color(ContextCompat.getColor(requireContext(), R.color.red),
getString(R.string.CreateKbsPinFragment__choose_a_stronger_pin)));
shake(getInput(), () -> getInput().getText().clear());
} else {
throw new AssertionError("Unexpected PIN error!");
}
});
viewModel.getKeyboard().observe(getViewLifecycleOwner(), k -> {
getLabel().setText(getLabelText(k));
getInput().getText().clear();
@ -76,4 +90,23 @@ public class CreateKbsPinFragment extends BaseKbsPinFragment<CreateKbsPinViewMod
private String getPinLengthRestrictionText(@PluralsRes int plurals) {
return requireContext().getResources().getQuantityString(plurals, KbsConstants.MINIMUM_PIN_LENGTH, KbsConstants.MINIMUM_PIN_LENGTH);
}
private static void shake(@NonNull EditText view, @NonNull Runnable afterwards) {
TranslateAnimation shake = new TranslateAnimation(0, 30, 0, 0);
shake.setDuration(50);
shake.setRepeatCount(7);
shake.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {}
@Override
public void onAnimationEnd(Animation animation) {
afterwards.run();
}
@Override
public void onAnimationRepeat(Animation animation) {}
});
view.startAnimation(shake);
}
}

View File

@ -2,18 +2,22 @@ package org.thoughtcrime.securesms.lock.v2;
import androidx.annotation.MainThread;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.core.util.Preconditions;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.SingleLiveEvent;
import org.whispersystems.signalservice.internal.registrationpin.PinValidityChecker;
public final class CreateKbsPinViewModel extends ViewModel implements BaseKbsPinViewModel {
private final MutableLiveData<KbsPin> userEntry = new MutableLiveData<>(KbsPin.EMPTY);
private final MutableLiveData<PinKeyboardType> keyboard = new MutableLiveData<>(PinKeyboardType.NUMERIC);
private final SingleLiveEvent<NavigationEvent> events = new SingleLiveEvent<>();
private final SingleLiveEvent<PinErrorEvent> errors = new SingleLiveEvent<>();
@Override
public LiveData<KbsPin> getUserEntry() {
@ -27,6 +31,8 @@ public final class CreateKbsPinViewModel extends ViewModel implements BaseKbsPin
LiveData<NavigationEvent> getNavigationEvents() { return events; }
LiveData<PinErrorEvent> getErrorEvents() { return errors; }
@Override
@MainThread
public void setUserEntry(String userEntry) {
@ -42,8 +48,14 @@ public final class CreateKbsPinViewModel extends ViewModel implements BaseKbsPin
@Override
@MainThread
public void confirm() {
events.setValue(new NavigationEvent(Preconditions.checkNotNull(this.getUserEntry().getValue()),
Preconditions.checkNotNull(this.getKeyboard().getValue())));
KbsPin pin = Preconditions.checkNotNull(this.getUserEntry().getValue());
PinKeyboardType keyboard = Preconditions.checkNotNull(this.getKeyboard().getValue());
if (PinValidityChecker.valid(pin.toString())) {
events.setValue(new NavigationEvent(pin, keyboard));
} else {
errors.setValue(PinErrorEvent.WEAK_PIN);
}
}
static final class NavigationEvent {
@ -63,4 +75,8 @@ public final class CreateKbsPinViewModel extends ViewModel implements BaseKbsPin
return keyboard;
}
}
enum PinErrorEvent {
WEAK_PIN
}
}

View File

@ -4,6 +4,7 @@ import androidx.annotation.NonNull;
import com.annimon.stream.Stream;
import org.thoughtcrime.securesms.logging.Log;
import org.xbill.DNS.ARecord;
import org.xbill.DNS.Lookup;
import org.xbill.DNS.Record;
@ -23,6 +24,8 @@ import okhttp3.Dns;
*/
public class CustomDns implements Dns {
private static final String TAG = Log.tag(CustomDns.class);
private final String dnsHostname;
public CustomDns(@NonNull String dnsHostname) {
@ -55,7 +58,8 @@ public class CustomDns implements Dns {
private static @NonNull Lookup doLookup(@NonNull String hostname) throws UnknownHostException {
try {
return new Lookup(hostname);
} catch (TextParseException e) {
} catch (Throwable e) {
Log.w(TAG, e);
throw new UnknownHostException();
}
}

View File

@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.recipients;
import android.annotation.SuppressLint;
import android.content.Context;
import android.text.TextUtils;
import androidx.annotation.AnyThread;
import androidx.annotation.NonNull;
@ -12,14 +11,13 @@ import com.annimon.stream.Stream;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.RecipientDatabase;
import org.thoughtcrime.securesms.database.RecipientDatabase.MissingRecipientError;
import org.thoughtcrime.securesms.database.RecipientDatabase.MissingRecipientException;
import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.database.model.ThreadRecord;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.util.LRUCache;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.concurrent.SignalExecutors;
import org.whispersystems.libsignal.util.guava.Optional;
import java.util.ArrayList;
import java.util.Collections;
@ -61,12 +59,12 @@ public final class LiveRecipientCache {
recipients.put(id, newLive);
MissingRecipientError prettyStackTraceError = new MissingRecipientError(newLive.getId());
MissingRecipientException prettyStackTraceError = new MissingRecipientException(newLive.getId());
SignalExecutors.BOUNDED.execute(() -> {
try {
newLive.resolve();
} catch (MissingRecipientError e) {
} catch (MissingRecipientException e) {
throw prettyStackTraceError;
}
});
@ -88,11 +86,11 @@ public final class LiveRecipientCache {
} else if (localE164 != null) {
localRecipientId = recipientDatabase.getByE164(localE164).orNull();
} else {
throw new AssertionError("Tried to call getSelf() before local data was set!");
throw new IllegalStateException("Tried to call getSelf() before local data was set!");
}
if (localRecipientId == null) {
throw new MissingRecipientError(localRecipientId);
throw new MissingRecipientException(localRecipientId);
}
}
}

View File

@ -73,7 +73,7 @@
<string name="AttachmentKeyboard_file">ملف</string>
<string name="AttachmentKeyboard_contact">جهة اتصال</string>
<string name="AttachmentKeyboard_location">موقع جغرافي</string>
<string name="AttachmentKeyboard_Signal_needs_permission_to_show_your_photos_and_videos">يحتاج Signal إلى الإذن لعرض صورك ومرئياتك.</string>
<string name="AttachmentKeyboard_Signal_needs_permission_to_show_your_photos_and_videos">تحتاج Signal إلى إذن لإظهار الصور ومقاطع الفيديو الخاصة بك.</string>
<string name="AttachmentKeyboard_give_access">امنح الصلاحيات</string>
<!--AttachmentManager-->
<string name="AttachmentManager_cant_open_media_selection">لم يتم العثور على تطبيق لاختيار ملف.</string>
@ -89,15 +89,17 @@
<!--BlockedContactsActivity-->
<string name="BlockedContactsActivity_blocked_contacts">جهات الاتصال المحظورة</string>
<!--BlockUnblockDialog-->
<string name="BlockUnblockDialog_block_and_leave_s">حظر ومغادرة %1$s؟</string>
<string name="BlockUnblockDialog_block_and_leave_s">حظر و مغادرة %1$s؟</string>
<string name="BlockUnblockDialog_block_s">حظر %1$s؟</string>
<string name="BlockUnblockDialog_you_will_no_longer_receive_messages_or_updates">لن تستقبل بعد الآن رسائل أو تحديثات من هذه المجموعة، ولن يتمكن الأعضاء من إضافتك مرة أخرى إلى هذه المجموعة.</string>
<string name="BlockUnblockDialog_group_members_wont_be_able_to_add_you">لن يتمكن أعضاء المجموعة من إضافتك إلى مجموعتهم مرة أخرى.</string>
<string name="BlockUnblockDialog_group_members_will_be_able_to_add_you">سيتمكن أعضاء المجموعة من إضافتك في مجموعتهم مرة أخرى.</string>
<string name="BlockUnblockDialog_you_will_be_able_to_call_and_message_each_other">ستتمكن من التراسل والحديث مع بعضكما.</string>
<string name="BlockUnblockDialog_blocked_people_wont_be_able_to_call_you_or_send_you_messages">لن يتمكن الأشخاص المحظورون من الاتصال بك ولا إرسال الرسائل إليك.</string>
<string name="BlockUnblockDialog_unblock_s">إلغاء حظر %1$s؟</string>
<string name="BlockUnblockDialog_unblock">رفع الحظر</string>
<string name="BlockUnblockDialog_block">حظر</string>
<string name="BlockUnblockDialog_block_and_delete">حظر و حذف</string>
<!--BucketedThreadMedia-->
<string name="BucketedThreadMedia_Today">اليوم</string>
<string name="BucketedThreadMedia_Yesterday">البارحة</string>
@ -178,6 +180,7 @@
<string name="ConversationItem_read_more">  قراءة المزيد</string>
<string name="ConversationItem_download_more">  تحميل المزيد</string>
<string name="ConversationItem_pending">  معلّق</string>
<string name="ConversationItem_this_message_was_deleted">تم حذف هذه الرسالة.</string>
<!--ConversationActivity-->
<string name="ConversationActivity_reset_secure_session_question">إعادة ضبط جلسة آمنة؟</string>
<string name="ConversationActivity_this_may_help_if_youre_having_encryption_problems">سوف يتم الاحتفاظ برسائلك. هذا قد يساعد في حال وجود مشاكل في التشفير بهذه المحادثة.</string>
@ -439,8 +442,21 @@
<string name="GroupMembersDialog_you">أنت</string>
<!--GV2 access levels-->
<string name="GroupManagement_access_level_all_members">كل الأعضاء</string>
<string name="GroupManagement_access_level_only_admins">للمشرفين فقط</string>
<!--PendingMembersActivity-->
<string name="PendingMembersActivity_people_you_invited">الأشخاص الذين دعوتهم</string>
<string name="PendingMembersActivity_cancel_invite">إلغاء الدعوة</string>
<string name="PendingMembersActivity_cancel_invites">إلغاء الدعوات</string>
<!--GV2 Invite cancellation confirmation-->
<string name="GroupManagement_cancel_own_single_invite">هل تريد إلغاء الدعوة التي أرسلتها إلى %1$s؟</string>
<plurals name="GroupManagement_cancel_others_invites">
<item quantity="zero">هل تريد إلغاء %2$d من الدعوات المرسلة من طرف %1$s ؟</item>
<item quantity="one">هل تريد إلغاء الدعوة التي أرسلتها إلى %1$s؟</item>
<item quantity="two">هل تريد إلغاء %2$d من الدعوات المرسلة من طرف %1$s ؟</item>
<item quantity="few">هل تريد إلغاء %2$d من الدعوات المرسلة من طرف %1$s ؟</item>
<item quantity="many">هل تريد إلغاء %2$d من الدعوات المرسلة من طرف %1$s ؟</item>
<item quantity="other">هل تريد إلغاء %2$d من الدعوات المرسلة من طرف %1$s ؟</item>
</plurals>
<!--CropImageActivity-->
<string name="CropImageActivity_group_avatar">الصورة الرمزية للمجموعة</string>
<string name="CropImageActivity_profile_avatar">الصورة الرمزية</string>
@ -611,12 +627,33 @@
<string name="MessageRecord_s_set_disappearing_message_time_to_s">%1$s حدد مدّة ظهور الرّسائل قبل اختفائها ب %2$s.</string>
<!--GV2 specific-->
<!--GV2 member additions-->
<string name="MessageRecord_you_added_s">أضفت %1$s.</string>
<string name="MessageRecord_s_added_s">%1$s أضاف %2$s.</string>
<string name="MessageRecord_s_added_you">%1$s أضافك إلى المجموعة.</string>
<string name="MessageRecord_you_joined_the_group">لقد انضممت إلى المجموعة.</string>
<string name="MessageRecord_s_joined_the_group">%1$s انضموا إلى المجموعة.</string>
<!--GV2 member removals-->
<string name="MessageRecord_you_removed_s">لقد قمت بإزالة %1$s .</string>
<string name="MessageRecord_s_removed_s">%1$s أزال %2$s .</string>
<string name="MessageRecord_s_removed_you_from_the_group"> %1$s أزالك من المجموعة.</string>
<string name="MessageRecord_you_left_the_group">لقد تركت المجموعة.</string>
<string name="MessageRecord_s_left_the_group"> %1$s ترك المجموعة.</string>
<!--GV2 role change-->
<string name="MessageRecord_you_made_s_an_admin">لقد جعلت %1$s مشرفاً.</string>
<string name="MessageRecord_s_made_s_an_admin">لقد جعل %1$s %2$s مشرفاً.</string>
<string name="MessageRecord_s_made_you_an_admin">لقد جعلك %1$s مشرفاً.</string>
<string name="MessageRecord_you_revoked_admin_privileges_from_s">لقد قمت بسحب امتيازات المشرف من %1$s .</string>
<string name="MessageRecord_s_revoked_your_admin_privileges">قام %1$s بإلغاء امتيازات المشرف الخاصة بك. \"</string>
<string name="MessageRecord_s_revoked_admin_privileges_from_s">قام %1$s بإلغاء امتيازات المشرف من %2$s.</string>
<!--GV2 invitations-->
<string name="MessageRecord_you_invited_s_to_the_group">لقد دعوت %1$s إلى المجموعة.</string>
<string name="MessageRecord_s_invited_you_to_the_group">دعاك %1$s إلى المجموعة.</string>
<!--GV2 invitation revokes-->
<string name="MessageRecord_someone_declined_an_invitation_to_the_group">رفض شخص ما دعوة إلى المجموعة.</string>
<string name="MessageRecord_you_declined_the_invitation_to_the_group">لقد رفضت الدعوة إلى المجموعة.</string>
<!--GV2 invitation acceptance-->
<string name="MessageRecord_you_accepted_invite">لقد قبلت الدعوة إلى المجموعة.</string>
<string name="MessageRecord_s_accepted_invite">قبل %1$s دعوة إلى المجموعة.</string>
<!--GV2 title change-->
<!--GV2 avatar change-->
<!--GV2 attribute access level change-->
@ -866,6 +903,7 @@
<string name="ThreadRecord_view_once_photo">صورة لمشاهدة لمرة واحدة</string>
<string name="ThreadRecord_view_once_video">فيديو لمشاهدة لمرة واحدة</string>
<string name="ThreadRecord_view_once_media">وسيط لمشاهدة لمرة واحدة</string>
<string name="ThreadRecord_this_message_was_deleted">تم حذف هذه الرسالة.</string>
<string name="ThreadRecord_s_is_on_signal">%sمتواجد على Signal !</string>
<string name="ThreadRecord_disappearing_messages_disabled">الرسائل المختفية غير مفعّلة</string>
<string name="ThreadRecord_disappearing_message_time_updated_to_s">ضبط توقيت إخفاء الرسائل إلى %s</string>
@ -975,6 +1013,7 @@
<string name="MessageNotifier_reacted_s_to_your_view_once_photo">تفاعل %1$s مع الصورة لمشاهدة-واحدة الخاصّة بك.</string>
<string name="MessageNotifier_reacted_s_to_your_view_once_video">تفاعل %1$s مع فيديو المشاهدة-لمرة واحدة الخاص بك.</string>
<string name="MessageNotifier_reacted_s_to_your_sticker">تم تفاعل %1$s مع الملصق الخاص بك.</string>
<string name="MessageNotifier_this_message_was_deleted">تم حذف هذه الرسالة.</string>
<!--Notification Channels-->
<string name="NotificationChannel_messages">افتراضي</string>
<string name="NotificationChannel_calls">المُكالمات</string>

File diff suppressed because one or more lines are too long

View File

@ -1700,7 +1700,7 @@ Ricevis mesaĝon pri interŝanĝo de ŝlosiloj por nevalida protokola versio.
</plurals>
<!--KBS Megaphone-->
<string name="KbsMegaphone__create_a_pin">Krei PIN-on</string>
<string name="KbsMegaphone__pins_keep_information_thats_stored_with_signal_encrytped">La informoj konservitaj ĉe Signal estas ĉifritaj pere de PIN.</string>
<string name="KbsMegaphone__pins_keep_information_thats_stored_with_signal_encrytped">La informoj konservitaj ĉe Signal estas ĉifritaj danke al PIN.</string>
<string name="KbsMegaphone__create_pin">Krei PIN-on</string>
<string name="KbsMegaphone__introducing_pins">Jen la „persona identiga numero“ (PIN)</string>
<string name="KbsMegaphone__update_pin">Ĝisdatigi PIN-on</string>

View File

@ -129,6 +129,7 @@
<string name="CommunicationActions_cancel">Loobu</string>
<string name="CommunicationActions_call">Helista</string>
<string name="CommunicationActions_insecure_call">Ebaturvaline kõne</string>
<string name="CommunicationActions_carrier_charges_may_apply">Võivad rakenduda mobiilioperaatori tasud. Number, millele helistate, pole Signal-is registreeritud. See kõne tehakse teie mobiilioperaatori, mitte Interneti kaudu.</string>
<!--ConfirmIdentityDialog-->
<string name="ConfirmIdentityDialog_your_safety_number_with_s_has_changed">Sinu turvanumber kontaktiga %1$s on muutunud. See võib tähendada, et keegi proovib sinu vestlusesse sekkuda või et %2$s lihtsalt taasinstallis Signali.</string>
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_your_safety_number_with_this_contact">Sa võid tahta kinnitada oma turvanumbrit selle kontaktiga.</string>
@ -689,6 +690,7 @@
<string name="PinRestoreEntryFragment_incorrect_pin">Sobimatu PIN-kood</string>
<string name="PinRestoreEntryFragment_skip_pin_entry">Kas jätta PIN-koodi sisestamine vahele?</string>
<string name="PinRestoreEntryFragment_need_help">Kas vajad abi?</string>
<string name="PinRestoreEntryFragment_your_pin_is_a_d_digit_code">Sinu PIN-kood on sinu loodud %1$d-kohaline kood, mis võib olla numbriline või tähtnumbriline.\n\nKui sa ei mäleta oma PIN-koodi, saad luua uue. Saad oma kontot registreerida ja kasutada, kuid kaotad mõned salvestatud sätted, näiteks oma profiiliteabe.</string>
<string name="PinRestoreEntryFragment_if_you_cant_remember_your_pin">Kui sa ei mäleta oma PIN-koodi, saad luua uue. Saad oma kontot registreerida ja kasutada, kuid kaotad mõned salvestatud seaded, näiteks oma profiiliteabe.</string>
<string name="PinRestoreEntryFragment_create_new_pin">Loo uus PIN-kood</string>
<string name="PinRestoreEntryFragment_contact_support">Võta ühendust kasutajatoega</string>
@ -856,6 +858,7 @@
<string name="SubmitDebugLogActivity_submit">Postita</string>
<string name="SubmitDebugLogActivity_failed_to_submit_logs">Silumislogi postitamine ei õnnestunud</string>
<string name="SubmitDebugLogActivity_success">Õnnestus!</string>
<string name="SubmitDebugLogActivity_copy_this_url_and_add_it_to_your_issue">Kopeeri see aadress ja lisa oma probleemiteatesse või toe e-kirja:\n\n<b>%1$s</b></string>
<string name="SubmitDebugLogActivity_copied_to_clipboard">Lõikelauale kopeeritud</string>
<string name="SubmitDebugLogActivity_ok">OK</string>
<string name="SubmitDebugLogActivity_share">Jaga</string>
@ -1304,9 +1307,11 @@
<string name="AndroidManifest_remove_photo">Eemalda pilt</string>
<!--Message Requests Megaphone-->
<string name="MessageRequestsMegaphone__message_requests">Sõnumisoovid</string>
<string name="MessageRequestsMegaphone__users_can_now_choose_to_accept">Kasutajad saavad nüüd valida, kas nõustuvad uue vestlusega. Profiilinimed võimaldavad inimestel teada, kes nendega suhtleb.</string>
<string name="MessageRequestsMegaphone__add_profile_name">Lisa profiilinimi</string>
<string name="MessageRequestsMegaphone__new_message_requests">Uus: sõnumisoovid</string>
<string name="MessageRequestsMegaphone__add_name">Lisa nimi</string>
<string name="MessageRequestsMegaphone__you_can_now_choose_whether_to_accept">Saad nüüd valida, kas nõustuda uue vestlusega. Näed valikud \"Nõustu\", \"Kustuta\" või \"Blokeeri\".</string>
<!--HelpFragment-->
<string name="HelpFragment__help">Abi</string>
<string name="HelpFragment__have_you_read_our_faq_yet">Kas oled juba meie KKK-d lugenud?</string>
@ -1327,6 +1332,7 @@
<string name="HelpFragment__na">puudub</string>
<string name="HelpFragment__could_not_upload_logs">Logide üleslaadimine ei õnnestunud</string>
<string name="HelpFragment__signal_support">Signal-i kasutajatugi</string>
<string name="HelpFragment__please_be_as_descriptive_as_possible">Palun ole võimalikult kirjeldav, et aidata meil probleemist aru saada.</string>
<string name="HelpFragment__no_email_app_found">E-posti rakendust ei leitud.</string>
<!--arrays.xml-->
<string name="arrays__import_export">Impordi</string>
@ -1632,7 +1638,7 @@
<string name="CreateKbsPinFragment__create_a_new_pin">Loo uus PIN-kood</string>
<string name="CreateKbsPinFragment__you_can_choose_a_new_pin_as_long_as_this_device_is_registered">PIN-koodi saab muuta senikaua kuni see seade on registreeritud.</string>
<string name="CreateKbsPinFragment__create_your_pin">Loo enda PIN-kood</string>
<string name="CreateKbsPinFragment__pins_keep_information_stored_with_signal_encrypted">PIN-koodid hoiavad Signal-is salvestatud teabe krüptituna, et ainult sinul on sellele juurdepääs. Kui paigaldad Signal-i uuesti, sii sinu profiil, sätted ja kontaktid taastatakse.</string>
<string name="CreateKbsPinFragment__pins_keep_information_stored_with_signal_encrypted">PIN-koodid hoiavad Signal-is salvestatud teabe krüptituna, et ainult sinul on sellele juurdepääs. Kui paigaldad Signal-i uuesti, siis sinu profiil, sätted ja kontaktid taastatakse.</string>
<!--ConfirmKbsPinFragment-->
<string name="ConfirmKbsPinFragment__pins_dont_match">PIN-koodid pole samad. Proovi uuesti.</string>
<string name="ConfirmKbsPinFragment__confirm_your_pin">Kinnita enda PIN-kood.</string>
@ -1643,20 +1649,23 @@
<string name="ConfirmKbsPinFragment__creating_pin">PINi loomine…</string>
<!--KbsSplashFragment-->
<string name="KbsSplashFragment__introducing_pins">Tutvustame PIN-koode</string>
<string name="KbsSplashFragment__pins_keep_information_stored_with_signal_encrypted">PIN-koodid hoiavad Signal-is salvestatud teabe krüptituna, et ainult sinul on sellele juurdepääs. Kui paigaldad Signal-i uuesti, sii sinu profiil, sätted ja kontaktid taastatakse.</string>
<string name="KbsSplashFragment__pins_keep_information_stored_with_signal_encrypted">PIN-koodid hoiavad Signal-is salvestatud teabe krüptituna, et ainult sinul on sellele juurdepääs. Kui paigaldad Signal-i uuesti, siis sinu profiil, sätted ja kontaktid taastatakse.</string>
<string name="KbsSplashFragment__learn_more">Uuri täpsemalt</string>
<string name="KbsSplashFragment__registration_lock_equals_pin">Registreerimislukk = PIN-kood</string>
<string name="KbsSplashFragment__your_registration_lock_is_now_called_a_pin">Sinu registreerimislukk on nüüd PIN-kood ja see teeb rohkemgi. Uuenda seda nüüd.</string>
<string name="KbsSplashFragment__read_more_about_pins">Loe ähemalt PIN-koodide kohta.</string>
<string name="KbsSplashFragment__update_pin">Uuenda PINi</string>
<string name="KbsSplashFragment__create_your_pin">Loo enda PIN-kood</string>
<!--KBS Reminder Dialog-->
<string name="KbsReminderDialog__enter_your_signal_pin">Sisesta Signal-i PIN-kood</string>
<string name="KbsReminderDialog__to_help_you_memorize_your_pin">PIN-koodi meeldejätmise aitamiseks palume sul seda aeg-ajalt sisestada. Aja möödudes küsime seda harvem.</string>
<string name="KbsReminderDialog__skip">Jäta vahele</string>
<string name="KbsReminderDialog__submit">Postita</string>
<string name="KbsReminderDialog__forgot_pin">Unustasid PINi?</string>
<string name="KbsReminderDialog__incorrect_pin_try_again">Lubamatu PIN-kood. Proovi uuesti.</string>
<!--AccountLockedFragment-->
<string name="AccountLockedFragment__account_locked">Konto lukustatud</string>
<string name="AccountLockedFragment__your_account_has_been_locked_to_protect_your_privacy">Sinu konto on sinu privaatsuse ja turvalisuse kaitseks lukustatud. Pärast %1$d päeva mitteaktiivsust sinu kontol on sul võimalik see telefoninumber ilma PIN-koodi vajamata uuesti registreerida. Kogu sisu eemaldatakse.</string>
<string name="AccountLockedFragment__next">Edasi</string>
<string name="AccountLockedFragment__learn_more">Uuri täpsemalt</string>
<!--KbsLockFragment-->
@ -1669,6 +1678,19 @@
<string name="RegistrationLockFragment__forgot_pin">Unustasid PINi?</string>
<string name="RegistrationLockFragment__incorrect_pin">Sobimatu PIN-kood</string>
<string name="RegistrationLockFragment__forgot_your_pin">Kas unustasid PIN-koodi?</string>
<string name="RegistrationLockFragment__not_many_tries_left">Palju katseid pole enam jäänud!</string>
<plurals name="RegistrationLockFragment__for_your_privacy_and_security_there_is_no_way_to_recover">
<item quantity="one">Sinu privaatsuse ja turvalisuse huvides ei ole võimalik sinu PIN-koodi taastada. Kui sa ei suuda PIN-koodi meenutada, siis on sul võimalik pärast %1$d päeva konto mitteaktiivsust võimalik uuesti SMS-i abil kinnitada. Sellisel juhul su konto tühjendatakse ja kogu sisu eemaldatakse.</item>
<item quantity="other">Sinu privaatsuse ja turvalisuse huvides ei ole võimalik sinu PIN-koodi taastada. Kui sa ei suuda PIN-koodi meenutada, siis on sul võimalik pärast %1$d päeva konto mitteaktiivsust võimalik uuesti SMS-i abil kinnitada. Sellisel juhul su konto tühjendatakse ja kogu sisu eemaldatakse.</item>
</plurals>
<plurals name="RegistrationLockFragment__incorrect_pin_d_attempts_remaining">
<item quantity="one">Lubamatu PIN-kood. %1$d katse jäänud.</item>
<item quantity="other">Lubamatu PIN-kood. %1$d katse jäänud.</item>
</plurals>
<plurals name="RegistrationLockFragment__if_you_run_out_of_attempts_your_account_will_be_locked_for_d_days">
<item quantity="one">Kui sul saavad katsed otsa, siis lukustatakse su konto %1$d päevaks. pärast %1$d päeva konto mitteaktiivsust on sul võimalik konto uuesti registreerida ilma PIN-koodita. Konto tühjendatakse ja kogu sisu kustutatakse.</item>
<item quantity="other">Kui sul saavad katsed otsa, siis lukustatakse su konto %1$d päevaks. pärast%1$d päeva konto mitteaktiivsust on sul võimalik konto uuesti registreerida ilma PIN-koodita. Konto tühjendatakse ja kogu sisu kustutatakse.</item>
</plurals>
<plurals name="RegistrationLockFragment__you_have_d_attempts_remaining">
<item quantity="one">Sul on %1$d katse jäänud.</item>
<item quantity="other">Sul on %1$d katset jäänud.</item>
@ -1715,6 +1737,7 @@
<string name="preferences_chats__backup_chats_to_external_storage">Varunda vestlused välismällu</string>
<string name="preferences_chats__create_backup">Loo varundus</string>
<string name="preferences_chats__verify_backup_passphrase">Kinnita varunduse salaväljend</string>
<string name="preferences_chats__test_your_backup_passphrase_and_verify_that_it_matches">Testi oma varukoopia salaväljendit ja kinnita, et see vastab.</string>
<string name="RegistrationActivity_enter_backup_passphrase">Sisesta varunduse salaväljend</string>
<string name="RegistrationActivity_restore">Taasta</string>
<string name="RegistrationActivity_backup_failure_downgrade">Uuematest Signali versioonidest ei saa varundusi importida</string>
@ -1732,7 +1755,10 @@
<string name="BackupDialog_disable_and_delete_all_local_backups">Kustuta ja keela kõik kohalikud varundused?</string>
<string name="BackupDialog_delete_backups_statement">Kustuta varundused</string>
<string name="BackupDialog_copied_to_clipboard">Lõikelauale kopeeritud</string>
<string name="BackupDialog_enter_backup_passphrase_to_verify">Kinnitamiseks sisesta salaväljend</string>
<string name="BackupDialog_verify">Kinnita</string>
<string name="BackupDialog_you_successfully_entered_your_backup_passphrase">Sisestasid varukoopia salaväljendi edukalt</string>
<string name="BackupDialog_passphrase_was_not_correct">Salaväljend ei olnud õige</string>
<string name="ChatsPreferenceFragment_signal_requires_external_storage_permission_in_order_to_create_backups">Signal vajab välismälu õigust, et luua varundusi, ent see on püsivalt keelatud. Palun jätka rakenduse seadetes, vali \"Load\" ning luba \"Mäluruum\".</string>
<string name="ChatsPreferenceFragment_last_backup_s">Viimane varundus: %s</string>
<string name="ChatsPreferenceFragment_in_progress">Töötamisel</string>
@ -1752,7 +1778,8 @@
<string name="preferences_app_protection__signal_pin">Signali PIN</string>
<string name="preferences_app_protection__create_a_pin">Loo PIN</string>
<string name="preferences_app_protection__change_your_pin">Muuda enda PIN-koodi</string>
<string name="preferences_app_protection__pins_keep_information_stored_with_signal_encrypted">PIN-koodid hoiavad Signal-is salvestatud teabe krüptituna, et ainult sinul on sellele juurdepääs. Kui paigaldad Signal-i uuesti, sii sinu profiil, sätted ja kontaktid taastatakse.</string>
<string name="preferences_app_protection__pins_keep_information_stored_with_signal_encrypted">PIN-koodid hoiavad Signal-is salvestatud teabe krüptituna, et ainult sinul on sellele juurdepääs. Kui paigaldad Signal-i uuesti, siis sinu profiil, sätted ja kontaktid taastatakse.</string>
<string name="preferences_app_protection__add_extra_security_by_requiring_your_signal_pin_to_register">Lisa turvalisust, nõudes selle telefoninumbri Signal-is uuesti registreerimiseks Signal-i PIN-koodi.</string>
<string name="preferences_app_protection__failed_to_enable_registration_lock">Registreerimisluku lubamine ei õnnestunud.</string>
<string name="preferences_app_protection__failed_to_disable_registration_lock">Registreerimisluku keelamine ei õnnestunud.</string>
<string name="AppProtectionPreferenceFragment_none">Puudub</string>

File diff suppressed because one or more lines are too long

View File

@ -77,17 +77,17 @@
<!--BlockedContactsActivity-->
<string name="BlockedContactsActivity_blocked_contacts">Contacts bloqués</string>
<!--BlockUnblockDialog-->
<string name="BlockUnblockDialog_block_and_leave_s">Bloquer et quitter %1$s?</string>
<string name="BlockUnblockDialog_block_s">Bloquer %1$s ?</string>
<string name="BlockUnblockDialog_you_will_no_longer_receive_messages_or_updates">Vous ne recevrez plus de message ni de mises à jour de ce groupe, les membres ne pourront plus vous ajouter à nouveau à ce groupe.</string>
<string name="BlockUnblockDialog_block_and_leave_s">Bloquer et quitter %1$s ?</string>
<string name="BlockUnblockDialog_block_s">Bloquer %1$s ?</string>
<string name="BlockUnblockDialog_you_will_no_longer_receive_messages_or_updates">Vous ne recevrez plus de message ni de mises à jour de ce groupe, les membres ne pourront plus vous ajouter de nouveau à ce groupe.</string>
<string name="BlockUnblockDialog_group_members_wont_be_able_to_add_you">Les membres du groupe ne pourront plus vous ajouter à ce groupe.</string>
<string name="BlockUnblockDialog_group_members_will_be_able_to_add_you">Les membres du groupe pourront de nouveau vous ajouter à ce groupe.</string>
<string name="BlockUnblockDialog_you_will_be_able_to_call_and_message_each_other">Vous pourrez vous envoyer des messages et vous appeler mutuellement.</string>
<string name="BlockUnblockDialog_blocked_people_wont_be_able_to_call_you_or_send_you_messages">Les personnes bloquées ne pourront ni vous appeler ni vous envoyer de messages.</string>
<string name="BlockUnblockDialog_unblock_s">Débloquer %1$s?</string>
<string name="BlockUnblockDialog_unblock_s">Débloquer %1$s ?</string>
<string name="BlockUnblockDialog_unblock">Débloquer</string>
<string name="BlockUnblockDialog_block">Bloquer</string>
<string name="BlockUnblockDialog_block_and_leave">Bloquer et partir</string>
<string name="BlockUnblockDialog_block_and_leave">Bloquer et quitter</string>
<string name="BlockUnblockDialog_block_and_delete">Bloquer et supprimer</string>
<!--BucketedThreadMedia-->
<string name="BucketedThreadMedia_Today">Aujourdhui</string>
@ -222,7 +222,7 @@
<string name="ConversationActivity_sticker_pack_installed">Le paquet dautocollants a été installé</string>
<string name="ConversationActivity_new_say_it_with_stickers">Nouveauté! Dites-le avec des autocollants</string>
<string name="ConversationActivity_cancel">Annuler</string>
<string name="ConversationActivity_delete_conversation">Supprimer la conversation ?</string>
<string name="ConversationActivity_delete_conversation">Supprimer la conversation ?</string>
<string name="ConversationActivity_delete_and_leave_group">Supprimer et quitter le groupe ?</string>
<string name="ConversationActivity_this_conversation_will_be_deleted_from_all_of_your_devices">Cette conversation sera supprimée de tous vos appareils.</string>
<string name="ConversationActivity_you_will_leave_this_group_and_it_will_be_deleted_from_all_of_your_devices">Vous quitterez ce groupe et il sera supprimé de tous vos appareils.</string>
@ -414,10 +414,10 @@
<item quantity="other">%1$s a invité %2$d personnes</item>
</plurals>
<!--GV2 Invite cancellation confirmation-->
<string name="GroupManagement_cancel_own_single_invite">Voulez-vous annuler l\'invitation envoyée à %1$s?</string>
<string name="GroupManagement_cancel_own_single_invite">Voulez-vous annuler l\'invitation envoyée à %1$s ?</string>
<plurals name="GroupManagement_cancel_others_invites">
<item quantity="one">Voulez-vous annuler l\'invitation envoyée par %1$s?</item>
<item quantity="other">Voulez-vous annuler %2$d invitations envoyées par %1$s?</item>
<item quantity="other">Voulez-vous annuler %2$d invitations envoyées par %1$s ?</item>
</plurals>
<!--CropImageActivity-->
<string name="CropImageActivity_group_avatar">Avatar du groupe</string>
@ -589,17 +589,31 @@
<!--GV2 invitation revokes-->
<plurals name="MessageRecord_you_revoked_invites">
<item quantity="one">Vous avez révoqué une invitation au groupe.</item>
<item quantity="other">Vous avez révoqué %1$d invitations au groupe.</item>
<item quantity="other">Vous avez refusé %1$d invitations au groupe.</item>
</plurals>
<plurals name="MessageRecord_s_revoked_invites">
<item quantity="one">%1$s a refusé une invitation au groupe.</item>
<item quantity="other">%1$s a refusé %2$d invitations au groupe.</item>
</plurals>
<string name="MessageRecord_someone_declined_an_invitation_to_the_group">Quelqu\'un a décliné l\'invitation au groupe.</string>
<string name="MessageRecord_you_declined_the_invitation_to_the_group">Vous avez décliné l\'invitation du groupe.</string>
<!--GV2 invitation acceptance-->
<string name="MessageRecord_you_accepted_invite">Vous avez accepté l\'invitation du groupe.</string>
<string name="MessageRecord_s_accepted_invite">%1$s a accepté linvitation au groupe.</string>
<string name="MessageRecord_you_added_invited_member_s">Vous avez invité le membre%1$s.</string>
<string name="MessageRecord_s_added_invited_member_s">%1$s a ajouté le membre invité %2$s.</string>
<!--GV2 title change-->
<string name="MessageRecord_you_changed_the_group_name_to_s">Vous avez changé le nom du groupe en « %1$s ».</string>
<string name="MessageRecord_s_changed_the_group_name_to_s">%1$s a changé le nom du groupe en « %2$s ».</string>
<!--GV2 avatar change-->
<string name="MessageRecord_you_changed_the_group_avatar">Vous avez changé l\'avatar du groupe.</string>
<string name="MessageRecord_s_changed_the_group_avatar">%1$s a changé lavatar du groupe.</string>
<!--GV2 attribute access level change-->
<string name="MessageRecord_you_changed_who_can_edit_group_info_to_s">Vous avez changé qui peut éditer les renseignements du groupe par « %1$s ».</string>
<string name="MessageRecord_s_changed_who_can_edit_group_info_to_s">%1$s a changé qui peut éditer les informations du groupe par « %2$s ».</string>
<!--GV2 membership access level change-->
<string name="MessageRecord_you_changed_who_can_edit_group_membership_to_s">Vous avez changé qui peut éditer la liste des membres du groupe par « %1$s ».</string>
<string name="MessageRecord_s_changed_who_can_edit_group_membership_to_s">%1$s a changé qui peut éditer la liste des membres du groupe par « %2$s ».</string>
<!--End of GV2 specific update messages-->
<string name="MessageRecord_your_safety_number_with_s_has_changed">Votre numéro de sécurité avec %s a changé.</string>
<string name="MessageRecord_you_marked_your_safety_number_with_s_verified">Vous avez marqué votre numéro de sécurité avec %s comme vérifié</string>
@ -611,8 +625,8 @@
<string name="MessageRequestBottomView_delete">Supprimer</string>
<string name="MessageRequestBottomView_block">Bloquer</string>
<string name="MessageRequestBottomView_unblock">Débloquer</string>
<string name="MessageRequestBottomView_do_you_want_to_let_s_message_you_they_wont_know_youve_seen_their_messages_until_you_accept">Souhaitez-vous laisser %1$s vous envoyer un message ? Ils ne sauront pas que vous avez vu leurs messages tant que vous n\'aurez pas accepté.</string>
<string name="MessageRequestBottomView_do_you_want_to_join_the_group_s_they_wont_know_youve_seen_their_messages_until_you_accept">Souhaitez-vous rejoindre le groupe %1$s? Ils ne sauront pas que vous avez vu leurs messages tant que vous n\'aurez pas accepté.</string>
<string name="MessageRequestBottomView_do_you_want_to_let_s_message_you_they_wont_know_youve_seen_their_messages_until_you_accept">Souhaitez-vous laisser %1$s vous envoyer un message ? Ils ne sauront pas que vous avez vu leurs messages tant que vous n\'aurez pas accepté.</string>
<string name="MessageRequestBottomView_do_you_want_to_join_the_group_s_they_wont_know_youve_seen_their_messages_until_you_accept">Souhaitez-vous rejoindre le groupe %1$s ? Ils ne sauront pas que vous avez vu leurs messages tant que vous n\'aurez pas accepté.</string>
<string name="MessageRequestBottomView_unblock_s_to_message_and_call_each_other">Débloquez %1$s pour vous échanger des messages et des appels.</string>
<string name="MessageRequestBottomView_unblock_to_allow_group_members_to_add_you_to_this_group_again">Débloquez pour permettre aux membres du groupe de vous ajouter à nouveau à ce groupe.</string>
<string name="MessageRequestProfileView_member_of_one_group">Membre de %1$s</string>
@ -622,6 +636,10 @@
<item quantity="one">%1$d membre</item>
<item quantity="other">%1$d membres</item>
</plurals>
<plurals name="MessageRequestProfileView_members_and_invited">
<item quantity="one">%1$d membres (+%2$d invités)</item>
<item quantity="other">%1$d membres (+%2$d invités)</item>
</plurals>
<plurals name="MessageRequestProfileView_member_of_others">
<item quantity="one">%d autre</item>
<item quantity="other">%d autres</item>
@ -670,7 +688,7 @@
<string name="PlayServicesProblemFragment_the_version_of_google_play_services_you_have_installed_is_not_functioning">La version des services Google Play installée ne fonctionne pas correctement. Veuillez réinstaller les Services Google Play et ressayer.</string>
<!--PinRestoreEntryFragment-->
<string name="PinRestoreEntryFragment_incorrect_pin">Le NIP est erroné</string>
<string name="PinRestoreEntryFragment_skip_pin_entry">Ignorer la saisie du code PIN ?</string>
<string name="PinRestoreEntryFragment_skip_pin_entry">Ignorer la saisie du code NIP ?</string>
<string name="PinRestoreEntryFragment_need_help">Besoin daide ?</string>
<string name="PinRestoreEntryFragment_your_pin_is_a_d_digit_code">Votre code NIP est un code à plus de %1$d chiffres que vous avez créé. Il peut être numérique ou alpha-numérique.\n\nSi vous ne vous souvenez plus de votre code, vous pouvez en créer un nouveau. Vous pourrez alors vous inscrire et utiliser votre compte, mais vous perdrez certains paramètres sauvegardés, tels que vos informations de profil.</string>
<string name="PinRestoreEntryFragment_if_you_cant_remember_your_pin">Si vous ne vous souvenez pas de votre NIP, vous pouvez en créer un nouveau. Vous pouvez vous inscrire et utiliser votre compte, mais vous perdrez certains paramètres enregistrés comme les renseignements de votre profil.</string>
@ -760,7 +778,9 @@
<string name="RegistrationActivity_country_code_description">Indicatif de pays</string>
<string name="RegistrationActivity_call">Appeler</string>
<!--RegistrationLockV2Dialog-->
<string name="RegistrationLockV2Dialog_if_you_forget_your_signal_pin_when_registering_again">Si vous oubliez votre PIN Signal lors de votre nouvelle inscription, Votre compte sera bloqué pendant 7 jour.</string>
<string name="RegistrationLockV2Dialog_turn_on_registration_lock">Activer le verrouillage d\'inscription ?</string>
<string name="RegistrationLockV2Dialog_turn_off_registration_lock">Désactiver le verrouillage d\'inscription ?</string>
<string name="RegistrationLockV2Dialog_if_you_forget_your_signal_pin_when_registering_again">Si vous oubliez votre NIP Signal lors de votre nouvelle inscription, Votre compte sera bloqué pendant 7 jours.</string>
<string name="RegistrationLockV2Dialog_turn_on">Activer</string>
<string name="RegistrationLockV2Dialog_turn_off">Désactiver</string>
<!--RevealableMessageView-->
@ -829,7 +849,7 @@
<string name="SubmitDebugLogActivity_submit">Envoyer</string>
<string name="SubmitDebugLogActivity_failed_to_submit_logs">Lenvoi des journaux a échoué</string>
<string name="SubmitDebugLogActivity_success">Lexportation est réussie.</string>
<string name="SubmitDebugLogActivity_copy_this_url_and_add_it_to_your_issue">Copiez cette URL et ajoutez-la à votre rapport d\'erreur ou dans votre email au support:\n\n<b>%1$s</b></string>
<string name="SubmitDebugLogActivity_copy_this_url_and_add_it_to_your_issue">Copiez cette URL et ajoutez-la à votre rapport d\'erreur ou dans votre email au support :\n\n<b>%1$s</b></string>
<string name="SubmitDebugLogActivity_copied_to_clipboard">Copié dans le presse-papiers</string>
<string name="SubmitDebugLogActivity_ok">Ok</string>
<string name="SubmitDebugLogActivity_share">Partager</string>
@ -1280,28 +1300,31 @@
<string name="MessageRequestsMegaphone__message_requests">Demande de contact</string>
<string name="MessageRequestsMegaphone__users_can_now_choose_to_accept">Les utilisateurs peuvent désormais choisir d\'accepter une nouvelle conversation. Les noms de profil permettent aux personnes de savoir qui leur envoie des messages.</string>
<string name="MessageRequestsMegaphone__add_profile_name">Ajouter un nom de profil</string>
<string name="MessageRequestsMegaphone__new_message_requests">Nouveau : Demande de contact</string>
<string name="MessageRequestsMegaphone__new_message_requests">Nouveau : demande de contact</string>
<string name="MessageRequestsMegaphone__add_name">Ajouter un nom</string>
<string name="MessageRequestsMegaphone__you_can_now_choose_whether_to_accept">Vous pouvez maintenant choisir d\'accepter ou non une nouvelle conversation. Vous verrez les options \"Accepter,\" \"Supprimer,\" or \"Bloquer.\"</string>
<string name="MessageRequestsMegaphone__you_can_now_choose_whether_to_accept">Vous pouvez maintenant choisir d\'accepter ou non une nouvelle conversation. Vous verrez les options « Accepter, » « Supprimer, » ou « Bloquer. »</string>
<!--HelpFragment-->
<string name="HelpFragment__help">Aide </string>
<string name="HelpFragment__have_you_read_our_faq_yet">Avez-vous déjà lu notre FAQ ?</string>
<string name="HelpFragment__have_you_read_our_faq_yet">Avez-vous déjà lu notre FAQ ?</string>
<string name="HelpFragment__next">Suivant</string>
<string name="HelpFragment__contact_us">Contactez-nous</string>
<string name="HelpFragment__tell_us_whats_going_on">Dites-nous ce qu\'il se passe</string>
<string name="HelpFragment__include_debug_log">Inclure le journal de débogage.</string>
<string name="HelpFragment__whats_this">Qu\'est-ce que c\'est ?</string>
<string name="HelpFragment__how_do_you_feel">Comment vous sentez-vous? (Optionnel)</string>
<string name="HelpFragment__whats_this">Qu\'est-ce que c\'est ?</string>
<string name="HelpFragment__how_do_you_feel">Comment vous sentez-vous ? (Optionnel)</string>
<string name="HelpFragment__support_info">Information Support</string>
<string name="HelpFragment__subject">Sujet:</string>
<string name="HelpFragment__device_info">Informations de l\'appareil :</string>
<string name="HelpFragment__android_version">Version Android:</string>
<string name="HelpFragment__signal_version">Version Signal:</string>
<string name="HelpFragment__debug_log">Journal de débogage:</string>
<string name="HelpFragment__subject">Sujet :</string>
<string name="HelpFragment__signal_android_support_request">Demande d\'assistance Signal Android</string>
<string name="HelpFragment__device_info">Informations de l\'appareil :</string>
<string name="HelpFragment__android_version">Version Android :</string>
<string name="HelpFragment__signal_version">Version Signal :</string>
<string name="HelpFragment__locale">Langue :</string>
<string name="HelpFragment__debug_log">Journal de débogage :</string>
<string name="HelpFragment__na">n/d</string>
<string name="HelpFragment__could_not_upload_logs">Impossible de téléverser les journaux</string>
<string name="HelpFragment__signal_support">Assistance Signal</string>
<string name="HelpFragment__please_be_as_descriptive_as_possible">Merci d\'être le plus précis possible dans votre description afin que l\'on comprenne au mieux votre problème.</string>
<string name="HelpFragment__no_email_app_found">Aucune application de mail trouvée.</string>
<string name="HelpFragment__no_email_app_found">Aucune application email trouvée.</string>
<!--arrays.xml-->
<string name="arrays__import_export">Importer</string>
<string name="arrays__use_default">Valeur par défaut</string>
@ -1606,7 +1629,7 @@
<string name="CreateKbsPinFragment__create_a_new_pin">Créer un nouveau NIP</string>
<string name="CreateKbsPinFragment__you_can_choose_a_new_pin_as_long_as_this_device_is_registered">Vous pouvez modifier votre NIP tant que cet appareil est enregistré.</string>
<string name="CreateKbsPinFragment__create_your_pin">Créer votre NIP</string>
<string name="CreateKbsPinFragment__pins_keep_information_stored_with_signal_encrypted">Les codes PIN permettent à Signal de chiffrer vos informations stockées afin que vous seul puissiez y accéder. Votre profil, vos paramètres et vos contacts seront restaurés lorsque vous réinstallez Signal.</string>
<string name="CreateKbsPinFragment__pins_keep_information_stored_with_signal_encrypted">Les codes NIP permettent à Signal de chiffrer vos informations stockées afin que vous seul puissiez y accéder. Votre profil, vos paramètres et vos contacts seront restaurés lorsque vous réinstallez Signal.</string>
<!--ConfirmKbsPinFragment-->
<string name="ConfirmKbsPinFragment__pins_dont_match">Les NIP ne correspondent pas. Veuillez ressayez.</string>
<string name="ConfirmKbsPinFragment__confirm_your_pin">Confirmez votre NIP</string>
@ -1617,7 +1640,7 @@
<string name="ConfirmKbsPinFragment__creating_pin">Création du NIP…</string>
<!--KbsSplashFragment-->
<string name="KbsSplashFragment__introducing_pins">Nous présentons les NIP</string>
<string name="KbsSplashFragment__pins_keep_information_stored_with_signal_encrypted">Les codes PIN permettent à Signal de chiffrer vos informations stockées afin que vous seul puissiez y accéder. Votre profil, vos paramètres et vos contacts seront restaurés lorsque vous réinstallez Signal.</string>
<string name="KbsSplashFragment__pins_keep_information_stored_with_signal_encrypted">Les codes NIP permettent à Signal de chiffrer vos informations stockées afin que vous seul puissiez y accéder. Votre profil, vos paramètres et vos contacts seront restaurés lorsque vous réinstallez Signal.</string>
<string name="KbsSplashFragment__learn_more">En savoir plus</string>
<string name="KbsSplashFragment__registration_lock_equals_pin">Blocage de linscription = NIP</string>
<string name="KbsSplashFragment__your_registration_lock_is_now_called_a_pin">Votre blocage de linscription sappelle désormais un NIP et il accomplit encore plus. Mettez-le à jour maintenant.</string>
@ -1669,6 +1692,7 @@
</plurals>
<!--KBS Megaphone-->
<string name="KbsMegaphone__create_a_pin">Créer un NIP</string>
<string name="KbsMegaphone__pins_keep_information_thats_stored_with_signal_encrytped">Les codes NIP permettent de chiffrer les informations enregistrées avec Signal.</string>
<string name="KbsMegaphone__create_pin">Créer un NIP</string>
<string name="KbsMegaphone__introducing_pins">Nous présentons les NIP</string>
<string name="KbsMegaphone__update_pin">Mettre le NIP à jour</string>
@ -1745,8 +1769,10 @@
<string name="preferences_app_protection__signal_pin">NIP de Signal</string>
<string name="preferences_app_protection__create_a_pin">Créer un NIP</string>
<string name="preferences_app_protection__change_your_pin">Changer de NIP</string>
<string name="preferences_app_protection__pins_keep_information_stored_with_signal_encrypted">Les codes PIN permettent à Signal de chiffrer vos informations stockées afin que vous seul puissiez y accéder. Votre profil, vos paramètres et vos contacts seront restaurés lorsque vous réinstallez Signal.</string>
<string name="preferences_app_protection__pins_keep_information_stored_with_signal_encrypted">Les codes NIP permettent à Signal de chiffrer vos informations stockées afin que vous seul puissiez y accéder. Votre profil, vos paramètres et vos contacts seront restaurés lorsque vous réinstallez Signal.</string>
<string name="preferences_app_protection__add_extra_security_by_requiring_your_signal_pin_to_register">Ajoutez un niveau de sécurité en exigeant une nouvelle inscription de votre NIP Signal avec votre numéro de téléphone.</string>
<string name="preferences_app_protection__failed_to_enable_registration_lock">Impossible d\'activer le verrouillage d\'enregistrement.</string>
<string name="preferences_app_protection__failed_to_disable_registration_lock">Échec de désactivation du verrou denregistrement.</string>
<string name="AppProtectionPreferenceFragment_none">Aucun</string>
<string name="registration_activity__the_registration_lock_pin_is_not_the_same_as_the_sms_verification_code_you_just_received_please_enter_the_pin_you_previously_configured_in_the_application">Le NIP de blocage de linscription ne correspond pas au code de vérification que vous venez de recevoir par texto. Veuillez saisir le NIP que vous avez précédemment défini dans lapplication.</string>
<string name="registration_activity__registration_lock_pin">NIP de blocage de linscription</string>

View File

@ -76,11 +76,15 @@
<!--BlockUnblockDialog-->
<string name="BlockUnblockDialog_block_and_leave_s">%1$s から抜けてブロックしますか?</string>
<string name="BlockUnblockDialog_block_s">%1$s をブロックしますか?</string>
<string name="BlockUnblockDialog_you_will_no_longer_receive_messages_or_updates">グループのメンバーはあなたをもう一度このグループに加えることができなくなります。</string>
<string name="BlockUnblockDialog_group_members_wont_be_able_to_add_you">グループのメンバーはあなたをもう一度このグループに加えることができなくなります。</string>
<string name="BlockUnblockDialog_group_members_will_be_able_to_add_you">グループのメンバーはあなたをもう一度このグループに加えることができます。</string>
<string name="BlockUnblockDialog_you_will_be_able_to_call_and_message_each_other">お互いにメッセージや通話ができるようになります。</string>
<string name="BlockUnblockDialog_blocked_people_wont_be_able_to_call_you_or_send_you_messages">ブロックされたユーザは、あなたにメッセージや通話を発信することができなくなります。</string>
<string name="BlockUnblockDialog_unblock_s">%1$s をブロック解除しますか?</string>
<string name="BlockUnblockDialog_unblock">ブロックを解除</string>
<string name="BlockUnblockDialog_block">ブロック</string>
<string name="BlockUnblockDialog_block_and_leave">ブロックして退出</string>
<string name="BlockUnblockDialog_block_and_delete">ブロックして削除</string>
<!--BucketedThreadMedia-->
<string name="BucketedThreadMedia_Today">今日</string>
@ -252,6 +256,8 @@
<string name="ConversationFragment_sms">SMS</string>
<string name="ConversationFragment_deleting">削除しています</string>
<string name="ConversationFragment_deleting_messages">メッセージを削除しています…</string>
<string name="ConversationFragment_delete_for_me">自分の分だけ削除</string>
<string name="ConversationFragment_delete_for_everyone">全員の分を削除</string>
<string name="ConversationFragment_quoted_message_not_found">元のメッセージが見つかりません</string>
<string name="ConversationFragment_quoted_message_no_longer_available">元のメッセージはすでに削除されています</string>
<string name="ConversationFragment_failed_to_open_message">メッセージを開けませんでした</string>
@ -334,6 +340,7 @@
<string name="DozeReminder_this_device_does_not_support_play_services_tap_to_disable_system_battery">このデバイスは Play Service をサポートしていません。Signal が非アクティブ状態でもメッセージを受信できるよう、タップしてバッテリー最適化機能を無効にしてください。</string>
<!--ShareActivity-->
<string name="ShareActivity_share_with">共有先</string>
<string name="ShareActivity_multiple_attachments_are_only_supported">複数の添付ファイルが画像と動画のみに対応されています。</string>
<!--GcmBroadcastReceiver-->
<string name="GcmBroadcastReceiver_retrieving_a_message">メッセージを取得しています…</string>
<!--GcmRefreshJob-->
@ -360,6 +367,7 @@
<string name="GroupCreateActivity_cannot_add_non_push_to_existing_group">%1$s は Signal ユーザではないので追加できませんでした。</string>
<string name="GroupCreateActivity_loading_group_details">グループの詳細を読み込んでいます…</string>
<string name="GroupCreateActivity_youre_already_in_the_group">グループに加入済みです。</string>
<string name="GroupCreateActivity_remove_member_description">メンバーを削除</string>
<!--GroupShareProfileView-->
<string name="GroupShareProfileView_share_your_profile_name_and_photo_with_this_group">このグループにプロフィール名と写真を表示しますか?</string>
<string name="GroupShareProfileView_do_you_want_to_make_your_profile_name_and_photo_visible_to_all_current_and_future_members_of_this_group">このグループの現在と将来のメンバー全員にプロフィール名と写真を表示しますか?</string>
@ -369,8 +377,29 @@
<!--GV2 access levels-->
<string name="GroupManagement_access_level_anyone">誰でも</string>
<string name="GroupManagement_access_level_all_members">全てのメンバー</string>
<string name="GroupManagement_access_level_only_admins">管理者のみ</string>
<!--PendingMembersActivity-->
<string name="PendingMemberInvitesActivity_pending_group_invites">保留中のグループ招待</string>
<string name="PendingMembersActivity_people_you_invited">あなたを招待した人々</string>
<string name="PendingMembersActivity_you_have_no_pending_invites">保留中の招待はありません。</string>
<string name="PendingMembersActivity_invites_by_other_group_members">グループの他のメンバーからの招待</string>
<string name="PendingMembersActivity_no_pending_invites_by_other_group_members">グループの他のメンバーからの招待はありません。</string>
<string name="PendingMembersActivity_cancel_invite">招待をキャンセル</string>
<string name="PendingMembersActivity_cancel_invites">招待をキャンセル</string>
<plurals name="PendingMembersActivity_cancel_d_invites">
<item quantity="other">%1$d件の招待をキャンセル</item>
</plurals>
<plurals name="PendingMembersActivity_error_canceling_invite">
<item quantity="other">招待をキャンセルする時にエラーが発生しました</item>
</plurals>
<plurals name="GroupMemberList_invited">
<item quantity="other">%1$s は%2$d人招待しました</item>
</plurals>
<!--GV2 Invite cancellation confirmation-->
<string name="GroupManagement_cancel_own_single_invite">あなたが %1$s に送った招待をキャンセルしたいですか?</string>
<plurals name="GroupManagement_cancel_others_invites">
<item quantity="other">%1$s から送られた%2$d件の招待をキャンセルしますか?</item>
</plurals>
<!--CropImageActivity-->
<string name="CropImageActivity_group_avatar">グループアバター</string>
<string name="CropImageActivity_profile_avatar">アバター</string>
@ -508,16 +537,46 @@
<!--GV2 member additions-->
<string name="MessageRecord_you_added_s">%1$s を追加しました。</string>
<string name="MessageRecord_s_added_s">%1$s は %2$s を追加しました。</string>
<string name="MessageRecord_s_added_you">%1$s はあなたをこのグループに追加しました。</string>
<string name="MessageRecord_you_joined_the_group">あなたがグループに入りました。</string>
<string name="MessageRecord_s_joined_the_group">%1$s がグループに加わりました。</string>
<!--GV2 member removals-->
<string name="MessageRecord_you_removed_s">%1$s を削除しました。</string>
<string name="MessageRecord_s_removed_s">%1$s は %2$s を削除しました。</string>
<string name="MessageRecord_s_removed_you_from_the_group">%1$s はあなたをこのグループから削除しました。</string>
<string name="MessageRecord_you_left_the_group">グループを退会しました。</string>
<string name="MessageRecord_s_left_the_group">%1$s はグループを去りました。</string>
<!--GV2 role change-->
<string name="MessageRecord_you_made_s_an_admin">%1$s を管理者にしました。</string>
<string name="MessageRecord_s_made_s_an_admin">%1$s は %2$s を管理者にしました。</string>
<string name="MessageRecord_s_made_you_an_admin">%1$s はあなたを管理者にしました。</string>
<string name="MessageRecord_you_revoked_admin_privileges_from_s">%1$s から管理者特権を無効にしました。</string>
<string name="MessageRecord_s_revoked_your_admin_privileges">%1$s はあなたの管理者特権を無効にしました。\"</string>
<string name="MessageRecord_s_revoked_admin_privileges_from_s">%1$s は %2$s からの管理者特権を無効にしました。</string>
<!--GV2 invitations-->
<string name="MessageRecord_you_invited_s_to_the_group">%1$s をこのグループに招待しました。</string>
<string name="MessageRecord_s_invited_you_to_the_group">%1$s はあなたをグループに招待しました。</string>
<plurals name="MessageRecord_s_invited_members">
<item quantity="other">%1$s は%2$d人をグループに招待しました</item>
</plurals>
<!--GV2 invitation revokes-->
<plurals name="MessageRecord_you_revoked_invites">
<item quantity="other">%1$d件のこのグループの招待を無効にしました。</item>
</plurals>
<plurals name="MessageRecord_s_revoked_invites">
<item quantity="other">%1$s は%2$d件のこのグループの招待を無効にしました。</item>
</plurals>
<string name="MessageRecord_someone_declined_an_invitation_to_the_group">誰かがこのグループの招待を断りました。</string>
<string name="MessageRecord_you_declined_the_invitation_to_the_group">このグループの招待を断りました。</string>
<!--GV2 invitation acceptance-->
<string name="MessageRecord_you_accepted_invite">このグループの招待を承認しました。</string>
<string name="MessageRecord_s_accepted_invite">%1$s はグループの招待を承認しました。</string>
<!--GV2 title change-->
<string name="MessageRecord_you_changed_the_group_name_to_s">このグループ名を \"%1$s\" に変更しました。</string>
<string name="MessageRecord_s_changed_the_group_name_to_s">%1$s はグループ名を \"%2$s\" に変更しました。</string>
<!--GV2 avatar change-->
<string name="MessageRecord_you_changed_the_group_avatar">グループアバターを更新しました。</string>
<string name="MessageRecord_s_changed_the_group_avatar">%1$s はグループアバターを更新しました。</string>
<!--GV2 attribute access level change-->
<!--GV2 membership access level change-->
<!--End of GV2 specific update messages-->
@ -531,6 +590,7 @@
<string name="MessageRequestBottomView_delete">削除</string>
<string name="MessageRequestBottomView_block">ブロック</string>
<string name="MessageRequestBottomView_unblock">ブロックを解除</string>
<string name="MessageRequestBottomView_unblock_s_to_message_and_call_each_other">%1$s をブロック解除することでお互いにメッセージと通話ができます。 </string>
<string name="MessageRequestProfileView_member_of_one_group">%1$s のメンバー</string>
<string name="MessageRequestProfileView_member_of_two_groups">%1$s と %2$s のメンバー</string>
<string name="MessageRequestProfileView_member_of_many_groups">%1$s、%2$s および %3$s のメンバー</string>
@ -586,14 +646,23 @@
<string name="PlayServicesProblemFragment_the_version_of_google_play_services_you_have_installed_is_not_functioning">インストールされている Google Play Service のバージョンは正しく動作していません。再インストールしてからもう一度お試しください。</string>
<!--PinRestoreEntryFragment-->
<string name="PinRestoreEntryFragment_incorrect_pin">PIN が違います</string>
<string name="PinRestoreEntryFragment_skip_pin_entry">PIN の入力を飛ばしますか?</string>
<string name="PinRestoreEntryFragment_need_help">ヘルプが必要ですか?</string>
<string name="PinRestoreEntryFragment_if_you_cant_remember_your_pin">もし PIN を思い出せない場合、新規に作成することができます。登録してアカウントを使用することはできますが、保存されたプロフィール設定などは失われます。</string>
<string name="PinRestoreEntryFragment_create_new_pin">新しい PIN を作成</string>
<string name="PinRestoreEntryFragment_contact_support">サポートに問い合わせる</string>
<string name="PinRestoreEntryFragment_cancel">キャンセル</string>
<string name="PinRestoreEntryFragment_skip">スキップ</string>
<plurals name="PinRestoreEntryFragment_you_have_d_attempt_remaining">
<item quantity="other">残り%1$d回試行できます。もし試行回数を使い果たした場合、新しい PIN を作成することができます。登録することができアカウントを使用できますが、保存されたあなたのプロフィール情報は失われます。</item>
</plurals>
<string name="PinRestoreEntryFragment_signal_registration_need_help_with_pin">Signal 登録 - Android の PIN に関するサポートが必要</string>
<string name="PinRestoreEntryFragment_subject_signal_registration">件名: Signal 登録 - Android の PIN についてのヘルプが必要\nデバイス情報: %1$s\nAndroid バージョン: %2$s\nSignal バージョン: %3$s\n地域: %4$s</string>
<string name="PinRestoreEntryFragment_enter_alphanumeric_pin">英数字の PIN を入力</string>
<string name="PinRestoreEntryFragment_enter_numeric_pin">数字の PIN を入力</string>
<!--PinRestoreLockedFragment-->
<string name="PinRestoreLockedFragment_create_your_pin">PIN を作成</string>
<string name="PinRestoreLockedFragment_youve_run_out_of_pin_guesses">PIN の試行回数が尽きましたが、新しい PIN を作成することによりまだ Signal アカウントにアクセスすることができます。プライバシーとセキュリティーのためにアカウントに保存されたプロフィール情報または設定は戻されません。</string>
<string name="PinRestoreLockedFragment_create_new_pin">新しい PIN を作成</string>
<!--RatingManager-->
<string name="RatingManager_rate_this_app">アプリを評価</string>
@ -664,6 +733,11 @@
<string name="RegistrationActivity_country_code_description">国番号</string>
<string name="RegistrationActivity_call">通話</string>
<!--RegistrationLockV2Dialog-->
<string name="RegistrationLockV2Dialog_turn_on_registration_lock">登録ロックを有効にしますか?</string>
<string name="RegistrationLockV2Dialog_turn_off_registration_lock">登録ロックを無効にしますか?</string>
<string name="RegistrationLockV2Dialog_if_you_forget_your_signal_pin_when_registering_again">Signal に再度登録するときに Signal PIN を忘れた場合、あなたは一週間アカウントを締め出されます。</string>
<string name="RegistrationLockV2Dialog_turn_on">オン</string>
<string name="RegistrationLockV2Dialog_turn_off">オフ</string>
<!--RevealableMessageView-->
<string name="RevealableMessageView_view_photo">写真を見る</string>
<string name="RevealableMessageView_view_video">動画を見る</string>
@ -725,9 +799,11 @@
<!--SubmitDebugLogActivity-->
<string name="SubmitDebugLogActivity_edit">編集</string>
<string name="SubmitDebugLogActivity_done">完了</string>
<string name="SubmitDebugLogActivity_tap_a_line_to_delete_it">線をタップして削除</string>
<string name="SubmitDebugLogActivity_submit">送信</string>
<string name="SubmitDebugLogActivity_failed_to_submit_logs">ログを送信するのに失敗しました。</string>
<string name="SubmitDebugLogActivity_success">成功しました!</string>
<string name="SubmitDebugLogActivity_copy_this_url_and_add_it_to_your_issue">このURLをコピーしてバグレポートやサポートメールに貼り付けてください:\n\n<b>%1$s</b></string>
<string name="SubmitDebugLogActivity_copied_to_clipboard">クリップボードにコピーしました</string>
<string name="SubmitDebugLogActivity_ok">OK</string>
<string name="SubmitDebugLogActivity_share">共有する</string>
@ -754,6 +830,7 @@
<string name="ThreadRecord_you_marked_unverified">未確認にしました</string>
<string name="ThreadRecord_message_could_not_be_processed">メッセージを処理できませんでした</string>
<string name="ThreadRecord_message_request">メッセージリクエスト</string>
<string name="ThreadRecord_s_added_you_to_the_group">%1$s はあなたをこのグループに追加しました。</string>
<!--UpdateApkReadyListener-->
<string name="UpdateApkReadyListener_Signal_update">Signal アップデート</string>
<string name="UpdateApkReadyListener_a_new_version_of_signal_is_available_tap_to_update">Signal の最新版をご利用いただけます。タップしてアップデートしてください。</string>
@ -1190,6 +1267,7 @@
<string name="HelpFragment__locale">Locale:</string>
<string name="HelpFragment__debug_log">Debug Log:</string>
<string name="HelpFragment__na">n/a</string>
<string name="HelpFragment__could_not_upload_logs">ログをアップロードできませんでした</string>
<string name="HelpFragment__signal_support">Signalサポート</string>
<string name="HelpFragment__please_be_as_descriptive_as_possible">どのような問題が発生しているのか、詳細に記述してください。</string>
<string name="HelpFragment__no_email_app_found">メールアプリがありません。</string>
@ -1401,6 +1479,7 @@
<string name="conversation__menu_view_all_media">すべてのメディア</string>
<string name="conversation__menu_conversation_settings">会話設定</string>
<string name="conversation__menu_add_shortcut">ホーム画面に追加</string>
<string name="conversation__menu_pending_members">メンバー待ち</string>
<!--conversation_popup-->
<string name="conversation_popup__menu_expand_popup">ポップアップを拡大</string>
<!--conversation_callable_insecure-->
@ -1490,6 +1569,7 @@
<item quantity="other">PINは %1$d 桁以上の数字にしてください</item>
</plurals>
<string name="CreateKbsPinFragment__create_a_new_pin">新しい PIN を作成</string>
<string name="CreateKbsPinFragment__you_can_choose_a_new_pin_as_long_as_this_device_is_registered">このデバイスが登録されている間はPINを変更することができます。</string>
<string name="CreateKbsPinFragment__create_your_pin">PIN を作成</string>
<!--ConfirmKbsPinFragment-->
<string name="ConfirmKbsPinFragment__pins_dont_match">PIN が一致しません。再度試してください。</string>
@ -1623,6 +1703,8 @@
<string name="preferences_app_protection__signal_pin">Signal PIN</string>
<string name="preferences_app_protection__create_a_pin">PIN を作成</string>
<string name="preferences_app_protection__change_your_pin">PINを変更</string>
<string name="preferences_app_protection__failed_to_enable_registration_lock">登録ロックを有効にすることに失敗しました。</string>
<string name="preferences_app_protection__failed_to_disable_registration_lock">登録ロックを無効にすることに失敗しました</string>
<string name="AppProtectionPreferenceFragment_none">なし</string>
<string name="registration_activity__the_registration_lock_pin_is_not_the_same_as_the_sms_verification_code_you_just_received_please_enter_the_pin_you_previously_configured_in_the_application">登録ロック PIN は SMS で先程送信された認証コードと異なります。以前 Signal で設定した PIN を入力してください。</string>
<string name="registration_activity__registration_lock_pin">登録ロック PIN</string>

View File

@ -274,7 +274,7 @@
<string name="ConversationFragment_you_can_swipe_to_the_right_reply">Je kunt elk bericht naar rechts vegen om snel een reactie te schijven</string>
<string name="ConversationFragment_you_can_swipe_to_the_left_reply">Je kunt elk bericht naar links vegen om snel een reactie te schijven</string>
<string name="ConversationFragment_outgoing_view_once_media_files_are_automatically_removed">Uitgaande eenmaligeweergave-media worden onmiddellijk gewist zodra ze zijn verzonden. Je kunt je eigen media dus niet terugzien. Gebruik eenmaligeweergave-berichten niet ter beveiliging, want Signal kan niet garanderen dat een bericht op het apparaat van een ander daadwerkelijk wordt gewist.</string>
<string name="ConversationFragment_you_already_viewed_this_message">Je hebt dit bericht al weergegeven</string>
<string name="ConversationFragment_you_already_viewed_this_message">Je hebt dit eenmaligeweergave-bericht al weergegeven</string>
<string name="ConversationFragment__you_can_add_notes_for_yourself_in_this_conversation">Je kunt in dit gesprek notities voor jezelf achterlaten. Als je gebruik maakt van gekoppelde apparaten dan zullen notities worden gesynchroniseerd.</string>
<!--ConversationListActivity-->
<string name="ConversationListActivity_there_is_no_browser_installed_on_your_device">Er is geen browser op je apparaat geïnstalleerd.</string>

File diff suppressed because one or more lines are too long

View File

@ -1612,7 +1612,7 @@
<string name="KbsReminderDialog__enter_your_signal_pin">輸入你的 Signal PIN 碼</string>
<string name="KbsReminderDialog__to_help_you_memorize_your_pin">為了幫助你記住PIN碼我們會要求你定期輸入。 我們會漸漸地減少要求。</string>
<string name="KbsReminderDialog__skip">略過</string>
<string name="KbsReminderDialog__submit">上傳</string>
<string name="KbsReminderDialog__submit">確定</string>
<string name="KbsReminderDialog__forgot_pin">忘記 PIN 碼?</string>
<string name="KbsReminderDialog__incorrect_pin_try_again">不正確的PIN碼。請再試一次。</string>
<!--AccountLockedFragment-->
@ -1697,7 +1697,7 @@
<string name="RegistrationActivity_backup_timestamp_s">備份時間戳記:%s</string>
<string name="BackupDialog_enable_local_backups">啟用本機備份?</string>
<string name="BackupDialog_enable_backups">啟用備份</string>
<string name="BackupDialog_please_acknowledge_your_understanding_by_marking_the_confirmation_check_box">確保你已了解,請標記確認核取框</string>
<string name="BackupDialog_please_acknowledge_your_understanding_by_marking_the_confirmation_check_box">確保你已了解,請標記確認檢查框。</string>
<string name="BackupDialog_delete_backups">刪除備份?</string>
<string name="BackupDialog_disable_and_delete_all_local_backups">關閉及刪除所有本機備份?</string>
<string name="BackupDialog_delete_backups_statement">刪除備份</string>

View File

@ -1930,6 +1930,7 @@
<string name="CreateKbsPinFragment__you_can_choose_a_new_pin_as_long_as_this_device_is_registered">You can change your PIN as long as this device is registered.</string>
<string name="CreateKbsPinFragment__create_your_pin">Create your PIN</string>
<string name="CreateKbsPinFragment__pins_keep_information_stored_with_signal_encrypted">PINs keep information stored with Signal encrypted so only you can access it. Your profile, settings, and contacts will restore when you reinstall Signal.</string>
<string name="CreateKbsPinFragment__choose_a_stronger_pin">Choose a stronger PIN</string>
<!-- ConfirmKbsPinFragment -->
<string name="ConfirmKbsPinFragment__pins_dont_match">PINs don\'t match. Try again.</string>

View File

@ -0,0 +1,38 @@
package org.thoughtcrime.securesms.registration.v2;
import org.junit.Test;
import org.thoughtcrime.securesms.registration.v2.testdata.PinValidityVector;
import org.thoughtcrime.securesms.util.Util;
import org.whispersystems.signalservice.internal.registrationpin.PinValidityChecker;
import org.whispersystems.signalservice.internal.util.JsonUtil;
import java.io.IOException;
import java.io.InputStream;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public final class PinValidityChecker_validity_Test {
@Test
public void vectors_valid() throws IOException {
for (PinValidityVector vector : getKbsPinValidityTestVectorList()) {
boolean valid = PinValidityChecker.valid(vector.getPin());
assertEquals(String.format("%s [%s]", vector.getName(), vector.getPin()),
vector.isValid(),
valid);
}
}
private static PinValidityVector[] getKbsPinValidityTestVectorList() throws IOException {
try (InputStream resourceAsStream = ClassLoader.getSystemClassLoader().getResourceAsStream("data/kbs_pin_validity_vectors.json")) {
PinValidityVector[] data = JsonUtil.fromJson(Util.readFullyAsString(resourceAsStream), PinValidityVector[].class);
assertTrue(data.length > 0);
return data;
}
}
}

View File

@ -0,0 +1,27 @@
package org.thoughtcrime.securesms.registration.v2.testdata;
import com.fasterxml.jackson.annotation.JsonProperty;
public class PinValidityVector {
@JsonProperty("name")
private String name;
@JsonProperty("pin")
private String pin;
@JsonProperty("valid")
private boolean valid;
public String getName() {
return name;
}
public String getPin() {
return pin;
}
public boolean isValid() {
return valid;
}
}

View File

@ -0,0 +1,62 @@
[
{
"name": "Empty",
"pin": "",
"valid": false
},
{
"name": "Alpha",
"pin": "abcd",
"valid": true
},
{
"name": "Sequential",
"pin": "1234",
"valid": false
},
{
"name": "Non-sequential",
"pin": "6485",
"valid": true
},
{
"name": "Sequential descending",
"pin": "43210",
"valid": false
},
{
"name": "Sequential with space",
"pin": "1234 ",
"valid": false
},
{
"name": "Non-sequential with space",
"pin": "1236 ",
"valid": true
},
{
"name": "Sequential Non-arabic digits",
"pin": "١٢٣٤٥",
"valid": false
},
{
"name": "Sequential descending Non-arabic digits",
"pin": "٥٤٣٢١",
"valid": false
},
{
"name": "Non-sequential Non-arabic digits",
"pin": "١٢٣٥٤",
"valid": true
},
{
"name": "All digits the same",
"pin": "9999",
"valid": false
},
{
"name": "All Non-arabic digits the same",
"pin": "٢٢٢٢",
"valid": false
}
]

View File

@ -1278,7 +1278,8 @@ public class SignalServiceMessageSender {
.setContentType(attachment.getContentType())
.setKey(ByteString.copyFrom(attachment.getKey()))
.setDigest(ByteString.copyFrom(attachment.getDigest().get()))
.setSize(attachment.getSize().get());
.setSize(attachment.getSize().get())
.setUploadTimestamp(attachment.getUploadTimestamp());
if (attachment.getRemoteId().getV2().isPresent()) {
builder.setCdnId(attachment.getRemoteId().getV2().get());

View File

@ -10,8 +10,8 @@ public final class PinHasher {
public static byte[] normalize(String pin) {
pin = pin.trim();
if (allNumeric(pin)) {
pin = new String(toArabic(pin));
if (PinString.allNumeric(pin)) {
pin = PinString.toArabic(pin);
}
pin = Normalizer.normalize(pin, Normalizer.Form.NFKD);
@ -26,27 +26,4 @@ public final class PinHasher {
public interface Argon2 {
byte[] hash(byte[] password);
}
private static boolean allNumeric(CharSequence pin) {
for (int i = 0; i < pin.length(); i++) {
if (!Character.isDigit(pin.charAt(i))) return false;
}
return true;
}
/**
* Converts a string of not necessarily Arabic numerals to Arabic 0..9 characters.
*/
private static char[] toArabic(CharSequence numerals) {
int length = numerals.length();
char[] arabic = new char[length];
for (int i = 0; i < length; i++) {
int digit = Character.digit(numerals.charAt(i), 10);
arabic[i] = (char) ('0' + digit);
}
return arabic;
}
}

View File

@ -0,0 +1,32 @@
package org.whispersystems.signalservice.internal.registrationpin;
import org.whispersystems.signalservice.api.kbs.HashedPin;
import java.nio.charset.StandardCharsets;
import java.text.Normalizer;
final class PinString {
static boolean allNumeric(CharSequence pin) {
for (int i = 0; i < pin.length(); i++) {
if (!Character.isDigit(pin.charAt(i))) return false;
}
return true;
}
/**
* Converts a string of not necessarily Arabic numerals to Arabic 0..9 characters.
*/
static String toArabic(CharSequence numerals) {
int length = numerals.length();
char[] arabic = new char[length];
for (int i = 0; i < length; i++) {
int digit = Character.digit(numerals.charAt(i), 10);
arabic[i] = (char) ('0' + digit);
}
return new String(arabic);
}
}

View File

@ -0,0 +1,73 @@
package org.whispersystems.signalservice.internal.registrationpin;
public final class PinValidityChecker {
public static boolean valid(String pin) {
pin = pin.trim();
if (pin.isEmpty()) {
return false;
}
if (PinString.allNumeric(pin)) {
pin = PinString.toArabic(pin);
return !sequential(pin) &&
!sequential(reverse(pin)) &&
!allTheSame(pin);
} else {
return true;
}
}
private static String reverse(String string) {
char[] chars = string.toCharArray();
for (int i = 0; i < chars.length / 2; i++) {
char temp = chars[i];
chars[i] = chars[chars.length - i - 1];
chars[chars.length - i - 1] = temp;
}
return new String(chars);
}
private static boolean sequential(String pin) {
int length = pin.length();
if (length == 0) {
return false;
}
char c = pin.charAt(0);
for (int i = 1; i < length; i++) {
char n = pin.charAt(i);
if (n != c + 1) {
return false;
}
c = n;
}
return true;
}
private static boolean allTheSame(String pin) {
int length = pin.length();
if (length == 0) {
return false;
}
char c = pin.charAt(0);
for (int i = 1; i < length; i++) {
char n = pin.charAt(i);
if (n != c) {
return false;
}
}
return true;
}
}