Merge tag '2.8.3' into develop

This commit is contained in:
genofire 2020-05-14 15:34:30 +02:00
commit fca5e15aad
41 changed files with 1118 additions and 538 deletions

View File

@ -1,5 +1,11 @@
# Changelog
### Version 2.8.3
* Move call icon to the left in order to keep other toolbar icons in a consistent place
* Show call duration during audio calls
* Tie breaking for A/V calls (the same two people calling each other at the same time)
### Version 2.8.2
* Add button to switch camea during video call

View File

@ -96,8 +96,8 @@ android {
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
versionCode 382
versionName "2.8.2"
versionCode 383
versionName "2.8.3"
archivesBaseName += "-$versionName"
applicationId "eu.sum7.conversations"
resValue "string", "applicationId", applicationId

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="pick_a_server">选择您的XMPP提供者</string>
<string name="use_chat.sum7.eu">使用 chat.sum7.eu</string>
<string name="use_chat.sum7.eu">使用chat.sum7.eu</string>
<string name="create_new_account">创建新账户</string>
<string name="do_you_have_an_account">您已经拥有一个XMPP账户了吗如果您之前使用过其他的XMPP客户端的话那么您已经拥有这种账户了。如果没有账户的话您可以现在创建一个。\n提示有些电子邮件服务也提供XMPP账户。</string>
<string name="server_select_text">XMPP是独立于提供程序的即时消息网络。 您可以将此客户端与所选的任何XMPP服务器一起使用。\ n不过为了您的方便我们很容易在对话中创建帐户。im¹; 特别适合与“对话”配合使用的提供商。</string>

View File

@ -5,6 +5,7 @@ import android.text.TextUtils;
import android.util.Log;
import android.util.Pair;
import com.google.common.base.CharMatcher;
import com.google.common.io.BaseEncoding;
import org.whispersystems.libsignal.IdentityKey;
@ -206,7 +207,7 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived {
return null;
}
try {
publicKey = Curve.decodePoint(BaseEncoding.base64().decode(signedPreKeyPublic), 0);
publicKey = Curve.decodePoint(base64decode(signedPreKeyPublic), 0);
} catch (final IllegalArgumentException | InvalidKeyException e) {
Log.e(Config.LOGTAG, AxolotlService.LOGPREFIX + " : " + "Invalid signedPreKeyPublic in PEP: " + e.getMessage());
}
@ -219,7 +220,7 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived {
return null;
}
try {
return BaseEncoding.base64().decode(signedPreKeySignature);
return base64decode(signedPreKeySignature);
} catch (final IllegalArgumentException e) {
Log.e(Config.LOGTAG, AxolotlService.LOGPREFIX + " : Invalid base64 in signedPreKeySignature");
return null;
@ -232,7 +233,7 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived {
return null;
}
try {
return new IdentityKey(BaseEncoding.base64().decode(identityKey), 0);
return new IdentityKey(base64decode(identityKey), 0);
} catch (final IllegalArgumentException | InvalidKeyException e) {
Log.e(Config.LOGTAG, AxolotlService.LOGPREFIX + " : " + "Invalid identityKey in PEP: " + e.getMessage());
return null;
@ -260,10 +261,14 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived {
Log.d(Config.LOGTAG, AxolotlService.LOGPREFIX + " : " + "Encountered unexpected tag in prekeys list: " + preKeyPublicElement);
continue;
}
final String preKey = preKeyPublicElement.getContent();
if (preKey == null) {
continue;
}
Integer preKeyId = null;
try {
preKeyId = Integer.valueOf(preKeyPublicElement.getAttribute("preKeyId"));
final ECPublicKey preKeyPublic = Curve.decodePoint(BaseEncoding.base64().decode(preKeyPublicElement.getContent()), 0);
final ECPublicKey preKeyPublic = Curve.decodePoint(base64decode(preKey), 0);
preKeyRecords.put(preKeyId, preKeyPublic);
} catch (NumberFormatException e) {
Log.e(Config.LOGTAG, AxolotlService.LOGPREFIX + " : " + "could not parse preKeyId from preKey " + preKeyPublicElement.toString());
@ -274,6 +279,10 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived {
return preKeyRecords;
}
private static byte[] base64decode(String input) {
return BaseEncoding.base64().decode(CharMatcher.whitespace().removeFrom(input));
}
public Pair<X509Certificate[], byte[]> verification(final IqPacket packet) {
Element item = getItem(packet);
Element verification = item != null ? item.findChild("verification", AxolotlService.PEP_PREFIX) : null;

View File

@ -843,7 +843,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
if (serverMsgId == null) {
serverMsgId = extractStanzaId(account, packet);
}
mXmppConnectionService.getJingleConnectionManager().deliverMessage(account, packet.getTo(), packet.getFrom(), child, serverMsgId, timestamp);
mXmppConnectionService.getJingleConnectionManager().deliverMessage(account, packet.getTo(), packet.getFrom(), child, remoteMsgId, serverMsgId, timestamp);
} else if (query.isCatchup()) {
final String sessionId = child.getAttribute("id");
if (sessionId == null) {

View File

@ -426,8 +426,13 @@ public class NotificationService {
cancel(INCOMING_CALL_NOTIFICATION_ID);
}
public void cancelOngoingCallNotification() {
cancel(ONGOING_CALL_NOTIFICATION_ID);
public static void cancelIncomingCallNotification(final Context context) {
final NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
try {
notificationManager.cancel(INCOMING_CALL_NOTIFICATION_ID);
} catch (RuntimeException e) {
Log.d(Config.LOGTAG, "unable to cancel incoming call notification after crash", e);
}
}
private void pushNow(final Message message) {

View File

@ -84,7 +84,6 @@ import eu.siacs.conversations.entities.Transferable;
import eu.siacs.conversations.entities.TransferablePlaceholder;
import eu.siacs.conversations.http.HttpDownloadConnection;
import eu.siacs.conversations.persistance.FileBackend;
import eu.siacs.conversations.services.AppRTCAudioManager;
import eu.siacs.conversations.services.MessageArchiveService;
import eu.siacs.conversations.services.QuickConversationsService;
import eu.siacs.conversations.services.XmppConnectionService;
@ -112,10 +111,9 @@ import eu.siacs.conversations.utils.GeoHelper;
import eu.siacs.conversations.utils.MessageUtils;
import eu.siacs.conversations.utils.NickValidityChecker;
import eu.siacs.conversations.utils.Patterns;
import eu.siacs.conversations.utils.PermissionUtils;
import eu.siacs.conversations.utils.QuickLoader;
import eu.siacs.conversations.utils.StylingHelper;
import eu.siacs.conversations.utils.TimeframeUtils;
import eu.siacs.conversations.utils.TimeFrameUtils;
import eu.siacs.conversations.utils.UIHelper;
import eu.siacs.conversations.xmpp.XmppConnection;
import eu.siacs.conversations.xmpp.chatstate.ChatState;
@ -1568,7 +1566,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
if (durations[i] == -1) {
labels[i] = getString(R.string.until_further_notice);
} else {
labels[i] = TimeframeUtils.resolve(activity, 1000L * durations[i]);
labels[i] = TimeFrameUtils.resolve(activity, 1000L * durations[i]);
}
}
builder.setItems(labels, (dialog, which) -> {

View File

@ -29,6 +29,7 @@ import eu.siacs.conversations.R;
import eu.siacs.conversations.databinding.ActivityRecordingBinding;
import eu.siacs.conversations.persistance.FileBackend;
import eu.siacs.conversations.utils.ThemeHelper;
import eu.siacs.conversations.utils.TimeFrameUtils;
public class RecordingActivity extends Activity implements View.OnClickListener {
@ -135,7 +136,7 @@ public class RecordingActivity extends Activity implements View.OnClickListener
Log.d(Config.LOGTAG, "time out waiting for output file to be written");
}
} catch (InterruptedException e) {
Log.d(Config.LOGTAG, "interrupted while waiting for output file to be written" ,e);
Log.d(Config.LOGTAG, "interrupted while waiting for output file to be written", e);
}
runOnUiThread(() -> {
setResult(Activity.RESULT_OK, new Intent().setData(Uri.fromFile(mOutputFile)));
@ -182,13 +183,8 @@ public class RecordingActivity extends Activity implements View.OnClickListener
mFileObserver.startWatching();
}
@SuppressLint("SetTextI18n")
private void tick() {
long time = (mStartTime < 0) ? 0 : (SystemClock.elapsedRealtime() - mStartTime);
int minutes = (int) (time / 60000);
int seconds = (int) (time / 1000) % 60;
int milliseconds = (int) (time / 100) % 10;
this.binding.timer.setText(minutes + ":" + (seconds < 10 ? "0" + seconds : seconds) + "." + milliseconds);
this.binding.timer.setText(TimeFrameUtils.formatTimePassed(mStartTime, true));
}
@Override

View File

@ -9,6 +9,7 @@ import android.content.pm.PackageManager;
import android.databinding.DataBindingUtil;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.PowerManager;
import android.os.SystemClock;
import android.support.annotation.NonNull;
@ -27,7 +28,6 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import org.checkerframework.checker.nullness.compatqual.NullableDecl;
import org.webrtc.SurfaceViewRenderer;
@ -49,6 +49,7 @@ import eu.siacs.conversations.services.XmppConnectionService;
import eu.siacs.conversations.ui.util.AvatarWorkerTask;
import eu.siacs.conversations.ui.util.MainThreadExecutor;
import eu.siacs.conversations.utils.PermissionUtils;
import eu.siacs.conversations.utils.TimeFrameUtils;
import eu.siacs.conversations.xmpp.jingle.AbstractJingleConnection;
import eu.siacs.conversations.xmpp.jingle.JingleRtpConnection;
import eu.siacs.conversations.xmpp.jingle.Media;
@ -67,10 +68,14 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe
public static final String ACTION_ACCEPT_CALL = "action_accept_call";
public static final String ACTION_MAKE_VOICE_CALL = "action_make_voice_call";
public static final String ACTION_MAKE_VIDEO_CALL = "action_make_video_call";
private static final int CALL_DURATION_UPDATE_INTERVAL = 333;
private static final List<RtpEndUserState> END_CARD = Arrays.asList(
RtpEndUserState.APPLICATION_ERROR,
RtpEndUserState.DECLINED_OR_BUSY,
RtpEndUserState.CONNECTIVITY_ERROR
RtpEndUserState.CONNECTIVITY_ERROR,
RtpEndUserState.RETRACTED
);
private static final String PROXIMITY_WAKE_LOCK_TAG = "conversations:in-rtp-session";
private static final int REQUEST_ACCEPT_CALL = 0x1111;
@ -79,6 +84,15 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe
private ActivityRtpSessionBinding binding;
private PowerManager.WakeLock mProximityWakeLock;
private Handler mHandler = new Handler();
private Runnable mTickExecutor = new Runnable() {
@Override
public void run() {
updateCallDuration();
mHandler.postDelayed(mTickExecutor, CALL_DURATION_UPDATE_INTERVAL);
}
};
private static Set<Media> actionToMedia(final String action) {
if (ACTION_MAKE_VIDEO_CALL.equals(action)) {
return ImmutableSet.of(Media.AUDIO, Media.VIDEO);
@ -308,8 +322,15 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe
}
}
@Override
public void onStart() {
super.onStart();
mHandler.postDelayed(mTickExecutor, CALL_DURATION_UPDATE_INTERVAL);
}
@Override
public void onStop() {
mHandler.removeCallbacks(mTickExecutor);
binding.remoteVideo.release();
binding.localVideo.release();
final WeakReference<JingleRtpConnection> weakReference = this.rtpConnectionReference;
@ -580,7 +601,11 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe
);
this.binding.inCallActionFarRight.setVisibility(View.GONE);
}
updateInCallButtonConfigurationMicrophone(requireRtpConnection().isMicrophoneEnabled());
if (media.contains(Media.AUDIO)) {
updateInCallButtonConfigurationMicrophone(requireRtpConnection().isMicrophoneEnabled());
} else {
this.binding.inCallActionLeft.setVisibility(View.GONE);
}
} else {
this.binding.inCallActionLeft.setVisibility(View.GONE);
this.binding.inCallActionRight.setVisibility(View.GONE);
@ -651,7 +676,7 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe
@Override
public void onFailure(@NonNull final Throwable throwable) {
Log.d(Config.LOGTAG,"could not switch camera", Throwables.getRootCause(throwable));
Log.d(Config.LOGTAG, "could not switch camera", Throwables.getRootCause(throwable));
Toast.makeText(RtpSessionActivity.this, R.string.could_not_switch_camera, Toast.LENGTH_LONG).show();
}
}, MainThreadExecutor.getInstance());
@ -680,6 +705,23 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe
this.binding.inCallActionLeft.setVisibility(View.VISIBLE);
}
private void updateCallDuration() {
final JingleRtpConnection connection = this.rtpConnectionReference != null ? this.rtpConnectionReference.get() : null;
if (connection == null || connection.getMedia().contains(Media.VIDEO)) {
this.binding.duration.setVisibility(View.GONE);
return;
}
final long rtpConnectionStarted = connection.getRtpConnectionStarted();
final long rtpConnectionEnded = connection.getRtpConnectionEnded();
if (rtpConnectionStarted != 0) {
final long ended = rtpConnectionEnded == 0 ? SystemClock.elapsedRealtime() : rtpConnectionEnded;
this.binding.duration.setText(TimeFrameUtils.formatTimePassed(rtpConnectionStarted, ended, false));
this.binding.duration.setVisibility(View.VISIBLE);
} else {
this.binding.duration.setVisibility(View.GONE);
}
}
private void updateVideoViews(final RtpEndUserState state) {
if (END_CARD.contains(state) || state == RtpEndUserState.ENDING_CALL) {
binding.localVideo.setVisibility(View.GONE);

View File

@ -40,7 +40,7 @@ import eu.siacs.conversations.services.MemorizingTrustManager;
import eu.siacs.conversations.services.QuickConversationsService;
import eu.siacs.conversations.ui.util.StyledAttributes;
import eu.siacs.conversations.utils.GeoHelper;
import eu.siacs.conversations.utils.TimeframeUtils;
import eu.siacs.conversations.utils.TimeFrameUtils;
import rocks.xmpp.addr.Jid;
public class SettingsActivity extends XmppActivity implements
@ -140,7 +140,7 @@ public class SettingsActivity extends XmppActivity implements
if (choices[i] == 0) {
entries[i] = getString(R.string.never);
} else {
entries[i] = TimeframeUtils.resolve(this, 1000L * choices[i]);
entries[i] = TimeFrameUtils.resolve(this, 1000L * choices[i]);
}
}
automaticMessageDeletionList.setEntries(entries);

View File

@ -73,7 +73,7 @@ import eu.siacs.conversations.utils.Emoticons;
import eu.siacs.conversations.utils.GeoHelper;
import eu.siacs.conversations.utils.MessageUtils;
import eu.siacs.conversations.utils.StylingHelper;
import eu.siacs.conversations.utils.TimeframeUtils;
import eu.siacs.conversations.utils.TimeFrameUtils;
import eu.siacs.conversations.utils.UIHelper;
import eu.siacs.conversations.xmpp.mam.MamReference;
import rocks.xmpp.addr.Jid;
@ -701,7 +701,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
final long duration = rtpSessionStatus.duration;
if (received) {
if (duration > 0) {
viewHolder.status_message.setText(activity.getString(R.string.incoming_call_duration, TimeframeUtils.resolve(activity, duration)));
viewHolder.status_message.setText(activity.getString(R.string.incoming_call_duration, TimeFrameUtils.resolve(activity, duration)));
} else if (rtpSessionStatus.successful) {
viewHolder.status_message.setText(R.string.incoming_call);
} else {
@ -709,7 +709,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
}
} else {
if (duration > 0) {
viewHolder.status_message.setText(activity.getString(R.string.outgoing_call_duration, TimeframeUtils.resolve(activity, duration)));
viewHolder.status_message.setText(activity.getString(R.string.outgoing_call_duration, TimeFrameUtils.resolve(activity, duration)));
} else {
viewHolder.status_message.setText(R.string.outgoing_call);
}

View File

@ -1,31 +1,35 @@
package eu.siacs.conversations.utils;
import android.content.Context;
import android.support.annotation.NonNull;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.lang.Thread.UncaughtExceptionHandler;
import eu.siacs.conversations.services.NotificationService;
public class ExceptionHandler implements UncaughtExceptionHandler {
private UncaughtExceptionHandler defaultHandler;
private Context context;
private final UncaughtExceptionHandler defaultHandler;
private final Context context;
public ExceptionHandler(Context context) {
ExceptionHandler(final Context context) {
this.context = context;
this.defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
Writer result = new StringWriter();
PrintWriter printWriter = new PrintWriter(result);
ex.printStackTrace(printWriter);
String stacktrace = result.toString();
public void uncaughtException(@NonNull Thread thread, final Throwable throwable) {
NotificationService.cancelIncomingCallNotification(context);
final Writer stringWriter = new StringWriter();
final PrintWriter printWriter = new PrintWriter(stringWriter);
throwable.printStackTrace(printWriter);
final String stacktrace = stringWriter.toString();
printWriter.close();
ExceptionHelper.writeToStacktraceFile(context, stacktrace);
this.defaultHandler.uncaughtException(thread, ex);
this.defaultHandler.uncaughtException(thread, throwable);
}
}

View File

@ -1,12 +1,12 @@
package eu.siacs.conversations.utils;
import android.support.v7.app.AlertDialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.preference.PreferenceManager;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import java.io.BufferedReader;
@ -16,7 +16,6 @@ import java.io.InputStreamReader;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import eu.siacs.conversations.Config;
@ -33,10 +32,10 @@ public class ExceptionHelper {
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
public static void init(Context context) {
if (!(Thread.getDefaultUncaughtExceptionHandler() instanceof ExceptionHandler)) {
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(
context));
if (Thread.getDefaultUncaughtExceptionHandler() instanceof ExceptionHandler) {
return;
}
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(context));
}
public static boolean checkForCrash(XmppActivity activity) {

View File

@ -19,4 +19,12 @@ public class IP {
|| PATTERN_IPV6_HEXCOMPRESSED.matcher(server).matches());
}
public static String wrapIPv6(final String host) {
if (matches(host)) {
return String.format("[%s]", host);
} else {
return host;
}
}
}

View File

@ -0,0 +1,97 @@
/*
* Copyright (c) 2018, Daniel Gultsch All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package eu.siacs.conversations.utils;
import android.content.Context;
import android.os.SystemClock;
import android.support.annotation.PluralsRes;
import java.util.Locale;
import eu.siacs.conversations.R;
public class TimeFrameUtils {
private static final TimeFrame[] TIME_FRAMES;
static {
TIME_FRAMES = new TimeFrame[]{
new TimeFrame(1000L, R.plurals.seconds),
new TimeFrame(60L * 1000, R.plurals.minutes),
new TimeFrame(60L * 60 * 1000, R.plurals.hours),
new TimeFrame(24L * 60 * 60 * 1000, R.plurals.days),
new TimeFrame(7L * 24 * 60 * 60 * 1000, R.plurals.weeks),
new TimeFrame(30L * 24 * 60 * 60 * 1000, R.plurals.months),
};
}
public static String resolve(Context context, long timeFrame) {
for (int i = TIME_FRAMES.length - 1; i >= 0; --i) {
long duration = TIME_FRAMES[i].duration;
long threshold = i > 0 ? (TIME_FRAMES[i - 1].duration / 2) : 0;
if (timeFrame >= duration - threshold) {
int count = (int) (timeFrame / duration + ((timeFrame % duration) > (duration / 2) ? 1 : 0));
return context.getResources().getQuantityString(TIME_FRAMES[i].name, count, count);
}
}
return context.getResources().getQuantityString(TIME_FRAMES[0].name, 0, 0);
}
public static String formatTimePassed(final long since, final boolean withMilliseconds) {
return formatTimePassed(since, SystemClock.elapsedRealtime(), withMilliseconds);
}
public static String formatTimePassed(final long since, final long to, final boolean withMilliseconds) {
final long passed = (since < 0) ? 0 : (to - since);
final int hours = (int) (passed / 3600000);
final int minutes = (int) (passed / 60000) % 60;
final int seconds = (int) (passed / 1000) % 60;
final int milliseconds = (int) (passed / 100) % 10;
if (hours > 0) {
return String.format(Locale.ENGLISH, "%d:%02d:%02d", hours, minutes, seconds);
} else if (withMilliseconds) {
return String.format(Locale.ENGLISH, "%d:%02d.%d", minutes, seconds, milliseconds);
} else {
return String.format(Locale.ENGLISH, "%d:%02d", minutes, seconds);
}
}
private static class TimeFrame {
final long duration;
public final int name;
private TimeFrame(long duration, @PluralsRes int name) {
this.duration = duration;
this.name = name;
}
}
}

View File

@ -1,75 +0,0 @@
/*
* Copyright (c) 2018, Daniel Gultsch All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package eu.siacs.conversations.utils;
import android.content.Context;
import android.support.annotation.PluralsRes;
import eu.siacs.conversations.R;
public class TimeframeUtils {
private static final Timeframe[] TIMEFRAMES;
static {
TIMEFRAMES = new Timeframe[]{
new Timeframe(1000L, R.plurals.seconds),
new Timeframe(60L * 1000, R.plurals.minutes),
new Timeframe(60L * 60 * 1000, R.plurals.hours),
new Timeframe(24L * 60 * 60 * 1000, R.plurals.days),
new Timeframe(7L * 24 * 60 * 60 * 1000, R.plurals.weeks),
new Timeframe(30L * 24 * 60 * 60 * 1000, R.plurals.months),
};
}
public static String resolve(Context context, long timeframe) {
for(int i = TIMEFRAMES.length -1 ; i >= 0; --i) {
long duration = TIMEFRAMES[i].duration;
long threshold = i > 0 ? (TIMEFRAMES[i-1].duration / 2) : 0;
if (timeframe >= duration - threshold) {
int count = (int) (timeframe / duration + ((timeframe%duration)>(duration/2)?1:0));
return context.getResources().getQuantityString(TIMEFRAMES[i].name,count,count);
}
}
return context.getResources().getQuantityString(TIMEFRAMES[0].name,0,0);
}
private static class Timeframe {
public final long duration;
public final int name;
private Timeframe(long duration, @PluralsRes int name) {
this.duration = duration;
this.name = name;
}
}
}

View File

@ -113,6 +113,7 @@ public abstract class AbstractJingleConnection {
PROCEED,
REJECTED,
RETRACTED,
RETRACTED_RACED, //used when receiving a retract after we already asked to proceed
SESSION_INITIALIZED, //equal to 'PENDING'
SESSION_INITIALIZED_PRE_APPROVED,
SESSION_ACCEPTED, //equal to 'ACTIVE'

View File

@ -9,6 +9,7 @@ import com.google.common.base.Preconditions;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.collect.Collections2;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.ImmutableSet;
import java.lang.ref.WeakReference;
@ -132,6 +133,40 @@ public class JingleConnectionManager extends AbstractConnectionManager {
}
}
public Optional<RtpSessionProposal> findMatchingSessionProposal(final Account account, final Jid with, final Set<Media> media) {
synchronized (this.rtpSessionProposals) {
for (Map.Entry<RtpSessionProposal, DeviceDiscoveryState> entry : this.rtpSessionProposals.entrySet()) {
final RtpSessionProposal proposal = entry.getKey();
final DeviceDiscoveryState state = entry.getValue();
final boolean openProposal = state == DeviceDiscoveryState.DISCOVERED || state == DeviceDiscoveryState.SEARCHING;
if (openProposal
&& proposal.account == account
&& proposal.with.equals(with.asBareJid())
&& proposal.media.equals(media)) {
return Optional.of(proposal);
}
}
}
return Optional.absent();
}
private boolean hasMatchingRtpSession(final Account account, final Jid with, final Set<Media> media) {
for (AbstractJingleConnection connection : this.connections.values()) {
if (connection instanceof JingleRtpConnection) {
final JingleRtpConnection rtpConnection = (JingleRtpConnection) connection;
if (rtpConnection.isTerminated()) {
continue;
}
if (rtpConnection.getId().account == account
&& rtpConnection.getId().with.asBareJid().equals(with.asBareJid())
&& rtpConnection.getMedia().equals(media)) {
return true;
}
}
}
return false;
}
private boolean isWithStrangerAndStrangerNotificationsAreOff(final Account account, Jid with) {
final boolean notifyForStrangers = mXmppConnectionService.getNotificationService().notificationsFromStrangers();
if (notifyForStrangers) {
@ -154,7 +189,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
account.getXmppConnection().sendIqPacket(response, null);
}
public void deliverMessage(final Account account, final Jid to, final Jid from, final Element message, String serverMsgId, long timestamp) {
public void deliverMessage(final Account account, final Jid to, final Jid from, final Element message, String remoteMsgId, String serverMsgId, long timestamp) {
Preconditions.checkArgument(Namespace.JINGLE_MESSAGE.equals(message.getNamespace()));
final String sessionId = message.getAttribute("id");
if (sessionId == null) {
@ -174,6 +209,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
return;
}
final boolean fromSelf = from.asBareJid().equals(account.getJid().asBareJid());
final boolean addressedDirectly = to != null && to.equals(account.getJid());
final AbstractJingleConnection.Id id;
if (fromSelf) {
if (to != null && to.isFullJid()) {
@ -226,6 +262,26 @@ public class JingleConnectionManager extends AbstractConnectionManager {
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": encountered unknown media in session proposal. " + propose);
return;
}
final Optional<RtpSessionProposal> matchingSessionProposal = findMatchingSessionProposal(account, id.with, ImmutableSet.copyOf(media));
if (matchingSessionProposal.isPresent()) {
final String ourSessionId = matchingSessionProposal.get().sessionId;
final String theirSessionId = id.sessionId;
if (ComparisonChain.start()
.compare(ourSessionId, theirSessionId)
.compare(account.getJid().toEscapedString(), id.with.toEscapedString())
.result() > 0) {
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": our session lost tie break. automatically accepting their session. winning Session=" + theirSessionId);
//TODO a retract for this reason should probably include some indication of tie break
retractSessionProposal(matchingSessionProposal.get());
final JingleRtpConnection rtpConnection = new JingleRtpConnection(this, id, from);
this.connections.put(id, rtpConnection);
rtpConnection.setProposedMedia(ImmutableSet.copyOf(media));
rtpConnection.deliveryMessage(from, message, serverMsgId, timestamp);
} else {
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": our session won tie break. waiting for other party to accept. winningSession=" + ourSessionId);
}
return;
}
final boolean stranger = isWithStrangerAndStrangerNotificationsAreOff(account, id.with);
if (isBusy() || stranger) {
writeLogMissedIncoming(account, id.with.asBareJid(), id.sessionId, serverMsgId, timestamp);
@ -250,7 +306,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
} else {
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": unable to react to proposed session with " + rtpDescriptions.size() + " rtp descriptions of " + descriptions.size() + " total descriptions");
}
} else if ("proceed".equals(message.getName())) {
} else if (addressedDirectly && "proceed".equals(message.getName())) {
synchronized (rtpSessionProposals) {
final RtpSessionProposal proposal = getRtpSessionProposal(account, from.asBareJid(), sessionId);
if (proposal != null) {
@ -262,9 +318,21 @@ public class JingleConnectionManager extends AbstractConnectionManager {
rtpConnection.deliveryMessage(from, message, serverMsgId, timestamp);
} else {
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": no rtp session proposal found for " + from + " to deliver proceed");
if (remoteMsgId == null) {
return;
}
final MessagePacket errorMessage = new MessagePacket();
errorMessage.setTo(from);
errorMessage.setId(remoteMsgId);
errorMessage.setType(MessagePacket.TYPE_ERROR);
final Element error = errorMessage.addChild("error");
error.setAttribute("code", "404");
error.setAttribute("type", "cancel");
error.addChild("item-not-found", "urn:ietf:params:xml:ns:xmpp-stanzas");
mXmppConnectionService.sendMessagePacket(account, errorMessage);
}
}
} else if ("reject".equals(message.getName())) {
} else if (addressedDirectly && "reject".equals(message.getName())) {
final RtpSessionProposal proposal = new RtpSessionProposal(account, from.asBareJid(), sessionId);
synchronized (rtpSessionProposals) {
if (rtpSessionProposals.remove(proposal) != null) {
@ -276,7 +344,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
}
}
} else {
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": retrieved out of order jingle message");
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": retrieved out of order jingle message"+message);
}
}
@ -436,16 +504,21 @@ public class JingleConnectionManager extends AbstractConnectionManager {
}
}
if (matchingProposal != null) {
toneManager.transition(RtpEndUserState.ENDED);
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": retracting rtp session proposal with " + with);
this.rtpSessionProposals.remove(matchingProposal);
final MessagePacket messagePacket = mXmppConnectionService.getMessageGenerator().sessionRetract(matchingProposal);
writeLogMissedOutgoing(account, matchingProposal.with, matchingProposal.sessionId, null, System.currentTimeMillis());
mXmppConnectionService.sendMessagePacket(account, messagePacket);
retractSessionProposal(matchingProposal);
}
}
}
private void retractSessionProposal(RtpSessionProposal rtpSessionProposal) {
final Account account = rtpSessionProposal.account;
toneManager.transition(RtpEndUserState.ENDED);
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": retracting rtp session proposal with " + rtpSessionProposal.with);
this.rtpSessionProposals.remove(rtpSessionProposal);
final MessagePacket messagePacket = mXmppConnectionService.getMessageGenerator().sessionRetract(rtpSessionProposal);
writeLogMissedOutgoing(account, rtpSessionProposal.with, rtpSessionProposal.sessionId, null, System.currentTimeMillis());
mXmppConnectionService.sendMessagePacket(account, messagePacket);
}
public void proposeJingleRtpSession(final Account account, final Jid with, final Set<Media> media) {
synchronized (this.rtpSessionProposals) {
for (Map.Entry<RtpSessionProposal, DeviceDiscoveryState> entry : this.rtpSessionProposals.entrySet()) {
@ -466,6 +539,10 @@ public class JingleConnectionManager extends AbstractConnectionManager {
}
}
if (isBusy()) {
if (hasMatchingRtpSession(account, with, media)) {
Log.d(Config.LOGTAG, "ignoring request to propose jingle session because the other party already created one for us");
return;
}
throw new IllegalStateException("There is already a running RTP session. This should have been caught by the UI");
}
final RtpSessionProposal proposal = RtpSessionProposal.of(account, with.asBareJid(), media);

View File

@ -36,6 +36,7 @@ import eu.siacs.conversations.entities.Conversational;
import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.entities.RtpSessionStatus;
import eu.siacs.conversations.services.AppRTCAudioManager;
import eu.siacs.conversations.utils.IP;
import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xml.Namespace;
import eu.siacs.conversations.xmpp.jingle.stanzas.Group;
@ -57,6 +58,10 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
);
private static final long BUSY_TIME_OUT = 30;
private static final List<State> TERMINATED = Arrays.asList(
State.ACCEPTED,
State.REJECTED,
State.RETRACTED,
State.RETRACTED_RACED,
State.TERMINATED_SUCCESS,
State.TERMINATED_DECLINED_OR_BUSY,
State.TERMINATED_CONNECTIVITY_ERROR,
@ -82,6 +87,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
State.TERMINATED_CONNECTIVITY_ERROR //only used when the xmpp connection rebinds
));
transitionBuilder.put(State.PROCEED, ImmutableList.of(
State.RETRACTED_RACED,
State.SESSION_INITIALIZED_PRE_APPROVED,
State.TERMINATED_SUCCESS,
State.TERMINATED_APPLICATION_FAILURE,
@ -121,6 +127,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
private RtpContentMap initiatorRtpContentMap;
private RtpContentMap responderRtpContentMap;
private long rtpConnectionStarted = 0; //time of 'connected'
private long rtpConnectionEnded = 0;
private ScheduledFuture<?> ringingTimeoutFuture;
JingleRtpConnection(JingleConnectionManager jingleConnectionManager, Id id, Jid initiator) {
@ -611,14 +618,17 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
private void receiveRetract(final Jid from, final String serverMsgId, final long timestamp) {
if (from.equals(id.with)) {
if (transition(State.RETRACTED)) {
final State target = this.state == State.PROCEED ? State.RETRACTED_RACED : State.RETRACTED;
if (transition(target)) {
xmppConnectionService.getNotificationService().cancelIncomingCallNotification();
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": session with " + id.with + " has been retracted (serverMsgId=" + serverMsgId + ")");
if (serverMsgId != null) {
this.message.setServerMsgId(serverMsgId);
}
this.message.setTime(timestamp);
this.message.markUnread();
if (target == State.RETRACTED) {
this.message.markUnread();
}
writeLogMessageMissed();
finish();
} else {
@ -641,12 +651,13 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
}
try {
setupWebRTC(media, iceServers);
} catch (WebRTCWrapper.InitializationException e) {
} catch (final WebRTCWrapper.InitializationException e) {
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": unable to initialize WebRTC");
webRTCWrapper.close();
//todo we havent actually initiated the session yet; so sending sessionTerminate makes no sense
//todo either we dont ring ever at all or maybe we should send a retract or something
transitionOrThrow(State.TERMINATED_APPLICATION_FAILURE);
this.finish();
return;
}
try {
@ -662,6 +673,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
sendSessionTerminate(Reason.FAILED_APPLICATION);
} else {
transitionOrThrow(State.TERMINATED_APPLICATION_FAILURE);
this.finish();
}
}
}
@ -803,6 +815,8 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
case RETRACTED:
case TERMINATED_CANCEL_OR_TIMEOUT:
return RtpEndUserState.ENDED;
case RETRACTED_RACED:
return RtpEndUserState.RETRACTED;
case TERMINATED_CONNECTIVITY_ERROR:
return RtpEndUserState.CONNECTIVITY_ERROR;
case TERMINATED_APPLICATION_FAILURE:
@ -878,8 +892,8 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": ending call while in state PROCEED just means ending the connection");
this.jingleConnectionManager.endSession(id, State.TERMINATED_SUCCESS);
this.webRTCWrapper.close();
this.finish();
transitionOrThrow(State.TERMINATED_SUCCESS); //arguably this wasn't success; but not a real failure either
this.finish();
return;
}
if (isInitiator() && isInState(State.SESSION_INITIALIZED, State.SESSION_INITIALIZED_PRE_APPROVED)) {
@ -1000,6 +1014,9 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
if (newState == PeerConnection.PeerConnectionState.CONNECTED && this.rtpConnectionStarted == 0) {
this.rtpConnectionStarted = SystemClock.elapsedRealtime();
}
if (newState == PeerConnection.PeerConnectionState.CLOSED && this.rtpConnectionEnded == 0) {
this.rtpConnectionEnded = SystemClock.elapsedRealtime();
}
//TODO 'DISCONNECTED' might be an opportunity to renew the offer and send a transport-replace
//TODO exact syntax is yet to be determined but transport-replace sounds like the most reasonable
//as there is no content-replace
@ -1025,6 +1042,14 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
}
}
public long getRtpConnectionStarted() {
return this.rtpConnectionStarted;
}
public long getRtpConnectionEnded() {
return this.rtpConnectionEnded;
}
public AppRTCAudioManager getAudioManager() {
return webRTCWrapper.getAudioManager();
}
@ -1041,6 +1066,9 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
return webRTCWrapper.isVideoEnabled();
}
public void setVideoEnabled(final boolean enabled) {
webRTCWrapper.setVideoEnabled(enabled);
}
public boolean isCameraSwitchable() {
return webRTCWrapper.isCameraSwitchable();
@ -1054,10 +1082,6 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
return webRTCWrapper.switchCamera();
}
public void setVideoEnabled(final boolean enabled) {
webRTCWrapper.setVideoEnabled(enabled);
}
@Override
public void onAudioDeviceChanged(AppRTCAudioManager.AudioDevice selectedAudioDevice, Set<AppRTCAudioManager.AudioDevice> availableAudioDevices) {
xmppConnectionService.notifyJingleRtpConnectionUpdate(selectedAudioDevice, availableAudioDevices);
@ -1107,9 +1131,8 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": skipping invalid combination of udp/tls in external services");
continue;
}
//TODO wrap ipv6 addresses
final PeerConnection.IceServer.Builder iceServerBuilder = PeerConnection.IceServer
.builder(String.format("%s:%s:%s?transport=%s", type, host, port, transport));
.builder(String.format("%s:%s:%s?transport=%s", type, IP.wrapIPv6(host), port, transport));
iceServerBuilder.setTlsCertPolicy(PeerConnection.TlsCertPolicy.TLS_CERT_POLICY_INSECURE_NO_CHECK);
if (username != null && password != null) {
iceServerBuilder.setUsername(username);
@ -1140,9 +1163,13 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
}
private void finish() {
this.cancelRingingTimeout();
this.webRTCWrapper.verifyClosed();
this.jingleConnectionManager.finishConnection(this);
if (isTerminated()) {
this.cancelRingingTimeout();
this.webRTCWrapper.verifyClosed();
this.jingleConnectionManager.finishConnection(this);
} else {
throw new IllegalStateException(String.format("Unable to call finish from %s", this.state));
}
}
private void writeLogMessage(final State state) {
@ -1180,7 +1207,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
return this.state;
}
public boolean isTerminated() {
boolean isTerminated() {
return TERMINATED.contains(this.state);
}

View File

@ -21,7 +21,14 @@ class ToneManager {
private ScheduledFuture<?> currentTone;
ToneManager() {
this.toneGenerator = new ToneGenerator(AudioManager.STREAM_MUSIC, 35);
ToneGenerator toneGenerator;
try {
toneGenerator = new ToneGenerator(AudioManager.STREAM_MUSIC, 35);
} catch (final RuntimeException e) {
Log.e(Config.LOGTAG, "unable to instantiate ToneGenerator", e);
toneGenerator = null;
}
this.toneGenerator = toneGenerator;
}
void transition(final RtpEndUserState state) {
@ -86,25 +93,25 @@ class ToneManager {
private void scheduleConnected() {
this.currentTone = JingleConnectionManager.SCHEDULED_EXECUTOR_SERVICE.schedule(() -> {
this.toneGenerator.startTone(ToneGenerator.TONE_PROP_PROMPT, 200);
startTone(ToneGenerator.TONE_PROP_PROMPT, 200);
}, 0, TimeUnit.SECONDS);
}
private void scheduleEnding() {
this.currentTone = JingleConnectionManager.SCHEDULED_EXECUTOR_SERVICE.schedule(() -> {
this.toneGenerator.startTone(ToneGenerator.TONE_CDMA_CALLDROP_LITE, 375);
startTone(ToneGenerator.TONE_CDMA_CALLDROP_LITE, 375);
}, 0, TimeUnit.SECONDS);
}
private void scheduleBusy() {
this.currentTone = JingleConnectionManager.SCHEDULED_EXECUTOR_SERVICE.schedule(() -> {
this.toneGenerator.startTone(ToneGenerator.TONE_CDMA_NETWORK_BUSY, 2500);
startTone(ToneGenerator.TONE_CDMA_NETWORK_BUSY, 2500);
}, 0, TimeUnit.SECONDS);
}
private void scheduleWaitingTone() {
this.currentTone = JingleConnectionManager.SCHEDULED_EXECUTOR_SERVICE.scheduleAtFixedRate(() -> {
this.toneGenerator.startTone(ToneGenerator.TONE_CDMA_DIAL_TONE_LITE, 750);
startTone(ToneGenerator.TONE_CDMA_DIAL_TONE_LITE, 750);
}, 0, 3, TimeUnit.SECONDS);
}
@ -112,7 +119,17 @@ class ToneManager {
if (currentTone != null) {
currentTone.cancel(true);
}
toneGenerator.stopTone();
if (toneGenerator != null) {
toneGenerator.stopTone();
}
}
private void startTone(final int toneType, final int durationMs) {
if (toneGenerator != null) {
this.toneGenerator.startTone(toneType, durationMs);
} else {
Log.e(Config.LOGTAG, "failed to start tone. ToneGenerator doesn't exist");
}
}
private enum ToneState {

View File

@ -8,6 +8,7 @@ import android.util.Log;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.util.concurrent.Futures;
@ -164,10 +165,14 @@ public class WebRTCWrapper {
this.eventCallback = eventCallback;
}
public void setup(final Context context, final AppRTCAudioManager.SpeakerPhonePreference speakerPhonePreference) {
PeerConnectionFactory.initialize(
PeerConnectionFactory.InitializationOptions.builder(context).createInitializationOptions()
);
public void setup(final Context context, final AppRTCAudioManager.SpeakerPhonePreference speakerPhonePreference) throws InitializationException {
try {
PeerConnectionFactory.initialize(
PeerConnectionFactory.InitializationOptions.builder(context).createInitializationOptions()
);
} catch (final UnsatisfiedLinkError e) {
throw new InitializationException(e);
}
this.eglBase = EglBase.create();
this.context = context;
mainHandler.post(() -> {
@ -555,7 +560,11 @@ public class WebRTCWrapper {
static class InitializationException extends Exception {
private InitializationException(String message) {
private InitializationException(final Throwable throwable) {
super(throwable);
}
private InitializationException(final String message) {
super(message);
}
}

View File

@ -62,21 +62,29 @@
</android.support.design.widget.AppBarLayout>
<LinearLayout
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/button_row"
android:layout_below="@id/app_bar_layout"
android:gravity="center"
android:orientation="horizontal">
android:layout_below="@id/app_bar_layout">
<TextView
android:id="@+id/duration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_margin="24dp"
android:textAppearance="@style/TextAppearance.Conversations.Title.Monospace"
tools:text="01:23" />
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/contact_photo"
android:layout_width="@dimen/publish_avatar_size"
android:layout_height="@dimen/publish_avatar_size"
android:layout_centerInParent="true"
app:riv_corner_radius="@dimen/incoming_call_radius" />
</LinearLayout>
</RelativeLayout>
<org.webrtc.SurfaceViewRenderer

View File

@ -1,6 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_ongoing_call"
android:icon="?attr/icon_ongoing_call"
android:orderInCategory="9"
android:title="@string/return_to_ongoing_call"
app:showAsAction="always" />
<item
android:id="@+id/action_call"
android:icon="?attr/icon_call"
android:orderInCategory="10"
android:title="@string/make_call"
app:showAsAction="always">
<menu>
<item
android:id="@+id/action_audio_call"
android:icon="?attr/ic_make_audio_call"
android:title="@string/audio_call" />
<item
android:id="@+id/action_video_call"
android:icon="?attr/ic_make_video_call"
android:title="@string/video_call" />
</menu>
</item>
<item
android:id="@+id/action_security"
android:icon="?attr/icon_not_secure"
@ -60,29 +83,6 @@
android:title="@string/send_location" />
</menu>
</item>
<item
android:id="@+id/action_ongoing_call"
android:icon="?attr/icon_ongoing_call"
android:orderInCategory="34"
android:title="@string/return_to_ongoing_call"
app:showAsAction="always" />
<item
android:id="@+id/action_call"
android:icon="?attr/icon_call"
android:orderInCategory="35"
android:title="@string/make_call"
app:showAsAction="always">
<menu>
<item
android:id="@+id/action_audio_call"
android:icon="?attr/ic_make_audio_call"
android:title="@string/audio_call" />
<item
android:id="@+id/action_video_call"
android:icon="?attr/ic_make_video_call"
android:title="@string/video_call" />
</menu>
</item>
<item
android:id="@+id/action_contact_details"
android:orderInCategory="40"

View File

@ -898,7 +898,7 @@
<string name="rtp_state_ending_call">Anruf beenden</string>
<string name="answer_call">Annehmen</string>
<string name="dismiss_call">Ablehnen</string>
<string name="rtp_state_finding_device">Geräte lokalisieren</string>
<string name="rtp_state_finding_device">Entdecke Geräte</string>
<string name="rtp_state_ringing">Klingelt</string>
<string name="rtp_state_declined_or_busy">Besetzt</string>
<string name="rtp_state_connectivity_error">Verbindungsaufbau fehlgeschlagen</string>

View File

@ -41,12 +41,14 @@
<string name="moderator">Moderador</string>
<string name="participant">Participante</string>
<string name="visitor">Visitante</string>
<string name="remove_contact_text">¿Quieres eliminar a %s de tu lista de contactos? Las conversaciones con este contacto no se eliminarán. </string>
<string name="block_contact_text">¿Quieres bloquear a %s para que no pueda enviarte mensajes?</string>
<string name="unblock_contact_text">¿Quieres desbloquear a %s y permitirle que te envíe mensajes?</string>
<string name="block_domain_text">¿Bloquear todos los contactos de %s?</string>
<string name="unblock_domain_text">¿Desbloquear todos los contatos de %s?</string>
<string name="contact_blocked">Contacto bloqueado</string>
<string name="blocked">Bloqueado</string>
<string name="remove_bookmark_text">¿Quieres eliminar %s de tus marcadores? Las conversaciones con este marcador no serán eliminadas.</string>
<string name="register_account">Registrar nueva cuenta en servidor</string>
<string name="change_password_on_server">Cambiar contraseña en servidor</string>
<string name="share_with">Compartir con...</string>
@ -65,14 +67,22 @@
<string name="save">Guardar</string>
<string name="ok">OK</string>
<string name="crash_report_title">Conversations se ha detenido.</string>
<string name="crash_report_message">Usar tu cuenta XMPP para enviar trazas de error ayuda al desarrollo de Conversations.</string>
<string name="send_now">Enviar ahora</string>
<string name="send_never">No preguntar de nuevo</string>
<string name="problem_connecting_to_account">No se ha podido conectar a la cuenta</string>
<string name="problem_connecting_to_accounts">No se ha podido conectar a varias cuentas</string>
<string name="touch_to_fix">Pulsa aquí para gestionar tus cuentas</string>
<string name="attach_file">Adjuntar</string>
<string name="not_in_roster">El contacto no está en tu lista. ¿Te gustaría añadirlo?</string>
<string name="add_contact">Añadir contacto</string>
<string name="send_failed">Error al enviar</string>
<string name="preparing_image">Preparando para enviar imagen</string>
<string name="preparing_images">Preparando para enviar imágenes</string>
<string name="sharing_files_please_wait">Compartiendo ficheros. Por favor, espera...</string>
<string name="action_clear_history">Limpiar historial</string>
<string name="clear_conversation_history">Limpiar historial de conversación</string>
<string name="clear_histor_msg">¿Quieres borrar todos los mensajes de esta conversación?\n\n<b>Aviso:</b> Esto no afectará a los mensajes guardados en otros dispositivos o servidores.</string>
<string name="delete_file_dialog">Eliminar fichero</string>
<string name="delete_file_dialog_msg">¿Estás seguro de que quieres borrar este fichero?\n\n<b>Aviso:</b>Esto no borrará las copias de este fichero almacenado en otros dispositivos o servidores.</string>
<string name="also_end_conversation">Cerrar esta conversación después</string>
@ -83,16 +93,20 @@
<string name="send_omemo_message">Enviar mensaje cifrado con OMEMO </string>
<string name="send_omemo_x509_message">Enviar mensaje cifrado v\\OMEMO</string>
<string name="send_pgp_message">Enviar mensaje cifrado con OpenPGP</string>
<string name="your_nick_has_been_changed">El apodo ha sido modificado</string>
<string name="send_unencrypted">Enviar sin cifrar</string>
<string name="decryption_failed">Falló el descifrado. Tal vez no tengas la clave privada apropiada.</string>
<string name="openkeychain_required">OpenKeychain</string>
<string name="openkeychain_required_long">Conversations utiliza <b>OpenKeychain</b> para cifrar y descifrar mensajes y gestionar tus claves públicas.\n\nEstá publicado bajo licencia GPLv3+ y disponible en F-Droid y Google Play.\n\n<small>(Por favor, reinicie Conversations después).</small></string>
<string name="restart">Reiniciar</string>
<string name="install">Instalar</string>
<string name="openkeychain_not_installed">Por favor, instala OpenKeyChain</string>
<string name="offering">ofreciendo…</string>
<string name="waiting">esperando…</string>
<string name="no_pgp_key">Clave OpenPGP no encontrada</string>
<string name="contact_has_no_pgp_key">No se ha podido cifrar tu mensaje porque tu contacto no está anunciando su clave pública.\n\n<small>Por favor, pide a tu contacto que configure OpenPGP.</small></string>
<string name="no_pgp_keys">Claves OpenPGP no encontradas</string>
<string name="contacts_have_no_pgp_keys">No se ha podido cifrar tu mensaje porque tus contactos no están anunciando sus claves públicas.\n\n<small>Por favor, pide a tus contactos que configuren OpenPGP.</small></string>
<string name="pref_general">General</string>
<string name="pref_accept_files">Aceptar archivos</string>
<string name="pref_accept_files_summary">De forma automática aceptar archivos menores que…</string>
@ -110,9 +124,11 @@
<string name="pref_notification_grace_period_summary">El periodo de tiempo en el que las notificaciones están silenciadas tras detectar actividad en otro de tus dispositivos.</string>
<string name="pref_advanced_options">Avanzado</string>
<string name="pref_never_send_crash">Nunca informar de errores</string>
<string name="pref_never_send_crash_summary">Al enviar las trazas de error estás ayudando en el desarrollo</string>
<string name="pref_confirm_messages">Confirmar mensajes</string>
<string name="pref_confirm_messages_summary">Permitir a tus contactos saber cuando has recibido y leído sus mensajes</string>
<string name="pref_ui_options">Pantalla</string>
<string name="openpgp_error">OpenKeychain causó un error.</string>
<string name="bad_key_for_encryption">Clave errónea para el cifrado.</string>
<string name="accept">Aceptar</string>
<string name="error">Ha ocurrido un error</string>
@ -125,8 +141,10 @@
<string name="attach_take_picture">Hacer foto</string>
<string name="preemptively_grant">De forma automática conceder suscripción de presencia</string>
<string name="error_not_an_image_file">El archivo seleccionado no es una imagen</string>
<string name="error_compressing_image">No se pudo comprimir el archivo de imagen</string>
<string name="error_file_not_found">Archivo no encontrado</string>
<string name="error_io_exception">Error general. ¿Es posible que no tengas espacio en disco?</string>
<string name="error_security_exception_during_image_copy">La aplicación usaste para seleccionar esta imagen no proporcionó suficientes permisos para leer el archivo.\n\n<small>Utiliza un explorador de archivos diferente para seleccionar la imagen</small></string>
<string name="account_status_unknown">Desconocido</string>
<string name="account_status_disabled">Deshabilitado temporalmente</string>
<string name="account_status_online">Conectado</string>
@ -138,6 +156,7 @@
<string name="account_status_regis_fail">Error en el registro</string>
<string name="account_status_regis_conflict">El identificador ya está en uso</string>
<string name="account_status_regis_success">Registro completado</string>
<string name="account_status_regis_not_sup">El servidor no soporta registros</string>
<string name="account_status_regis_invalid_token">Token de registro inválido</string>
<string name="account_status_tls_error">Error de negociación TLS</string>
<string name="account_status_policy_violation">Policy violation</string>
@ -154,14 +173,17 @@
<string name="mgmt_account_publish_pgp">Publicar clave pública OpenPGP</string>
<string name="unpublish_pgp">Eliminar la clave pública OpenPGP</string>
<string name="unpublish_pgp_message">¿Estás seguro de que quieres eliminar tu clave pública OpenPGP de tu anuncio de presencia?\nTus contactos no podrán enviarte mensajes cifrados con OpenPGP.</string>
<string name="openpgp_has_been_published">La clave pública OpenPGP ha sido publicada.</string>
<string name="mgmt_account_enable">Habilitar</string>
<string name="mgmt_account_are_you_sure">¿Estás seguro?</string>
<string name="mgmt_account_delete_confirm_text">Si eliminas tu cuenta tu historial de conversaciones completo se perderá</string>
<string name="attach_record_voice">Grabar audio</string>
<string name="account_settings_jabber_id">Dirección XMPP</string>
<string name="block_jabber_id">Bloquear dirección XMPP</string>
<string name="account_settings_example_jabber_id">usuario@ejemplo.com</string>
<string name="password">Contraseña</string>
<string name="invalid_jid">Esta no es una dirección XMPP válida</string>
<string name="error_out_of_memory">Sin memoria. La imagen es demasiado grande</string>
<string name="add_phone_book_text">¿Quieres añadir a %s a tus contactos?</string>
<string name="server_info_show_more">Información de servidor</string>
<string name="server_info_mam">XEP-0313: MAM</string>
@ -178,9 +200,14 @@
<string name="server_info_unavailable">No</string>
<string name="missing_public_keys">Se han perdido las claves de anuncio públicas</string>
<string name="last_seen_now">Visto última vez ahora</string>
<string name="last_seen_min">visto última vez hace un minuto</string>
<string name="last_seen_mins">Visto última vez hace %d minutos</string>
<string name="last_seen_hour">visto última vez hace una hora</string>
<string name="last_seen_hours">Visto última vez hace %d horas</string>
<string name="last_seen_day">visto última vez hace un día</string>
<string name="last_seen_days">Visto última vez hace %d días</string>
<string name="install_openkeychain">Mensaje cifrado. Por favor instala OpenKeychain para descifrarlo.</string>
<string name="openpgp_messages_found">Encontrado un nuevo mensaje cifrado con OpenPGP</string>
<string name="openpgp_key_id">OpenPGP Key ID</string>
<string name="omemo_fingerprint">Huella digital OMEMO</string>
<string name="omemo_fingerprint_x509">Huella digital v\\OMEMO</string>
@ -220,25 +247,32 @@
<string name="add_back">Añadir contacto</string>
<string name="contact_has_read_up_to_this_point">%s ha leído hasta aquí</string>
<string name="contacts_have_read_up_to_this_point">%s han leído hasta aquí</string>
<string name="contacts_and_n_more_have_read_up_to_this_point">%1$s + %2$d han leído hasta aquí</string>
<string name="everyone_has_read_up_to_this_point">Todos han leído hasta aquí</string>
<string name="publish">Publicar</string>
<string name="touch_to_choose_picture">Pulsa la imagen de perfil para seleccionar una imagen de la galería</string>
<string name="publishing">Publicando…</string>
<string name="error_publish_avatar_server_reject">El servidor rechazó la publicación</string>
<string name="error_publish_avatar_converting">No se ha podido convertir su imagen</string>
<string name="error_saving_avatar">No se ha podido guardar la imagen de perfil en disco</string>
<string name="or_long_press_for_default">(O pulsación prolongada para volver a tu imagen de la agenda)</string>
<string name="error_publish_avatar_no_server_support">Tu servidor no soporta la publicación de imágenes de perfil</string>
<string name="private_message">en privado</string>
<string name="private_message_to">en privado para %s</string>
<string name="send_private_message_to">Enviar mensaje privado a %s</string>
<string name="connect">Conectar</string>
<string name="account_already_exists">Esta cuenta ya existe</string>
<string name="next">Siguiente</string>
<string name="server_info_session_established">Sesión establecida</string>
<string name="skip">Omitir</string>
<string name="disable_notifications">Deshabilitar notificaciones</string>
<string name="enable">Habilitar</string>
<string name="conference_requires_password">Esta conversación en grupo requiere contraseña</string>
<string name="enter_password">Introduce la contraseña</string>
<string name="request_presence_updates">Por favor, solicita la actualización de presencia a tu contacto primero.\n\n<small>Esto se usará para determinar qué aplicación de mensajería está usando tu contacto</small>.</string>
<string name="request_now">Solicitar ahora</string>
<string name="ignore">Ignorar</string>
<string name="without_mutual_presence_updates"><b>Aviso:</b> Si envías esto sin actualización de presencia mutua con tu contacto se podrían producir problemas inesperados.\n\n<small>Ve a “Detalles del contacto” para verificar las actualizaciones de presencia.</small></string>
<string name="pref_security_settings">Seguridad</string>
<string name="pref_allow_message_correction">Corrección de mensaje</string>
<string name="pref_allow_message_correction_summary">Permitir a tus contactos editar mensajes previamente enviados</string>
@ -252,6 +286,8 @@
<string name="pref_quiet_hours_summary">Las notificaciones serán silenciadas durante el horario de silencio</string>
<string name="pref_expert_options_other">Otros</string>
<string name="pref_autojoin">Sincronizar marcadores</string>
<string name="pref_autojoin_summary">Unirse a conversaciones en grupo automáticamente si el marcador así lo indica</string>
<string name="toast_message_omemo_fingerprint">Huella digital OMEMO copiada al portapapeles</string>
<string name="conference_banned">Tu entrada a esta conversación en grupo ha sido prohibida</string>
<string name="conference_members_only">Esta conversación en grupo es solo para miembros</string>
<string name="conference_resource_constraint">Limitación de recursos</string>
@ -280,6 +316,7 @@
<string name="account_details">Detalles de la cuenta</string>
<string name="confirm">Confirmar</string>
<string name="try_again">Intentar de nuevo</string>
<string name="pref_keep_foreground_service">Servicio en primer plano</string>
<string name="pref_keep_foreground_service_summary">Mantener el servicio en primer plano previene que el sistema cierre la conexión</string>
<string name="pref_create_backup">Crear una copia de respaldo</string>
<string name="pref_create_backup_summary">Los ficheros de respaldo serán almacenados en %s</string>
@ -296,17 +333,27 @@
<string name="file">archivo</string>
<string name="open_x_file">Abrir %s</string>
<string name="sending_file">Enviando (%1$d%% completado)</string>
<string name="preparing_file">Preparando para compartir archivo</string>
<string name="x_file_offered_for_download">%s ofrecido para descarga</string>
<string name="cancel_transmission">Cancelar transferencia</string>
<string name="file_transmission_failed">no se ha podido compartir el archivo</string>
<string name="file_transmission_cancelled">transferencia del fichero cancelada</string>
<string name="file_deleted">Archivo eliminado</string>
<string name="no_application_found_to_open_file">No se ha encontrado ninguna aplicación para abrir el archivo</string>
<string name="no_application_found_to_open_link">No se ha encontrado aplicación para abrir el link</string>
<string name="no_application_found_to_view_contact">No se ha encontrado aplicación para ver el contacto</string>
<string name="pref_show_dynamic_tags">Etiquetas dinámicas</string>
<string name="pref_show_dynamic_tags_summary">Mostrar información en forma de etiquetas debajo de los contactos</string>
<string name="enable_notifications">Habilitar notificaciones</string>
<string name="no_conference_server_found">No se ha encontrado el servidor de la conversación en grupo</string>
<string name="conference_creation_failed">No se ha podido crear la conversación en grupo</string>
<string name="account_image_description">Imagen de perfil</string>
<string name="copy_omemo_clipboard_description">Copiar huella digital OMEMO al portapapeles</string>
<string name="regenerate_omemo_key">Regenerar clave OMEMO</string>
<string name="clear_other_devices">Limpiar dispositivos</string>
<string name="clear_other_devices_desc">¿Estás seguro de que quieres limpiar todos los otros dispositivos del anuncio OMEMO? La próxima vez que tus dispositivos conecten, tendrán que volver a anunciarse, pero podrían no recibir los mensajes enviados mientras tanto.</string>
<string name="error_no_keys_to_trust_server_error">No hay claves disponibles para este contacto.\nNo se ha podido obtener nuevas claves del servidor. ¿Es posible que haya algún problema con el servidor de tu contacto?</string>
<string name="error_no_keys_to_trust_presence">No hay claves disponibles para este contacto.\nAsegúrate que tenéis actualizaciones de presencia mutua. </string>
<string name="error_trustkeys_title">Se produjo un error</string>
<string name="fetching_history_from_server">Buscando historial en el servidor</string>
<string name="no_more_history_on_server">No hay más historial en el servidor</string>
@ -316,6 +363,7 @@
<string name="change_password">Cambiar contraseña</string>
<string name="current_password">Contraseña actual</string>
<string name="new_password">Nueva contraseña</string>
<string name="password_should_not_be_empty">La contraseña no puede ser vacía</string>
<string name="enable_all_accounts">Habilitar todas las cuentas</string>
<string name="disable_all_accounts">Deshabilitar todas las cuentas</string>
<string name="perform_action_with">Realizar acción con</string>
@ -335,6 +383,7 @@
<string name="could_not_change_affiliation">No se puede cambiar la afiliación de %s</string>
<string name="ban_from_conference">Prohibir entrada en la conversación</string>
<string name="ban_from_channel">Prohibir entrada al canal</string>
<string name="removing_from_public_conference">Estás intentando eliminar a %s de un canal público. La única manera de hacerlo es prohibir su entrada para siempre. </string>
<string name="ban_now">Prohibir ahora</string>
<string name="could_not_change_role">No se puede cambiar el rol de %s</string>
<string name="conference_options">Configuración de conversación en grupo privada</string>
@ -373,6 +422,7 @@
<string name="pref_chat_states_summary">Permitir a tus contactos saber cuando estás escribiendo un mensaje</string>
<string name="send_location">Enviar ubicación</string>
<string name="show_location">Mostrar ubicación</string>
<string name="no_application_found_to_display_location">No se ha encontrado ninguna aplicación para mostrar la ubicación</string>
<string name="location">Ubicación</string>
<string name="title_undo_swipe_out_conversation">Conversación cerrada</string>
<string name="title_undo_swipe_out_group_chat">Dejar la conversación en grupo</string>
@ -389,6 +439,7 @@
<item quantity="one">%d certificado eliminado</item>
<item quantity="other">%d certificados eliminados</item>
</plurals>
<string name="pref_quick_action_summary">Cambiar el botón de “Enviar” por el botón de acción rápida</string>
<string name="pref_quick_action">Acción rápida</string>
<string name="none">Ninguna</string>
<string name="recently_used">Usada más recientemente</string>
@ -396,6 +447,7 @@
<string name="search_contacts">Buscar contactos</string>
<string name="search_bookmarks">Buscar marcadores</string>
<string name="send_private_message">Enviar mensaje privado</string>
<string name="user_has_left_conference">%1$s ha dejado la conversación</string>
<string name="username">Usuario</string>
<string name="username_hint">Usuario</string>
<string name="invalid_username">Esto no es un usuario válido</string>
@ -405,6 +457,7 @@
<string name="download_failed_could_not_write_file">Falló la descarga: No se puede escribir el fichero</string>
<string name="account_status_tor_unavailable">Red Tor no disponible.</string>
<string name="account_status_bind_failure">Fallo de enlace</string>
<string name="account_status_host_unknown">El servidor no es responsable de este dominio</string>
<string name="server_info_broken">Error</string>
<string name="pref_presence_settings">Disponibilidad</string>
<string name="pref_away_when_screen_off">Ausente con pantalla apagada</string>
@ -417,11 +470,15 @@
<string name="pref_show_connection_options_summary">Mostrar el hostname y el puerto cuando se está creando una cuenta</string>
<string name="hostname_example">xmpp.ejemplo.com</string>
<string name="action_add_account_with_certificate">Añadir cuenta con certificado</string>
<string name="unable_to_parse_certificate">No se ha podido leer el certificado</string>
<string name="authenticate_with_certificate">Dejar vacío para autenticar certificado w/ </string>
<string name="mam_prefs">Preferencias de archivado</string>
<string name="server_side_mam_prefs">Preferencias de archivado en servidor</string>
<string name="fetching_mam_prefs">Buscando preferencias de archivado. Por favor, espera...</string>
<string name="unable_to_fetch_mam_prefs">No se ha podido conseguir las preferencias de archivado</string>
<string name="captcha_required">Captcha requerido</string>
<string name="captcha_hint">Introduce el texto de la imagen de arriba</string>
<string name="certificate_chain_is_not_trusted">El certificado no es de confianza</string>
<string name="jid_does_not_match_certificate">La dirección XMPP no coincide con el certificado</string>
<string name="action_renew_certificate">Renovar certificado</string>
<string name="error_fetching_omemo_key">¡Error buscando clave OMEMO!</string>
@ -432,6 +489,7 @@
<string name="pref_use_tor_summary">Todas las conexiones se realizan a través de la red TOR. Requiere Orbot</string>
<string name="account_settings_hostname">Hostname</string>
<string name="account_settings_port">Puerto</string>
<string name="hostname_or_onion">Server- or .onion-address</string>
<string name="not_a_valid_port">Éste no es un número de puerto válido</string>
<string name="not_valid_hostname">Éste no es un hostame válido</string>
<string name="connected_accounts">%1$d de %2$d cuentas conectadas</string>
@ -440,7 +498,14 @@
<item quantity="other">%d mensajes</item>
</plurals>
<string name="load_more_messages">Cargar más mensajes</string>
<string name="shared_file_with_x">Archivo compartido con %s</string>
<string name="shared_image_with_x">Imagen compartida con %s</string>
<string name="shared_images_with_x">Imágenes compartidas con %s</string>
<string name="shared_text_with_x">Texto compartido con %s</string>
<string name="no_storage_permission">Permitir a Conversations acceder al almacenamiento externo</string>
<string name="no_camera_permission">Permitir a Conversations acceder a la cámara</string>
<string name="sync_with_contacts">Sincronizar contactos</string>
<string name="sync_with_contacts_long">Conversations quiere permisos para acceder a tus contactos y cruzarlos con tu lista de contactos de XMPP para mostrar sus nombres completos y sus fotos de perfil.\n\Solo leerá tus contactos y los cruzará localmente sin subirlos a tu servidor.</string>
<string name="sync_with_contacts_quicksy"><![CDATA[Quicksy necesita acceso a los números de teléfonos de tu agenda de contactos para hacerte sugerencias de posibles contactos que ya estén en Quicksy.<br><br>No guardaremos una copia de estos números de teléfono.\n\nPara más información puedes leer nuestra política de privacidad<a href="https://quicksy.im/#privacy">.<br><br>El sistema te preguntará ahora para conceder los permisos de acceso a tus contactos del móvil.]]></string>
<string name="notify_on_all_messages">Notificar para todos los mensajes</string>
<string name="notify_only_when_highlighted">Notificar solo cuando eres mencionado</string>
@ -794,7 +859,6 @@
<string name="rtp_state_ending_call">Terminar llamada</string>
<string name="answer_call">Contestar</string>
<string name="dismiss_call">Descartar</string>
<string name="rtp_state_finding_device">Localizando dispositivos</string>
<string name="rtp_state_ringing">Llamando</string>
<string name="rtp_state_declined_or_busy">Ocupado</string>
<string name="rtp_state_retracted">Llamada rechazada</string>

View File

@ -6,7 +6,7 @@
<string name="action_account">Gérer le compte</string>
<string name="action_end_conversation">Fermer cette conversation</string>
<string name="action_contact_details">Détails du contact</string>
<string name="action_muc_details">Détails du salon de discussion</string>
<string name="action_muc_details">Détails du groupe</string>
<string name="channel_details">Détails du canal</string>
<string name="action_secure">Conversation sécurisée</string>
<string name="action_add_account">Ajouter un compte</string>
@ -21,7 +21,7 @@
<string name="action_unblock_participant">Débloquer le participant</string>
<string name="title_activity_manage_accounts">Gestion des comptes</string>
<string name="title_activity_settings">Paramètres</string>
<string name="title_activity_sharewith">Partager avec Conversation</string>
<string name="title_activity_sharewith">Partager avec Conversations</string>
<string name="title_activity_start_conversation">Démarrer une conversation</string>
<string name="title_activity_choose_contact">Choisir un contact</string>
<string name="title_activity_choose_contacts">Choisir les contacts</string>
@ -32,7 +32,7 @@
<string name="minutes_ago">Il y a %d minutes</string>
<string name="x_unread_conversations">%d conversations non lues</string>
<string name="sending">Envoi…</string>
<string name="message_decrypting">Déchiffrement du message. Veuillez patienter...</string>
<string name="message_decrypting">Déchiffrement du message. Veuillez patienter</string>
<string name="pgp_message">Message chiffré avec OpenPGP</string>
<string name="nick_in_use">Cet identifiant est déjà utilisé</string>
<string name="invalid_muc_nick">Identifiant non valide</string>
@ -41,14 +41,14 @@
<string name="moderator">Modérateur</string>
<string name="participant">Participant</string>
<string name="visitor">Visiteur</string>
<string name="remove_contact_text">Voulez-vous supprimer %s de votre liste de contacts ? Les conversations associées à ce contact ne seront pas supprimées.</string>
<string name="block_contact_text">Voulez-vous bloquer %s pour l\'empêcher de vous envoyer des messages ?</string>
<string name="unblock_contact_text">Voulez-vous débloquer %s et lui permettre de vous envoyer des messages ?</string>
<string name="block_domain_text">Bloquer tous les contacts de %s ?</string>
<string name="unblock_domain_text">Débloquer tous les contacts de %s ?</string>
<string name="remove_contact_text">Voulez-vous supprimer %s de votre liste de contacts? Les conversations associées à ce contact ne seront pas supprimées.</string>
<string name="block_contact_text">Voulez-vous bloquer %s pour l\'empêcher de vous envoyer des messages?</string>
<string name="unblock_contact_text">Voulez-vous débloquer %s et lui permettre de vous envoyer des messages?</string>
<string name="block_domain_text">Bloquer tous les contacts de %s?</string>
<string name="unblock_domain_text">Débloquer tous les contacts de %s?</string>
<string name="contact_blocked">Contact bloqué</string>
<string name="blocked">Bloqué</string>
<string name="remove_bookmark_text">Voulez-vous retirer %s des favoris ? La conversation associée à ce favori ne sera pas supprimée.</string>
<string name="remove_bookmark_text">Voulez-vous retirer %s des favoris? La conversation associée à ce favori ne sera pas supprimée.</string>
<string name="register_account">Créer un nouveau compte sur le serveur</string>
<string name="change_password_on_server">Changer de mot de passe sur le serveur</string>
<string name="share_with">Partager avec…</string>
@ -74,17 +74,17 @@
<string name="problem_connecting_to_accounts">Impossible de se connecter aux comptes.</string>
<string name="touch_to_fix">Appuyez pour gérer vos comptes.</string>
<string name="attach_file">Joindre un fichier</string>
<string name="not_in_roster">Ajouter ce contact manquant à votre liste de contact ?</string>
<string name="not_in_roster">Ajouter ce contact manquant à votre liste de contact?</string>
<string name="add_contact">Ajouter un contact</string>
<string name="send_failed">Échec de l\'envoi</string>
<string name="preparing_image">Préparation pour lenvoi de l\'image</string>
<string name="preparing_images">Préparation pour l\'envoi des images</string>
<string name="sharing_files_please_wait">Partage des fichiers. Veuillez patienter...</string>
<string name="sharing_files_please_wait">Partage des fichiers. Veuillez patienter</string>
<string name="action_clear_history">Vider l\'historique</string>
<string name="clear_conversation_history">Vider l\'historique de la conversation</string>
<string name="clear_histor_msg">Êtes-vous sûr de vouloir supprimer tous les messages de cette conversation ?\n\n <b>Avertissement :</b> Cela ne supprimera pas les copies des messages qui sont stockés sur d\'autres appareils ou serveurs.</string>
<string name="clear_histor_msg">Êtes-vous sûr de vouloir supprimer tous les messages de cette conversation?\n\n <b>Avertissement:</b> Cela ne supprimera pas les copies des messages qui sont stockés sur d\'autres appareils ou serveurs.</string>
<string name="delete_file_dialog">Supprimer le fichier</string>
<string name="delete_file_dialog_msg">Êtes-vous sûr de vouloir supprimer ce fichier ?\n\n <b>Avertissement :</b> Cela ne supprimera pas les copies de ce fichier qui sont stockés sur d\'autres appareils ou serveurs.</string>
<string name="delete_file_dialog_msg">Êtes-vous sûr de vouloir supprimer ce fichier?\n\n <b>Avertissement:</b> Cela ne supprimera pas les copies de ce fichier qui sont stockés sur d\'autres appareils ou serveurs.</string>
<string name="also_end_conversation">Fermez cette conversation après</string>
<string name="choose_presence">Choisir l\'appareil</string>
<string name="send_unencrypted_message">Envoyer un message en clair</string>
@ -95,7 +95,7 @@
<string name="send_pgp_message">Envoyer un message chiffré avec OpenPGP</string>
<string name="your_nick_has_been_changed">Votre identifiant a été changé</string>
<string name="send_unencrypted">Envoyer en clair</string>
<string name="decryption_failed">Echec du déchiffrement. Avez-vous la bonne clef privée ?</string>
<string name="decryption_failed">Échec du déchiffrement. Avez-vous la bonne clé privée?</string>
<string name="openkeychain_required">OpenKeychain</string>
<string name="openkeychain_required_long">Conversations utilise <b>OpenKeychain</b> pour chiffrer et déchiffrer les messages et pour gérer vos clés publiques.\n\nOpenKeychain est sous licence GPLv3 et est disponible sur F-Droid et Google Play.\n\n<small>(Veuillez redémarrer Conversations après l\'installation de l\'application.)</small></string>
<string name="restart">Redémarrer</string>
@ -103,10 +103,10 @@
<string name="openkeychain_not_installed">Veuillez installer OpenKeychain</string>
<string name="offering">Proposition…</string>
<string name="waiting">Patientez…</string>
<string name="no_pgp_key">Aucune clef OpenPGP trouvée.</string>
<string name="contact_has_no_pgp_key">Impossible de chiffrer vos messages car votre contact n\'a pas communiqué sa clef publique.\n\n<small>Demandez-lui de configurer OpenPGP.</small></string>
<string name="no_pgp_keys">Aucune clef OpenPGP n\'a été trouvée.</string>
<string name="contacts_have_no_pgp_keys">Impossible de chiffrer votre message car vos contacts ne communiquent pas leur clef publique.\n\n<small>Demandez-leur de configurer OpenPGP.</small></string>
<string name="no_pgp_key">Aucune clé OpenPGP trouvée.</string>
<string name="contact_has_no_pgp_key">Impossible de chiffrer vos messages car votre contact n\'a pas communiqué sa clé publique.\n\n<small>Demandez-lui de configurer OpenPGP.</small></string>
<string name="no_pgp_keys">Aucune clé OpenPGP n\'a été trouvée.</string>
<string name="contacts_have_no_pgp_keys">Impossible de chiffrer votre message car vos contacts ne communiquent pas leur clé publique.\n\n<small>Demandez-leur de configurer OpenPGP.</small></string>
<string name="pref_general">Général</string>
<string name="pref_accept_files">Accepter les fichiers</string>
<string name="pref_accept_files_summary">Accepter automatiquement les fichiers plus petits que…</string>
@ -129,7 +129,7 @@
<string name="pref_confirm_messages_summary">Informer vos contacts quand vous avez reçu et lu leurs messages</string>
<string name="pref_ui_options">Interface</string>
<string name="openpgp_error">OpenKeychain a signalé une erreur.</string>
<string name="bad_key_for_encryption">Mauvaise clef pour le chiffrement.</string>
<string name="bad_key_for_encryption">Mauvaise clé pour le chiffrement.</string>
<string name="accept">Accepter</string>
<string name="error">Une erreur s\'est produite</string>
<string name="recording_error">Erreur</string>
@ -143,12 +143,12 @@
<string name="error_not_an_image_file">Le fichier choisi n\'est pas une image</string>
<string name="error_compressing_image">Impossible de convertir l\'image</string>
<string name="error_file_not_found">Impossible de trouver le fichier</string>
<string name="error_io_exception">Erreur générale d\'E/S. Avez-vous encore de l\'espace libre ?</string>
<string name="error_io_exception">Erreur générale d\'E/S. Avez-vous encore de l\'espace libre?</string>
<string name="error_security_exception_during_image_copy">L\'application utilisée ne donne pas la permission de lire l\'image.\n\n<small>Utilisez une autre application pour choisir une image.</small></string>
<string name="account_status_unknown">Inconnu</string>
<string name="account_status_disabled">Désactivé temporairement</string>
<string name="account_status_online">En ligne</string>
<string name="account_status_connecting">Connexion\u2026</string>
<string name="account_status_connecting">Connexion</string>
<string name="account_status_offline">Hors-ligne</string>
<string name="account_status_unauthorized">Non autorisé</string>
<string name="account_status_not_found">Impossible de trouver le serveur</string>
@ -158,7 +158,7 @@
<string name="account_status_regis_success">Inscription réussie</string>
<string name="account_status_regis_not_sup">Inscription non supportée par le serveur</string>
<string name="account_status_regis_invalid_token">Jeton dinscription invalide</string>
<string name="account_status_tls_error">La négociation TLS a echoué</string>
<string name="account_status_tls_error">La négociation TLS a échoué</string>
<string name="account_status_policy_violation">Violation de politique</string>
<string name="account_status_incompatible_server">Serveur incompatible</string>
<string name="account_status_stream_error">Erreur de flux</string>
@ -170,12 +170,12 @@
<string name="mgmt_account_delete">Supprimer</string>
<string name="mgmt_account_disable">Désactiver temporairement</string>
<string name="mgmt_account_publish_avatar">Publier un avatar</string>
<string name="mgmt_account_publish_pgp">Publier la clef publique OpenPGP</string>
<string name="unpublish_pgp">Supprimer la clef publique OpenPGP</string>
<string name="unpublish_pgp_message">Êtes vous sûr de vouloir supprimer votre clef publique OpenPGP de votre annonce de présence ?\nVos contacts ne pourront plus vous envoyer de message chiffrés avec OpenPGP.</string>
<string name="mgmt_account_publish_pgp">Publier la clé publique OpenPGP</string>
<string name="unpublish_pgp">Supprimer la clé publique OpenPGP</string>
<string name="unpublish_pgp_message">Êtes-vous sûr de vouloir supprimer votre clé publique OpenPGP de votre annonce de présence?\nVos contacts ne pourront plus vous envoyer de message chiffrés avec OpenPGP.</string>
<string name="openpgp_has_been_published">Clé publique OpenPGP publiée</string>
<string name="mgmt_account_enable">Activer</string>
<string name="mgmt_account_are_you_sure">Êtes-vous sûr ?</string>
<string name="mgmt_account_are_you_sure">Êtes-vous sûr?</string>
<string name="mgmt_account_delete_confirm_text">Supprimer votre compte effacera l\'historique de vos conversations</string>
<string name="attach_record_voice">Enregistrer un son</string>
<string name="account_settings_jabber_id">Adresse XMPP</string>
@ -184,21 +184,21 @@
<string name="password">Mot de passe</string>
<string name="invalid_jid">Ce n\'est pas une adresse XMPP valide</string>
<string name="error_out_of_memory">Plus de mémoire disponible. L\'image est trop volumineuse.</string>
<string name="add_phone_book_text">Voulez-vous ajouter %s à votre carnet d\'adresses ?</string>
<string name="add_phone_book_text">Voulez-vous ajouter %s à votre carnet d\'adresses?</string>
<string name="server_info_show_more">Infos sur le serveur</string>
<string name="server_info_mam">XEP-0313 : MAM</string>
<string name="server_info_carbon_messages">XEP-0280 : Copies carbone</string>
<string name="server_info_csi">XEP-0352 : Indication statut client</string>
<string name="server_info_blocking">XEP-0191 : Commande de bloquage</string>
<string name="server_info_roster_version">XEP-0237 : Révision contacts</string>
<string name="server_info_stream_management">XEP-0198 : Gestion des flux</string>
<string name="server_info_external_service_discovery">XEP-0215: Découverte de service externe</string>
<string name="server_info_pep">XEP-0163 : PEP (Avatars / OMEMO)</string>
<string name="server_info_http_upload">XEP-0363 : Envoi de fichiers via HTTP</string>
<string name="server_info_push">XEP-0357 : Notifications Push</string>
<string name="server_info_available">supporté</string>
<string name="server_info_unavailable">non supporté</string>
<string name="missing_public_keys">Annonce de clef publique manquante</string>
<string name="server_info_mam">XEP-0313: MAM</string>
<string name="server_info_carbon_messages">XEP-0280: Copies carbone</string>
<string name="server_info_csi">XEP-0352: Indication statut client</string>
<string name="server_info_blocking">XEP-0191: Commande de blocage</string>
<string name="server_info_roster_version">XEP-0237: Révision contacts</string>
<string name="server_info_stream_management">XEP-0198: Gestion des flux</string>
<string name="server_info_external_service_discovery">XEP-0215: Découverte de service externe</string>
<string name="server_info_pep">XEP-0163: PEP (Avatars / OMEMO)</string>
<string name="server_info_http_upload">XEP-0363: Envoi de fichiers via HTTP</string>
<string name="server_info_push">XEP-0357: Notifications Push</string>
<string name="server_info_available">supportée</string>
<string name="server_info_unavailable">non supportée</string>
<string name="missing_public_keys">Annonce de clé publique manquante</string>
<string name="last_seen_now">en ligne à l\'instant</string>
<string name="last_seen_min">en ligne il y a 1 minute</string>
<string name="last_seen_mins">en ligne il y a %d minutes</string>
@ -208,14 +208,14 @@
<string name="last_seen_days">en ligne il y a %d jours</string>
<string name="install_openkeychain">Message chiffré. Veuillez installer OpenKeychain pour le déchiffrer.</string>
<string name="openpgp_messages_found">Nouveaux messages chiffrés avec OpenPGP détectés.</string>
<string name="openpgp_key_id">ID Clef OpenPGP</string>
<string name="openpgp_key_id">ID de clé OpenPGP</string>
<string name="omemo_fingerprint">Empreinte OMEMO</string>
<string name="omemo_fingerprint_x509">v\\Empreinte OMEMO</string>
<string name="omemo_fingerprint_selected_message">Empreinte OMEMO du message</string>
<string name="omemo_fingerprint_x509_selected_message">v\\Empreinte OMEMO du message</string>
<string name="other_devices">Autres appareils</string>
<string name="trust_omemo_fingerprints">Faire confiance aux empreintes OMEMO</string>
<string name="fetching_keys">Récupération des clefs...</string>
<string name="fetching_keys">Récupération des clés…</string>
<string name="done">Terminé</string>
<string name="decrypt">Déchiffrer</string>
<string name="bookmarks">Favoris</string>
@ -229,19 +229,19 @@
<string name="select">Sélectionner</string>
<string name="contact_already_exists">Le contact existe déjà</string>
<string name="join">Rejoindre</string>
<string name="channel_full_jid_example">channel@conference.example.com/nick</string>
<string name="channel_bare_jid_example">channel@conference.example.com</string>
<string name="channel_full_jid_example">canal@conference.example.com/surnom</string>
<string name="channel_bare_jid_example">canal@conference.example.com</string>
<string name="save_as_bookmark">Enregistrer comme favori</string>
<string name="delete_bookmark">Supprimer le favori</string>
<string name="destroy_room">Détruire le salon</string>
<string name="destroy_room">Détruire le groupe</string>
<string name="destroy_channel">Détruire le canal</string>
<string name="destroy_room_dialog">Voulez-vous vraiment détruire ce salon ?\n\n<b>Avertissement:</b> le salon sera complètement supprimée du serveur.</string>
<string name="destroy_channel_dialog">Êtes-vous sûr de vouloir détruire ce canal public? \ On \ <b>Avertissement:</b> le canal sera complètement supprimé du serveur.</string>
<string name="could_not_destroy_room">Impossible de détruire le salon</string>
<string name="destroy_room_dialog">Voulez-vous vraiment détruire ce groupe?\n\n<b>Avertissement:</b> le groupe sera complètement supprimé du serveur.</string>
<string name="destroy_channel_dialog">Êtes-vous sûr de vouloir détruire ce canal public? \ On \ <b>Avertissement:</b> le canal sera complètement supprimé du serveur.</string>
<string name="could_not_destroy_room">Impossible de détruire le groupe</string>
<string name="could_not_destroy_channel">Impossible de détruire le canal</string>
<string name="action_edit_subject">Modifier le sujet du salon</string>
<string name="action_edit_subject">Modifier le sujet du groupe</string>
<string name="topic">Sujet</string>
<string name="joining_conference">Rejoindre la salon</string>
<string name="joining_conference">Rejoindre le groupe</string>
<string name="leave">Partir</string>
<string name="contact_added_you">Votre correspondant vous a ajouté dans sa liste de contacts</string>
<string name="add_back">Ajouter en retour</string>
@ -267,12 +267,12 @@
<string name="skip">Passer</string>
<string name="disable_notifications">Désactiver les notifications</string>
<string name="enable">Activer</string>
<string name="conference_requires_password">Le salon requière un mot de passe</string>
<string name="conference_requires_password">Le groupe requiert un mot de passe</string>
<string name="enter_password">Entrer le mot de passe</string>
<string name="request_presence_updates">Veuillez demander à votre contact de partager ses mises à jour de disponibilité.\n\n<small>Elles seront utilisées pour déterminer l\'application qu\'il utilise.</small></string>
<string name="request_now">Demander maintenant</string>
<string name="ignore">Ignorer</string>
<string name="without_mutual_presence_updates"><b>Attention :</b> peut poser problème si l\'un des deux correspondants n\'a pas activé les mises à jour de disponibilité.\n\n<small>Vérifiez dans \"Détails du contact\" que vous y avez bien souscrit.</small></string>
<string name="without_mutual_presence_updates"><b>Attention:</b> peut poser problème si l\'un des deux correspondants n\'a pas activé les mises à jour de disponibilité.\n\n<small>Vérifiez dans «Détails du contact» que vous y avez bien souscrit.</small></string>
<string name="pref_security_settings">Sécurité</string>
<string name="pref_allow_message_correction">Autoriser la correction</string>
<string name="pref_allow_message_correction_summary">Permet à vos contacts d\'éditer leurs messages rétroactivement</string>
@ -286,14 +286,14 @@
<string name="pref_quiet_hours_summary">Les notifications seront muettes pendant les heures tranquilles.</string>
<string name="pref_expert_options_other">Autres</string>
<string name="pref_autojoin">Synchroniser avec les signets</string>
<string name="pref_autojoin_summary">Rejoindre automatiquement les salons marqués en favoris</string>
<string name="pref_autojoin_summary">Rejoindre automatiquement les groupes marqués en favoris</string>
<string name="toast_message_omemo_fingerprint">Empreinte OMEMO copiée dans le presse-papier</string>
<string name="conference_banned">Vous êtes bannis de ce salon</string>
<string name="conference_members_only">Ce salon est réservé aux membres</string>
<string name="conference_banned">Vous êtes bannis de ce groupe</string>
<string name="conference_members_only">Ce groupe est réservé aux membres</string>
<string name="conference_resource_constraint">Contrainte de ressource</string>
<string name="conference_kicked">Vous avez été éjecté de ce salon</string>
<string name="conference_shutdown">Le salon a été fermé</string>
<string name="conference_unknown_error">Vous n\'appartenez plus à ce salon</string>
<string name="conference_kicked">Vous avez été éjecté de ce groupe</string>
<string name="conference_shutdown">Le groupe a été fermé</string>
<string name="conference_unknown_error">Vous n\'appartenez plus à ce groupe</string>
<string name="using_account">avec le compte %s</string>
<string name="hosted_on">hébergé sur %s</string>
<string name="checking_x">Vérification de %s sur l\'hôte HTTP</string>
@ -326,7 +326,7 @@
<string name="restoring_backup">Restauration de la sauvegarde</string>
<string name="notification_restored_backup_title">Votre sauvegarde a été restaurée</string>
<string name="notification_restored_backup_subtitle">N\'oubliez pas d\'activer le compte.</string>
<string name="choose_file">Choix du fichier</string>
<string name="choose_file">Choisir un fichier</string>
<string name="receiving_x_file">Réception %1$s (%2$d%% complété)</string>
<string name="download_x_file">Télécharger %s</string>
<string name="delete_x_file">Effacer %s</string>
@ -345,17 +345,20 @@
<string name="pref_show_dynamic_tags">Tags dynamiques</string>
<string name="pref_show_dynamic_tags_summary">Afficher des tags en lecture seule en dessous des contacts.</string>
<string name="enable_notifications">Activer les notifications</string>
<string name="no_conference_server_found">Serveur de salon non trouvé</string>
<string name="conference_creation_failed">Impossible de créer le salon</string>
<string name="no_conference_server_found">Serveur de groupe non trouvé</string>
<string name="conference_creation_failed">Impossible de créer le groupe</string>
<string name="account_image_description">Avatar du compte</string>
<string name="copy_omemo_clipboard_description">Copier l\'empreinte OMEMO dans le presse-papier</string>
<string name="regenerate_omemo_key">Régénérer l\'empreinte OMEMO</string>
<string name="clear_other_devices">Supprimer les appareils</string>
<string name="clear_other_devices_desc">Êtes-vous sûr de vouloir supprimer les autres appareils de l\'annonce OMEMO? Ils s\'annonceront de nouveau à leur prochaine connexion, mais ils peuvent ne pas recevoir les messages envoyés entre temps.</string>
<string name="error_no_keys_to_trust_server_error">Aucune clé utilisable n\'est disponible pour ce contact. \nImpossible d\'obtenir de nouvelles clés depuis le serveur. Pourrait-il y avoir un problème avec le serveur de votre contact?</string>
<string name="error_no_keys_to_trust_presence">Il n\'y a aucune clé utilisable disponible pour ce contact.\nAssurez-vous d\'avoir un abonnement de présence mutuelle.</string>
<string name="error_trustkeys_title">Une erreur est survenue</string>
<string name="fetching_history_from_server">Récupération de l\'historique sur le serveur</string>
<string name="no_more_history_on_server">Plus d\'historique sur le serveur</string>
<string name="updating">Mise à jour…</string>
<string name="password_changed">Mot de passe modifié !</string>
<string name="password_changed">Mot de passe modifié!</string>
<string name="could_not_change_password">Impossible de changer le mot de passe</string>
<string name="change_password">Changer de mot de passe</string>
<string name="current_password">Mot de passe actuel</string>
@ -375,21 +378,22 @@
<string name="remove_admin_privileges">Révoquer des privilèges d\'administrateur</string>
<string name="grant_owner_privileges">Accorder des privilèges de propriétaire</string>
<string name="remove_owner_privileges">Révoquer les privilèges du propriétaire</string>
<string name="remove_from_room">Supprimer du salon</string>
<string name="remove_from_room">Supprimer du groupe</string>
<string name="remove_from_channel">Supprimer du canal</string>
<string name="could_not_change_affiliation">Impossible de changer l\'affiliation de %s</string>
<string name="ban_from_conference">Bannir du salon</string>
<string name="ban_from_channel">Banni du channel</string>
<string name="ban_from_conference">Bannir du groupe</string>
<string name="ban_from_channel">Bannir du canal</string>
<string name="removing_from_public_conference">Vous essayez de supprimer %s d\'un canal public. La seule façon de le faire est de bannir cet utilisateur pour toujours.</string>
<string name="ban_now">Bannir maintenant</string>
<string name="could_not_change_role">Impossible de changer le rôle de %s</string>
<string name="conference_options">Configuration du salon</string>
<string name="conference_options">Configuration du groupe</string>
<string name="channel_options">Configuration du canal public</string>
<string name="members_only">Privé, membres uniquement</string>
<string name="non_anonymous">Rendre les adresses XMPP visibles à tout le monde</string>
<string name="moderated">Rendre le canal modéré</string>
<string name="you_are_not_participating">Vous ne participez pas</string>
<string name="modified_conference_options">Options du salon modifiées!</string>
<string name="could_not_modify_conference_options">Impossible de modifier les options du salon</string>
<string name="modified_conference_options">Options du groupe modifiées!</string>
<string name="could_not_modify_conference_options">Impossible de modifier les options du groupe</string>
<string name="never">Jamais</string>
<string name="until_further_notice">Jusqu\'à nouvel ordre</string>
<string name="snooze">Répéter les notifications</string>
@ -406,13 +410,13 @@
<string name="pdf_document">document PDF</string>
<string name="apk">Application Android</string>
<string name="vcard">Contact</string>
<string name="avatar_has_been_published">L\'avatar a été publié !</string>
<string name="avatar_has_been_published">L\'avatar a été publié!</string>
<string name="sending_x_file">%s en cours d\'envoi</string>
<string name="offering_x_file">En train de proposer un(e) %s</string>
<string name="hide_offline">Cacher contacts hors-ligne</string>
<string name="contact_is_typing">%s est en train d\'écrire</string>
<string name="contact_is_typing">%s est en train d\'écrire</string>
<string name="contact_has_stopped_typing">%s a arrêté d\'écrire</string>
<string name="contacts_are_typing">%s sont en train d\'écrire...</string>
<string name="contacts_are_typing">%s sont en train d\'écrire</string>
<string name="contacts_have_stopped_typing">%s ont cessé d\'écrire</string>
<string name="pref_chat_states">Notifications d\'écriture</string>
<string name="pref_chat_states_summary">Informer vos contacts quand vous leur écrivez des messages</string>
@ -421,8 +425,8 @@
<string name="no_application_found_to_display_location">Aucune application trouvée pour afficher le lieu</string>
<string name="location">Position</string>
<string name="title_undo_swipe_out_conversation">Conversation fermée</string>
<string name="title_undo_swipe_out_group_chat">Quitter le salon privé</string>
<string name="title_undo_swipe_out_channel">Quitte le channel public</string>
<string name="title_undo_swipe_out_group_chat">Quitter le groupe privé</string>
<string name="title_undo_swipe_out_channel">Quitte le canal public</string>
<string name="pref_dont_trust_system_cas_title">Ne pas utiliser les CAs système</string>
<string name="pref_dont_trust_system_cas_summary">Tous les certificats doivent être approuvés manuellement.</string>
<string name="pref_remove_trusted_certificates_title">Retirer les certificats</string>
@ -435,7 +439,7 @@
<item quantity="one">%d certificat supprimé</item>
<item quantity="other">%d certificats supprimés</item>
</plurals>
<string name="pref_quick_action_summary">Remplacer le bouton \"Envoyer\" par une action rapide</string>
<string name="pref_quick_action_summary">Remplacer le bouton «Envoyer» par une action rapide</string>
<string name="pref_quick_action">Action Rapide</string>
<string name="none">Aucune</string>
<string name="recently_used">Dernière utilisée</string>
@ -443,16 +447,17 @@
<string name="search_contacts"> Rechercher dans les contacts</string>
<string name="search_bookmarks">Rechercher des favoris</string>
<string name="send_private_message">Envoyer un message privé</string>
<string name="user_has_left_conference">%1$s a quitté le salon</string>
<string name="user_has_left_conference">%1$s a quitté le groupe</string>
<string name="username">Identifiant</string>
<string name="username_hint">Identifiant</string>
<string name="invalid_username">Cet identifiant n\'est pas valide</string>
<string name="download_failed_server_not_found">Échec du téléchargement : impossible de trouver le serveur</string>
<string name="download_failed_file_not_found">Échec du téléchargement : impossible de trouver le fichier</string>
<string name="download_failed_could_not_connect">Échec du téléchargement : impossible de se connecter à l\'hôte</string>
<string name="download_failed_could_not_write_file">Échec du téléchargement : Écriture impossible</string>
<string name="download_failed_server_not_found">Échec du téléchargement: impossible de trouver le serveur</string>
<string name="download_failed_file_not_found">Échec du téléchargement: impossible de trouver le fichier</string>
<string name="download_failed_could_not_connect">Échec du téléchargement: impossible de se connecter à l\'hôte</string>
<string name="download_failed_could_not_write_file">Échec du téléchargement: Écriture impossible</string>
<string name="account_status_tor_unavailable">Réseau Tor inaccessible</string>
<string name="account_status_bind_failure">La liaison a échoué</string>
<string name="account_status_host_unknown">Le serveur n\'est pas responsable pour ce domaine</string>
<string name="server_info_broken">Détraqué</string>
<string name="pref_presence_settings">Disponibilité</string>
<string name="pref_away_when_screen_off">Absent quand l\'écran est éteint</string>
@ -469,20 +474,22 @@
<string name="authenticate_with_certificate">Laisser vide pour s\'identifier avec un certificat</string>
<string name="mam_prefs">Paramètres d\'archivage</string>
<string name="server_side_mam_prefs">Paramètres d\'archivage du serveur</string>
<string name="fetching_mam_prefs">Récupération des paramètres d\'archivage en cours...</string>
<string name="fetching_mam_prefs">Récupération des paramètres d\'archivage en cours</string>
<string name="unable_to_fetch_mam_prefs">Impossible d\'obtenir les préférences d\'archivage</string>
<string name="captcha_required">CAPTCHA exigé</string>
<string name="captcha_hint">Entrez le texte de l\'image ci-dessus</string>
<string name="certificate_chain_is_not_trusted">Chaîne de certificats indigne de confiance</string>
<string name="jid_does_not_match_certificate">L\'adresse XMPP ne correspond pas au certificat</string>
<string name="action_renew_certificate">Renouveler le certificat</string>
<string name="error_fetching_omemo_key">Erreur lors de la récupération de la clef OMEMO !</string>
<string name="verified_omemo_key_with_certificate">Clef OMEMO vérifiée avec un certificat !</string>
<string name="device_does_not_support_certificates">Votre appareil ne supporte pas la sélection de certificats client !</string>
<string name="error_fetching_omemo_key">Erreur lors de la récupération de la clé OMEMO!</string>
<string name="verified_omemo_key_with_certificate">Clé OMEMO vérifiée avec un certificat!</string>
<string name="device_does_not_support_certificates">Votre appareil ne supporte pas la sélection de certificats client!</string>
<string name="pref_connection_options">Connexion</string>
<string name="pref_use_tor">Connexion via Tor</string>
<string name="pref_use_tor_summary">Rediriger toutes les connexions via le réseau Tor. Nécessite Orbot.</string>
<string name="account_settings_hostname">Nom d\'hôte</string>
<string name="account_settings_port">Port</string>
<string name="hostname_or_onion">Adresse du serveur (ou .onion)</string>
<string name="not_a_valid_port">Ce numéro de port n\'est pas valide</string>
<string name="not_valid_hostname">Ce nom d\'hôte n\'est pas valide</string>
<string name="connected_accounts">%1$d compte(s) sur %2$d connecté(s)</string>
@ -491,28 +498,41 @@
<item quantity="other">%d messages</item>
</plurals>
<string name="load_more_messages">Charger plus de messages</string>
<string name="shared_file_with_x">Fichier partagé avec %s</string>
<string name="shared_image_with_x">Image partagée avec %s</string>
<string name="shared_images_with_x">Images partagées avec %s</string>
<string name="shared_text_with_x">Texte partagé avec %s</string>
<string name="no_storage_permission">Autoriser Conversations à accéder au stockage externe</string>
<string name="no_camera_permission">Autoriser Conversations à accéder à la caméra</string>
<string name="sync_with_contacts">Synchroniser avec contacts</string>
<string name="sync_with_contacts_long">Conversations souhaite associer vos contacts XMPP avec les contacts de votre appareil, pour utiliser leur nom complet et leur avatar.\n\nConversations va uniquement lire vos contacts et les associer localement, sans les envoyer à votre serveur XMPP.</string>
<string name="sync_with_contacts_quicksy"><![CDATA[Quicksy a besoin d\'accéder aux numéros de téléphone de vos contacts pour vous suggérer des contacts éventuels déjà connectés.<br><br> Nous ne stockerons pas de copie de ces numéros.\n\nPour plus d\'informations, lisez notre <a href="https://quicksy.im/#privacy">politique de confidentialité</a>. <br><br>maintenant être invité à donner la permission d\'accéder à vos contacts.]]></string>
<string name="notify_on_all_messages">Notifier pour tous les messages</string>
<string name="notify_only_when_highlighted">Notifier seulement en cas de mention</string>
<string name="notify_never">Notifications désactivées</string>
<string name="notify_paused">Notifications en pause</string>
<string name="pref_picture_compression">Compression de l\'image</string>
<string name="pref_picture_compression_summary">Remarque: Utiliser «Choisir un fichier» au lieu de «Choisir une image» pour envoyer des images individuelles non compressées sans tenir compte de ce paramètre.</string>
<string name="pref_picture_compression">Compression des images</string>
<string name="pref_picture_compression_summary">Remarque: Utiliser «Choisir un fichier» au lieu de «Choisir une image» pour envoyer des images non compressées.</string>
<string name="always">Toujours</string>
<string name="large_images_only">Grandes images seulement</string>
<string name="battery_optimizations_enabled">Optimisations de batterie activées</string>
<string name="battery_optimizations_enabled_explained">Votre appareil applique d\'importantes optimisations de batterie pour Conversations pouvant entraîner des retards de notifications, voire des pertes de messages.\nIl est recommandé de les désactiver.</string>
<string name="battery_optimizations_enabled_dialog">Votre appareil applique d\'importantes optimisations de batterie pour Conversations pouvant entraîner des retards de notifications, voire des pertes de messages.\nVous allez être invité à les désactiver.</string>
<string name="disable">Désactiver</string>
<string name="selection_too_large">La zone sélectionnée est trop grande</string>
<string name="no_accounts">(Aucun compte activé)</string>
<string name="this_field_is_required">Ce champ est requis</string>
<string name="correct_message">Corriger le message</string>
<string name="send_corrected_message">Envoyer le message corrigé</string>
<string name="no_keys_just_confirm">Vous avez déjà validé l\'empreinte de cette personne pour accorder votre confiance. En sélectionnant «Terminé», vous confirmez simplement que %s fait partie de ce groupe.</string>
<string name="this_account_is_disabled">Vous avez désactivé ce compte</string>
<string name="share_uri_with">Partager l\'URI avec...</string>
<string name="security_error_invalid_file_access">Erreur de sécurité: accès fichier invalide</string>
<string name="no_application_to_share_uri">Aucune application disponible pour partager l\'URI</string>
<string name="share_uri_with">Partager l\'URI avec…</string>
<string name="welcome_text_quicksy"><![CDATA[Quicksy est une version du populaire client XMPP Conversations avec découverte automatique des contacts.<br><br>Vous vous inscrivez avec votre numéro de téléphone et Quicksy va automatiquement, en fonction des numéros de votre carnet dadresses, vous suggérer déventuels contacts.<br><br> en vous inscrivant, vous acceptez notre <a href="https://quicksy.im/#privacy">politique de confidentialité</a>.]]></string>
<string name="agree_and_continue">Accepter et continuer</string>
<string name="your_full_jid_will_be">Votre adresse XMPP complète sera : %s</string>
<string name="magic_create_text">Nous vous guiderons tout au long du processus de création d\'un compte sur conversations.im.¹\nLorsque vous sélectionnerez conversations.im en tant que fournisseur, vous pourrez communiquer avec les utilisateurs d\'autres fournisseurs en leur fournissant votre adresse XMPP complète.</string>
<string name="your_full_jid_will_be">Votre adresse XMPP complète sera: %s</string>
<string name="create_account">Créer un compte</string>
<string name="use_own_provider">Utiliser votre propre fournisseur</string>
<string name="pick_your_username">Choisissez votre nom d\'utilisateur</string>
@ -526,21 +546,26 @@
<string name="presence_dnd">Occupé</string>
<string name="secure_password_generated">Un mot de passe fort a été généré</string>
<string name="device_does_not_support_battery_op">Les optimisations de batterie ne peuvent pas être désactivées sur votre appareil</string>
<string name="registration_please_wait">Échec de l\'inscription : Réessayer plus tard</string>
<string name="registration_password_too_weak">Échec de l\'inscription : le mot de passe n\'est pas assez fort</string>
<string name="registration_please_wait">Échec de l\'inscription: Réessayer plus tard</string>
<string name="registration_password_too_weak">Échec de l\'inscription: le mot de passe n\'est pas assez fort</string>
<string name="choose_participants">Choisir les participants</string>
<string name="creating_conference">Création d\'un salon...</string>
<string name="creating_conference">Création d\'un groupe…</string>
<string name="invite_again">Inviter à nouveau</string>
<string name="gp_disable">Désactiver</string>
<string name="gp_short">Courte</string>
<string name="gp_medium">Moyenne</string>
<string name="gp_long">Longue</string>
<string name="pref_broadcast_last_activity">Partage de l\'utilisation</string>
<string name="pref_broadcast_last_activity_summary">Informer vos contacts lorsque vous utilisez Conversations</string>
<string name="pref_privacy">Confidentialité</string>
<string name="pref_theme_options">Thème</string>
<string name="pref_theme_options_summary">Choisir la palette de couleurs</string>
<string name="pref_theme_automatic">Automatique</string>
<string name="pref_use_green_background">Fond Vert</string>
<string name="pref_theme_light">Clair</string>
<string name="pref_theme_dark">Sombre</string>
<string name="pref_use_green_background">Fond vert</string>
<string name="pref_use_green_background_summary">Utiliser un fond vert pour les messages reçus</string>
<string name="unable_to_connect_to_keychain">Impossible de se connecter à OpenKeyChain</string>
<string name="this_device_is_no_longer_in_use">Cet appareil n\'est plus utilisé</string>
<string name="type_pc">Ordinateur</string>
<string name="type_phone">Smartphone</string>
@ -548,39 +573,51 @@
<string name="type_web">Navigateur Internet</string>
<string name="type_console">Console</string>
<string name="payment_required">Paiement requis</string>
<string name="missing_internet_permission">Autoriser à accéder à internet</string>
<string name="me">Moi</string>
<string name="contact_asks_for_presence_subscription">Le contact demande la notification de présence</string>
<string name="allow">Autoriser</string>
<string name="no_permission_to_access_x">Permission d\'accéder à %s refusée</string>
<string name="remote_server_not_found">Serveur distant non trouvé</string>
<string name="remote_server_timeout">Dépassement du délai du serveur distant</string>
<string name="unable_to_update_account">Impossible de mettre à jour le compte</string>
<string name="report_jid_as_spammer">Signaler cette adresse XMPP comme émettrice de messages indésirables.</string>
<string name="pref_delete_omemo_identities">Effacer les identités OMEMO</string>
<string name="delete_selected_keys">Supprimer les clefs sélectionnées</string>
<string name="pref_delete_omemo_identities_summary">Régénérer vos clés OMEMO. Tous vos contacts devront vous vérifier à nouveau. À n\'utiliser qu\'en dernier recours.</string>
<string name="delete_selected_keys">Supprimer les clés sélectionnées</string>
<string name="error_publish_avatar_offline">Vous devez être connecté pour publier votre avatar.</string>
<string name="show_error_message">Afficher le message d\'erreur</string>
<string name="error_message">Message d\'erreur</string>
<string name="data_saver_enabled">Économiseur de données activé</string>
<string name="data_saver_enabled_explained">Votre système d\'exploitation empêche Conversations daccéder à Internet lorsque l\'application est en arrière plan. Pour recevoir les notifications de nouveaux messages, vous devez autoriser Conversations à accéder au réseau sans restriction quand l\'économiseur de données est activé.\n Conversations tentera de consommer le moins de données possible.</string>
<string name="device_does_not_support_data_saver">Votre appareil ne prend pas en charge la désactivation de l\'Économiseur de données pour Conversations.</string>
<string name="error_unable_to_create_temporary_file">Impossible de créer un fichier temporaire</string>
<string name="this_device_has_been_verified">Cet appareil a été vérifié</string>
<string name="copy_fingerprint">Copier l\'empreinte</string>
<string name="all_omemo_keys_have_been_verified">Vous avez vérifié toutes les clés OMEMO en votre possession</string>
<string name="barcode_does_not_contain_fingerprints_for_this_conversation">Le code-barres ne contient pas d\'empreintes pour cette conversation.</string>
<string name="verified_fingerprints">Empreintes vérifiées</string>
<string name="use_camera_icon_to_scan_barcode">Utilisez l\'appareil photo pour scanner le code-barres d\'un contact</string>
<string name="please_wait_for_keys_to_be_fetched">Veuillez attendre que les clefs soient récupérées</string>
<string name="please_wait_for_keys_to_be_fetched">Veuillez attendre que les clés soient récupérées</string>
<string name="share_as_barcode">Partager par code-barres</string>
<string name="share_as_uri">Partager par URI XMPP</string>
<string name="share_as_http">Partager par lien HTTP</string>
<string name="pref_blind_trust_before_verification">Faire aveuglément confiance avant vérification</string>
<string name="pref_blind_trust_before_verification_summary">Faire automatiquement confiance aux nouveaux appareils des contacts qui n\'ont pas été vérifiés auparavant mais demander une confirmation manuelle à chaque fois qu\'un contact vérifié auparavant utilise un nouvel appareil.</string>
<string name="blindly_trusted_omemo_keys">Les clés OMEMO ont fait l\'objet d\'une confiance aveugle, cela signifie qu\'il pourrait s\'agir de quelqu\'un d\'autre ou que quelqu\'un aurait pu intercepter l\'échange.</string>
<string name="not_trusted">Non approuvée</string>
<string name="invalid_barcode">Code-barres 2D invalide</string>
<string name="pref_clean_cache_summary">Vide le dossier de cache (utilisé par l\'appplication caméra)</string>
<string name="pref_clean_cache">Vider le cache</string>
<string name="pref_clean_private_storage">Vider le stockage privé</string>
<string name="pref_clean_private_storage_summary">Vide le stockage privé, où les fichiers sont conservés (ils peuvent être re-téléchargés depuis le serveur)</string>
<string name="i_followed_this_link_from_a_trusted_source">J\'ai obtenu ce lien d\'une source de confiance</string>
<string name="verifying_omemo_keys_trusted_source">Vous êtes sur le point de vérifier les clefs OMEMO de %1$s en cliquant sur un lien. Cette procédure n\'est sécurisée que si le lien en question n\'a pu être publié que par %2$s et que vous l\'avez obtenu d\'une source digne de confiance.</string>
<string name="verify_omemo_keys">Vérifier les clefs OMEMO</string>
<string name="verifying_omemo_keys_trusted_source">Vous êtes sur le point de vérifier les clés OMEMO de %1$s en cliquant sur un lien. Cette procédure n\'est sécurisée que si le lien en question n\'a pu être publié que par %2$s et que vous l\'avez obtenu d\'une source digne de confiance.</string>
<string name="verify_omemo_keys">Vérifier les clés OMEMO</string>
<string name="show_inactive_devices">Afficher les comptes inactifs</string>
<string name="hide_inactive_devices">Cacher les comptes inactifs</string>
<string name="distrust_omemo_key">Ne plus faire confiance à cet appareil</string>
<string name="distrust_omemo_key_text">Êtes-vous sûr de vouloir retirer la vérification pour cet appareil?\nCet appareil et les messages qui en proviennent seront marqués comme «indignes de confiance».</string>
<plurals name="seconds">
<item quantity="one">%d seconde</item>
<item quantity="other">%d secondes</item>
@ -623,7 +660,9 @@
<string name="sasl_downgrade">Mécanisme SASL dégradé</string>
<string name="account_status_regis_web">Le serveur nécessite une identification sur son site web </string>
<string name="open_website">Ouvrir le site web</string>
<string name="pref_headsup_notifications">Notifications \"pop-up\"</string>
<string name="application_found_to_open_website">Aucune application disponible pour ouvrir le site web</string>
<string name="pref_headsup_notifications">Notifications «pop-up»</string>
<string name="pref_headsup_notifications_summary">Afficher les notifications «pop-up»</string>
<string name="today">Aujourd\'hui</string>
<string name="yesterday">Hier</string>
<string name="pref_validate_hostname">Valider le nom de domaine avec DNSSEC</string>
@ -637,11 +676,11 @@
<string name="private_messages_are_disabled">Les messages privés sont désactivés</string>
<string name="huawei_protected_apps">Applications protégées</string>
<string name="huawei_protected_apps_summary">Pour recevoir les notifications, même lorsque l\'écran est éteint, vous devez ajouter Conversations à la liste des applications protégées.</string>
<string name="mtm_accept_cert">Accepter les certificats inconnus ?</string>
<string name="mtm_accept_cert">Accepter les certificats inconnus?</string>
<string name="mtm_trust_anchor">Le certificat du serveur n\'est pas signé par une Autorité de Certification connue.</string>
<string name="mtm_accept_servername">Accepter un nom de serveur qui ne correspond pas ?</string>
<string name="mtm_hostname_mismatch">Le serveur n\'a pu s\'authentifier en tant que \"%s\". Le certificat est valide uniquement pour :</string>
<string name="mtm_connect_anyway">Désirez-vous quand-même vous connecter ?</string>
<string name="mtm_accept_servername">Accepter un nom de serveur qui ne correspond pas?</string>
<string name="mtm_hostname_mismatch">Le serveur n\'a pu s\'authentifier en tant que « %s». Le certificat est valide uniquement pour:</string>
<string name="mtm_connect_anyway">Désirez-vous quand-même vous connecter?</string>
<string name="mtm_cert_details">Détails du certificat :</string>
<string name="once">Une fois</string>
<string name="qr_code_scanner_needs_access_to_camera">La lecture d\'un QR Code nécessite l\'accès à l\'appareil photo</string>
@ -651,12 +690,14 @@
<string name="edit_status_message">Modifier le message de statut</string>
<string name="disable_encryption">Désactiver le chiffrement</string>
<string name="error_trustkey_general">Conversations n\'est pas capable d\'envoyer un message chiffré à %1$s. Ceci peut être lié au fait que votre contact utilise un serveur obsolète ou un client qui ne gère par OMEMO. </string>
<string name="error_trustkey_device_list">Impossible de récupérer la liste des appareils</string>
<string name="error_trustkey_bundle">Impossible de récupérer les clés de chiffrement</string>
<string name="error_trustkey_hint_mutual">Indication : Dans certains cas, cela peut être résolu en vous ajoutant respectivement dans votre liste de contacts.</string>
<string name="disable_encryption_message">Êtes-vous sûr de vouloir désactiver le chiffrement OMEMO pour cette discussion ?\nCeci permettra à l\'administrateur de votre serveur de lire vos messages, mais cela peut être le seul moyen de communiquer avec des personnes utilisant un vieux client.</string>
<string name="disable_encryption_message">Êtes-vous sûr de vouloir désactiver le chiffrement OMEMO pour cette discussion?\nCeci permettra à l\'administrateur de votre serveur de lire vos messages, mais cela peut être le seul moyen de communiquer avec des personnes utilisant un vieux client.</string>
<string name="disable_now">Désactiver maintenant</string>
<string name="draft">Brouillon :</string>
<string name="draft">Brouillon:</string>
<string name="pref_omemo_setting">Chiffrement OMEMO</string>
<string name="pref_omemo_setting_summary_always">OMEMO sera toujours utilisé pour des discussions à deux ou les salons privés.</string>
<string name="pref_omemo_setting_summary_always">OMEMO sera toujours utilisé pour des discussions à deux ou les groupes privés.</string>
<string name="pref_omemo_setting_summary_default_on">OMEMO sera utilisé par défaut pour les nouvelles discussions.</string>
<string name="pref_omemo_setting_summary_default_off">OMEMO devra être activé manuellement pour chaque nouvelle discussion</string>
<string name="create_shortcut">Créer un raccourci</string>
@ -679,7 +720,9 @@
<string name="title_activity_share_location">Partager la position</string>
<string name="title_activity_show_location">Afficher la position</string>
<string name="share">Partager</string>
<string name="please_wait">Veuillez patienter...</string>
<string name="unable_to_start_recording">Impossible de démarrer l\'enregistrement</string>
<string name="please_wait">Veuillez patienter…</string>
<string name="no_microphone_permission">Autoriser Conversations à accéder au microphone</string>
<string name="search_messages">Rechercher dans les messages</string>
<string name="gif">GIF</string>
<string name="view_conversation">Voir la conversation</string>
@ -690,15 +733,16 @@
<string name="p1_s3_filetransfer">Partage de fichier HTTP pour S3</string>
<string name="pref_start_search">Recherche directe</string>
<string name="pref_start_search_summary">Sur l\'écran de démarrage de Conversation, afficher le clavier et placer le curseur sur le champ recherche</string>
<string name="group_chat_avatar">Avatar du salon</string>
<string name="host_does_not_support_group_chat_avatars">Le serveur ne prend pas en charge les avatars pour les salons</string>
<string name="only_the_owner_can_change_group_chat_avatar">Seul le propriétaire peut changer l\'avatar d\'un salon</string>
<string name="group_chat_avatar">Avatar du groupe</string>
<string name="host_does_not_support_group_chat_avatars">Le serveur ne prend pas en charge les avatars pour les groupes</string>
<string name="only_the_owner_can_change_group_chat_avatar">Seul le propriétaire peut changer l\'avatar d\'un groupe</string>
<string name="contact_name">Nom du contact</string>
<string name="nickname">Surnom</string>
<string name="group_chat_name">Nom</string>
<string name="providing_a_name_is_optional">Fournir un nom est facultatif</string>
<string name="create_dialog_group_chat_name">Nom du salon</string>
<string name="conference_destroyed">Ce salon a été supprimé</string>
<string name="create_dialog_group_chat_name">Nom du groupe</string>
<string name="conference_destroyed">Ce groupe a été supprimé</string>
<string name="unable_to_save_recording">Impossible de sauvegarder l\'enregistrement</string>
<string name="foreground_service_channel_name">Service au premier plan</string>
<string name="foreground_service_channel_description">Cette catégorie de notification est utilisée pour afficher une notification permanente indiquant que Conversations est en cours.</string>
<string name="notification_group_status_information">Information sur l\'état</string>
@ -719,7 +763,7 @@
<string name="group_chat_members">Participants</string>
<string name="media_browser">Navigateur de média</string>
<string name="security_violation_not_attaching_file">Fichier omis en raison d\'une violation de la sécurité.</string>
<string name="pref_video_compression">Qualité de la vidéo</string>
<string name="pref_video_compression">Qualité des vidéos</string>
<string name="pref_video_compression_summary">Une qualité inférieure signifie des fichiers plus petits</string>
<string name="video_360p">Moyenne (360p)</string>
<string name="video_720p">Haute (720p)</string>
@ -731,7 +775,7 @@
<string name="phone_number">Numéro de téléphone</string>
<string name="verify_your_phone_number">Vérifier votre numéro de téléphone</string>
<string name="enter_country_code_and_phone_number">Quicksy va envoyer un message SMS (des frais opérateurs sont possibles) pour vérifier votre numéro de téléphone. Entrez votre code pays et votre No de téléphone.</string>
<string name="we_will_be_verifying"><![CDATA[Nous vérifierons le numéro de téléphone<br/><br/><b>%s</b><br/><br/>. Est-ce correct ou souhaitez-vous modifier le numéro?]]></string>
<string name="we_will_be_verifying"><![CDATA[Nous vérifierons le numéro de téléphone<br/><br/><b>%s</b><br/><br/>. Est-ce correct ou souhaitez-vous modifier le numéro?]]></string>
<string name="not_a_valid_phone_number">%s n\'est pas un numéro de téléphone valide.</string>
<string name="please_enter_your_phone_number">Veuillez saisir votre numéro de téléphone.</string>
<string name="search_countries">Recherche de pays</string>
@ -745,15 +789,18 @@
<string name="back">retour</string>
<string name="possible_pin">Collage possible des broches possibles du presse-papiers.</string>
<string name="please_enter_pin">Veuillez entrer votre code PIN à 6 chiffres.</string>
<string name="abort_registration_procedure">Êtes-vous sûr de vouloir quitter la procédure d\'inscription ?</string>
<string name="abort_registration_procedure">Êtes-vous sûr de vouloir quitter la procédure d\'inscription?</string>
<string name="yes">Oui</string>
<string name="no">Non</string>
<string name="verifying">Vérification....</string>
<string name="verifying">Vérification</string>
<string name="requesting_sms">Demander un SMS…</string>
<string name="incorrect_pin">Le code PIN que vous avez entré est incorrect.</string>
<string name="pin_expired">Le code PIN que nous vous avons envoyé a expiré.</string>
<string name="unknown_api_error_network">Erreur réseau inconnue.</string>
<string name="unknown_api_error_response">Réponse inconnue du serveur.</string>
<string name="unable_to_connect_to_server">Impossible de se connecter au serveur.</string>
<string name="unable_to_establish_secure_connection">Impossible d\'établir une connexion sécurisée.</string>
<string name="unable_to_find_server">Impossible de trouver le serveur.</string>
<string name="something_went_wrong_processing_your_request">Une erreur est survenue pendant le traitement de votre requête.</string>
<string name="invalid_user_input">Entrée utilisateur incorrecte</string>
<string name="temporarily_unavailable">Temporairement indisponible. Réessayez plus tard.</string>
@ -775,27 +822,30 @@
<string name="group_chat_will_make_your_jabber_id_public">Ce canal rendra votre adresse XMPP publique</string>
<string name="ebook">e-book</string>
<string name="video_original">Original (non compressé)</string>
<string name="open_with">Ouvrir avec...</string>
<string name="open_with">Ouvrir avec</string>
<string name="set_profile_picture">Photo de profil pour Conversations</string>
<string name="choose_account">Choisir un compte</string>
<string name="restore_backup">Restaurer la sauvegarde</string>
<string name="restore">Restaurer</string>
<string name="enter_password_to_restore">Entrez votre mot de passe pour que le compte %s restaure la sauvegarde.</string>
<string name="restore_warning">N\'utilisez pas la fonctionnalité de sauvegarde de la restauration pour tenter de cloner (exécuter simultanément) une installation. La restauration dune sauvegarde ne concerne que les migrations ou en cas de perte du périphérique dorigine.</string>
<string name="unable_to_restore_backup">Impossible de restaurer la sauvegarde.</string>
<string name="unable_to_decrypt_backup">Impossible de déchiffrer la sauvegarde. Le mot de passe est-il correct?</string>
<string name="backup_channel_name">Sauvegarde &amp; restauration</string>
<string name="enter_jabber_id">Entrez l\'adresse XMPP</string>
<string name="create_group_chat">Créer un salon</string>
<string name="create_group_chat">Créer un groupe</string>
<string name="join_public_channel">Rejoindre le canal public</string>
<string name="create_private_group_chat">Créer un salon privé</string>
<string name="create_private_group_chat">Créer un groupe privé</string>
<string name="create_public_channel">Créer un canal public</string>
<string name="create_dialog_channel_name">Nom du canal</string>
<string name="xmpp_address">Adresse XMPP</string>
<string name="please_enter_name">Veuillez donner un nom au channel</string>
<string name="please_enter_name">Veuillez donner un nom au canal</string>
<string name="please_enter_xmpp_address">Veuillez renseigner une adresse XMPP</string>
<string name="this_is_an_xmpp_address">Ceci est une adresse XMPP. Veuillez renseigner un nom.</string>
<string name="creating_channel">Création d\'un canal public…</string>
<string name="channel_already_exists">Ce canal existe déjà</string>
<string name="joined_an_existing_channel">Vous avez rejoint un canal existant</string>
<string name="unable_to_set_channel_configuration">Impossible de sauvegarder la configuration du canal</string>
<string name="allow_participants_to_edit_subject">Autoriser quiconque à éditer le sujet</string>
<string name="allow_participants_to_invite_others">Permettre à quiconque d\'inviter d\'autres personnes</string>
<string name="anyone_can_edit_subject">N\'importe qui peut éditer le sujet.</string>
@ -806,14 +856,14 @@
<string name="jabber_ids_are_visible_to_admins">Les adresses XMPP sont visibles par les administrateurs.</string>
<string name="jabber_ids_are_visible_to_anyone">Les adresses XMPP sont visibles par tous.</string>
<string name="no_users_hint_channel">Ce canal public n\'a pas de participants. Invitez vos contacts ou utilisez le bouton de partage pour distribuer son adresse XMPP.</string>
<string name="no_users_hint_group_chat">Ce salon privé n\'a aucun participant.</string>
<string name="no_users_hint_group_chat">Ce groupe privé n\'a aucun participant.</string>
<string name="manage_permission">Gérer les privilèges</string>
<string name="search_participants">Rechercher des participants</string>
<string name="file_too_large">Fichier trop volumineux</string>
<string name="attach">Joindre</string>
<string name="discover_channels">Découverte des canaux</string>
<string name="search_channels">Recherche des canaux</string>
<string name="channel_discovery_opt_in_title">Violation possible de la confidentialité !</string>
<string name="channel_discovery_opt_in_title">Violation possible de la confidentialité!</string>
<string name="channel_discover_opt_in_message"><![CDATA[Channel discovery utilise un service tiers appelé <a href="https://search.jabber.network">search.jabber.network</a>.<br><br>L\'utilisation de cette fonction transmettra votre adresse IP et les termes de recherche à ce service. Veuillez consulter leur <a href="https://search.jabber.network/privacy">Politique de confidentialité</a> pour plus d\'information.]]></string>
<string name="i_already_have_an_account">J\'ai déjà un compte</string>
<string name="add_existing_account">Ajouter un compte existant</string>
@ -828,8 +878,10 @@
<string name="not_a_backup_file">Le fichier sélectionné n\'est pas une sauvegarde de Conversations</string>
<string name="account_already_setup">Ce compte a déjà été configuré</string>
<string name="please_enter_password">Veuillez saisir le mot de passe pour ce compte</string>
<string name="open_join_dialog">Rejoindre le canal public ...</string>
<string name="group_chats_and_channels"><![CDATA[Canaux et salons de discussion]]></string>
<string name="unable_to_perform_this_action">Impossible de réaliser cette action</string>
<string name="open_join_dialog">Rejoindre le canal public…</string>
<string name="sharing_application_not_grant_permission">L\'application de partage n\'a pas accordé la permission d\'accéder à ce fichier.</string>
<string name="group_chats_and_channels"><![CDATA[Canaux et groupes de discussion]]></string>
<string name="jabber_network">jabber.network</string>
<string name="local_server">Serveur local</string>
<string name="pref_channel_discovery_summary">La plupart des utilisateurs devraient choisir «jabber.network» pour de meilleures suggestions provenant de lécosystème public entier de XMPP.</string>
@ -842,11 +894,20 @@
<string name="rtp_state_incoming_video_call">Appel vidéo entrant</string>
<string name="rtp_state_connecting">Connexion en cours</string>
<string name="rtp_state_connected">Connecté</string>
<string name="rtp_state_accepting_call">Accepter les appels</string>
<string name="rtp_state_ending_call">Fin d\'appel</string>
<string name="answer_call">Décrocher</string>
<string name="dismiss_call">Ignorer</string>
<string name="rtp_state_finding_device">Découverte des appareils</string>
<string name="rtp_state_ringing">Ça sonne</string>
<string name="rtp_state_declined_or_busy">Occupé</string>
<string name="rtp_state_connectivity_error">Impossible de connecter l\'appel</string>
<string name="rtp_state_retracted">Appel annulé</string>
<string name="rtp_state_application_failure">Échec de l\'application</string>
<string name="hang_up">Raccrocher</string>
<string name="ongoing_call">Appel en cours</string>
<string name="ongoing_video_call">Appel vidéo en cours</string>
<string name="disable_tor_to_make_call">Désactivez Tor afin de passer des appels</string>
<string name="incoming_call">Appel entrant</string>
<string name="incoming_call_duration">Appel entrant · %s</string>
<string name="outgoing_call">Appel sortant</string>
@ -855,6 +916,9 @@
<string name="audio_call">Appel audio</string>
<string name="video_call">Appel vidéo</string>
<string name="microphone_unavailable">Votre micro n\'est pas disponible</string>
<string name="only_one_call_at_a_time">Vous ne pouvez prendre qu\'un appel à la fois.</string>
<string name="return_to_ongoing_call">Reprendre l\'appel en cours</string>
<string name="could_not_switch_camera">Impossible de changer de caméra</string>
<plurals name="view_users">
<item quantity="one">Voir %1$d participant</item>
<item quantity="other">Voir %1$d participants</item>

View File

@ -898,7 +898,7 @@
<string name="rtp_state_ending_call">Rematando a chamada</string>
<string name="answer_call">Responder</string>
<string name="dismiss_call">Rexeitar</string>
<string name="rtp_state_finding_device">Localizando dispositivos</string>
<string name="rtp_state_finding_device">Atopando dispositivos</string>
<string name="rtp_state_ringing">Sonando</string>
<string name="rtp_state_declined_or_busy">Ocupado</string>
<string name="rtp_state_connectivity_error">Non se pode establecer a chamada</string>

View File

@ -808,7 +808,6 @@
<string name="rtp_state_ending_call">Hívás befejezése</string>
<string name="answer_call">Válasz</string>
<string name="dismiss_call">Elutasítás</string>
<string name="rtp_state_finding_device">Eszközök keresése</string>
<string name="rtp_state_ringing">Csörgetés</string>
<string name="rtp_state_declined_or_busy">Elfoglalt</string>
<string name="rtp_state_connectivity_error">Nem sikerült kapcsolódni a híváshoz</string>

View File

@ -41,12 +41,14 @@
<string name="moderator">Moderatore</string>
<string name="participant">Partecipante</string>
<string name="visitor">Visitatore</string>
<string name="remove_contact_text">Vuoi rimuovere %s dalla lista dei contatti? Le conversazioni con questo contatto non verranno rimosse.</string>
<string name="block_contact_text">Vorresti impedire a %s di inviarti messaggi?</string>
<string name="unblock_contact_text">Vorresti permettere a %s di inviarti messaggi?</string>
<string name="block_domain_text">Bloccare tutti i contatti da %s?</string>
<string name="unblock_domain_text">Sbloccare tutti i contatti da %s?</string>
<string name="contact_blocked">Contatto bloccato</string>
<string name="blocked">Bloccato</string>
<string name="remove_bookmark_text">Vuoi rimuovere %s dai segnalibri? Le conversazioni con questo segnalibro non verranno rimosse.</string>
<string name="register_account">Registra un nuovo account sul server</string>
<string name="change_password_on_server">Cambia la password sul server</string>
<string name="share_with">Condividi con</string>
@ -65,14 +67,22 @@
<string name="save">Salva</string>
<string name="ok">OK</string>
<string name="crash_report_title">Errore di Conversations</string>
<string name="crash_report_message">Usare il tuo account XMPP per inviare segnalazioni di errore aiuta lo sviluppo in corso di Conversations.</string>
<string name="send_now">Invia adesso</string>
<string name="send_never">Non chiedere più</string>
<string name="problem_connecting_to_account">Impossibile connettersi all\'account</string>
<string name="problem_connecting_to_accounts">Impossibile connettersi a più account</string>
<string name="touch_to_fix">Tocca per gestire i tuoi account</string>
<string name="attach_file">Allega file</string>
<string name="not_in_roster">Aggiungere questo contatto alla lista dei contatti?</string>
<string name="add_contact">Aggiungi contatto</string>
<string name="send_failed">Invio fallito</string>
<string name="preparing_image">Preparazione per l\'invio dell\'immagine</string>
<string name="preparing_images">Preparazione per l\'invio delle immagini</string>
<string name="sharing_files_please_wait">Condivisione file. Attendere prego...</string>
<string name="action_clear_history">Pulisci la cronologia</string>
<string name="clear_conversation_history">Pulisci la cronologia della conversazione</string>
<string name="clear_histor_msg">Vuoi eliminare tutti i messaggi in questa conversazione?\n\n<b>Attenzione:</b> ciò non influenzerà i messaggi salvati su altri dispositivi o server.</string>
<string name="delete_file_dialog">Elimina file</string>
<string name="delete_file_dialog_msg">Sei sicuro di voler eliminare questo file?\n\n<b>Attenzione:</b> non verranno eliminate copie di questo file memorizzate in altri dispositivi o server. </string>
<string name="also_end_conversation">Chiudi questa conversazione successivamente</string>
@ -83,16 +93,20 @@
<string name="send_omemo_message">Invia messaggio cifrato OMEMO</string>
<string name="send_omemo_x509_message">Invia messaggio cifrato v\\OMEMO</string>
<string name="send_pgp_message">Messaggio OpenPGP</string>
<string name="your_nick_has_been_changed">Nuovo nome utente in uso</string>
<string name="send_unencrypted">Invia non cifrato</string>
<string name="decryption_failed">Decifrazione fallita. Forse non disponi della chiave privata corretta.</string>
<string name="openkeychain_required">OpenKeychain</string>
<string name="openkeychain_required_long">Conversations usa <b>OpenKeychain</b> per cifrare e decifrare i messaggi e gestire le tue chiavi pubbliche.\n\nÈ pubblicato secondo i termini della GPLv3+ ed è disponibile su F-Droid e Google Play.\n\n<small>(Riavvia Conversations in seguito.)</small></string>
<string name="restart">Riavvia</string>
<string name="install">Installa</string>
<string name="openkeychain_not_installed">Per favore installa OpenKeychain</string>
<string name="offering">offrendo…</string>
<string name="waiting">in attesa…</string>
<string name="no_pgp_key">Nessuna chiave OpenPGP trovata</string>
<string name="contact_has_no_pgp_key">Impossibile decifrare il messaggio perchè il contatto non sta annunciando la sua chiave pubblica.\n\n<small>Chiedi al contatto di configurare OpenPGP.</small></string>
<string name="no_pgp_keys">Nessuna chiave OpenPGP trovata</string>
<string name="contacts_have_no_pgp_keys">Impossibile cifrare il messaggio perchè i contatti non stanno annunciando la sua chiave pubblica.\n\n<small>Chiedi loro di configurare OpenPGP.</small></string>
<string name="pref_general">Generale</string>
<string name="pref_accept_files">Accetta i file</string>
<string name="pref_accept_files_summary">Accetta automaticamente i file più piccoli di…</string>
@ -110,9 +124,11 @@
<string name="pref_notification_grace_period_summary">Il periodo di tempo in cui le notifiche vengono silenziate dopo aver rilevato attività su uno dei tuoi altri dispositivi.</string>
<string name="pref_advanced_options">Avanzate</string>
<string name="pref_never_send_crash">Non inviare mai segnalazioni di errore</string>
<string name="pref_never_send_crash_summary">Se scegli di inviare una segnalazione dellerrore aiuterai lo sviluppo</string>
<string name="pref_confirm_messages">Conferma messaggi</string>
<string name="pref_confirm_messages_summary">Fai sapere ai tuoi contatti quando hai ricevuto e letto i loro messaggi</string>
<string name="pref_ui_options">Interfaccia utente</string>
<string name="openpgp_error">OpenKeychain ha generato un errore.</string>
<string name="bad_key_for_encryption">Chiave di cifratura non valida.</string>
<string name="accept">Accetta</string>
<string name="error">Si è verificato un errore</string>
@ -125,8 +141,10 @@
<string name="attach_take_picture">Scatta una foto</string>
<string name="preemptively_grant">Concedi aggiornamenti della presenza preventivamente</string>
<string name="error_not_an_image_file">Il file selezionato non è unimmagine</string>
<string name="error_compressing_image">Impossibile convertire l\'immagine</string>
<string name="error_file_not_found">File non trovato</string>
<string name="error_io_exception">Errore di I/O generico. Forse hai esaurito lo spazio?</string>
<string name="error_security_exception_during_image_copy">Lapp che hai usato per selezionare questa immagine non ha fornito autorizzazioni sufficienti per leggere il file.\n\n<small>Usa un gestore di file differente per scegliere unimmagine</small></string>
<string name="account_status_unknown">Sconosciuto</string>
<string name="account_status_disabled">Disattivato temporaneamente</string>
<string name="account_status_online">Online</string>
@ -138,6 +156,7 @@
<string name="account_status_regis_fail">Registrazione fallita</string>
<string name="account_status_regis_conflict">Nome utente già in uso</string>
<string name="account_status_regis_success">Registrazione completata</string>
<string name="account_status_regis_not_sup">Registrazione non supportata dal server</string>
<string name="account_status_regis_invalid_token">Token di registrazione non valido</string>
<string name="account_status_tls_error">Negoziazione TLS fallita</string>
<string name="account_status_policy_violation">Violazione della policy</string>
@ -154,14 +173,17 @@
<string name="mgmt_account_publish_pgp">Pubblica chiave pubblica OpenPGP</string>
<string name="unpublish_pgp">Rimuovi chiave pubblica OpenPGP</string>
<string name="unpublish_pgp_message">Sei sicuro di volere rimuovere la tua chiave pubblica OpenPGP dalla dichiarazione di presenza?\nI tuoi contatti non potranno più inviarti messaggi cifrati con OpenPGP.</string>
<string name="openpgp_has_been_published">Chiave pubblica OpenPGP pubblicata.</string>
<string name="mgmt_account_enable">Attiva utente</string>
<string name="mgmt_account_are_you_sure">Sei sicuro?</string>
<string name="mgmt_account_delete_confirm_text">L\'eliminazione del tuo account cancellerà tutta la cronologia dielle conversazioni</string>
<string name="attach_record_voice">Registra la voce</string>
<string name="account_settings_jabber_id">Indirizzo XMPP</string>
<string name="block_jabber_id">Blocca indirizzo XMPP</string>
<string name="account_settings_example_jabber_id">utente@esempio.com</string>
<string name="password">Password</string>
<string name="invalid_jid">Questo non è un indirizzo XMPP valido</string>
<string name="error_out_of_memory">Memoria esaurita. Immagine troppo grande</string>
<string name="add_phone_book_text">Vuoi aggiungere %s alla tua rubrica?</string>
<string name="server_info_show_more">Info server</string>
<string name="server_info_mam">XEP-0313: MAM</string>
@ -178,9 +200,14 @@
<string name="server_info_unavailable">non disponibile</string>
<string name="missing_public_keys">Annuncio chiave pubblica non effettuato</string>
<string name="last_seen_now">visto adesso</string>
<string name="last_seen_min">visto un minuto fa</string>
<string name="last_seen_mins">visto %d minuti fa</string>
<string name="last_seen_hour">visto un\'ora fa</string>
<string name="last_seen_hours">visto %d ore fa</string>
<string name="last_seen_day">visto un giorno fa</string>
<string name="last_seen_days">visto %d giorni fa</string>
<string name="install_openkeychain">Messaggio cifrato. Installa OpenKeychain per decifrarlo.</string>
<string name="openpgp_messages_found">Nuovi messaggi cifrati con OpenPGP trovati</string>
<string name="openpgp_key_id">ID chiave OpenPGP</string>
<string name="omemo_fingerprint">Impronta OMEMO</string>
<string name="omemo_fingerprint_x509">v\\OMEMO impronta</string>
@ -220,25 +247,32 @@
<string name="add_back">Aggiungi anche tu</string>
<string name="contact_has_read_up_to_this_point">%s ha letto fino a questo punto</string>
<string name="contacts_have_read_up_to_this_point">%s ha letto fino a questo punto</string>
<string name="contacts_and_n_more_have_read_up_to_this_point">%1$s + altri %2$d hanno letto fino a questo punto</string>
<string name="everyone_has_read_up_to_this_point">Tutti hanno letto fino a questo punto</string>
<string name="publish">Pubblica</string>
<string name="touch_to_choose_picture">Tocca l\'avatar per scegliere un\'immagine dalla galleria</string>
<string name="publishing">Pubblicazione…</string>
<string name="error_publish_avatar_server_reject">Il server ha rifiutato la tua pubblicazione</string>
<string name="error_publish_avatar_converting">Impossibile convertire la tua immagine</string>
<string name="error_saving_avatar">Impossibile salvare lavatar sulla memoria interna</string>
<string name="or_long_press_for_default">(O premi a lungo per ripristinare le impostazioni di default)</string>
<string name="error_publish_avatar_no_server_support">Il tuo server non supporta la pubblicazione di avatar</string>
<string name="private_message">sussurrato</string>
<string name="private_message_to">a %s</string>
<string name="send_private_message_to">Invia messaggio privato a %s</string>
<string name="connect">Connetti</string>
<string name="account_already_exists">Questo utente esiste già</string>
<string name="next">Successivo</string>
<string name="server_info_session_established">Sessione stabilita</string>
<string name="skip">Salta</string>
<string name="disable_notifications">Disattiva le notifiche</string>
<string name="enable">Attiva</string>
<string name="conference_requires_password">La chat di gruppo richiede una password</string>
<string name="enter_password">Inserisci la password</string>
<string name="request_presence_updates">Richiedi gli aggiornamenti della presenza dal tuo contatto.\n\n<small>Ciò verrà usato per determinare quale app sta usando il tuo contatto.</small></string>
<string name="request_now">Rechiedi adesso</string>
<string name="ignore">Ignora</string>
<string name="without_mutual_presence_updates"><b>Attenzione:</b> inviarlo senza aggiornamenti della presenza reciproci può causare problemi inaspettati.\n\n<small>Vai nei dettagli del contatto per verificare le tue sottoscrizioni alla presenza.</small></string>
<string name="pref_security_settings">Sicurezza</string>
<string name="pref_allow_message_correction">Permetti correzione del messaggio</string>
<string name="pref_allow_message_correction_summary">Consenti ai tuoi contatti di modificare retroattivamente i loro messaggi</string>
@ -252,6 +286,8 @@
<string name="pref_quiet_hours_summary">Le notifiche verranno silenziate durante le ore di quiete</string>
<string name="pref_expert_options_other">Altro</string>
<string name="pref_autojoin">Sincronizza con i segnalibri</string>
<string name="pref_autojoin_summary">Entra nelle chat di gruppo automaticamente se il segnalibro dice così</string>
<string name="toast_message_omemo_fingerprint">Impronta OMEMO copiata negli appunti</string>
<string name="conference_banned">Sei stato bandito da questa chat di gruppo</string>
<string name="conference_members_only">Questa chat di gruppo è solo per membri</string>
<string name="conference_resource_constraint">Risorse limitate</string>
@ -280,6 +316,7 @@
<string name="account_details">Dettagli account</string>
<string name="confirm">Conferma</string>
<string name="try_again">Prova di nuovo</string>
<string name="pref_keep_foreground_service">Servizio in primo piano</string>
<string name="pref_keep_foreground_service_summary">Evita che il sistema operativo chiuda la connessione</string>
<string name="pref_create_backup">Crea backup</string>
<string name="pref_create_backup_summary">I file di backup verranno salvati in %s</string>
@ -296,17 +333,27 @@
<string name="file">file</string>
<string name="open_x_file">Apri %s</string>
<string name="sending_file">invio (%1$d%% completato)</string>
<string name="preparing_file">Preparazione per condividere il file</string>
<string name="x_file_offered_for_download">%s offerto da scaricare</string>
<string name="cancel_transmission">Annulla trasmissione</string>
<string name="file_transmission_failed">impossibile condividere il file</string>
<string name="file_transmission_cancelled">trasmissione file annullata</string>
<string name="file_deleted">File eliminato</string>
<string name="no_application_found_to_open_file">Nessuna app trovata per aprire il file</string>
<string name="no_application_found_to_open_link">Nessuna app trovata per aprire il link</string>
<string name="no_application_found_to_view_contact">Nessuna app trovata per vedere il contatto</string>
<string name="pref_show_dynamic_tags">Etichette dinamiche</string>
<string name="pref_show_dynamic_tags_summary">Mostra etichette in sola lettura sotto i contatti</string>
<string name="enable_notifications">Attiva le notifiche</string>
<string name="no_conference_server_found">Nessun server per chat di gruppo trovato</string>
<string name="conference_creation_failed">Impossibile creare la chat di gruppo</string>
<string name="account_image_description">Avatar utente</string>
<string name="copy_omemo_clipboard_description">Copia impronta OMEMO negli appunti</string>
<string name="regenerate_omemo_key">Rigenera chiave OMEMO</string>
<string name="clear_other_devices">Pulisci dispositivi</string>
<string name="clear_other_devices_desc">Sei sicuro di voler rimuovere tutti gli altri dispositivi dall\'annuncio OMEMO? La prossima volta che si connetteranno si riannunceranno, ma potrebbero non ricevere i messaggi inviati nel frattempo.</string>
<string name="error_no_keys_to_trust_server_error">Non ci sono chiavi utilizzabili per questo contatto.\nRicezione di nuove chiavi dal server non riuscita. Forse qualcosa non va con il server del tuo contatto?</string>
<string name="error_no_keys_to_trust_presence">Non ci sono chiavi utilizzabili per questo contatto.\nAssicurati di avere reciprocamente la sottoscrizione sulla presenza.</string>
<string name="error_trustkeys_title">Qualcosa è andato storto</string>
<string name="fetching_history_from_server">Caricamento della cronologia dal server</string>
<string name="no_more_history_on_server">Fine cronologia sul server</string>
@ -316,6 +363,7 @@
<string name="change_password">Cambia password</string>
<string name="current_password">Password attuale</string>
<string name="new_password">Nuova password</string>
<string name="password_should_not_be_empty">La password non può essere vuota</string>
<string name="enable_all_accounts">Attiva tutti gli account</string>
<string name="disable_all_accounts">Disattiva tutti gli account</string>
<string name="perform_action_with">Esegui azione con</string>
@ -335,6 +383,7 @@
<string name="could_not_change_affiliation">Impossibile cambiare laffiliazione di %s</string>
<string name="ban_from_conference">Bandisci dalla chat di gruppo</string>
<string name="ban_from_channel">Bandisci dal canale</string>
<string name="removing_from_public_conference">Stai tentando di rimuovere %s da un canale pubblico. L\'unico modo per farlo è di bandire quell\'utente per sempre.</string>
<string name="ban_now">Bandisci</string>
<string name="could_not_change_role">Impossibile cambiare ruolo di %s</string>
<string name="conference_options">Configurazione chat di gruppo privata</string>
@ -373,6 +422,7 @@
<string name="pref_chat_states_summary">Fai sapere ai tuoi contatti quando stai scrivendo loro un messaggio</string>
<string name="send_location">Invia la posizione</string>
<string name="show_location">Mostra la posizione</string>
<string name="no_application_found_to_display_location">Nessuna app trovata per mostrare la posizione</string>
<string name="location">Posizione</string>
<string name="title_undo_swipe_out_conversation">Conversazione interrotta</string>
<string name="title_undo_swipe_out_group_chat">Chat di gruppo privata abbandonata</string>
@ -389,6 +439,7 @@
<item quantity="one">Cancellato il %d certificato</item>
<item quantity="other">Cancellati %d certificati</item>
</plurals>
<string name="pref_quick_action_summary">Sostituisci il tasto \"Invio\" con un\'azione rapida</string>
<string name="pref_quick_action">Azione rapida</string>
<string name="none">Nessuno</string>
<string name="recently_used">Usati recentemente</string>
@ -396,6 +447,7 @@
<string name="search_contacts">Cerca contatti</string>
<string name="search_bookmarks">Cerca segnalibri</string>
<string name="send_private_message">Invia messaggio privato</string>
<string name="user_has_left_conference">%1$s ha abbandonato la chat di gruppo</string>
<string name="username">Utente</string>
<string name="username_hint">Utente</string>
<string name="invalid_username">Questo non è un nome utente valido</string>
@ -405,6 +457,7 @@
<string name="download_failed_could_not_write_file">Scaricamento fallito: scrittura del file impossibile</string>
<string name="account_status_tor_unavailable">Rete Tor non disponibile</string>
<string name="account_status_bind_failure">Bind fallito</string>
<string name="account_status_host_unknown">Il server non è responsabile per questo dominio</string>
<string name="server_info_broken">Rotto</string>
<string name="pref_presence_settings">Disponibilità</string>
<string name="pref_away_when_screen_off">\"Non disponibile\" a schermo spento</string>
@ -417,11 +470,15 @@
<string name="pref_show_connection_options_summary">Mostra nome host e impostazioni della porta quando configuri un account</string>
<string name="hostname_example">xmpp.esempio.it</string>
<string name="action_add_account_with_certificate">Aggiungi account con certificato</string>
<string name="unable_to_parse_certificate">Impossibile analizzare il certificato</string>
<string name="authenticate_with_certificate">Lasciare vuoto per autenticarsi con certificato</string>
<string name="mam_prefs">Preferenze di archiviazione</string>
<string name="server_side_mam_prefs">Preferenze di archiviazione lato server</string>
<string name="fetching_mam_prefs">Raccolta preferenze di archiviazione. Attendere prego...</string>
<string name="unable_to_fetch_mam_prefs">Impossibile recuperare le preferenze di archiviazione</string>
<string name="captcha_required">CAPTCHA necessario</string>
<string name="captcha_hint">Inserisci il testo dell\'immagine soprastante</string>
<string name="certificate_chain_is_not_trusted">Catena di certificati non fidata</string>
<string name="jid_does_not_match_certificate">L\'indirizzo XMPP non corrisponde al certificato</string>
<string name="action_renew_certificate">Rinnova certificato</string>
<string name="error_fetching_omemo_key">Errore ricezione chiave OMEMO!</string>
@ -432,6 +489,7 @@
<string name="pref_use_tor_summary">Indirizza tutte le connessioni attraverso la rete Tor. Richiede Orbot</string>
<string name="account_settings_hostname">Nome host</string>
<string name="account_settings_port">Porta</string>
<string name="hostname_or_onion">Indirizzo server o .onion</string>
<string name="not_a_valid_port">Questo non è un numero di porta valido</string>
<string name="not_valid_hostname">Questo non è un nome host valido</string>
<string name="connected_accounts">%1$d su %2$d account connessi</string>
@ -440,7 +498,14 @@
<item quantity="other">%d messaggi</item>
</plurals>
<string name="load_more_messages">Carica altri messaggi</string>
<string name="shared_file_with_x">File condiviso con %s</string>
<string name="shared_image_with_x">Immagine condivisa con %s</string>
<string name="shared_images_with_x">Immagini condivise con %s</string>
<string name="shared_text_with_x">Testo condiviso con %s</string>
<string name="no_storage_permission">Dai a Conversations l\'accesso all\'archiviazione esterna</string>
<string name="no_camera_permission">Dai a Conversations l\'accesso alla fotocamera</string>
<string name="sync_with_contacts">Sincronizza con i contatti</string>
<string name="sync_with_contacts_long">Conversations vuole l\'autorizzazione ad accedere ai tuoi contatti per confrontarli con la lista in XMPP per mostrare i loro nomi ed avatar.\n\nLeggerà solamente i contatti e li confronterà localmente senza inviarli sul tuo server.</string>
<string name="sync_with_contacts_quicksy"><![CDATA[Quicksy richiede l\'accesso ai numeri di telefono dei tuoi contatti per dare suggerimenti su possibili contatti già presenti su Quicksy.<br><br>Non salveremo una copia di quei numeri di telefono.\n\nPer maggiori informazioni leggi la nostra <a href="https://quicksy.im/#privacy">politica sulla privacy</a>.<br><br>Ti verrà ora chiesta l\'autorizzazione di accedere ai tuoi contatti.]]></string>
<string name="notify_on_all_messages">Notifica per tutti i messaggi</string>
<string name="notify_only_when_highlighted">Notifica solo quando menzionato</string>
@ -451,15 +516,22 @@
<string name="always">Sempre</string>
<string name="large_images_only">Solo immagini grandi</string>
<string name="battery_optimizations_enabled">Ottimizzazioni batteria attivate</string>
<string name="battery_optimizations_enabled_explained">Il tuo dispositivo sta facendo delle ingenti ottimizzazioni della batteria per Conversations che potrebbero portare ritardi alle notifiche o anche perdita di messaggi.\nSi consiglia di disattivarle.</string>
<string name="battery_optimizations_enabled_dialog">Il tuo dispositivo sta facendo delle ingenti ottimizzazioni della batteria per Conversations che potrebbero portare ritardi alle notifiche o anche perdita di messaggi.\nTi verrà ora chiesto di disattivarle.</string>
<string name="disable">Disattiva</string>
<string name="selection_too_large">L\'area selezionata è troppo grande</string>
<string name="no_accounts">(Nessun account attivo)</string>
<string name="this_field_is_required">Questo campo è obbligatorio</string>
<string name="correct_message">Correggi messaggio</string>
<string name="send_corrected_message">Invia messaggio corretto</string>
<string name="no_keys_just_confirm">Hai già validato l\'impronta di questa persona in modo sicuro per confermarne la fiducia. Selezionando “Fatto” stai solo confermando che %s fa parte di questa chat di gruppo.</string>
<string name="this_account_is_disabled">Hai disattivato questo account</string>
<string name="security_error_invalid_file_access">Errore di sicurezza: accesso file non valido!</string>
<string name="no_application_to_share_uri">Nessuna app trovata per condividere l\'URI</string>
<string name="share_uri_with">Condividi l\'URI con...</string>
<string name="welcome_text_quicksy"><![CDATA[Quicksy è una variante del popolare client XMPP Conversations con ricerca automatica dei contatti.<br><br>Ti registri con il tuo numero di telefono e Quicksy ti suggerirà—in base ai numeri di telefono nella tua rubrica—automaticamente i possibili contatti.<br><br>Registrandoti accetti la nostra <a href="https://quicksy.im/#privacy">politica sulla privacy</a>.]]></string>
<string name="agree_and_continue">Accetta e continua</string>
<string name="magic_create_text">È disponibile una guida per la creazione di un account su conversations.im.¹\nQuando scegli conversations.im come fornitore potrai comunicare con utenti di altri fornitori dando il tuo indirizzo XMPP completo.</string>
<string name="your_full_jid_will_be">Il tuo indirizzo XMPP completo sarà: %s</string>
<string name="create_account">Crea account</string>
<string name="use_own_provider">Usa un altro provider</string>
@ -483,12 +555,17 @@
<string name="gp_short">Breve</string>
<string name="gp_medium">Medio</string>
<string name="gp_long">Lungo</string>
<string name="pref_broadcast_last_activity">Trasmissione</string>
<string name="pref_broadcast_last_activity_summary">Fa sapere ai tuoi contatti quando usi Conversations</string>
<string name="pref_privacy">Privacy</string>
<string name="pref_theme_options">Tema</string>
<string name="pref_theme_options_summary">Seleziona il colore</string>
<string name="pref_theme_automatic">Automatico</string>
<string name="pref_theme_light">Chiaro</string>
<string name="pref_theme_dark">Scuro</string>
<string name="pref_use_green_background">Sfondo verde</string>
<string name="pref_use_green_background_summary">Usa sfondo verde per messaggi ricevuti</string>
<string name="unable_to_connect_to_keychain">Impossibile connettersi a OpenKeychain</string>
<string name="this_device_is_no_longer_in_use">Questo dispositivo non è più in uso</string>
<string name="type_pc">Computer</string>
<string name="type_phone">Cellulare</string>
@ -496,21 +573,29 @@
<string name="type_web">Browser web</string>
<string name="type_console">Console</string>
<string name="payment_required">Necessario pagamento</string>
<string name="missing_internet_permission">Concedi l\'autorizzazione ad usare internet</string>
<string name="me">Io</string>
<string name="contact_asks_for_presence_subscription">Il contatto chiede la sottoscrizione della presenza</string>
<string name="allow">Consenti</string>
<string name="no_permission_to_access_x">Nessuna autorizzazione per accedere a %s</string>
<string name="remote_server_not_found">Server remoto non trovato</string>
<string name="remote_server_timeout">Scadenza server remoto</string>
<string name="unable_to_update_account">Impossibile aggiornare l\'account</string>
<string name="report_jid_as_spammer">Segnala questo indirizzo XMPP per spam.</string>
<string name="pref_delete_omemo_identities">Elimina identità OMEMO</string>
<string name="pref_delete_omemo_identities_summary">Rigenera le tue chiavi OMEMO. I tuoi contatti dovranno verificare un\'altra volta la tua identità. Usalo solo come ultima spiaggia.</string>
<string name="delete_selected_keys">Cancella le chiavi selezionate</string>
<string name="error_publish_avatar_offline">Devi essere connesso per pubblicare l\'avatar.</string>
<string name="show_error_message">Mostra messaggio di errore</string>
<string name="error_message">Messaggio di errore</string>
<string name="data_saver_enabled">Risparmio dati attivato</string>
<string name="data_saver_enabled_explained">Il tuo sistema operativo sta limitando l\'accesso internet a Conversations quando è in secondo piano. Per ricevere le notifiche di nuovi messaggi dovresti consentire l\'accesso senza limiti a Conversations quando il \"Risparmio dati\" è attivo.\nConversations cercherà comunque di risparmiare dati quando possibile.</string>
<string name="device_does_not_support_data_saver">Il tuo dispositivo non supporta la disattivazione del Risparmio dati per Conversations.</string>
<string name="error_unable_to_create_temporary_file">Impossibile creare il file temporaneo</string>
<string name="this_device_has_been_verified">Questo dispositivo è stato verificato</string>
<string name="copy_fingerprint">Copia impronta</string>
<string name="all_omemo_keys_have_been_verified">Hai verificato tutte le chiavi OMEMO in tuo possesso</string>
<string name="barcode_does_not_contain_fingerprints_for_this_conversation">Il codice a barre non contiene impronte per questa conversazione.</string>
<string name="verified_fingerprints">Impronte verificate</string>
<string name="use_camera_icon_to_scan_barcode">Usa la fotocamera per scansionare il codice a barre di un contatto</string>
<string name="please_wait_for_keys_to_be_fetched">Attendi la ricezione delle chiavi</string>
@ -518,8 +603,11 @@
<string name="share_as_uri">Condividi come URI XMPP</string>
<string name="share_as_http">Condividi come link HTTP</string>
<string name="pref_blind_trust_before_verification">Fiducia cieca prima della verifica</string>
<string name="pref_blind_trust_before_verification_summary">Fidati di nuovi dispositivi da contatti non verificati, ma chiedi una conferma manuale per nuovi dispositivi da contatti verificati.</string>
<string name="blindly_trusted_omemo_keys">Chiavi OMEMO accettate ciecamente, perciò potrebbero essere di qualcun altro o qualcuno potrebbe essersi intromesso.</string>
<string name="not_trusted">Non fidato</string>
<string name="invalid_barcode">Codice a barre 2D non valido</string>
<string name="pref_clean_cache_summary">Svuota la cartella della cache (usata dall\'app fotocamera)</string>
<string name="pref_clean_cache">Svuota cache</string>
<string name="pref_clean_private_storage">Svuota archivio privato</string>
<string name="pref_clean_private_storage_summary">Svuota l\'archivio privato nella quale sono memorizzati i file (possono essere riscaricati dal server)</string>
@ -529,6 +617,7 @@
<string name="show_inactive_devices">Mostra inattivi</string>
<string name="hide_inactive_devices">Nascondi inattivi</string>
<string name="distrust_omemo_key">Diffida il dispositvo</string>
<string name="distrust_omemo_key_text">Sei sicuro di volere rimuovere la verifica di questo dispositivo?\nIl dispositivo e i messaggi provenienti da esso verranno segnati come \"Non fidato\".</string>
<plurals name="seconds">
<item quantity="one">%d secondo</item>
<item quantity="other">%d secondi</item>
@ -571,7 +660,9 @@
<string name="sasl_downgrade">Meccanismo SASL degradato</string>
<string name="account_status_regis_web">Il server richiede la registrazione sul sito</string>
<string name="open_website">Apri sito</string>
<string name="application_found_to_open_website">Nessuna app trovata per aprire il sito</string>
<string name="pref_headsup_notifications">Notifiche avvisi</string>
<string name="pref_headsup_notifications_summary">Mostra notifiche su avvisi</string>
<string name="today">Oggi</string>
<string name="yesterday">Ieri</string>
<string name="pref_validate_hostname">Convalida hostname con DNSSEC</string>
@ -599,6 +690,8 @@
<string name="edit_status_message">Modifica il messaggio di stato</string>
<string name="disable_encryption">Disattiva la cifratura</string>
<string name="error_trustkey_general">Conversations non riesce a inviare messaggi criptati a %1$s. Potrebbe essere dovuto al tuo contatto che usa un server obsoleto o un client che non supporta OMEMO.</string>
<string name="error_trustkey_device_list">Impossibile ricevere l\'elenco dispositivi</string>
<string name="error_trustkey_bundle">Impossibile ricevere le chiavi di cifratura</string>
<string name="error_trustkey_hint_mutual">Suggerimento: in alcuni casi può essere risolto aggiungendo a vicenda la vostra lista di contatti.</string>
<string name="disable_encryption_message">Sei sicuro di disattivare la cifratura OMEMO per questa conversazione?\nCiò permetterà all\'amministratore del server di leggere i tuoi messaggi, ma potrebbe essere il solo modo di comunicare con persone che usano client obsoleti.</string>
<string name="disable_now">Disattiva adesso</string>
@ -627,7 +720,9 @@
<string name="title_activity_share_location">Condividi la posizione</string>
<string name="title_activity_show_location">Mostra la posizione</string>
<string name="share">Condividi</string>
<string name="unable_to_start_recording">Impossibile avviare la registrazione</string>
<string name="please_wait">Attendere prego...</string>
<string name="no_microphone_permission">Dai a Conversations l\'accesso al microfono</string>
<string name="search_messages">Cerca messaggi</string>
<string name="gif">GIF</string>
<string name="view_conversation">Vedi conversazione</string>
@ -647,6 +742,7 @@
<string name="providing_a_name_is_optional">Il nome è facoltativo</string>
<string name="create_dialog_group_chat_name">Nome chat di gruppo</string>
<string name="conference_destroyed">Questa chat di gruppo è stata distrutta</string>
<string name="unable_to_save_recording">Impossibile salvare la registrazione</string>
<string name="foreground_service_channel_name">Servizio in primo piano</string>
<string name="foreground_service_channel_description">Questa categoria di notifiche è usata per mostrare una notifica permanente per indicare che Conversations è in esecuzione.</string>
<string name="notification_group_status_information">Informazioni di stato</string>
@ -702,6 +798,9 @@
<string name="pin_expired">Il pin che ti abbiamo inviato è scaduto.</string>
<string name="unknown_api_error_network">Errore di rete sconosciuto.</string>
<string name="unknown_api_error_response">Risposta dal server sconosciuta.</string>
<string name="unable_to_connect_to_server">Impossibile connettersi al server.</string>
<string name="unable_to_establish_secure_connection">Impossibile stabilire una connessione sicura.</string>
<string name="unable_to_find_server">Impossibile trovare il server.</string>
<string name="something_went_wrong_processing_your_request">Qualcosa è andato storto elaborando la tua richiesta.</string>
<string name="invalid_user_input">Input utente non valido</string>
<string name="temporarily_unavailable">Temporaneamente non disponibile. Riprova più tardi.</string>
@ -730,6 +829,8 @@
<string name="restore">Ripristina</string>
<string name="enter_password_to_restore">Inserisci la tua password per l\'account %s per ripristinare il backup.</string>
<string name="restore_warning">Non usare la funzione di ripristino del backup tentando di clonare (eseguire simultaneamente) un\'installazione. Il ripristino di un backup è inteso solo per migrazioni o in caso di smarrimento del dispositivo.</string>
<string name="unable_to_restore_backup">Impossibile ripristinare il backup.</string>
<string name="unable_to_decrypt_backup">Impossibile decifrare il backup. La password è giusta?</string>
<string name="backup_channel_name">Backup e ripristino</string>
<string name="enter_jabber_id">Inserisci l\'indirizzo XMPP</string>
<string name="create_group_chat">Crea chat di gruppo</string>
@ -744,6 +845,7 @@
<string name="creating_channel">Creazione canale pubblico…</string>
<string name="channel_already_exists">Questo canale esiste già</string>
<string name="joined_an_existing_channel">Sei entrato in un canale esistente</string>
<string name="unable_to_set_channel_configuration">Impossibile salvare la configurazione del canale</string>
<string name="allow_participants_to_edit_subject">Permetti a chiunque di modificare l\'argomento</string>
<string name="allow_participants_to_invite_others">Permetti a chiunque di invitare altri</string>
<string name="anyone_can_edit_subject">Chiunque può modificare l\'argomento.</string>
@ -776,7 +878,9 @@
<string name="not_a_backup_file">Il file selezionato non è un file di backup di Conversations</string>
<string name="account_already_setup">Questo account è già stato configurato</string>
<string name="please_enter_password">Inserisci la password per questo account</string>
<string name="unable_to_perform_this_action">Impossibile eseguire questa azione</string>
<string name="open_join_dialog">Entra in un canale pubblico...</string>
<string name="sharing_application_not_grant_permission">L\'app di condivisione non ha concesso l\'autorizzazione per accedere a questo file.</string>
<string name="group_chats_and_channels"><![CDATA[Chat di gruppo e canali]]></string>
<string name="jabber_network">jabber.network</string>
<string name="local_server">Server locale</string>
@ -794,10 +898,11 @@
<string name="rtp_state_ending_call">Chiusura chiamata</string>
<string name="answer_call">Rispondi</string>
<string name="dismiss_call">Rifiuta</string>
<string name="rtp_state_finding_device">Localizzazione dispositivi</string>
<string name="rtp_state_ringing">Sta squillando</string>
<string name="rtp_state_declined_or_busy">Occupato</string>
<string name="rtp_state_connectivity_error">Impossibile connettere la chiamata</string>
<string name="rtp_state_retracted">Chiamata ritirata</string>
<string name="rtp_state_application_failure">Errore dell\'app</string>
<string name="hang_up">Riaggancia</string>
<string name="ongoing_call">Chiamata in corso</string>
<string name="ongoing_video_call">Chiamata video in corso</string>
@ -811,6 +916,8 @@
<string name="video_call">Chiamata video</string>
<string name="microphone_unavailable">Il tuo microfono non è disponibile</string>
<string name="only_one_call_at_a_time">Puoi fare solo una chiamata alla volta.</string>
<string name="return_to_ongoing_call">Torna alla chiamata in corso</string>
<string name="could_not_switch_camera">Impossibile cambiare fotocamera</string>
<plurals name="view_users">
<item quantity="one">Vedi %1$d partecipante</item>
<item quantity="other">Vedi %1$d partecipanti</item>

View File

@ -916,7 +916,7 @@ Administrator twojego serwera będzie mógł czytać twoje wiadomości, ale moż
<string name="rtp_state_ending_call">Kończenie połączenia</string>
<string name="answer_call">Odbierz</string>
<string name="dismiss_call">Odrzuć</string>
<string name="rtp_state_finding_device">Lokalizowanie urządzeń</string>
<string name="rtp_state_finding_device">Wyszukiwanie urządzeń</string>
<string name="rtp_state_ringing">Dzwonienie</string>
<string name="rtp_state_declined_or_busy">Zajęty</string>
<string name="rtp_state_connectivity_error">Nie można wykonać połączenia</string>

View File

@ -898,7 +898,6 @@
<string name="rtp_state_ending_call">Encerrando chamada</string>
<string name="answer_call">Atender</string>
<string name="dismiss_call">Dispensar</string>
<string name="rtp_state_finding_device">Procurando dispositivos</string>
<string name="rtp_state_ringing">Tocando</string>
<string name="rtp_state_declined_or_busy">Ocupado</string>
<string name="rtp_state_connectivity_error">Não foi possível conectar à chamada</string>

View File

@ -23,7 +23,7 @@
<string name="title_activity_settings">Setări</string>
<string name="title_activity_sharewith">Partajează într-o conversație</string>
<string name="title_activity_start_conversation">Pornește o conversație</string>
<string name="title_activity_choose_contact">Alegeți contact</string>
<string name="title_activity_choose_contact">Alegeți contactul</string>
<string name="title_activity_choose_contacts">Alegeți contactele</string>
<string name="title_activity_share_via_account">Partajează cu cont</string>
<string name="title_activity_block_list">Listă contacte blocate</string>
@ -82,7 +82,7 @@
<string name="sharing_files_please_wait">Trimitere fișiere. Te rog asteaptă...</string>
<string name="action_clear_history">Șterge istoric</string>
<string name="clear_conversation_history">Șterge istoricul conversației</string>
<string name="clear_histor_msg">Doriți să ștergeți toate mesajele din această conversație?\n\n<b>Atenție:</b> Asta nu va afecta mesajele aflate pe alte dispozitive sau servere.</string>
<string name="clear_histor_msg">Doriți să ștergeți toate mesajele din această conversație?\n\n<b>Atenție:</b> Această acțiune nu va afecta mesajele aflate pe alte dispozitive sau servere.</string>
<string name="delete_file_dialog">Șterge fișierul</string>
<string name="delete_file_dialog_msg">Sigur doriți să ștergeți acest fișier?\n\n<b>Atenție:</b> Această acțiune nu va șterge copiile acestui fișier care sunt stocate pe alte dispozitive sau servere.</string>
<string name="also_end_conversation">Închide conversația după ștergere</string>
@ -121,7 +121,7 @@
<string name="pref_notification_sound_summary">Sunet de notificare pentru mesaje noi</string>
<string name="pref_call_ringtone_summary">Ton pentru apelul primit</string>
<string name="pref_notification_grace_period">Perioadă de grație</string>
<string name="pref_notification_grace_period_summary">Durata de timp cât notificările sunt ascunse după ce s-a observat activitate pe un alt dispozitiv al dumneavoastră.</string>
<string name="pref_notification_grace_period_summary">Durata de timp cât notificările sunt ascunse după ce s-a observat activitate pe un alt dispozitiv de al dumneavoastră.</string>
<string name="pref_advanced_options">Opțiuni avansate</string>
<string name="pref_never_send_crash">Nu trimite rapoarte de erori</string>
<string name="pref_never_send_crash_summary">Trimițând date despre erori ajutați la continuarea dezvoltării aplicației</string>
@ -262,7 +262,7 @@
<string name="send_private_message_to">Trimite mesaj privat catre %s</string>
<string name="connect">Conectare</string>
<string name="account_already_exists">Acest cont există deja</string>
<string name="next">Următoarea</string>
<string name="next">Următorul</string>
<string name="server_info_session_established">Sesiune stabilită</string>
<string name="skip">Omite</string>
<string name="disable_notifications">Dezactivează notificările</string>
@ -318,7 +318,7 @@
<string name="try_again">Încearcă din nou</string>
<string name="pref_keep_foreground_service">Serviciul activ în prim-plan</string>
<string name="pref_keep_foreground_service_summary">Previne închiderea conexiunii de către sistemul de operare</string>
<string name="pref_create_backup">Creează copie de siguranță</string>
<string name="pref_create_backup">Creează o copie de siguranță</string>
<string name="pref_create_backup_summary">Fișierele copiei de siguranță vor fi salvate în %s</string>
<string name="notification_create_backup_title">Se creează copia de siguranță</string>
<string name="notification_backup_created_title">Copia de siguranță a fost creată</string>
@ -343,7 +343,7 @@
<string name="no_application_found_to_open_link">Nu s-a găsit nici o aplicație care să deschidă adresa</string>
<string name="no_application_found_to_view_contact">Nu s-a găsit nici o aplicație care să deschidă contactul</string>
<string name="pref_show_dynamic_tags">Etichete dinamice</string>
<string name="pref_show_dynamic_tags_summary">Sub contacte arată etichete dinamice</string>
<string name="pref_show_dynamic_tags_summary">Arată sub contacte etichete dinamice informative</string>
<string name="enable_notifications">Activează notificările</string>
<string name="no_conference_server_found">Nu s-a găsit serverul pentru discuția de grup</string>
<string name="conference_creation_failed">Nu s-a putut crea discuția de grup</string>
@ -361,7 +361,7 @@
<string name="password_changed">Parolă schimbată</string>
<string name="could_not_change_password">Nu s-a putut schimba parola</string>
<string name="change_password">Schimbare parolă</string>
<string name="current_password">Parolă curentă</string>
<string name="current_password">Parola curentă</string>
<string name="new_password">Parolă nouă</string>
<string name="password_should_not_be_empty">Parola nu poate să fie goală</string>
<string name="enable_all_accounts">Activează toate conturile</string>
@ -419,7 +419,7 @@
<string name="contacts_are_typing">%s tastează...</string>
<string name="contacts_have_stopped_typing">%s s-au oprit din scris</string>
<string name="pref_chat_states">Notificare tastare</string>
<string name="pref_chat_states_summary">Contactul este anunțat atunci când scrieți un nou mesaj</string>
<string name="pref_chat_states_summary">Contactele sunt anunțate atunci când le scrieți un nou mesaj</string>
<string name="send_location">Trimite locația</string>
<string name="show_location">Arată locația</string>
<string name="no_application_found_to_display_location">Nu s-a găsit nici o aplicație care să afișeze locația</string>
@ -514,7 +514,7 @@
<string name="notify_never">Notificări dezactivate</string>
<string name="notify_paused">Notificări suspendate</string>
<string name="pref_picture_compression">Compresie imagini</string>
<string name="pref_picture_compression_summary">Notă: Folosiți \'Alegeți un fișier\' în loc de \'Alegeți o imagine\' pentru a trimite imaginile necomprimate ignorând această setare.</string>
<string name="pref_picture_compression_summary">Notă: Folosiți \'Alege un fișier\' în loc de \'Alege o imagine\' pentru a trimite imaginile necomprimate ignorând această setare.</string>
<string name="always">Mereu</string>
<string name="large_images_only">Doar imaginile mari</string>
<string name="battery_optimizations_enabled">Optimizare baterie activată</string>
@ -533,7 +533,7 @@
<string name="share_uri_with">Partajează adresa cu...</string>
<string name="welcome_text_quicksy"><![CDATA[Quicksy este o versiune a popularului client XMPP Conversations cu descoperire automată a contactelor.<br><br>Vă înscrieți cu numărul de telefon și Quicksy—pe baza numerelor de telefon din agenda dumneavoastră—vă va sugera automat posibile contacte.<br><br>Înscriindu-vă sunteți de acord cu <a href="https://quicksy.im/#privacy">politica noastră de confidențialitate</a>.]]></string>
<string name="agree_and_continue">Sunt de acord și continuă</string>
<string name="magic_create_text">Vă vom ghida prin procesul de creare al unui cont pe chat.sum7.eu.\nCând alegeți chat.sum7.eu ca furnizor veți putea comunica cu utilizatorii altor furnizori oferindu-le adresa dumneavoastră completă XMPP.</string>
<string name="magic_create_text">Ghidul va configura un cont pe chat.sum7.eu.\nCând alegeți chat.sum7.eu ca furnizor veți putea comunica cu utilizatorii altor furnizori oferindu-le adresa dumneavoastră completă XMPP.</string>
<string name="your_full_jid_will_be">Adresa dumneavoastră XMPP completă va fi: %s</string>
<string name="create_account">Creează cont</string>
<string name="use_own_provider">Folosește furnizorul meu</string>
@ -558,10 +558,10 @@
<string name="gp_medium">Medie</string>
<string name="gp_long">Lungă</string>
<string name="pref_broadcast_last_activity">Publică utilizarea</string>
<string name="pref_broadcast_last_activity_summary">Contactele vă sunt informate atunci când folosiți Conversations</string>
<string name="pref_broadcast_last_activity_summary">Contactele sunt anunțate atunci când folosiți Conversations</string>
<string name="pref_privacy">Intimitate</string>
<string name="pref_theme_options">Temă</string>
<string name="pref_theme_options_summary">Selecție paletă culori interfață</string>
<string name="pref_theme_options_summary">Selecție paletă de culori interfață</string>
<string name="pref_theme_automatic">Automată</string>
<string name="pref_theme_light">Luminoasă</string>
<string name="pref_theme_dark">Întunecată</string>
@ -651,16 +651,16 @@
<item quantity="other">%d de luni</item>
</plurals>
<string name="pref_automatically_delete_messages">Ștergerea automată a mesajelor</string>
<string name="pref_automatically_delete_messages_description">De pe acest dispozitiv se vor șterge dacă sunt mai vechi de perioada selectată.</string>
<string name="pref_automatically_delete_messages_description">De pe acest dispozitiv se vor șterge dacă sunt mai vechi decât perioada selectată.</string>
<string name="encrypting_message">Mesajul se criptează</string>
<string name="not_fetching_history_retention_period">Politica de retenție locală împiedică descărcarea altor mesaje.</string>
<string name="transcoding_video">Se comprimă clipul video</string>
<string name="corresponding_conversations_closed">Conversațiile corespunzătoare au fost închise.</string>
<string name="contact_blocked_past_tense">Contact blocat.</string>
<string name="pref_notifications_from_strangers">Notificări de la persoane necunoscute</string>
<string name="pref_notifications_from_strangers_summary">Primire notificări pentru mesaje și apeluri de la persoane care nu sunt în lista de contacte.</string>
<string name="pref_notifications_from_strangers_summary">Permite notificări pentru mesaje și apeluri de la persoane care nu sunt în lista de contacte.</string>
<string name="received_message_from_stranger">Mesaj primit de la o persoană necunoscută</string>
<string name="block_stranger">Blocare contact necunoscut</string>
<string name="block_stranger">Blocare persoană necunoscută</string>
<string name="block_entire_domain">Blocare tot domeniu</string>
<string name="online_right_now">conectat acum</string>
<string name="retry_decryption">Reîncearcă decriptarea</string>
@ -673,7 +673,7 @@
<string name="pref_headsup_notifications_summary">Arată notificările în prim-plan</string>
<string name="today">Azi</string>
<string name="yesterday">Ieri</string>
<string name="pref_validate_hostname">Validează numele domeniului cu ajutorul DNSSEC</string>
<string name="pref_validate_hostname">Validează domeniul prin DNSSEC</string>
<string name="pref_validate_hostname_summary">Certificatele serverelor care conțin nume de domenii validate sunt considerate verificate</string>
<string name="certificate_does_not_contain_jid">Certificatul nu conține o adresă XMPP</string>
<string name="server_info_partial">parțial</string>
@ -772,7 +772,7 @@
<string name="media_browser">Vizualizare fișiere media</string>
<string name="security_violation_not_attaching_file">Fișier omis ca urmare a unei probleme de securitate.</string>
<string name="pref_video_compression">Calitate video</string>
<string name="pref_video_compression_summary">O calitate mică înseamnă fișiere mai mici</string>
<string name="pref_video_compression_summary">O calitate mai mică înseamnă fișiere mai mici</string>
<string name="video_360p">Medie (360p)</string>
<string name="video_720p">Mare (720p)</string>
<string name="cancelled">anulat</string>
@ -833,7 +833,7 @@
<string name="open_with">Deschide cu…</string>
<string name="set_profile_picture">Poză profil Conversations</string>
<string name="choose_account">Alegeți contul</string>
<string name="restore_backup">Restaurează copie de siguranță</string>
<string name="restore_backup">Restaurează o copie de siguranță</string>
<string name="restore">Restaurează</string>
<string name="enter_password_to_restore">Introduceți parola contului %s pentru a restaura copia de siguranță.</string>
<string name="restore_warning">Nu folosiți funcția de restaurare a copiei de siguranță pentru a încerca clonarea (rularea simultană a) instalării. Restaurarea copiei de siguranță este gândită doar pentru a migra pe un alt dispozitiv sau în cazul în care ați pierdut dispozitivul original.</string>
@ -906,7 +906,6 @@
<string name="rtp_state_ending_call">Se încheie apelul</string>
<string name="answer_call">Răspunde</string>
<string name="dismiss_call">Respinge</string>
<string name="rtp_state_finding_device">Localizare dispozitive</string>
<string name="rtp_state_ringing">Sună</string>
<string name="rtp_state_declined_or_busy">Ocupat</string>
<string name="rtp_state_connectivity_error">Nu s-a putut conecta apelul</string>

View File

@ -7,12 +7,12 @@
<string name="action_end_conversation">关闭聊天</string>
<string name="action_contact_details">联系人详情</string>
<string name="action_muc_details">群聊详情</string>
<string name="channel_details">群聊详情</string>
<string name="action_secure">安全聊天</string>
<string name="channel_details">频道详情</string>
<string name="action_secure">加密聊天</string>
<string name="action_add_account">添加账号</string>
<string name="action_edit_contact">编辑</string>
<string name="action_add_phone_book">添加到联系人</string>
<string name="action_delete_contact">XMPP联系人中删除</string>
<string name="action_edit_contact">编辑名</string>
<string name="action_add_phone_book">添加到通讯录</string>
<string name="action_delete_contact">畅聊通讯录中删除</string>
<string name="action_block_contact">封禁联系人</string>
<string name="action_unblock_contact">解封联系人</string>
<string name="action_block_domain">封禁域名</string>
@ -28,33 +28,35 @@
<string name="title_activity_share_via_account">通过帐户分享</string>
<string name="title_activity_block_list">封禁列表</string>
<string name="just_now">刚刚</string>
<string name="minute_ago">1分钟前</string>
<string name="minute_ago">分钟前</string>
<string name="minutes_ago">%d分钟前</string>
<string name="x_unread_conversations">%d条未读消息</string>
<string name="sending">发送中…</string>
<string name="message_decrypting">解密中. 请稍候…</string>
<string name="message_decrypting">解密中请稍候…</string>
<string name="pgp_message">OpenPGP加密的信息</string>
<string name="nick_in_use">用户名已存在</string>
<string name="nick_in_use">用户名已存在</string>
<string name="invalid_muc_nick">无效的用户名</string>
<string name="admin">管理员</string>
<string name="owner">所有者</string>
<string name="moderator">版主</string>
<string name="participant">参与者</string>
<string name="participant">成员</string>
<string name="visitor">访客</string>
<string name="remove_contact_text">将 %s 从XMPP联系人中移除? 与该联系人的会话消息不会清除。</string>
<string name="block_contact_text">您想封禁%s吗</string>
<string name="unblock_contact_text">您想解封 %s吗 </string>
<string name="block_domain_text">封禁 %s 中的所有联系人?</string>
<string name="unblock_domain_text">解封%s 中所有联系人?</string>
<string name="contact_blocked">联系人已封禁</string>
<string name="blocked">已封禁</string>
<string name="remove_bookmark_text">从书签中移除 %s ?相关会话消息不会被清除。</string>
<string name="register_account">在服务器上注册新账户</string>
<string name="change_password_on_server">在服务器上修改密码</string>
<string name="share_with">分享…</string>
<string name="start_conversation">开始会话</string>
<string name="start_conversation">开始聊天</string>
<string name="invite_contact">邀请联系人</string>
<string name="invite">邀请</string>
<string name="contacts">联系人</string>
<string name="contact">联系</string>
<string name="contact">联系</string>
<string name="cancel">取消</string>
<string name="set">设置</string>
<string name="add">添加</string>
@ -65,68 +67,84 @@
<string name="save">保存</string>
<string name="ok">完成</string>
<string name="crash_report_title">畅聊已崩溃</string>
<string name="crash_report_message">通过您的账户发送堆栈跟踪,可以帮助畅聊持续发展。</string>
<string name="send_now">立即发送</string>
<string name="send_never">不再询问</string>
<string name="attach_file">添加文件</string>
<string name="problem_connecting_to_account">无法连接账户</string>
<string name="problem_connecting_to_accounts">无法连接多个账户</string>
<string name="touch_to_fix">点击以管理账户</string>
<string name="attach_file">发送文件</string>
<string name="not_in_roster">该联系人不在您的列表中,需要添加吗 ?</string>
<string name="add_contact">添加联系人</string>
<string name="send_failed">传递失败</string>
<string name="preparing_image">准备发送图片</string>
<string name="preparing_images">准备发送图片</string>
<string name="sharing_files_please_wait">正在分享文件,请稍候…</string>
<string name="action_clear_history">清除历史记录</string>
<string name="clear_conversation_history">清除会话记录</string>
<string name="clear_conversation_history">清除聊天记录</string>
<string name="clear_histor_msg">您确定要删除此聊天中的所有消息吗?\n\n<b>警告:</b>这不会删除存储在其他设备或服务器上的那些消息的副本。</string>
<string name="delete_file_dialog">删除文件</string>
<string name="delete_file_dialog_msg">您确定要删除此文件吗?\n\n <b>警告:</b>这不会删除存储在其他设备或服务器上的此文件的副本。</string>
<string name="also_end_conversation">之后关闭此对话</string>
<string name="also_end_conversation">之后关闭此聊天</string>
<string name="choose_presence">选择设备</string>
<string name="send_unencrypted_message">发送未加密的信息</string>
<string name="send_message">发送信息</string>
<string name="send_message_to_x">发信息给 %s</string>
<string name="send_omemo_message">发送 OMEMO 加密信息</string>
<string name="send_omemo_x509_message">发送 v\\OMEMO 加密信息</string>
<string name="send_pgp_message">发送 OpenPGP 加密信息</string>
<string name="send_omemo_message">发送OMEMO加密信息</string>
<string name="send_omemo_x509_message">发送v\\OMEMO加密信息</string>
<string name="send_pgp_message">发送OpenPGP加密信息</string>
<string name="your_nick_has_been_changed">昵称已被使用</string>
<string name="send_unencrypted">不加密发送</string>
<string name="decryption_failed">解密失败,可能是私钥不正确。</string>
<string name="openkeychain_required">OpenKeychain</string>
<string name="openkeychain_required_long">畅聊使用了第三方app <b>OpenKeychain</b> 来加密、解密信息并管理您的密钥。\n\nOpenKeychain 遵循 GPLv3 并且可以在 F-Droid 和 Google Play 上获取。\n\n<small>(之后请重启畅聊)</small></string>
<string name="restart">重启</string>
<string name="install">安装</string>
<string name="openkeychain_not_installed">请安装OpenKeychain以解密</string>
<string name="offering">输入</string>
<string name="offering">提供</string>
<string name="waiting">等待…</string>
<string name="no_pgp_key">未发现 OpenPGP 密钥</string>
<string name="no_pgp_keys">未找到 OpenPGP 密钥</string>
<string name="contact_has_no_pgp_key">因您的联系人未公布公钥,畅聊未能成功加密您的信息。\n\n<small>请通知对方设置OpenPGP。</small></string>
<string name="no_pgp_keys">未找到OpenPGP密钥</string>
<string name="contacts_have_no_pgp_keys">因您的联系人未公布公钥,畅聊未能成功加密您的信息。\n\n<small>请通知对方设置OpenPGP.</small></string>
<string name="pref_general">常规</string>
<string name="pref_accept_files">接收文件</string>
<string name="pref_accept_files_summary">自动接收小于此大小的文件</string>
<string name="pref_attachments">附件</string>
<string name="pref_notification_settings">通知</string>
<string name="pref_vibrate"></string>
<string name="pref_vibrate_summary">收到新消息时</string>
<string name="pref_led">LED 灯提示</string>
<string name="pref_vibrate"></string>
<string name="pref_vibrate_summary">收到新消息时</string>
<string name="pref_led">通知灯</string>
<string name="pref_led_summary">收到新消息时闪烁通知灯</string>
<string name="pref_ringtone">铃声</string>
<string name="pref_notification_sound">通知铃声</string>
<string name="pref_notification_sound_summary">新消息通知铃声</string>
<string name="pref_call_ringtone_summary">来电铃声</string>
<string name="pref_notification_grace_period">静默期限</string>
<string name="pref_notification_grace_period_summary">您的其他设备之一上检测到活动之后,时间通知的长度将被静音。</string>
<string name="pref_notification_grace_period">静默时间段</string>
<string name="pref_notification_grace_period_summary">其他设备上检测到活动之后,通知在此时间段内将被静音。</string>
<string name="pref_advanced_options">高级</string>
<string name="pref_never_send_crash">从不发送崩溃报告</string>
<string name="pref_never_send_crash_summary">通过发送堆栈跟踪,您可以帮助畅聊持续发展</string>
<string name="pref_confirm_messages">确认消息</string>
<string name="pref_confirm_messages_summary">让对方知道你收到并阅读了他们的消息</string>
<string name="pref_ui_options">用户界面</string>
<string name="openpgp_error">OpenKeychain报告一个错误。</string>
<string name="bad_key_for_encryption">错误的密钥</string>
<string name="accept">接受</string>
<string name="error">产生了一个错误</string>
<string name="recording_error">错误</string>
<string name="your_account">你的账</string>
<string name="send_presence_updates">发送在线联系人列表更新</string>
<string name="receive_presence_updates">接收在线联系人列表更新</string>
<string name="ask_for_presence_updates">请求在线联系人列表更新</string>
<string name="your_account">你的账</string>
<string name="send_presence_updates">发送在线状态更新</string>
<string name="receive_presence_updates">接收在线状态更新</string>
<string name="ask_for_presence_updates">请求在线状态更新</string>
<string name="attach_choose_picture">选择图片</string>
<string name="attach_take_picture">拍摄图片</string>
<string name="preemptively_grant">预先同意订阅请求</string>
<string name="error_not_an_image_file">您选择的文件不是图像文件</string>
<string name="error_not_an_image_file">您选择的文件不是图像</string>
<string name="error_compressing_image">无法转换图片</string>
<string name="error_file_not_found">未找到文件</string>
<string name="error_io_exception">常规的 I/O 错误。可能是存储空间不足?</string>
<string name="error_security_exception_during_image_copy">您用来选择图片的程序没有给予读取权限。\n\n &lt;/small&gt;尝试其他文件管理器选择图片&lt;/small&gt;</string>
<string name="account_status_unknown">未知</string>
<string name="account_status_disabled">暂时不可用</string>
<string name="account_status_online">在线</string>
@ -138,8 +156,9 @@
<string name="account_status_regis_fail">注册失败</string>
<string name="account_status_regis_conflict"> 用户名已存在</string>
<string name="account_status_regis_success">注册完成</string>
<string name="account_status_regis_not_sup">服务器不支持注册</string>
<string name="account_status_regis_invalid_token">无效的注册令牌</string>
<string name="account_status_tls_error">TLS 协商失败</string>
<string name="account_status_tls_error">TLS协商失败</string>
<string name="account_status_policy_violation">违反政策</string>
<string name="account_status_incompatible_server">服务器不兼容</string>
<string name="account_status_stream_error">流错误</string>
@ -151,54 +170,62 @@
<string name="mgmt_account_delete">删除账号</string>
<string name="mgmt_account_disable">暂时不可用</string>
<string name="mgmt_account_publish_avatar">发布头像</string>
<string name="mgmt_account_publish_pgp">发布 OpenPGP 公钥</string>
<string name="unpublish_pgp">移除 OpenPGP 公钥</string>
<string name="unpublish_pgp_message">您确定要从在线通知中移除 OpenPGP 公钥吗?\n您的联系人将无法再向您发送 OpenPGP 加密信息。</string>
<string name="mgmt_account_publish_pgp">发布OpenPGP公钥</string>
<string name="unpublish_pgp">移除OpenPGP公钥</string>
<string name="unpublish_pgp_message">您确定要从在线状态中移除OpenPGP公钥吗\n您的联系人将无法再向您发送 OpenPGP 加密信息。</string>
<string name="openpgp_has_been_published">OpenPGP公钥已发布</string>
<string name="mgmt_account_enable">启用账户</string>
<string name="mgmt_account_are_you_sure">确定?</string>
<string name="attach_record_voice">录音</string>
<string name="mgmt_account_delete_confirm_text">如果您删除帐户,您的所有聊天记录将会丢失</string>
<string name="attach_record_voice">录制音频</string>
<string name="account_settings_jabber_id">XMPP地址</string>
<string name="block_jabber_id">拦截XMPP地址</string>
<string name="account_settings_example_jabber_id">username@example.com</string>
<string name="password">密码</string>
<string name="invalid_jid">这不是有效的XMPP地址</string>
<string name="add_phone_book_text">是否添加 %s 到地址薄?</string>
<string name="server_info_show_more">服务器信息</string>
<string name="server_info_mam">XEP-0313消息归档管理</string>
<string name="server_info_carbon_messages">XEP-0280消息复写</string>
<string name="error_out_of_memory">空间不足。图片过大</string>
<string name="add_phone_book_text">是否添加%s到通讯录</string>
<string name="server_info_show_more">服务器属性</string>
<string name="server_info_mam">XEP-0313消息存档管理</string>
<string name="server_info_carbon_messages">XEP-0280消息抄送</string>
<string name="server_info_csi">XEP-0352客户端状态指示</string>
<string name="server_info_blocking">XEP-0191屏蔽指令</string>
<string name="server_info_roster_version">XEP-0237名单版本</string>
<string name="server_info_roster_version">XEP-0237通讯录版本管理</string>
<string name="server_info_stream_management">XEP-0198流管理</string>
<string name="server_info_external_service_discovery">XEP-0215发现外部服务</string>
<string name="server_info_pep">XEP-0163PEP(头像/OMEMO</string>
<string name="server_info_pep">XEP-0163个人事件协议(头像/OMEMO</string>
<string name="server_info_http_upload">XEP-0363HTTP文件上传</string>
<string name="server_info_push">XEP-0357推送</string>
<string name="server_info_available">有效</string>
<string name="server_info_unavailable">无效</string>
<string name="missing_public_keys">缺少公钥通知</string>
<string name="last_seen_now">刚刚查看过</string>
<string name="last_seen_mins">%d分钟前查看过</string>
<string name="last_seen_hours">%d小时前查看过</string>
<string name="last_seen_days">%d天前查看过</string>
<string name="openpgp_key_id">OpenPGP 密钥 ID</string>
<string name="omemo_fingerprint">OMEMO 指纹</string>
<string name="omemo_fingerprint_x509">v\\OMEMO 指纹</string>
<string name="omemo_fingerprint_selected_message">消息的 OMEMO 指纹</string>
<string name="omemo_fingerprint_x509_selected_message">消息的 OMEMO 指纹</string>
<string name="last_seen_now">刚来过</string>
<string name="last_seen_min">一分钟前来过</string>
<string name="last_seen_mins">%d分钟来过</string>
<string name="last_seen_hour">一小时前来过</string>
<string name="last_seen_hours">%d小时前来过</string>
<string name="last_seen_day">一天前来过</string>
<string name="last_seen_days">%d天前来过</string>
<string name="install_openkeychain">加密信息。请安装OpenKeychain以解密。</string>
<string name="openpgp_messages_found">发现新OpenPGP加密信息</string>
<string name="openpgp_key_id">OpenPGP密钥ID</string>
<string name="omemo_fingerprint">OMEMO指纹</string>
<string name="omemo_fingerprint_x509">v\\OMEMO指纹</string>
<string name="omemo_fingerprint_selected_message">消息的OMEMO指纹</string>
<string name="omemo_fingerprint_x509_selected_message">消息的OMEMO指纹</string>
<string name="other_devices">其他设备</string>
<string name="trust_omemo_fingerprints">信任的 OMEMO 指纹</string>
<string name="trust_omemo_fingerprints">信任的OMEMO指纹</string>
<string name="fetching_keys">获取密钥中</string>
<string name="done">完成</string>
<string name="decrypt">解密</string>
<string name="bookmarks">书签</string>
<string name="search">查找</string>
<string name="search">搜索</string>
<string name="enter_contact">输入联系人</string>
<string name="delete_contact">删除联系人</string>
<string name="view_contact_details">查看联系人详细信息</string>
<string name="block_contact">屏蔽联系人</string>
<string name="unblock_contact">除联系人屏蔽</string>
<string name="create"></string>
<string name="block_contact">封禁联系人</string>
<string name="unblock_contact">封联系人</string>
<string name="create"></string>
<string name="select">选择</string>
<string name="contact_already_exists">联系人已存在</string>
<string name="join">加入</string>
@ -207,42 +234,49 @@
<string name="save_as_bookmark">保存为书签</string>
<string name="delete_bookmark">删除书签</string>
<string name="destroy_room">解散群聊</string>
<string name="destroy_channel">解散群聊</string>
<string name="destroy_channel">解散频道</string>
<string name="destroy_room_dialog">您确定要解散此群聊吗?\n\n<b>警告:</b>此群聊将在服务器上完全删除。</string>
<string name="destroy_channel_dialog">您确定要解散此公共群聊吗?\n\n<b>警告:</b>该群聊将在服务器上完全删除。</string>
<string name="destroy_channel_dialog">您确定要解散此公共频道吗?\n\n<b>警告:</b>该频道将在服务器上完全删除。</string>
<string name="could_not_destroy_room">无法解散群聊</string>
<string name="could_not_destroy_channel">无法解散群聊</string>
<string name="could_not_destroy_channel">无法解散频道</string>
<string name="action_edit_subject">编辑群聊主题</string>
<string name="topic">主题</string>
<string name="joining_conference">正在加入群聊…</string>
<string name="leave">离开</string>
<string name="contact_added_you">联系人已添加你到联系人列表</string>
<string name="contact_added_you">联系人已添加你到通讯录</string>
<string name="add_back">反向添加</string>
<string name="contact_has_read_up_to_this_point">%s 读到这里了</string>
<string name="contacts_have_read_up_to_this_point">%s 读到这里了</string>
<string name="contacts_and_n_more_have_read_up_to_this_point">%1$s 和另外%2$d人读到这里了</string>
<string name="everyone_has_read_up_to_this_point">所有人都读到这里了</string>
<string name="publish">发布</string>
<string name="touch_to_choose_picture">点击头像以选择图片</string>
<string name="publishing">正在发布…</string>
<string name="error_publish_avatar_server_reject">服务器拒绝了您的发布请求</string>
<string name="error_publish_avatar_converting">无法转换图片</string>
<string name="error_saving_avatar">不能将头像保存至磁盘</string>
<string name="or_long_press_for_default">(或长按按钮将返回默认头像)</string>
<string name="or_long_press_for_default">(长按以恢复默认)</string>
<string name="error_publish_avatar_no_server_support">服务器不支持头像</string>
<string name="private_message">私聊</string>
<string name="private_message_to">至 %s</string>
<string name="send_private_message_to">发送私密消息到 %s</string>
<string name="send_private_message_to">与%s私聊</string>
<string name="connect">连接</string>
<string name="account_already_exists">该账号已存在</string>
<string name="next">下一步</string>
<string name="server_info_session_established">会话已建立</string>
<string name="skip">跳过</string>
<string name="disable_notifications">关闭通知</string>
<string name="enable">打开通知</string>
<string name="enable">启用</string>
<string name="conference_requires_password">需要密码才能进入该群聊</string>
<string name="enter_password">输入密码</string>
<string name="request_now">现在发送请求</string>
<string name="request_presence_updates">请先发送更新在线状态请求。\n\n<small>以判断您的联系人所用的客户端类型。</small></string>
<string name="request_now">现在请求</string>
<string name="ignore">忽略</string>
<string name="without_mutual_presence_updates"><b>警告:</b>在没有相互更新在线状态的情况下发送将会出现未知问题。\n\n<small>前往联系人详情以验证您订阅的在线状态。</small></string>
<string name="pref_security_settings">安全</string>
<string name="pref_allow_message_correction">允许更正消息</string>
<string name="pref_allow_message_correction_summary">允许您的联系人追回编辑他们的信息</string>
<string name="pref_expert_options">专家设置</string>
<string name="pref_allow_message_correction_summary">允许对方发送后编辑信息</string>
<string name="pref_expert_options">高级设置</string>
<string name="pref_expert_options_summary">请谨慎使用</string>
<string name="title_activity_about_x">关于%s</string>
<string name="title_pref_quiet_hours">静默时间段</string>
@ -251,22 +285,24 @@
<string name="title_pref_enable_quiet_hours">启用静默时间段</string>
<string name="pref_quiet_hours_summary">在静默时间段内通知将保持静音</string>
<string name="pref_expert_options_other">其他</string>
<string name="pref_autojoin">同步书签</string>
<string name="conference_banned">你已经被封禁了</string>
<string name="conference_members_only">这个群组只允许群组成员聊天</string>
<string name="pref_autojoin">与书签同步</string>
<string name="pref_autojoin_summary">根据书签标记自动加入群聊。</string>
<string name="toast_message_omemo_fingerprint">OMEMO指纹已拷贝到剪贴板</string>
<string name="conference_banned">您被封禁了</string>
<string name="conference_members_only">这个群聊只允许成员聊天</string>
<string name="conference_resource_constraint">资源限制</string>
<string name="conference_kicked">您已被移出该群组了</string>
<string name="conference_shutdown">这个群已被关闭</string>
<string name="conference_kicked">被从此群聊踢出</string>
<string name="conference_shutdown">这个群已被关闭</string>
<string name="conference_unknown_error">您已不在该群组</string>
<string name="using_account">使用帐户%s</string>
<string name="hosted_on">托管于%s</string>
<string name="checking_x">正在 HTTP 服务器中检查 %s</string>
<string name="not_connected_try_again">你没有连接。请稍后重试</string>
<string name="check_x_filesize">检查 %s 大小</string>
<string name="check_x_filesize_on_host"> %2$s 上检查 %1$s 的大小</string>
<string name="checking_x">正在HTTP服务器中检查%s</string>
<string name="not_connected_try_again">连接。请稍后重试</string>
<string name="check_x_filesize">检查%s的大小</string>
<string name="check_x_filesize_on_host">在%2$s上检查%1$s的大小</string>
<string name="message_options">消息选项</string>
<string name="quote">引用</string>
<string name="paste_as_quote">粘贴引用</string>
<string name="paste_as_quote">作为引用粘贴</string>
<string name="copy_original_url">复制原始URL</string>
<string name="send_again">重新发送</string>
<string name="file_url">文件URL</string>
@ -276,39 +312,50 @@
<string name="web_address">web地址</string>
<string name="scan_qr_code">扫描二维码</string>
<string name="show_qr_code">显示二维码</string>
<string name="show_block_list">显示黑名单</string>
<string name="show_block_list">显示封禁列表</string>
<string name="account_details">账户详情</string>
<string name="confirm">确认</string>
<string name="try_again">再试一遍</string>
<string name="pref_keep_foreground_service_summary">防止操作系统中断你的连接</string>
<string name="try_again">重试</string>
<string name="pref_keep_foreground_service">前台服务</string>
<string name="pref_keep_foreground_service_summary">防止操作系统中断连接</string>
<string name="pref_create_backup">创建备份</string>
<string name="pref_create_backup_summary">备份文件将存在%s</string>
<string name="pref_create_backup_summary">备份文件将存在%s</string>
<string name="notification_create_backup_title">正在备份文件</string>
<string name="notification_backup_created_title">您的备份已创建完成</string>
<string name="notification_backup_created_title">备份已创建</string>
<string name="notification_backup_created_subtitle">此备份文件已经存储在%s</string>
<string name="restoring_backup">正在恢复备份</string>
<string name="notification_restored_backup_title">您的备份已恢复完成</string>
<string name="notification_restored_backup_subtitle">不要忘记启用该帐号。</string>
<string name="notification_restored_backup_title">备份已恢复</string>
<string name="notification_restored_backup_subtitle">别忘了启用帐号。</string>
<string name="choose_file">选择文件</string>
<string name="receiving_x_file">接收中 %1$s (已完成 %2$d%%)</string>
<string name="receiving_x_file">正在接受%1$s (已完成%2$d%%)</string>
<string name="download_x_file">下载 %s</string>
<string name="delete_x_file">删除 %s</string>
<string name="file">文件</string>
<string name="open_x_file"> 打开 %s</string>
<string name="sending_file">正在发送(已完成%1$d%%</string>
<string name="preparing_file">准备传输文件</string>
<string name="x_file_offered_for_download">可以下载 %s</string>
<string name="cancel_transmission">取消传输</string>
<string name="file_transmission_failed">文件传输失败</string>
<string name="file_transmission_cancelled">文件传输已取消</string>
<string name="file_deleted">文件已经删除</string>
<string name="no_application_found_to_open_file">没有可以打开此文件的应用</string>
<string name="no_application_found_to_open_link">没有可以打开此链接的应用</string>
<string name="no_application_found_to_view_contact">未找到可以查看联系人的应用</string>
<string name="pref_show_dynamic_tags">动态标签</string>
<string name="pref_show_dynamic_tags_summary">在联系人下方显示只读标签</string>
<string name="enable_notifications">启用通知</string>
<string name="no_conference_server_found">未找到该群聊的服务器</string>
<string name="no_conference_server_found">未找到群聊服务器</string>
<string name="conference_creation_failed">群聊创建失败</string>
<string name="account_image_description">账户头像</string>
<string name="copy_omemo_clipboard_description">复制OMEMO指纹到剪贴板</string>
<string name="regenerate_omemo_key">重新生成OMEMO密钥</string>
<string name="clear_other_devices">清除设备</string>
<string name="clear_other_devices_desc">清除所有其他设备的 OMEMO 通告?下次设备连接时将重新通告,但可能收不到你发送的消息。</string>
<string name="error_no_keys_to_trust_server_error">此联系人没有可用的密钥。\n从服务器获取密钥失败。也许你的联系人所在服务器发生问题。</string>
<string name="error_no_keys_to_trust_presence">没有可以用于这个账户的密钥。\n请确保你有相互的在线状态的订阅。</string>
<string name="error_trustkeys_title">出错了</string>
<string name="fetching_history_from_server">从服务器获取历史记录</string>
<string name="fetching_history_from_server">正在从服务器获取历史记录</string>
<string name="no_more_history_on_server">服务器上没有更多历史记录</string>
<string name="updating">更新中…</string>
<string name="password_changed">密码已修改!</string>
@ -316,85 +363,90 @@
<string name="change_password">修改密码</string>
<string name="current_password">当前密码</string>
<string name="new_password">新密码</string>
<string name="password_should_not_be_empty">密码不能为空</string>
<string name="enable_all_accounts">启用所有账户</string>
<string name="disable_all_accounts">禁用所有账户</string>
<string name="perform_action_with">选择一个操作</string>
<string name="no_affiliation">没有从属关系</string>
<string name="no_role">离线</string>
<string name="outcast">抛弃</string>
<string name="outcast">已封禁</string>
<string name="member">成员</string>
<string name="advanced_mode">高级模式</string>
<string name="grant_membership">授予成员权限</string>
<string name="remove_membership">销成员权限</string>
<string name="remove_membership">销成员权限</string>
<string name="grant_admin_privileges">授予管理员权限</string>
<string name="remove_admin_privileges">吊销管理员权限</string>
<string name="grant_owner_privileges">授予所有者权限</string>
<string name="remove_owner_privileges">销所有者权限</string>
<string name="remove_owner_privileges">销所有者权限</string>
<string name="remove_from_room">从群聊中移除</string>
<string name="remove_from_channel">群聊中移除</string>
<string name="remove_from_channel">频道中移除</string>
<string name="could_not_change_affiliation">不能修改 %s 的从属关系</string>
<string name="ban_from_conference">屏蔽群聊</string>
<string name="ban_from_channel">从群聊中屏蔽</string>
<string name="ban_now">现在屏蔽</string>
<string name="ban_from_conference">从群聊中封禁</string>
<string name="ban_from_channel">从频道中封禁</string>
<string name="removing_from_public_conference">%s将被从公共频道中移除。只有将此用户封禁才能将他永远移除。</string>
<string name="ban_now">立刻封禁</string>
<string name="could_not_change_role">不能修改 %s 的角色</string>
<string name="conference_options">私密群聊设置</string>
<string name="channel_options">公开群聊设置</string>
<string name="channel_options">公开频道设置</string>
<string name="members_only">私密,只有成员可以加入</string>
<string name="non_anonymous">使XMPP地址对所有人可见</string>
<string name="moderated">使群聊受到管理</string>
<string name="moderated">使频道受到管理</string>
<string name="you_are_not_participating">您尚未参与</string>
<string name="modified_conference_options">组设置修改成功!</string>
<string name="could_not_modify_conference_options">无法更改群设置</string>
<string name="modified_conference_options">聊设置修改成功!</string>
<string name="could_not_modify_conference_options">无法更改群设置</string>
<string name="never">从不</string>
<string name="until_further_notice">到重新开启通知</string>
<string name="until_further_notice">至另行通知</string>
<string name="snooze">小睡</string>
<string name="reply">回复</string>
<string name="mark_as_read">标记为已读</string>
<string name="pref_input_options">输入</string>
<string name="pref_enter_is_send">点击回车发送</string>
<string name="pref_enter_is_send_summary">回车键发送消息</string>
<string name="pref_enter_is_send_summary">回车键发送消息</string>
<string name="pref_display_enter_key">显示回车键</string>
<string name="pref_display_enter_key_summary">改变表情键为回车键</string>
<string name="pref_display_enter_key_summary">将表情键改为回车键</string>
<string name="audio">音频</string>
<string name="video">视频</string>
<string name="image">图片</string>
<string name="pdf_document">PDF文档</string>
<string name="apk">Android应用</string>
<string name="apk">Android程序</string>
<string name="vcard">联系人</string>
<string name="avatar_has_been_published">头像已经发布!</string>
<string name="sending_x_file">正在发送%s</string>
<string name="offering_x_file">提供%s</string>
<string name="offering_x_file">正在提供%s</string>
<string name="hide_offline">隐藏离线联系人</string>
<string name="contact_is_typing">%s 正在输入</string>
<string name="contact_has_stopped_typing">%s 已停止输入</string>
<string name="contacts_are_typing">%s 正在输入</string>
<string name="contacts_have_stopped_typing">%s 已停止输入</string>
<string name="pref_chat_states">键盘输入通知</string>
<string name="contact_is_typing">%s正在输入</string>
<string name="contact_has_stopped_typing">%s已停止输入</string>
<string name="contacts_are_typing">%s正在输入</string>
<string name="contacts_have_stopped_typing">%s已停止输入</string>
<string name="pref_chat_states">输入通知</string>
<string name="pref_chat_states_summary">让对方知道你正在输入</string>
<string name="send_location">发送位置</string>
<string name="show_location">显示位置</string>
<string name="no_application_found_to_display_location">无法找到显示位置的应用</string>
<string name="location">位置</string>
<string name="title_undo_swipe_out_conversation">会话已关闭</string>
<string name="title_undo_swipe_out_conversation">聊天已关闭</string>
<string name="title_undo_swipe_out_group_chat">离开私密群聊</string>
<string name="title_undo_swipe_out_channel">离开公开群聊</string>
<string name="pref_dont_trust_system_cas_title">信系统 CA</string>
<string name="pref_dont_trust_system_cas_summary">所有证书必须人工通过</string>
<string name="title_undo_swipe_out_channel">离开公开频道</string>
<string name="pref_dont_trust_system_cas_title">不信系统CA</string>
<string name="pref_dont_trust_system_cas_summary">所有证书必须手动通过</string>
<string name="pref_remove_trusted_certificates_title">移除证书</string>
<string name="pref_remove_trusted_certificates_summary">删除人工通过的证书</string>
<string name="toast_no_trusted_certs">没有人工通过的证书</string>
<string name="pref_remove_trusted_certificates_summary">删除手动通过的证书</string>
<string name="toast_no_trusted_certs">没有手动通过的证书</string>
<string name="dialog_manage_certs_title">移除证书</string>
<string name="dialog_manage_certs_positivebutton">删除选</string>
<string name="dialog_manage_certs_positivebutton">删除</string>
<string name="dialog_manage_certs_negativebutton">取消</string>
<plurals name="toast_delete_certificates">
<item quantity="other">%d 个证书已被删除</item>
<item quantity="other">%d个证书已被删除</item>
</plurals>
<string name="pref_quick_action_summary">以快捷操作替代发送按钮</string>
<string name="pref_quick_action">快捷操作</string>
<string name="none"></string>
<string name="recently_used">最近常用</string>
<string name="recently_used">刚用过的</string>
<string name="choose_quick_action">选择快捷操作</string>
<string name="search_contacts">搜索联系人</string>
<string name="search_bookmarks">搜索书签</string>
<string name="send_private_message">发送私密消息</string>
<string name="user_has_left_conference">%1$s离开了群聊</string>
<string name="username">用户名</string>
<string name="username_hint">用户名</string>
<string name="invalid_username">该用户名无效</string>
@ -402,73 +454,93 @@
<string name="download_failed_file_not_found">下载失败:未找到文件</string>
<string name="download_failed_could_not_connect">下载失败:无法连接到服务器</string>
<string name="download_failed_could_not_write_file">下载失败:不能写入文件</string>
<string name="account_status_tor_unavailable">Tor network 不可用</string>
<string name="account_status_tor_unavailable">Tor网络不可用</string>
<string name="account_status_bind_failure">绑定失败</string>
<string name="account_status_host_unknown">服务器不能为域名做出响应</string>
<string name="server_info_broken">损坏</string>
<string name="pref_presence_settings">可用性</string>
<string name="pref_away_when_screen_off">关闭屏幕时离开</string>
<string name="pref_away_when_screen_off_summary">当屏幕关闭时将标记您的资源为离开状态</string>
<string name="pref_away_when_screen_off">锁屏时显示离开</string>
<string name="pref_away_when_screen_off_summary">锁屏时标记为离开状态</string>
<string name="pref_dnd_on_silent_mode">静音模式时设为“请勿打扰”</string>
<string name="pref_dnd_on_silent_mode_summary">当设备进入静音模式时把资源标识改为“请勿打扰”</string>
<string name="pref_treat_vibrate_as_silent">静音模式开启振动</string>
<string name="pref_treat_vibrate_as_dnd_summary">当设备进入震动模式时把资源标识改为“请勿打扰”</string>
<string name="pref_dnd_on_silent_mode_summary">当设备静音时标记为“请勿打扰”状态</string>
<string name="pref_treat_vibrate_as_silent">将振动看作静音</string>
<string name="pref_treat_vibrate_as_dnd_summary">使用振动模式时标记为“请勿打扰”状态</string>
<string name="pref_show_connection_options">高级连接设置</string>
<string name="pref_show_connection_options_summary">注册账户时显示主机名和端口</string>
<string name="hostname_example">xmpp.example.com</string>
<string name="action_add_account_with_certificate">使用证书添加账户</string>
<string name="unable_to_parse_certificate">无法解析证书</string>
<string name="authenticate_with_certificate">留空以使用证书认证</string>
<string name="mam_prefs">压缩设置</string>
<string name="server_side_mam_prefs">服务端压缩设置</string>
<string name="fetching_mam_prefs">正在获取压缩设置。请稍候……</string>
<string name="captcha_hint">输入上图中的文字</string>
<string name="mam_prefs">存档设置</string>
<string name="server_side_mam_prefs">服务端存档设置</string>
<string name="fetching_mam_prefs">正在获取存档设置。请稍候……</string>
<string name="unable_to_fetch_mam_prefs">无法获取存档配置</string>
<string name="captcha_required">需要验证码</string>
<string name="captcha_hint">输入上图文字</string>
<string name="certificate_chain_is_not_trusted">证书链不受信任</string>
<string name="jid_does_not_match_certificate">XMPP地址与证书不匹配</string>
<string name="action_renew_certificate">更新证书</string>
<string name="error_fetching_omemo_key">获取 OMEMO 密钥错误!</string>
<string name="verified_omemo_key_with_certificate">请用证书验证 OMEMO 密钥!</string>
<string name="device_does_not_support_certificates">您的设备不支持设备证书选择!</string>
<string name="error_fetching_omemo_key">获取OMEMO密钥时发生错误!</string>
<string name="verified_omemo_key_with_certificate">请用证书验证OMEMO密钥</string>
<string name="device_does_not_support_certificates">您的设备不支持客户端证书选择!</string>
<string name="pref_connection_options">连接</string>
<string name="pref_use_tor">通过 Tor 连接</string>
<string name="pref_use_tor_summary">所有连接使用 Tor 网络传输,需要 Orbot</string>
<string name="account_settings_hostname">主机</string>
<string name="pref_use_tor">通过Tor连接</string>
<string name="pref_use_tor_summary">所有连接使用Tor网络传输需要Orbot</string>
<string name="account_settings_hostname">服务器</string>
<string name="account_settings_port">端口</string>
<string name="hostname_or_onion">服务器或者.onion地址</string>
<string name="not_a_valid_port">该端口号无效</string>
<string name="not_valid_hostname">该主机名无效</string>
<string name="connected_accounts">%2$d 个中的 %1$d 账户已连接</string>
<string name="connected_accounts">%2$d个账户中的%1$d个已连接</string>
<plurals name="x_messages">
<item quantity="other">%d 条消息</item>
<item quantity="other">%d条消息</item>
</plurals>
<string name="load_more_messages">载入更多消息</string>
<string name="load_more_messages">加载更多消息</string>
<string name="shared_file_with_x">文件已分享给%s</string>
<string name="shared_image_with_x">图片已分享给%s</string>
<string name="shared_images_with_x">图片已分享给%s</string>
<string name="shared_text_with_x">文本已分享给%s</string>
<string name="no_storage_permission">允许畅聊访问外部储存</string>
<string name="no_camera_permission">允许畅聊使用摄像头</string>
<string name="sync_with_contacts">同步联系人</string>
<string name="sync_with_contacts_long">将服务器端联系人与本地联系人匹配可以显示联系人的全名与头像。\n\n此应用只在本地读取并匹配联系人。\n\n现在应用将请求联系人权限。</string>
<string name="sync_with_contacts_quicksy"><![CDATA[Quicksy可以匹配您的通讯录以确定哪些人已经在使用此应用。<br><br>我们并不储存这些号码。\n\n更多信息请阅读<a href="https://quicksy.im/#privacy">隐私政策</a>。接下来将请求通讯录权限。]]></string>
<string name="notify_on_all_messages">为所有信息显示通知</string>
<string name="notify_only_when_highlighted">只在被提到时通知</string>
<string name="notify_never">禁用通知</string>
<string name="notify_paused">暂停通知</string>
<string name="notify_never">通知已禁用</string>
<string name="notify_paused">通知已暂停</string>
<string name="pref_picture_compression">图像压缩</string>
<string name="pref_picture_compression_summary">提示:使用“选择文件”而不是“选择图片”来发送未经压缩的单个图像,无论此设置如何</string>
<string name="pref_picture_compression_summary">提示:使用“选择文件”发送原图。这将忽略此设置</string>
<string name="always">总是</string>
<string name="large_images_only">仅大图片</string>
<string name="battery_optimizations_enabled">启用节电模式</string>
<string name="battery_optimizations_enabled">节电模式已启用</string>
<string name="battery_optimizations_enabled_explained">你的设备正在为畅聊进行电池优化,这可能导致通知的延迟甚至消息的丢失。\n建议禁用电池优化。</string>
<string name="battery_optimizations_enabled_dialog">你的设备正在为畅聊进行电池优化,这可能导致通知的延迟甚至消息的丢失。\n你将会被提示禁用该功能。</string>
<string name="disable">禁用</string>
<string name="selection_too_large">选择区域过大</string>
<string name="no_accounts">(没有激活的账户)</string>
<string name="no_accounts">(没有启用的账户)</string>
<string name="this_field_is_required">必填</string>
<string name="correct_message">更正消息</string>
<string name="send_corrected_message">发送更正后的消息</string>
<string name="no_keys_just_confirm">您已经验证了该用户。点击“完成”让%s加入群聊。 </string>
<string name="this_account_is_disabled">你已经禁用了此账户</string>
<string name="security_error_invalid_file_access">安全错误:文件访问无效</string>
<string name="no_application_to_share_uri">未找到可以分享此链接的应用</string>
<string name="share_uri_with">分享链接……</string>
<string name="welcome_text_quicksy"><![CDATA[Quicksy是从受欢迎的XMPP客户端对话中分离出来的具有自动联系人发现功能<br><br>您注册了电话号码Quicksy就会根据您的通讯录中的电话号码自动为您建议可能的联系人<br><br>签署即表示您同意我们的<a href="https://quicksy.im/#privacy">隐私政策</a>。]]></string>
<string name="agree_and_continue">同意并继续</string>
<string name="magic_create_text">此向导将为您在conversations.im¹上创建一个账户。\n您的联系人可以通过您的XMPP完整地址与您聊天。</string>
<string name="your_full_jid_will_be">您的XMPP完整地址将是%s</string>
<string name="create_account">创建账户</string>
<string name="use_own_provider">使用我自己的服务</string>
<string name="use_own_provider">使用我自己的服务</string>
<string name="pick_your_username">输入您的用户名</string>
<string name="pref_manually_change_presence">手动更改状态</string>
<string name="pref_manually_change_presence">手动更改在线状态</string>
<string name="pref_manually_change_presence_summary">编辑状态信息时,您的状态</string>
<string name="status_message">状态信息</string>
<string name="presence_chat">免费聊天室</string>
<string name="presence_chat">有空聊天</string>
<string name="presence_online">在线</string>
<string name="presence_away">离开</string>
<string name="presence_xa">离线</string>
<string name="presence_xa">没时间</string>
<string name="presence_dnd">忙碌</string>
<string name="secure_password_generated">安全密码已生成</string>
<string name="device_does_not_support_battery_op">该设备不支持禁用电池优化</string>
@ -481,52 +553,69 @@
<string name="gp_short"></string>
<string name="gp_medium"></string>
<string name="gp_long"></string>
<string name="pref_broadcast_last_activity">广播使用应用的时间</string>
<string name="pref_broadcast_last_activity_summary">让联系人知道你使用畅聊的时间</string>
<string name="pref_privacy">隐私</string>
<string name="pref_theme_options">主题</string>
<string name="pref_theme_options_summary">选择调色板</string>
<string name="pref_theme_options_summary">选择主题色彩</string>
<string name="pref_theme_automatic">自动</string>
<string name="pref_theme_light">明亮</string>
<string name="pref_theme_dark">灰暗</string>
<string name="pref_use_green_background">绿色背景</string>
<string name="pref_use_green_background_summary">接收到的消息使用绿色背景</string>
<string name="this_device_is_no_longer_in_use">此设备不再使用</string>
<string name="unable_to_connect_to_keychain">无法连接到OpenKeychain</string>
<string name="this_device_is_no_longer_in_use">不再使用此设备</string>
<string name="type_pc">电脑</string>
<string name="type_phone">手机</string>
<string name="type_tablet">平板</string>
<string name="type_web">浏览器</string>
<string name="type_console">控制台</string>
<string name="payment_required">需要付款</string>
<string name="missing_internet_permission">允许联网</string>
<string name="me"></string>
<string name="contact_asks_for_presence_subscription">联系人请求在线订阅</string>
<string name="contact_asks_for_presence_subscription">联系人请求在线状态订阅</string>
<string name="allow">允许</string>
<string name="no_permission_to_access_x">没有访问 %s 的许可</string>
<string name="no_permission_to_access_x">无权访问%s</string>
<string name="remote_server_not_found">找不到远程服务器</string>
<string name="remote_server_timeout">远程服务器超时</string>
<string name="pref_delete_omemo_identities">删除 OMEMO 身份</string>
<string name="unable_to_update_account">无法更新账户</string>
<string name="report_jid_as_spammer">举报此账户发送垃圾信息</string>
<string name="pref_delete_omemo_identities">删除OMEMO身份</string>
<string name="pref_delete_omemo_identities_summary">重新生成OMEMO密钥。所有联系人都需要再次认证。请将此作为最后的办法。</string>
<string name="delete_selected_keys">删除选择的密钥</string>
<string name="error_publish_avatar_offline">你需要连接才能发布头像</string>
<string name="show_error_message">显示出错消息</string>
<string name="error_message">出错消息</string>
<string name="data_saver_enabled">省流量模式已激活</string>
<string name="error_message">出错信息</string>
<string name="data_saver_enabled">省流量模式已启用</string>
<string name="data_saver_enabled_explained">您的操作系统禁止本程序在后台运行时访问互联网。为了收到新消息提示,您需要在省流量模式下允许本程序不受限制地访问互联网。\n本程序仍会尽可能节省流量。</string>
<string name="device_does_not_support_data_saver">该设备不支持禁用省流量模式</string>
<string name="this_device_has_been_verified">此设备已经验证</string>
<string name="error_unable_to_create_temporary_file">无法创建临时文件</string>
<string name="this_device_has_been_verified">已验证此设备</string>
<string name="copy_fingerprint">复制指纹</string>
<string name="all_omemo_keys_have_been_verified">所有OMEMO密钥都已验证</string>
<string name="barcode_does_not_contain_fingerprints_for_this_conversation">条码不包含用于聊天的指纹。</string>
<string name="verified_fingerprints">已验证的指纹</string>
<string name="use_camera_icon_to_scan_barcode">使用相机扫描一个联系人的条码</string>
<string name="please_wait_for_keys_to_be_fetched">请等待密钥被获取</string>
<string name="share_as_barcode">分享条</string>
<string name="use_camera_icon_to_scan_barcode">使用相机扫描联系人条码</string>
<string name="please_wait_for_keys_to_be_fetched">请等待获取密钥</string>
<string name="share_as_barcode">分享条码</string>
<string name="share_as_uri">分享XMPP URI</string>
<string name="share_as_http">分享HTTP链接</string>
<string name="pref_blind_trust_before_verification">验证前盲目信任</string>
<string name="not_trusted">不可信的</string>
<string name="invalid_barcode">非法的二维码</string>
<string name="pref_blind_trust_before_verification_summary">自动信任陌生人的设备,但在验证过联系人添加设备时手动确认。</string>
<string name="blindly_trusted_omemo_keys">盲目信任OMEMO密钥可能会有人冒充对方发送消息</string>
<string name="not_trusted">不信任的</string>
<string name="invalid_barcode">无效二维码</string>
<string name="pref_clean_cache_summary">清除相机缓存</string>
<string name="pref_clean_cache">清除缓存</string>
<string name="pref_clean_private_storage">清除私密存储</string>
<string name="pref_clean_private_storage_summary">清除保存私密文件的存储 (它们可以之后从服务器上重新下载)</string>
<string name="i_followed_this_link_from_a_trusted_source">我从一个可信的源追踪的此链接</string>
<string name="verifying_omemo_keys_trusted_source">点击一个链接后将会开始校验 %1$s OMEMO 密钥。此种情形只在你获得了一个从可信的源上只有 %2$s发布的链接才是安全的。</string>
<string name="verify_omemo_keys">校验 OMEMO 密钥</string>
<string name="pref_clean_private_storage_summary">清除保存私密文件的存储 (可以从服务器上重新下载)</string>
<string name="i_followed_this_link_from_a_trusted_source">此链接的源头是可信的</string>
<string name="verifying_omemo_keys_trusted_source">点击链接后将会开始校验%1$s的OMEMO密钥。只有%2$s发布的链接才是安全的。</string>
<string name="verify_omemo_keys">校验OMEMO密钥</string>
<string name="show_inactive_devices">显示不活跃设备</string>
<string name="hide_inactive_devices">隐藏不活跃设备</string>
<string name="distrust_omemo_key">不信任的设备</string>
<string name="distrust_omemo_key">不再信任设备</string>
<string name="distrust_omemo_key_text">你确认要移除此设备的验证吗?\n此设备及从其发送的信息将会被标识为不可信。</string>
<plurals name="seconds">
<item quantity="other">%d秒</item>
</plurals>
@ -548,28 +637,30 @@
<string name="pref_automatically_delete_messages">自动删除消息</string>
<string name="pref_automatically_delete_messages_description">自动从此设备上删除超过配置时间段的消息</string>
<string name="encrypting_message">消息加密中</string>
<string name="not_fetching_history_retention_period">由于本地保留期限,因此无法提取消息。</string>
<string name="not_fetching_history_retention_period">由于本地保留期限设置,无法提取消息。</string>
<string name="transcoding_video">正在压缩视频</string>
<string name="corresponding_conversations_closed">相应的对话已关闭。</string>
<string name="contact_blocked_past_tense">联系人已屏蔽</string>
<string name="pref_notifications_from_strangers">陌生人也通知</string>
<string name="contact_blocked_past_tense">联系人已封禁</string>
<string name="pref_notifications_from_strangers">陌生人的消息也通知</string>
<string name="pref_notifications_from_strangers_summary">提醒来自陌生人的消息与通话</string>
<string name="received_message_from_stranger">已收到陌生人的信息</string>
<string name="block_stranger">屏蔽陌生人</string>
<string name="block_entire_domain">屏蔽整个域名</string>
<string name="block_stranger">封禁陌生人</string>
<string name="block_entire_domain">封禁整个域名</string>
<string name="online_right_now">当前在线</string>
<string name="retry_decryption">重试解密</string>
<string name="session_failure">会话失败</string>
<string name="sasl_downgrade">已降级的 SASL 机制</string>
<string name="sasl_downgrade">已降级的SASL机制</string>
<string name="account_status_regis_web">服务器要求在网站上注册</string>
<string name="open_website">打开网站</string>
<string name="application_found_to_open_website">没有可以打开网站的应用</string>
<string name="pref_headsup_notifications">顶部通知</string>
<string name="pref_headsup_notifications_summary">显示顶部通知</string>
<string name="today">今天</string>
<string name="yesterday">昨天</string>
<string name="pref_validate_hostname">使用 DNSSEC 来验证主机名</string>
<string name="pref_validate_hostname_summary">包含已验证的主机名的服务器证书被认为是已验证的</string>
<string name="pref_validate_hostname">通过DNSSEC验证主机名</string>
<string name="pref_validate_hostname_summary">包含主机名的服务器证书被认为是已验证的</string>
<string name="certificate_does_not_contain_jid">证书不包含XMPP地址</string>
<string name="server_info_partial">部分</string>
<string name="server_info_partial">部分</string>
<string name="attach_record_video">录制视频</string>
<string name="copy_to_clipboard">复制</string>
<string name="message_copied_to_clipboard">消息已被复制</string>
@ -578,7 +669,7 @@
<string name="huawei_protected_apps">受保护的应用</string>
<string name="huawei_protected_apps_summary">为了在屏幕关闭时也可收到消息提醒,您需要将畅聊加入受保护的应用列表。</string>
<string name="mtm_accept_cert">接受未知的证书?</string>
<string name="mtm_trust_anchor">服务器证书未已知证书机构签发。</string>
<string name="mtm_trust_anchor">服务器证书未已知证书机构签发。</string>
<string name="mtm_accept_servername">接受不匹配的服务器名称?</string>
<string name="mtm_hostname_mismatch">由于 “%s”服务器无法验证。证书仅对此有效</string>
<string name="mtm_connect_anyway">您仍希望连接吗?</string>
@ -591,9 +682,11 @@
<string name="edit_status_message">编辑状态信息</string>
<string name="disable_encryption">禁用加密</string>
<string name="error_trustkey_general">畅聊无法向%1$s发送加密信息。这可能是由于您的联系人使用了无法处理OMEMO的过时服务器或客户端。</string>
<string name="error_trustkey_device_list">无法获取设备列表</string>
<string name="error_trustkey_bundle">无法获取密钥</string>
<string name="error_trustkey_hint_mutual">提示:某些情况下,可以将对方加入联系人列表,以解决此问题。</string>
<string name="disable_encryption_message">确认要禁用此会话的 OMEMO 加密吗?\n这会允许您的服务器管理员阅读你们的消息但这可能是和使用过时客户端的人会话的唯一方式。</string>
<string name="disable_now">现在禁用</string>
<string name="disable_now">立即禁用</string>
<string name="draft">草稿:</string>
<string name="pref_omemo_setting">OMEMO加密</string>
<string name="pref_omemo_setting_summary_always">OMEMO将始终用于一对一和私人群组聊天。</string>
@ -619,12 +712,14 @@
<string name="title_activity_share_location">分享位置</string>
<string name="title_activity_show_location">显示位置</string>
<string name="share">分享</string>
<string name="unable_to_start_recording">无法开始录制</string>
<string name="please_wait">请等待……</string>
<string name="no_microphone_permission">允许畅聊使用麦克风</string>
<string name="search_messages">搜索消息</string>
<string name="gif">GIF</string>
<string name="view_conversation">查看对话</string>
<string name="pref_use_share_location_plugin">分享位置插件</string>
<string name="pref_use_share_location_plugin_summary">不使用内置地图,使用“分享位置”插件</string>
<string name="gif">GIF动图</string>
<string name="view_conversation">查看聊天</string>
<string name="pref_use_share_location_plugin">位置分享插件</string>
<string name="pref_use_share_location_plugin_summary">不使用内置地图,使用“位置分享”插件</string>
<string name="copy_link">复制web地址</string>
<string name="copy_jabber_id">复制XMPP地址</string>
<string name="p1_s3_filetransfer">用于S3的HTTP文件共享</string>
@ -639,11 +734,12 @@
<string name="providing_a_name_is_optional">提供名称是可选的</string>
<string name="create_dialog_group_chat_name">群聊名称</string>
<string name="conference_destroyed">群聊已被解散</string>
<string name="unable_to_save_recording">无法保存录制的文件</string>
<string name="foreground_service_channel_name">前台服务</string>
<string name="foreground_service_channel_description">此通知类别用于显示表明畅聊正在运行的永久通知。</string>
<string name="notification_group_status_information">状态信息</string>
<string name="error_channel_name">连接问题</string>
<string name="error_channel_description">此通知类别用于显示一旦帐户连接出现问题通知。</string>
<string name="error_channel_description">此通知类别用于显示帐户连接问题通知。</string>
<string name="notification_group_messages">消息</string>
<string name="notification_group_calls">通话</string>
<string name="messages_channel_name">消息</string>
@ -653,7 +749,7 @@
<string name="silent_messages_channel_description">此通知组用于显示不应触发任何声音的通知。 例如,当在另一个设备上激活时(宽限期)。</string>
<string name="pref_message_notification_settings">消息通知设置</string>
<string name="pref_incoming_call_notification_settings">来电通知设置</string>
<string name="pref_more_notification_settings_summary">重要性,声音,振动</string>
<string name="pref_more_notification_settings_summary">重要程度、声音、振动</string>
<string name="video_compression_channel_name">视频压缩</string>
<string name="view_media">查看媒体文件</string>
<string name="group_chat_members">成员</string>
@ -694,6 +790,9 @@
<string name="pin_expired">验证码已失效</string>
<string name="unknown_api_error_network">未知网络错误</string>
<string name="unknown_api_error_response">未知服务器应答</string>
<string name="unable_to_connect_to_server">无法连接服务器。</string>
<string name="unable_to_establish_secure_connection">无法建立安全连接。</string>
<string name="unable_to_find_server">找不到服务器</string>
<string name="something_went_wrong_processing_your_request">处理请求时出错</string>
<string name="invalid_user_input">用户输入无效</string>
<string name="temporarily_unavailable">暂时无法连接。请稍候再试。</string>
@ -712,7 +811,7 @@
<string name="install_orbot">安装Orbot</string>
<string name="start_orbot">启动Orbot</string>
<string name="no_market_app_installed">软件商店未安装</string>
<string name="group_chat_will_make_your_jabber_id_public">群聊将公开你的XMPP地址</string>
<string name="group_chat_will_make_your_jabber_id_public">频道将公开你的XMPP地址</string>
<string name="ebook">电子书</string>
<string name="video_original">原始(未压缩)</string>
<string name="open_with">打开方式</string>
@ -721,21 +820,24 @@
<string name="restore_backup">恢复备份</string>
<string name="restore">恢复</string>
<string name="enter_password_to_restore">输入%s的密码以恢复备份</string>
<string name="restore_warning">仅在迁移或丢失原设备时恢复备份。</string>
<string name="restore_warning">仅在迁移或丢失设备时恢复备份。</string>
<string name="unable_to_restore_backup">无法恢复备份。</string>
<string name="unable_to_decrypt_backup">无法解密备份。密码是否正确?</string>
<string name="backup_channel_name">备份与恢复</string>
<string name="enter_jabber_id">输入XMPP地址</string>
<string name="create_group_chat">创建群聊</string>
<string name="join_public_channel">加入公开群聊</string>
<string name="join_public_channel">加入公开频道</string>
<string name="create_private_group_chat">创建私密群聊</string>
<string name="create_public_channel">创建公开群聊</string>
<string name="create_dialog_channel_name">群聊名称</string>
<string name="create_public_channel">创建公开频道</string>
<string name="create_dialog_channel_name">频道名称</string>
<string name="xmpp_address">XMPP地址</string>
<string name="please_enter_name">请为群聊提供一个名称。</string>
<string name="please_enter_name">请为频道提供一个名称。</string>
<string name="please_enter_xmpp_address">请提供XMPP地址。</string>
<string name="this_is_an_xmpp_address">这是一个XMPP地址。请提供一个名称。</string>
<string name="creating_channel">创建公开群聊</string>
<string name="channel_already_exists">群聊已存在</string>
<string name="joined_an_existing_channel">您加入了一个已经存在的群聊</string>
<string name="creating_channel">创建公开频道</string>
<string name="channel_already_exists">频道已存在</string>
<string name="joined_an_existing_channel">您加入了一个已经存在的频道</string>
<string name="unable_to_set_channel_configuration">无法配置频道</string>
<string name="allow_participants_to_edit_subject">允许任何成员修改主题</string>
<string name="allow_participants_to_invite_others">允许任何成员邀请其他人</string>
<string name="anyone_can_edit_subject">允许任何成员修改主题</string>
@ -745,22 +847,22 @@
<string name="anyone_can_invite_others">允许任何成员邀请其他人</string>
<string name="jabber_ids_are_visible_to_admins">XMPP地址对管理员可见。</string>
<string name="jabber_ids_are_visible_to_anyone">XMPP地址对所有人可见</string>
<string name="no_users_hint_channel">此公开群聊无成员。邀请成员或使用分享按钮分享地址。</string>
<string name="no_users_hint_channel">此公开频道无成员。邀请成员或使用分享按钮分享地址。</string>
<string name="no_users_hint_group_chat">此私密群聊无成员</string>
<string name="manage_permission">管理权限</string>
<string name="search_participants">搜索成员</string>
<string name="file_too_large">文件过大</string>
<string name="attach">附加</string>
<string name="discover_channels">发现群聊</string>
<string name="search_channels">搜索群聊</string>
<string name="discover_channels">发现频道</string>
<string name="search_channels">搜索频道</string>
<string name="channel_discovery_opt_in_title">可能侵犯隐私!</string>
<string name="channel_discover_opt_in_message"><![CDATA[群聊发现使用了名为<a href="https://search.jabber.network">search.jabber.network</a>。<br><br>的第三方服务。使用此功能会将您的IP地址和搜索字词传输到该服务。 有关更多信息,请参见其<a href="https://search.jabber.network/privacy">Privacy Policy</a>。]]></string>
<string name="channel_discover_opt_in_message"><![CDATA[频道发现使用了名为<a href="https://search.jabber.network">search.jabber.network</a>。<br><br>的第三方服务。使用此功能会将您的IP地址和搜索字词传输到该服务。 有关更多信息,请参见其<a href="https://search.jabber.network/privacy">隐私政策</a>。]]></string>
<string name="i_already_have_an_account">我已有账户</string>
<string name="add_existing_account">添加已有账户</string>
<string name="register_new_account">注册新账户</string>
<string name="this_looks_like_a_domain">这好像是一个域名地址</string>
<string name="add_anway">仍然添加</string>
<string name="this_looks_like_channel">这好像是一个群聊地址</string>
<string name="this_looks_like_channel">这好像是一个频道地址</string>
<string name="share_backup_files">分享备份文件</string>
<string name="conversations_backup">备份文件</string>
<string name="event">事件</string>
@ -768,41 +870,46 @@
<string name="not_a_backup_file">选择的文件不是备份文件</string>
<string name="account_already_setup">账户已设置</string>
<string name="please_enter_password">请输入此账户的密码</string>
<string name="open_join_dialog">加入公开群聊</string>
<string name="unable_to_perform_this_action">无法执行此操作</string>
<string name="open_join_dialog">加入公开频道</string>
<string name="sharing_application_not_grant_permission">分享程序没有访问文件的权限</string>
<string name="group_chats_and_channels"><![CDATA[群聊与频道]]> </string>
<string name="jabber_network">jabber.network</string>
<string name="local_server">本地服务器</string>
<string name="pref_channel_discovery_summary">大多数用户应该选择“ jabber.network”以从整个XMPP生态系统中获得更好的建议。</string>
<string name="pref_channel_discovery">群聊发现方法</string>
<string name="pref_channel_discovery">频道发现方法</string>
<string name="backup">备份</string>
<string name="category_about">关于</string>
<string name="please_enable_an_account">请启用一个帐户</string>
<string name="make_call">拨打电</string>
<string name="make_call">进行通</string>
<string name="rtp_state_incoming_call">来电</string>
<string name="rtp_state_incoming_video_call">视频来电</string>
<string name="rtp_state_connecting">正在连接</string>
<string name="rtp_state_connected">已连接</string>
<string name="rtp_state_accepting_call">正在接受通话</string>
<string name="rtp_state_ending_call">正在结束通话</string>
<string name="answer_call">接电话</string>
<string name="rtp_state_accepting_call">正在接通来电</string>
<string name="rtp_state_ending_call">正在结束来电</string>
<string name="answer_call">应答</string>
<string name="dismiss_call">忽略</string>
<string name="rtp_state_finding_device">正在确定设备位置</string>
<string name="rtp_state_ringing">正在响铃</string>
<string name="rtp_state_declined_or_busy">忙碌</string>
<string name="rtp_state_retracted">撤销的通话</string>
<string name="rtp_state_declined_or_busy">正忙</string>
<string name="rtp_state_connectivity_error">无法接通来电</string>
<string name="rtp_state_retracted">通话已撤销</string>
<string name="rtp_state_application_failure">程序错误</string>
<string name="hang_up">挂断</string>
<string name="ongoing_call">正在进行的通话</string>
<string name="ongoing_video_call">正在进行的视频通话</string>
<string name="disable_tor_to_make_call">禁用Tor以拨打电话</string>
<string name="incoming_call">来电</string>
<string name="incoming_call_duration">来电%s</string>
<string name="incoming_call_duration">来电 · %s</string>
<string name="outgoing_call">去电</string>
<string name="outgoing_call_duration">去电%s</string>
<string name="outgoing_call_duration">去电 · %s</string>
<string name="missed_call">未接电话</string>
<string name="audio_call">语音通话</string>
<string name="video_call">视频通话</string>
<string name="microphone_unavailable">麦克风不可用</string>
<string name="only_one_call_at_a_time">在同一时间只能打一通电话</string>
<string name="only_one_call_at_a_time">只能同时打一通电话</string>
<string name="return_to_ongoing_call">返回正在进行的通话</string>
<string name="could_not_switch_camera">无法切换摄像头</string>
<plurals name="view_users">
<item quantity="other">查看%1$d成员</item>
</plurals>

View File

@ -900,7 +900,7 @@
<string name="rtp_state_ending_call">Ending call</string>
<string name="answer_call">Answer</string>
<string name="dismiss_call">Dismiss</string>
<string name="rtp_state_finding_device">Locating devices</string>
<string name="rtp_state_finding_device">Discovering devices</string>
<string name="rtp_state_ringing">Ringing</string>
<string name="rtp_state_declined_or_busy">Busy</string>
<string name="rtp_state_connectivity_error">Could not connect call</string>

View File

@ -5,6 +5,11 @@
<item name="android:typeface">monospace</item>
</style>
<style name="TextAppearance.Conversations.Title.Monospace" parent="TextAppearance.Conversations.Title">
<item name="android:fontFamily" tools:targetApi="jelly_bean">monospace</item>
<item name="android:typeface">monospace</item>
</style>
<style name="TextAppearance.Conversations.Display2" parent="TextAppearance.AppCompat.Display2">
<item name="android:textSize">?TextSizeDisplay2</item>
</style>

View File

@ -25,7 +25,7 @@ import eu.siacs.conversations.ui.util.ApiDialogHelper;
import eu.siacs.conversations.ui.util.PinEntryWrapper;
import eu.siacs.conversations.utils.AccountUtils;
import eu.siacs.conversations.utils.PhoneNumberUtilWrapper;
import eu.siacs.conversations.utils.TimeframeUtils;
import eu.siacs.conversations.utils.TimeFrameUtils;
import io.michaelrocks.libphonenumber.android.NumberParseException;
import static android.content.ClipDescription.MIMETYPE_TEXT_PLAIN;
@ -67,7 +67,7 @@ public class VerifyActivity extends XmppActivity implements ClipboardManager.OnP
long remaining = retrySmsAfter - SystemClock.elapsedRealtime();
if (remaining >= 0) {
binding.resendSms.setEnabled(false);
binding.resendSms.setText(getString(R.string.resend_sms_in, TimeframeUtils.resolve(VerifyActivity.this, remaining)));
binding.resendSms.setText(getString(R.string.resend_sms_in, TimeFrameUtils.resolve(VerifyActivity.this, remaining)));
return true;
}
}
@ -81,7 +81,7 @@ public class VerifyActivity extends XmppActivity implements ClipboardManager.OnP
long remaining = retryVerificationAfter - SystemClock.elapsedRealtime();
if (remaining >= 0) {
binding.next.setEnabled(false);
binding.next.setText(getString(R.string.wait_x, TimeframeUtils.resolve(VerifyActivity.this, remaining)));
binding.next.setText(getString(R.string.wait_x, TimeFrameUtils.resolve(VerifyActivity.this, remaining)));
return true;
}
}

View File

@ -11,7 +11,7 @@ import android.support.annotation.StringRes;
import eu.siacs.conversations.R;
import eu.siacs.conversations.services.QuickConversationsService;
import eu.siacs.conversations.utils.TimeframeUtils;
import eu.siacs.conversations.utils.TimeFrameUtils;
public class ApiDialogHelper {
@ -79,7 +79,7 @@ public class ApiDialogHelper {
public static Dialog createRateLimited(final Context context, final long timestamp) {
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(R.string.rate_limited);
builder.setMessage(context.getString(R.string.try_again_in_x, TimeframeUtils.resolve(context, timestamp - SystemClock.elapsedRealtime())));
builder.setMessage(context.getString(R.string.try_again_in_x, TimeFrameUtils.resolve(context, timestamp - SystemClock.elapsedRealtime())));
builder.setPositiveButton(R.string.ok, null);
return builder.create();
}

View File

@ -9,6 +9,8 @@
<string name="pref_never_send_crash_summary">Si envías registros de error ayudas al desarrollo de Quicksy</string>
<string name="no_storage_permission">Quicksy necesita acceder al almacenamiento externo</string>
<string name="no_camera_permission">Quicksy necesita acceder a la cámara</string>
<string name="battery_optimizations_enabled_explained">Tu dispositivo está realizando optimizaciones de uso de batería en Quicksy que pueden hacer que los mensajes se retrasen o incluso hacer que se pierdan.\nEs recomendable deshabilitarlas.</string>
<string name="battery_optimizations_enabled_dialog">Tu dispositivo está realizando optimizaciones de uso de batería en Quicksy que pueden hacer que los mensajes se retrasen o incluso hacer que se pierdan.\n\nA continuación se le preguntará si quiere deshabilitarlas.</string>
<string name="pref_broadcast_last_activity_summary">Informar a tus contactos cuando usas Quicksy</string>
<string name="data_saver_enabled_explained">Tu sistema operativo está restringiendo a Quicksy acceder a internet cuando está en segundo plano. Para recibir notificaciones de nuevos mensajes deberías permitir a Quicksy acceder a internet cuando la optimización de datos está habilitada.\nQuicksy realizará igualmente optimizaciones para ahorrar datos cuando sea posible.</string>
<string name="device_does_not_support_data_saver">Tu dispositivo no soporta la opción de deshabilitar la optimización de datos para Quicksy</string>

View File

@ -9,6 +9,8 @@
<string name="pref_never_send_crash_summary">En envoyant des traces dappels, vous aidez le développement de Quicksy</string>
<string name="no_storage_permission">Quicksy a besoin daccéder au stockage externe</string>
<string name="no_camera_permission">Quicksy a besoin daccéder à la caméra</string>
<string name="battery_optimizations_enabled_explained">Votre appareil applique d\'importantes optimisations de batterie pour Quicksy pouvant entraîner des retards de notifications, voire des pertes de messages.\nIl est recommandé de les désactiver.</string>
<string name="battery_optimizations_enabled_dialog">Votre appareil applique d\'importantes optimisations de batterie pour Quicksy pouvant entraîner des retards de notifications, voire des pertes de messages.\nVous allez être invité à les désactiver.</string>
<string name="pref_broadcast_last_activity_summary">Faites savoir à tous vos contacts quand vous utilisez Quicksy</string>
<string name="data_saver_enabled_explained">Votre système dexploitation restreint laccès à Internet à Quicksy lorsquil est en arrière-plan. Pour recevoir les notifications des nouveaux messages reçus, vous devriez accorder à Quicksy un accès illimité lorsque léconomie de la consommation des données est activée.\nQuicksy essaiera quand même déconomiser la consommation lorsque cest possible.</string>
<string name="device_does_not_support_data_saver">Votre appareil ne prend pas en charge la désactivation du mode économie de données pour Quicksy.</string>

View File

@ -9,6 +9,8 @@
<string name="pref_never_send_crash_summary">Se scegli di inviare una segnalazione dellerrore aiuterai lo sviluppo di Quicksy</string>
<string name="no_storage_permission">Quicksy ha bisogno di accedere all\'archiviazione esterna</string>
<string name="no_camera_permission">Quicksy ha bisogno di accedere alla fotocamera</string>
<string name="battery_optimizations_enabled_explained">Il tuo dispositivo sta facendo delle ingenti ottimizzazioni della batteria per Conversations che potrebbero portare ritardi alle notifiche o anche perdita di messaggi.\nSi consiglia di disattivarle.</string>
<string name="battery_optimizations_enabled_dialog">Il tuo dispositivo sta facendo delle ingenti ottimizzazioni della batteria per Conversations che potrebbero portare ritardi alle notifiche o anche perdita di messaggi.\nTi verrà ora chiesto di disattivarle.</string>
<string name="pref_broadcast_last_activity_summary">Fai sapere ai tuoi contatti quando usi Quicksy</string>
<string name="data_saver_enabled_explained">Il tuo sistema operativo sta limitando l\'accesso internet a Quicksy quando è in background. Per ricevere le notifiche di nuovi messaggi dovresti consentire l\'accesso senza limiti a Quicksy quando il Risparmio dati è attivo.\nQuicksy cercherà comunque di risparmiare dati quando possibile.</string>
<string name="device_does_not_support_data_saver">Il tuo dispositivo non supporta la disattivazione del Risparmio dati per Quicksy.</string>

View File

@ -9,6 +9,8 @@
<string name="pref_never_send_crash_summary">通过发送堆栈跟踪您可以帮助Quicksy持续发展</string>
<string name="no_storage_permission">Quicksy需要外部存储权限</string>
<string name="no_camera_permission">Quicksy需要摄像头权限</string>
<string name="battery_optimizations_enabled_explained">你的设备正在为Quicksy进行电池优化这可能导致通知的延迟甚至消息的丢失。\n建议禁用电池优化。</string>
<string name="battery_optimizations_enabled_dialog">你的设备正在为Quicksy进行电池优化这可能导致通知的延迟甚至消息的丢失。\n建议禁用电池优化。</string>
<string name="pref_broadcast_last_activity_summary">让你的所有联系人知道你使用Quicksy的时间</string>
<string name="data_saver_enabled_explained">您的操作系统限制Quicksy在后台访问网络。 要接收新消息的通知您应该在启用节省流量模式时允许Quicksy不受限制的访问网络。\nQuicksy仍会尽可能地节省流量。</string>
<string name="device_does_not_support_data_saver">该设备不支持禁用省流量模式</string>