diff options
author | lookshe <github@lookshe.org> | 2016-02-22 14:36:35 +0100 |
---|---|---|
committer | lookshe <github@lookshe.org> | 2016-02-22 14:36:35 +0100 |
commit | c5e60b43b8e107702445e834bce8a3c77f676eb8 (patch) | |
tree | 266138fdf20f29f7ed8a31d4682f02cd7012cf0e | |
parent | 1e40764b20a08170f8e4bfe1f1ae1559111f2961 (diff) | |
parent | c20d8ac69eeade4d5337d958ada7910db0c6d3a0 (diff) |
Merge tag '1.10.0' into trz/merge_1.10.0
Conflicts:
README.md
build.gradle
src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java
src/main/java/eu/siacs/conversations/parser/MessageParser.java
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
src/main/res/layout/activity_edit_account.xml
src/main/res/values-cs/strings.xml
src/main/res/values-de/strings.xml
src/main/res/values-es/strings.xml
src/main/res/values-eu/strings.xml
src/main/res/values-gl/strings.xml
src/main/res/values-it/strings.xml
src/main/res/values-ja/strings.xml
src/main/res/values-nb-rNO/strings.xml
src/main/res/values-nl/strings.xml
src/main/res/values-pl/strings.xml
src/main/res/values-sr/strings.xml
src/main/res/values-zh-rCN/strings.xml
src/main/res/values-zh-rTW/strings.xml
src/main/res/values/strings.xml
Diffstat (limited to '')
93 files changed, 2460 insertions, 359 deletions
@@ -2,6 +2,8 @@ *.swp .settings +src/playstore/res/values/gcm.xml + # https://github.com/github/gitignore/blob/master/Gradle.gitignore .gradle/ build/ diff --git a/.travis.yml b/.travis.yml index 2930c250..0b3dd195 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,3 +11,7 @@ android: - build-tools-19.1.0 - android-23 - extra-android-m2repository + - extra-google-m2repository + - extra-google-google_play_services + licenses: + - '.+' diff --git a/CHANGELOG.md b/CHANGELOG.md index fe593143..f847e94d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ###Changelog +####Version 1.10.0 +* Support for XEP-0357: Push Notifications +* Support for XEP-0308: Last Message Correction +* introduced build flavors to make dependence on play-services optional + ####Version 1.9.4 * prevent cleared Conversations from reloading history with MAM * various MAM fixes diff --git a/build.gradle b/build.gradle index a37901ba..bffc3c8b 100644 --- a/build.gradle +++ b/build.gradle @@ -64,9 +64,10 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 23 - versionCode 123 - versionName "1.9.4.1" - project.ext.set(archivesBaseName, archivesBaseName + "-" + versionName); + versionCode 127 + versionName "1.10.0.1" + archivesBaseName += "-$versionName" + applicationId "eu.siacs.conversations" } compileOptions { @@ -74,15 +75,10 @@ android { targetCompatibility JavaVersion.VERSION_1_7 } - // - // To sign release builds, create the file `gradle.properties` in - // $HOME/.gradle or in your project directory with this content: - // - // mStoreFile=/path/to/key.store - // mStorePassword=xxx - // mKeyAlias=alias - // mKeyPassword=xxx - // + productFlavors { + playstore + free + } if (project.hasProperty('mStoreFile') && project.hasProperty('mStorePassword') && project.hasProperty('mKeyAlias') && @@ -127,4 +123,9 @@ android { } } + + packagingOptions { + exclude 'META-INF/BCKEY.DSA' + exclude 'META-INF/BCKEY.SF' + } } diff --git a/docs/XEPs.md b/docs/XEPs.md index 1b9ea6af..873ea998 100644 --- a/docs/XEPs.md +++ b/docs/XEPs.md @@ -8,6 +8,7 @@ * XEP-0163: Personal Eventing Protocol (avatars and nicks) * XEP-0166: Jingle (only used for file transfer) * XEP-0184: Message Delivery Receipts (reply only) +* XEP-0191: Blocking command * XEP-0198: Stream Management * XEP-0234: Jingle File Transfer * XEP-0237: Roster Versioning @@ -16,7 +17,10 @@ * XEP-0260: Jingle SOCKS5 Bytestreams Transport Method * XEP-0261: Jingle In-Band Bytestreams Transport Method * XEP-0280: Message Carbons +* XEP-0308: Last Message Correction * XEP-0313: Message Archive Management * XEP-0333: Chat Markers * XEP-0352: Client State Indication -* XEP-0191: Blocking command +* XEP-0357: Push Notifications +* XEP-0363: HTTP File Upload +* XEP-0368: SRV records for XMPP over TLS diff --git a/src/free/java/eu/siacs/conversations/services/PushManagementService.java b/src/free/java/eu/siacs/conversations/services/PushManagementService.java new file mode 100644 index 00000000..c6c5d232 --- /dev/null +++ b/src/free/java/eu/siacs/conversations/services/PushManagementService.java @@ -0,0 +1,24 @@ +package eu.siacs.conversations.services; + +import eu.siacs.conversations.entities.Account; + +public class PushManagementService { + + protected final XmppConnectionService mXmppConnectionService; + + public PushManagementService(XmppConnectionService service) { + this.mXmppConnectionService = service; + } + + public void registerPushTokenOnServer(Account account) { + //stub implementation. only affects playstore flavor + } + + public boolean available(Account account) { + return false; + } + + public boolean isStub() { + return true; + } +} diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java index 75715045..a1da283f 100644 --- a/src/main/java/eu/siacs/conversations/Config.java +++ b/src/main/java/eu/siacs/conversations/Config.java @@ -31,6 +31,8 @@ public final class Config { public static final int CARBON_GRACE_PERIOD = 90; public static final int MINI_GRACE_PERIOD = 750; + public static final boolean CLOSE_TCP_WHEN_SWITCHING_TO_BACKGROUND = false; + public static final int AVATAR_SIZE = 192; public static final Bitmap.CompressFormat AVATAR_FORMAT = Bitmap.CompressFormat.PNG; @@ -112,6 +114,5 @@ public final class Config { }; private Config() { - } } diff --git a/src/main/java/eu/siacs/conversations/crypto/PgpEngine.java b/src/main/java/eu/siacs/conversations/crypto/PgpEngine.java index 40baa479..d9464f8c 100644 --- a/src/main/java/eu/siacs/conversations/crypto/PgpEngine.java +++ b/src/main/java/eu/siacs/conversations/crypto/PgpEngine.java @@ -40,25 +40,24 @@ public class PgpEngine { this.mXmppConnectionService = service; } - public void decrypt(final Message message, - final UiCallback<Message> callback) { + public void decrypt(final Message message, final UiCallback<Message> callback) { Intent params = new Intent(); params.setAction(OpenPgpApi.ACTION_DECRYPT_VERIFY); + final String uuid = message.getUuid(); if (message.getType() == Message.TYPE_TEXT) { - InputStream is = new ByteArrayInputStream(message.getBody() - .getBytes()); + InputStream is = new ByteArrayInputStream(message.getBody().getBytes()); final OutputStream os = new ByteArrayOutputStream(); api.executeApiAsync(params, is, os, new IOpenPgpCallback() { @Override public void onReturn(Intent result) { notifyPgpDecryptionService(message.getConversation().getAccount(), OpenPgpApi.ACTION_DECRYPT_VERIFY, result); - switch (result.getIntExtra(OpenPgpApi.RESULT_CODE, - OpenPgpApi.RESULT_CODE_ERROR)) { + switch (result.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR)) { case OpenPgpApi.RESULT_CODE_SUCCESS: try { os.flush(); - if (message.getEncryption() == Message.ENCRYPTION_PGP) { + if (message.getEncryption() == Message.ENCRYPTION_PGP + && message.getUuid().equals(uuid)) { message.setBody(os.toString()); message.setEncryption(Message.ENCRYPTION_DECRYPTED); final HttpConnectionManager manager = mXmppConnectionService.getHttpConnectionManager(); diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index ba1244d1..4eea56b8 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -84,6 +84,7 @@ public class Conversation extends AbstractEntity implements Blockable { private ChatState mIncomingChatState = Config.DEFAULT_CHATSTATE; private String mLastReceivedOtrMessageId = null; private String mFirstMamReference = null; + private Message correctingMessage; public boolean hasMessagesLeftOnServer() { return messagesLeftOnServer; @@ -228,6 +229,24 @@ public class Conversation extends AbstractEntity implements Blockable { return null; } + public Message findMessageWithRemoteIdAndCounterpart(String id, Jid counterpart, boolean received, boolean carbon) { + synchronized (this.messages) { + for(int i = this.messages.size() - 1; i >= 0; --i) { + Message message = messages.get(i); + if (counterpart.equals(message.getCounterpart()) + && ((message.getStatus() == Message.STATUS_RECEIVED) == received) + && (carbon == message.isCarbon() || received) ) { + if (id.equals(message.getRemoteMsgId())) { + return message; + } else { + return null; + } + } + } + } + return null; + } + public Message findSentMessageWithUuid(String id) { synchronized (this.messages) { for (Message message : this.messages) { @@ -296,6 +315,14 @@ public class Conversation extends AbstractEntity implements Blockable { return getLongAttribute("last_clear_history", 0); } + public void setCorrectingMessage(Message correctingMessage) { + this.correctingMessage = correctingMessage; + } + + public Message getCorrectingMessage() { + return this.correctingMessage; + } + public interface OnMessageFound { void onMessageFound(final Message message); } @@ -499,15 +526,18 @@ public class Conversation extends AbstractEntity implements Blockable { return mSmp; } - public void startOtrIfNeeded() { - if (this.otrSession != null - && this.otrSession.getSessionStatus() != SessionStatus.ENCRYPTED) { + public boolean startOtrIfNeeded() { + if (this.otrSession != null && this.otrSession.getSessionStatus() != SessionStatus.ENCRYPTED) { try { this.otrSession.startSession(); + return true; } catch (OtrException e) { this.resetOtrSession(); + return false; } - } + } else { + return true; + } } public boolean endOtrIfNeeded() { diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index f800def1..3f923c41 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -51,6 +51,7 @@ public class Message extends AbstractEntity { public static final String STATUS = "status"; public static final String TYPE = "type"; public static final String CARBON = "carbon"; + public static final String EDITED = "edited"; public static final String REMOTE_MSG_ID = "remoteMsgId"; public static final String SERVER_MSG_ID = "serverMsgId"; public static final String RELATIVE_FILE_PATH = "relativeFilePath"; @@ -70,6 +71,7 @@ public class Message extends AbstractEntity { protected int status; protected int type; protected boolean carbon = false; + protected String edited = null; protected String relativeFilePath; protected boolean read = true; protected String remoteMsgId = null; @@ -103,7 +105,8 @@ public class Message extends AbstractEntity { null, null, null, - true); + true, + null); this.conversation = conversation; } @@ -111,7 +114,8 @@ public class Message extends AbstractEntity { final Jid trueCounterpart, final String body, final long timeSent, final int encryption, final int status, final int type, final boolean carbon, final String remoteMsgId, final String relativeFilePath, - final String serverMsgId, final String fingerprint, final boolean read) { + final String serverMsgId, final String fingerprint, final boolean read, + final String edited) { this.uuid = uuid; this.conversationUuid = conversationUUid; this.counterpart = counterpart; @@ -127,6 +131,7 @@ public class Message extends AbstractEntity { this.serverMsgId = serverMsgId; this.axolotlFingerprint = fingerprint; this.read = read; + this.edited = edited; } public static Message fromCursor(Cursor cursor) { @@ -161,12 +166,13 @@ public class Message extends AbstractEntity { cursor.getInt(cursor.getColumnIndex(ENCRYPTION)), cursor.getInt(cursor.getColumnIndex(STATUS)), cursor.getInt(cursor.getColumnIndex(TYPE)), - cursor.getInt(cursor.getColumnIndex(CARBON))>0, + cursor.getInt(cursor.getColumnIndex(CARBON)) > 0, cursor.getString(cursor.getColumnIndex(REMOTE_MSG_ID)), cursor.getString(cursor.getColumnIndex(RELATIVE_FILE_PATH)), cursor.getString(cursor.getColumnIndex(SERVER_MSG_ID)), cursor.getString(cursor.getColumnIndex(FINGERPRINT)), - cursor.getInt(cursor.getColumnIndex(READ)) > 0); + cursor.getInt(cursor.getColumnIndex(READ)) > 0, + cursor.getString(cursor.getColumnIndex(EDITED))); } public static Message createStatusMessage(Conversation conversation, String body) { @@ -210,7 +216,8 @@ public class Message extends AbstractEntity { values.put(RELATIVE_FILE_PATH, relativeFilePath); values.put(SERVER_MSG_ID, serverMsgId); values.put(FINGERPRINT, axolotlFingerprint); - values.put(READ,read); + values.put(READ,read ? 1 : 0); + values.put(EDITED, edited); return values; } @@ -339,10 +346,22 @@ public class Message extends AbstractEntity { this.carbon = carbon; } + public void setEdited(String edited) { + this.edited = edited; + } + + public boolean edited() { + return this.edited != null; + } + public void setTrueCounterpart(Jid trueCounterpart) { this.trueCounterpart = trueCounterpart; } + public Jid getTrueCounterpart() { + return this.trueCounterpart; + } + public Transferable getTransferable() { return this.transferable; } @@ -408,6 +427,21 @@ public class Message extends AbstractEntity { } } + public boolean isLastCorrectableMessage() { + Message next = next(); + while(next != null) { + if (next.isCorrectable()) { + return false; + } + next = next.next(); + } + return isCorrectable(); + } + + private boolean isCorrectable() { + return getStatus() != STATUS_RECEIVED && !isCarbon(); + } + public boolean mergeable(final Message message) { return message != null && (message.getType() == Message.TYPE_TEXT && @@ -420,6 +454,7 @@ public class Message extends AbstractEntity { this.getEncryption() == message.getEncryption() && this.getCounterpart() != null && this.getCounterpart().equals(message.getCounterpart()) && + this.edited() == message.edited() && (message.getTimeSent() - this.getTimeSent()) <= (Config.MESSAGE_MERGE_WINDOW * 1000) && !GeoHelper.isGeoUri(message.getBody()) && !GeoHelper.isGeoUri(this.getBody()) && @@ -507,6 +542,14 @@ public class Message extends AbstractEntity { } } + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getEditedId() { + return edited; + } + public enum Decision { MUST, SHOULD, diff --git a/src/main/java/eu/siacs/conversations/entities/MucOptions.java b/src/main/java/eu/siacs/conversations/entities/MucOptions.java index 7f4ded11..be9d790d 100644 --- a/src/main/java/eu/siacs/conversations/entities/MucOptions.java +++ b/src/main/java/eu/siacs/conversations/entities/MucOptions.java @@ -282,7 +282,9 @@ public class MucOptions { } public boolean participating() { - return !online() || self.getRole().ranks(Role.PARTICIPANT); + return !online() + || self.getRole().ranks(Role.PARTICIPANT) + || hasFeature("muc_unmoderated"); } public boolean membersOnly() { diff --git a/src/main/java/eu/siacs/conversations/entities/Presence.java b/src/main/java/eu/siacs/conversations/entities/Presence.java index 69cde832..442f1bca 100644 --- a/src/main/java/eu/siacs/conversations/entities/Presence.java +++ b/src/main/java/eu/siacs/conversations/entities/Presence.java @@ -1,6 +1,7 @@ package eu.siacs.conversations.entities; import java.lang.Comparable; +import java.util.Locale; import eu.siacs.conversations.xml.Element; @@ -32,21 +33,24 @@ public class Presence implements Comparable { this.hash = hash; } - public static Presence parse(Element show, Element caps) { + public static Presence parse(String show, Element caps) { final String hash = caps == null ? null : caps.getAttribute("hash"); final String ver = caps == null ? null : caps.getAttribute("ver"); - if ((show == null) || (show.getContent() == null)) { + if (show == null) { return new Presence(Status.ONLINE, ver, hash); - } else if (show.getContent().equals("away")) { - return new Presence(Status.AWAY, ver, hash); - } else if (show.getContent().equals("xa")) { - return new Presence(Status.XA, ver, hash); - } else if (show.getContent().equals("chat")) { - return new Presence(Status.CHAT, ver, hash); - } else if (show.getContent().equals("dnd")) { - return new Presence(Status.DND, ver, hash); } else { - return new Presence(Status.OFFLINE, ver, hash); + switch (show.toLowerCase(Locale.US)) { + case "away": + return new Presence(Status.AWAY, ver, hash); + case "xa": + return new Presence(Status.XA, ver, hash); + case "dnd": + return new Presence(Status.DND, ver, hash); + case "chat": + return new Presence(Status.CHAT, ver, hash); + default: + return new Presence(Status.ONLINE, ver, hash); + } } } diff --git a/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java b/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java index 649f767d..7e2ff213 100644 --- a/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java +++ b/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java @@ -15,6 +15,10 @@ import java.util.TimeZone; import de.thedevstack.conversationsplus.ConversationsPlusApplication; import de.tzur.conversations.Settings; import eu.siacs.conversations.crypto.axolotl.AxolotlService; +import eu.siacs.conversations.services.XmppConnectionService; +import eu.siacs.conversations.utils.PhoneHelper; +import eu.siacs.conversations.xmpp.jid.Jid; +import eu.siacs.conversations.xmpp.stanzas.IqPacket; public abstract class AbstractGenerator { private final String[] FEATURES = { @@ -36,10 +40,32 @@ public abstract class AbstractGenerator { "urn:xmpp:chat-markers:0", "urn:xmpp:receipts" }; + private final String[] MESSAGE_CORRECTION_FEATURES = { + "urn:xmpp:message-correct:0" + }; + private String mVersion = null; + protected final String IDENTITY_NAME = "Conversations"; protected final String IDENTITY_TYPE = "phone"; private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); + protected XmppConnectionService mXmppConnectionService; + + protected AbstractGenerator(XmppConnectionService service) { + this.mXmppConnectionService = service; + } + + protected String getIdentityVersion() { + if (mVersion == null) { + this.mVersion = PhoneHelper.getVersionName(mXmppConnectionService); + } + return this.mVersion; + } + + public String getIdentityName() { + return IDENTITY_NAME + " " + getIdentityVersion(); + } + public String getCapHash() { StringBuilder s = new StringBuilder(); s.append("client/" + IDENTITY_TYPE + "//" + ConversationsPlusApplication.getNameAndVersion() + "<"); @@ -68,6 +94,9 @@ public abstract class AbstractGenerator { if (Settings.CONFIRM_MESSAGE_RECEIVED) { features.addAll(Arrays.asList(MESSAGE_CONFIRMATION_FEATURES)); } + if (mXmppConnectionService.allowMessageCorrection()) { + features.addAll(Arrays.asList(MESSAGE_CORRECTION_FEATURES)); + } Collections.sort(features); return features; } diff --git a/src/main/java/eu/siacs/conversations/generator/IqGenerator.java b/src/main/java/eu/siacs/conversations/generator/IqGenerator.java index a275c01d..0c1f6ee4 100644 --- a/src/main/java/eu/siacs/conversations/generator/IqGenerator.java +++ b/src/main/java/eu/siacs/conversations/generator/IqGenerator.java @@ -25,6 +25,7 @@ import eu.siacs.conversations.services.MessageArchiveService; import eu.siacs.conversations.utils.Xmlns; import eu.siacs.conversations.xml.Element; import eu.siacs.conversations.xmpp.forms.Data; +import eu.siacs.conversations.xmpp.forms.Field; import eu.siacs.conversations.xmpp.jid.Jid; import eu.siacs.conversations.xmpp.pep.Avatar; import eu.siacs.conversations.xmpp.stanzas.IqPacket; @@ -247,7 +248,7 @@ public class IqGenerator extends AbstractGenerator { public IqPacket requestHttpUploadSlot(Jid host, DownloadableFile file, String mime) { IqPacket packet = new IqPacket(IqPacket.TYPE.GET); packet.setTo(host); - Element request = packet.addChild("request",Xmlns.HTTP_UPLOAD); + Element request = packet.addChild("request", Xmlns.HTTP_UPLOAD); request.addChild("filename").setContent(file.getName()); request.addChild("size").setContent(String.valueOf(file.getExpectedSize())); if (mime != null) { @@ -265,4 +266,31 @@ public class IqGenerator extends AbstractGenerator { return register; } + + public IqPacket pushTokenToAppServer(Jid appServer, String token, String deviceId) { + IqPacket packet = new IqPacket(IqPacket.TYPE.SET); + packet.setTo(appServer); + Element command = packet.addChild("command", "http://jabber.org/protocol/commands"); + command.setAttribute("node","register-push-gcm"); + command.setAttribute("action","execute"); + Data data = new Data(); + data.put("token", token); + data.put("device-id", deviceId); + data.submit(); + command.addChild(data); + return packet; + } + + public IqPacket enablePush(Jid jid, String node, String secret) { + IqPacket packet = new IqPacket(IqPacket.TYPE.SET); + Element enable = packet.addChild("enable","urn:xmpp:push:0"); + enable.setAttribute("jid",jid.toString()); + enable.setAttribute("node", node); + Data data = new Data(); + data.setFormType("http://jabber.org/protocol/pubsub#publish-options"); + data.put("secret",secret); + data.submit(); + enable.addChild(data); + return packet; + } } diff --git a/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java b/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java index 66ad2a7b..1824a0f8 100644 --- a/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java +++ b/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java @@ -44,6 +44,9 @@ public class MessageGenerator extends AbstractGenerator { } packet.setFrom(account.getJid()); packet.setId(message.getUuid()); + if (message.edited()) { + packet.addChild("replace","urn:xmpp:message-correct:0").setAttribute("id",message.getEditedId()); + } return packet; } diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index 35fed7b6..794badae 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -3,11 +3,13 @@ package eu.siacs.conversations.parser; import android.util.Log; import android.util.Pair; +import eu.siacs.conversations.crypto.PgpDecryptionService; import net.java.otr4j.session.Session; import net.java.otr4j.session.SessionStatus; import java.util.ArrayList; import java.util.Set; +import java.util.UUID; import de.thedevstack.android.logcat.Logging; import de.thedevstack.conversationsplus.ConversationsPlusPreferences; @@ -121,13 +123,6 @@ public class MessageParser extends AbstractParser implements return finishedMessage; } - private Message parsePGPChat(final Conversation conversation, String pgpEncrypted, int status) { - final Message message = new Message(conversation, pgpEncrypted, Message.ENCRYPTION_PGP, status); - PgpDecryptionService pgpDecryptionService = conversation.getAccount().getPgpDecryptionService(); - pgpDecryptionService.add(message); - return message; - } - private class Invite { Jid jid; String password; @@ -301,6 +296,8 @@ public class MessageParser extends AbstractParser implements final String body = packet.getBody(); final Element mucUserElement = packet.findChild("x", "http://jabber.org/protocol/muc#user"); final String pgpEncrypted = packet.findChildContent("x", "jabber:x:encrypted"); + final Element replaceElement = packet.findChild("replace","urn:xmpp:message-correct:0"); + final String replacementId = replaceElement == null ? null : replaceElement.getAttribute("id"); final Element axolotlEncrypted = packet.findChild(XmppAxolotlMessage.CONTAINERTAG, AxolotlService.PEP_PREFIX); int status; final Jid counterpart; @@ -314,7 +311,7 @@ public class MessageParser extends AbstractParser implements } boolean isTypeGroupChat = packet.getType() == MessagePacket.TYPE_GROUPCHAT; - boolean isProperlyAddressed = (to != null ) && (!to.isBareJid() || account.countPresences() == 1); + boolean isProperlyAddressed = (to != null ) && (!to.isBareJid() || account.countPresences() <= 1); boolean isMucStatusMessage = from.isBareJid() && mucUserElement != null && mucUserElement.hasChild("status"); if (packet.fromAccount(account)) { status = Message.STATUS_SEND; @@ -338,6 +335,7 @@ public class MessageParser extends AbstractParser implements if (isTypeGroupChat) { if (counterpart.getResourcepart().equals(conversation.getMucOptions().getActualNick())) { status = Message.STATUS_SEND_RECEIVED; + isCarbon = true; //not really carbon but received from another resource if (mXmppConnectionService.markMessage(conversation, remoteMsgId, status)) { return; } else if (remoteMsgId == null || Config.IGNORE_ID_REWRITE_IN_MUC) { @@ -359,10 +357,11 @@ public class MessageParser extends AbstractParser implements return; } } else { + Logging.d(Config.LOGTAG,account.getJid().toBareJid()+": ignoring OTR message from "+from+" isForwarded="+Boolean.toString(isForwarded)+", isProperlyAddressed="+Boolean.valueOf(isProperlyAddressed)); message = new Message(conversation, body, Message.ENCRYPTION_NONE, status); } } else if (pgpEncrypted != null) { - message = parsePGPChat(conversation, pgpEncrypted, status); + message = new Message(conversation, pgpEncrypted, Message.ENCRYPTION_PGP, status); } else if (axolotlEncrypted != null) { message = parseAxolotlChat(axolotlEncrypted, from, remoteMsgId, conversation, status); if (message == null) { @@ -394,6 +393,42 @@ public class MessageParser extends AbstractParser implements } else { updateLastseen(timestamp, account, packet.getFrom(), true); } + + if (replacementId != null && mXmppConnectionService.allowMessageCorrection()) { + Message replacedMessage = conversation.findMessageWithRemoteIdAndCounterpart(replacementId, + counterpart, + message.getStatus() == Message.STATUS_RECEIVED, + message.isCarbon()); + if (replacedMessage != null) { + final boolean fingerprintsMatch = replacedMessage.getAxolotlFingerprint() == null + || replacedMessage.getAxolotlFingerprint().equals(message.getAxolotlFingerprint()); + final boolean trueCountersMatch = replacedMessage.getTrueCounterpart() != null + && replacedMessage.getTrueCounterpart().equals(message.getTrueCounterpart()); + if (fingerprintsMatch && (trueCountersMatch || conversation.getMode() == Conversation.MODE_SINGLE)) { + Log.d(Config.LOGTAG, "replaced message '" + replacedMessage.getBody() + "' with '" + message.getBody() + "'"); + final String uuid = replacedMessage.getUuid(); + replacedMessage.setUuid(UUID.randomUUID().toString()); + replacedMessage.setBody(message.getBody()); + replacedMessage.setEdited(replacedMessage.getRemoteMsgId()); + replacedMessage.setRemoteMsgId(remoteMsgId); + replacedMessage.setEncryption(message.getEncryption()); + if (replacedMessage.getStatus() == Message.STATUS_RECEIVED) { + replacedMessage.markUnread(); + } + mXmppConnectionService.updateMessage(replacedMessage, uuid); + if (mXmppConnectionService.confirmMessages() && remoteMsgId != null && !isForwarded && !isTypeGroupChat) { + sendMessageReceipts(account, packet); + } + if (replacedMessage.getEncryption() == Message.ENCRYPTION_PGP) { + conversation.getAccount().getPgpDecryptionService().add(replacedMessage); + } + return; + } else { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": received message correction but verification didn't check out"); + } + } + } + boolean checkForDuplicates = query != null || (isTypeGroupChat && packet.hasChild("delay","urn:xmpp:delay")) || message.getType() == Message.TYPE_PRIVATE; @@ -408,6 +443,10 @@ public class MessageParser extends AbstractParser implements conversation.add(message); } + if (message.getEncryption() == Message.ENCRYPTION_PGP) { + conversation.getAccount().getPgpDecryptionService().add(message); + } + if (query == null || query.getWith() == null) { //either no mam or catchup if (status == Message.STATUS_SEND || status == Message.STATUS_SEND_RECEIVED) { mXmppConnectionService.markRead(conversation); @@ -424,20 +463,7 @@ public class MessageParser extends AbstractParser implements } if (ConversationsPlusPreferences.confirmMessages() && remoteMsgId != null && !isForwarded && !isTypeGroupChat) { - ArrayList<String> receiptsNamespaces = new ArrayList<>(); - if (packet.hasChild("markable", "urn:xmpp:chat-markers:0")) { - receiptsNamespaces.add("urn:xmpp:chat-markers:0"); - } - if (packet.hasChild("request", "urn:xmpp:receipts")) { - receiptsNamespaces.add("urn:xmpp:receipts"); - } - if (receiptsNamespaces.size() > 0) { - MessagePacket receipt = mXmppConnectionService.getMessageGenerator().received(account, - packet, - receiptsNamespaces, - packet.getType()); - mXmppConnectionService.sendMessagePacket(account, receipt); - } + sendMessageReceipts(account, packet); } if (message.getStatus() == Message.STATUS_RECEIVED @@ -532,4 +558,21 @@ public class MessageParser extends AbstractParser implements contact.setPresenceName(nick); } } + + private void sendMessageReceipts(Account account, MessagePacket packet) { + ArrayList<String> receiptsNamespaces = new ArrayList<>(); + if (packet.hasChild("markable", "urn:xmpp:chat-markers:0")) { + receiptsNamespaces.add("urn:xmpp:chat-markers:0"); + } + if (packet.hasChild("request", "urn:xmpp:receipts")) { + receiptsNamespaces.add("urn:xmpp:receipts"); + } + if (receiptsNamespaces.size() > 0) { + MessagePacket receipt = mXmppConnectionService.getMessageGenerator().received(account, + packet, + receiptsNamespaces, + packet.getType()); + mXmppConnectionService.sendMessagePacket(account, receipt); + } + } } diff --git a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java index fcff5c4c..c765dbd0 100644 --- a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java +++ b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java @@ -192,7 +192,7 @@ public class PresenceParser extends AbstractParser implements } int sizeBefore = contact.getPresences().size(); - final Element show = packet.findChild("show"); + final String show = packet.findChildContent("show"); final Element caps = packet.findChild("c", "http://jabber.org/protocol/caps"); final Presence presence = Presence.parse(show, caps); contact.updatePresence(resource, presence); diff --git a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java index 040d2f77..96a04fa4 100644 --- a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java @@ -52,7 +52,7 @@ public class DatabaseBackend extends SQLiteOpenHelper { private static DatabaseBackend instance = null; private static final String DATABASE_NAME = "history"; - private static final int DATABASE_VERSION = 23; + private static final int DATABASE_VERSION = 24; private static String CREATE_CONTATCS_STATEMENT = "create table " + Contact.TABLENAME + "(" + Contact.ACCOUNT + " TEXT, " @@ -162,6 +162,7 @@ public class DatabaseBackend extends SQLiteOpenHelper { + Message.SERVER_MSG_ID + " TEXT, " + Message.FINGERPRINT + " TEXT, " + Message.CARBON + " INTEGER, " + + Message.EDITED + " TEXT, " + Message.READ + " NUMBER DEFAULT 1, " + Message.REMOTE_MSG_ID + " TEXT, FOREIGN KEY(" + Message.CONVERSATION + ") REFERENCES " @@ -371,6 +372,10 @@ public class DatabaseBackend extends SQLiteOpenHelper { if (oldVersion < 23 && newVersion >= 23) { db.execSQL(CREATE_DISCOVERY_RESULTS_STATEMENT); } + + if (oldVersion < 24 && newVersion >= 24) { + db.execSQL("ALTER TABLE " + Message.TABLENAME + " ADD COLUMN " + Message.EDITED + " TEXT"); + } } public static synchronized DatabaseBackend getInstance(Context context) { @@ -587,6 +592,13 @@ public class DatabaseBackend extends SQLiteOpenHelper { + "=?", args); } + public void updateMessage(Message message, String uuid) { + SQLiteDatabase db = this.getWritableDatabase(); + String[] args = {uuid}; + db.update(Message.TABLENAME, message.getContentValues(), Message.UUID + + "=?", args); + } + public void readRoster(Roster roster) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor; diff --git a/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java b/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java index 3ad0c514..0ca62b97 100644 --- a/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java +++ b/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java @@ -192,6 +192,10 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { } } + public boolean queryInProgress(Conversation conversation) { + return queryInProgress(conversation, null); + } + public void processFin(Element fin, Jid from) { if (fin == null) { return; diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 53b60d5f..9da9ffb2 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -102,6 +102,7 @@ import eu.siacs.conversations.utils.ExceptionHelper; import eu.siacs.conversations.utils.OnPhoneContactsLoadedListener; import eu.siacs.conversations.utils.PRNGFixes; import eu.siacs.conversations.utils.PhoneHelper; +import eu.siacs.conversations.utils.SerialSingleThreadExecutor; import eu.siacs.conversations.utils.Xmlns; import eu.siacs.conversations.xml.Element; import eu.siacs.conversations.xmpp.OnBindListener; @@ -122,6 +123,7 @@ import eu.siacs.conversations.xmpp.jid.Jid; import eu.siacs.conversations.xmpp.jingle.JingleConnectionManager; import eu.siacs.conversations.xmpp.jingle.OnJinglePacketReceived; import eu.siacs.conversations.xmpp.jingle.stanzas.JinglePacket; +import eu.siacs.conversations.xmpp.pep.Avatar; import eu.siacs.conversations.xmpp.stanzas.IqPacket; import eu.siacs.conversations.xmpp.stanzas.MessagePacket; import eu.siacs.conversations.xmpp.stanzas.PresencePacket; @@ -134,6 +136,8 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa public static final String ACTION_TRY_AGAIN = "try_again"; public static final String ACTION_DISABLE_ACCOUNT = "disable_account"; private static final String ACTION_MERGE_PHONE_CONTACTS = "merge_phone_contacts"; + public static final String ACTION_GCM_TOKEN_REFRESH = "gcm_token_refresh"; + public static final String ACTION_GCM_MESSAGE_RECEIVED = "gcm_message_received"; private final IBinder mBinder = new XmppConnectionBinder(); private final List<Conversation> conversations = new CopyOnWriteArrayList<>(); private final IqGenerator mIqGenerator = new IqGenerator(); @@ -201,6 +205,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa private HttpConnectionManager mHttpConnectionManager = new HttpConnectionManager( this); private MessageArchiveService mMessageArchiveService = new MessageArchiveService(this); + private PushManagementService mPushManagementService = new PushManagementService(this); private OnConversationUpdate mOnConversationUpdate = null; private final FileObserver fileObserver = new FileObserver( FileBackend.getConversationsImageDirectory()) { @@ -260,6 +265,9 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa fetchRosterFromServer(account); fetchBookmarks(account); sendPresence(account); + if (mPushManagementService.available(account)) { + mPushManagementService.registerPushTokenOnServer(account); + } mMessageArchiveService.executePendingQueries(account); connectMultiModeConversations(account); syncDirtyContacts(account); @@ -268,7 +276,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa private OnStatusChanged statusListener = new OnStatusChanged() { @Override - public void onStatusChanged(Account account) { + public void onStatusChanged(final Account account) { XmppConnection connection = account.getXmppConnection(); if (mOnAccountUpdate != null) { mOnAccountUpdate.onAccountUpdate(); @@ -285,8 +293,11 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa } List<Conversation> conversations = getConversations(); for (Conversation conversation : conversations) { - if (conversation.getAccount() == account && conversation.getMode() == Conversation.MODE_SINGLE) { - conversation.startOtrIfNeeded(); + if (conversation.getAccount() == account + && !account.pendingConferenceJoins.contains(conversation)) { + if (!conversation.startOtrIfNeeded()) { + Logging.d(Config.LOGTAG,account.getJid().toBareJid()+": couldn't start OTR with "+conversation.getContact().getJid()+" when needed"); + } sendUnsentMessages(conversation); } } @@ -301,7 +312,12 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa scheduleWakeUpCall(Config.PING_MAX_INTERVAL, account.getUuid().hashCode()); } else if (account.getStatus() == Account.State.OFFLINE) { resetSendingToWaiting(account); - if (!account.isOptionSet(Account.OPTION_DISABLED)) { + final boolean disabled = account.isOptionSet(Account.OPTION_DISABLED); + final boolean pushMode = Config.CLOSE_TCP_WHEN_SWITCHING_TO_BACKGROUND + && mPushManagementService.available(account) + && checkListeners(); + Logging.d(Config.LOGTAG,account.getJid().toBareJid()+": push mode "+Boolean.toString(pushMode)); + if (!disabled && !pushMode) { int timeToReconnect = mRandom.nextInt(20) + 10; scheduleWakeUpCall(timeToReconnect, account.getUuid().hashCode()); } @@ -468,6 +484,11 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa refreshAllPresences(); } break; + case ACTION_GCM_TOKEN_REFRESH: + refreshAllGcmTokens(); + break; + case ACTION_GCM_MESSAGE_RECEIVED: + Log.d(Config.LOGTAG,"gcm push message arrived in service. extras="+intent.getExtras()); } } this.wakeLock.acquire(); @@ -725,18 +746,20 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa disconnect(account, false); } }).start(); - + cancelWakeUpCall(account.getUuid().hashCode()); } } - Context context = getApplicationContext(); - AlarmManager alarmManager = (AlarmManager) context - .getSystemService(Context.ALARM_SERVICE); - Intent intent = new Intent(context, EventReceiver.class); - alarmManager.cancel(PendingIntent.getBroadcast(context, 0, intent, 0)); Logging.d(Config.LOGTAG, "good bye"); stopSelf(); } + private void cancelWakeUpCall(int requestCode) { + final AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); + final Intent intent = new Intent(this, EventReceiver.class); + intent.setAction("ping"); + alarmManager.cancel(PendingIntent.getBroadcast(this, requestCode, intent, 0)); + } + public void scheduleWakeUpCall(int seconds, int requestCode) { final long timeToWake = SystemClock.elapsedRealtime() + (seconds < 0 ? 1 : seconds + 1) * 1000; @@ -794,8 +817,9 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa final Conversation conversation = message.getConversation(); account.deactivateGracePeriod(); MessagePacket packet = null; - final boolean addToConversation = conversation.getMode() != Conversation.MODE_MULTI - || account.getServerIdentity() != XmppConnection.Identity.SLACK; + final boolean addToConversation = (conversation.getMode() != Conversation.MODE_MULTI + || account.getServerIdentity() != XmppConnection.Identity.SLACK) + && !message.edited(); boolean saveInDb = addToConversation; message.setStatus(Message.STATUS_WAITING); @@ -852,8 +876,11 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa if (message.fixCounterpart()) { conversation.startOtrSession(message.getCounterpart().getResourcepart(), true); } else { + Logging.d(Config.LOGTAG,account.getJid().toBareJid()+": could not fix counterpart for OTR message to contact "+message.getContact().getJid()); break; } + } else { + Logging.d(Config.LOGTAG,account.getJid().toBareJid()+" OTR session with "+message.getContact()+" is in wrong state: "+otrSession.getSessionStatus().toString()); } break; case Message.ENCRYPTION_AXOLOTL: @@ -898,6 +925,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa break; case Message.ENCRYPTION_OTR: if (!conversation.hasValidOtrSession() && message.getCounterpart() != null) { + Logging.d(Config.LOGTAG,account.getJid().toBareJid()+": create otr session without starting for "+message.getContact().getJid()); conversation.startOtrSession(message.getCounterpart().getResourcepart(), false); } break; @@ -919,8 +947,12 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa if (addToConversation) { conversation.add(message); } - if (saveInDb && (message.getEncryption() == Message.ENCRYPTION_NONE || saveEncryptedMessages())) { - databaseBackend.createMessage(message); + if (message.getEncryption() == Message.ENCRYPTION_NONE || saveEncryptedMessages()) { + if (saveInDb) { + databaseBackend.createMessage(message); + } else if (message.edited()) { + databaseBackend.updateMessage(message, message.getEditedId()); + } } updateConversationUi(); } @@ -1695,8 +1727,14 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa for (Account account : getAccounts()) { if (account.getStatus() == Account.State.ONLINE) { XmppConnection connection = account.getXmppConnection(); - if (connection != null && connection.getFeatures().csi()) { - connection.sendInactive(); + if (connection != null) { + if (connection.getFeatures().csi()) { + connection.sendInactive(); + } + if (Config.CLOSE_TCP_WHEN_SWITCHING_TO_BACKGROUND && mPushManagementService.available(account)) { + connection.waitForPush(); + cancelWakeUpCall(account.getUuid().hashCode()); + } } } } @@ -1708,20 +1746,20 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa List<Conversation> conversations = getConversations(); for (Conversation conversation : conversations) { if (conversation.getMode() == Conversation.MODE_MULTI && conversation.getAccount() == account) { - joinMuc(conversation, true, null); + joinMuc(conversation); } } } public void joinMuc(Conversation conversation) { - joinMuc(conversation, false, null); + joinMuc(conversation, null); } - private void joinMuc(Conversation conversation, boolean now, final OnConferenceJoined onConferenceJoined) { + private void joinMuc(Conversation conversation, final OnConferenceJoined onConferenceJoined) { Account account = conversation.getAccount(); account.pendingConferenceJoins.remove(conversation); account.pendingConferenceLeaves.remove(conversation); - if (account.getStatus() == Account.State.ONLINE || now) { + if (account.getStatus() == Account.State.ONLINE) { conversation.resetMucOptions(); fetchConferenceConfiguration(conversation, new OnConferenceConfigurationFetched() { @@ -1900,7 +1938,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa String name = new BigInteger(75, getRNG()).toString(32); Jid jid = Jid.fromParts(name, server, null); final Conversation conversation = findOrCreateConversation(account, jid, true); - joinMuc(conversation, true, new OnConferenceJoined() { + joinMuc(conversation, new OnConferenceJoined() { @Override public void onConferenceJoined(final Conversation conversation) { Bundle options = new Bundle(); @@ -2110,6 +2148,11 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa updateConversationUi(); } + public void updateMessage(Message message, String uuid) { + databaseBackend.updateMessage(message, uuid); + updateConversationUi(); + } + protected void syncDirtyContacts(Account account) { for (Contact contact : account.getRoster().getContacts()) { if (contact.getOption(Contact.Options.DIRTY_PUSH)) { @@ -2350,6 +2393,10 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa return getPreferences().getBoolean("confirm_messages", true); } + public boolean allowMessageCorrection() { + return getPreferences().getBoolean("allow_message_correction", true); + } + public boolean sendChatStates() { return getPreferences().getBoolean("chat_states", false); } @@ -2457,7 +2504,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa return null; } - public void markRead(final Conversation conversation) { + public boolean markRead(final Conversation conversation) { mNotificationService.clear(conversation); final List<Message> readMessages = conversation.markRead(); if (readMessages.size() > 0) { @@ -2470,8 +2517,11 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa } }; ConversationsPlusApplication.executeDatabaseOperation(runnable); + updateUnreadCountBadge(); + return true; + } else { + return false; } - updateUnreadCountBadge(); } public synchronized void updateUnreadCountBadge() { @@ -2489,7 +2539,9 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa public void sendReadMarker(final Conversation conversation) { final Message markable = conversation.getLatestMarkableMessage(); - this.markRead(conversation); + if (this.markRead(conversation)) { + updateConversationUi(); + } if (Settings.CONFIRM_MESSAGE_READ && markable != null && markable.getRemoteMsgId() != null) { Logging.d(Config.LOGTAG, conversation.getAccount().getJid().toBareJid() + ": sending read marker to " + markable.getCounterpart().toString()); Account account = conversation.getAccount(); @@ -2497,7 +2549,6 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa MessagePacket packet = mMessageGenerator.confirm(account, to, markable.getRemoteMsgId()); this.sendMessagePacket(conversation.getAccount(), packet); } - updateConversationUi(); } public SecureRandom getRNG() { @@ -2612,6 +2663,14 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa } } + private void refreshAllGcmTokens() { + for(Account account : getAccounts()) { + if (account.isOnlineAndConnected() && mPushManagementService.available(account)) { + mPushManagementService.registerPushTokenOnServer(account); + } + } + } + public void sendOfflinePresence(final Account account) { sendPresencePacket(account, mPresenceGenerator.sendOfflinePresence(account)); } @@ -2687,6 +2746,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa * Therefore set this flag to true and try to get messages from server */ conversation.setHasMessagesLeftOnServer(true); + conversation.setLastClearHistory(System.currentTimeMillis()); Runnable runnable = new Runnable() { @Override public void run() { @@ -2776,7 +2836,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa databaseBackend.insertDiscoveryResult(disco); injectServiceDiscorveryResult(account.getRoster(), presence.getHash(), presence.getVer(), disco); } else { - Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": mismatch in caps for contact " + jid+" "+presence.getVer()+" vs "+disco.getVer()); + Logging.d(Config.LOGTAG, account.getJid().toBareJid() + ": mismatch in caps for contact " + jid + " " + presence.getVer() + " vs " + disco.getVer()); } } account.inProgressDiscoFetches.remove(key); @@ -2812,6 +2872,10 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa }); } + public PushManagementService getPushManagementService() { + return mPushManagementService; + } + public interface OnMamPreferencesFetched { void onPreferencesFetched(Element prefs); void onPreferencesFetchFailed(); diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java index d71958d2..8e25c8ef 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java @@ -372,11 +372,7 @@ public class ConversationActivity extends XmppActivity public void sendReadMarkerIfNecessary(final Conversation conversation) { if (!mActivityPaused && conversation != null) { - if (!conversation.isRead()) { - xmppConnectionService.sendReadMarker(conversation); - } else { - xmppConnectionService.markRead(conversation); - } + xmppConnectionService.sendReadMarker(conversation); } } @@ -1581,6 +1577,7 @@ public class ConversationActivity extends XmppActivity public void setMessagesLoaded() { if (mConversationFragment != null) { mConversationFragment.setMessagesLoaded(); + mConversationFragment.updateMessages(); } } } diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index ea3d7e71..4257bce3 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -46,6 +46,7 @@ import java.util.Collections; import java.util.List; import java.util.NoSuchElementException; import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.UUID; import de.thedevstack.conversationsplus.ConversationsPlusPreferences; import eu.siacs.conversations.Config; @@ -62,6 +63,7 @@ import eu.siacs.conversations.entities.Presences; import eu.siacs.conversations.entities.Transferable; import eu.siacs.conversations.entities.TransferablePlaceholder; import eu.siacs.conversations.persistance.FileBackend; +import eu.siacs.conversations.services.MessageArchiveService; import eu.siacs.conversations.services.XmppConnectionService; import eu.siacs.conversations.ui.XmppActivity.OnPresenceSelected; import eu.siacs.conversations.ui.XmppActivity.OnValueEdited; @@ -71,6 +73,7 @@ import eu.siacs.conversations.ui.adapter.MessageAdapter.OnContactPictureLongClic import eu.siacs.conversations.ui.listeners.ConversationSwipeRefreshListener; import eu.siacs.conversations.utils.GeoHelper; import eu.siacs.conversations.utils.UIHelper; +import eu.siacs.conversations.xmpp.XmppConnection; import eu.siacs.conversations.xmpp.chatstate.ChatState; import eu.siacs.conversations.xmpp.jid.Jid; import github.ankushsachdeva.emojicon.EmojiconGridView; @@ -216,8 +219,14 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa activity.attachFile(ConversationActivity.ATTACHMENT_CHOICE_CHOOSE_IMAGE); break; case CANCEL: - if (conversation != null && conversation.getMode() == Conversation.MODE_MULTI) { - conversation.setNextCounterpart(null); + if (conversation != null) { + if (conversation.getCorrectingMessage() != null) { + conversation.setCorrectingMessage(null); + mEditMessage.getEditableText().clear(); + } + if (conversation.getMode() == Conversation.MODE_MULTI) { + conversation.setNextCounterpart(null); + } updateChatMsgHint(); updateSendButton(); } @@ -252,12 +261,21 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa if (body.length() == 0 || this.conversation == null) { return; } - Message message = new Message(conversation, body, conversation.getNextEncryption()); - if (conversation.getMode() == Conversation.MODE_MULTI) { - if (conversation.getNextCounterpart() != null) { - message.setCounterpart(conversation.getNextCounterpart()); - message.setType(Message.TYPE_PRIVATE); + final Message message; + if (conversation.getCorrectingMessage() == null) { + message = new Message(conversation, body, conversation.getNextEncryption()); + if (conversation.getMode() == Conversation.MODE_MULTI) { + if (conversation.getNextCounterpart() != null) { + message.setCounterpart(conversation.getNextCounterpart()); + message.setType(Message.TYPE_PRIVATE); + } } + } else { + message = conversation.getCorrectingMessage(); + message.setBody(body); + message.setEdited(message.getUuid()); + message.setUuid(UUID.randomUUID().toString()); + conversation.setCorrectingMessage(null); } switch (conversation.getNextEncryption()) { case Message.ENCRYPTION_OTR: @@ -278,7 +296,9 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa public void updateChatMsgHint() { final boolean multi = conversation.getMode() == Conversation.MODE_MULTI; - if (multi && conversation.getNextCounterpart() != null) { + if (conversation.getCorrectingMessage() != null) { + this.mEditMessage.setHint(R.string.send_corrected_message); + } else if (multi && conversation.getNextCounterpart() != null) { this.mEditMessage.setHint(getString( R.string.send_private_message_to, conversation.getNextCounterpart().getResourcepart())); @@ -515,8 +535,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa } @Override - public void onCreateContextMenu(ContextMenu menu, View v, - ContextMenuInfo menuInfo) { + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { synchronized (this.messageList) { super.onCreateContextMenu(menu, v, menuInfo); AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo; @@ -527,10 +546,15 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa private void populateContextMenu(ContextMenu menu) { final Message m = this.selectedMessage; + Message relevantForCorrection = m; + while(relevantForCorrection.mergeable(relevantForCorrection.next())) { + relevantForCorrection = relevantForCorrection.next(); + } if (m.getType() != Message.TYPE_STATUS) { activity.getMenuInflater().inflate(R.menu.message_context, menu); menu.setHeaderTitle(R.string.message_options); MenuItem copyText = menu.findItem(R.id.copy_text); + MenuItem correctMessage = menu.findItem(R.id.correct_message); MenuItem shareWith = menu.findItem(R.id.share_with); MenuItem sendAgain = menu.findItem(R.id.send_again); MenuItem copyUrl = menu.findItem(R.id.copy_url); @@ -542,6 +566,10 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa && m.treatAsDownloadable() != Message.Decision.MUST) { copyText.setVisible(true); } + if (relevantForCorrection.getType() == Message.TYPE_TEXT + && relevantForCorrection.isLastCorrectableMessage()) { + correctMessage.setVisible(true); + } if ((m.getType() != Message.TYPE_TEXT && m.getType() != Message.TYPE_PRIVATE && m.getTransferable() == null) @@ -578,6 +606,9 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa case R.id.copy_text: copyText(selectedMessage); return true; + case R.id.correct_message: + correctMessage(selectedMessage); + return true; case R.id.send_again: resendMessage(selectedMessage); return true; @@ -679,6 +710,16 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa updateSendButton(); } + private void correctMessage(Message message) { + while(message.mergeable(message.next())) { + message = message.next(); + } + this.conversation.setCorrectingMessage(message); + this.mEditMessage.getEditableText().clear(); + this.mEditMessage.getEditableText().append(message.getBody()); + + } + protected void highlightInConference(String nick) { String oldString = mEditMessage.getText().toString(); if (oldString.isEmpty() || mEditMessage.getSelectionStart() == 0) { @@ -728,9 +769,6 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa this.keychainUnlock = KEYCHAIN_UNLOCK_NOT_REQUIRED; this.conversation = conversation; - if (this.conversation.getMode() == Conversation.MODE_MULTI) { - this.conversation.setNextCounterpart(null); - } boolean canWrite = this.conversation.getMode() == Conversation.MODE_SINGLE || this.conversation.getMucOptions().participating(); this.mEditMessage.setEnabled(canWrite); this.mSendButton.setEnabled(canWrite); @@ -985,9 +1023,12 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa final Conversation c = this.conversation; final SendButtonAction action; final Presence.Status status; - final boolean empty = this.mEditMessage == null || this.mEditMessage.getText().length() == 0; + final String text = this.mEditMessage == null ? "" : this.mEditMessage.getText().toString(); + final boolean empty = text.length() == 0; final boolean conference = c.getMode() == Conversation.MODE_MULTI; - if (conference && !c.getAccount().httpUploadAvailable()) { + if (c.getCorrectingMessage() != null && (empty || text.equals(c.getCorrectingMessage().getBody()))) { + action = SendButtonAction.CANCEL; + } else if (conference && !c.getAccount().httpUploadAvailable()) { if (empty && c.getNextCounterpart() != null) { action = SendButtonAction.CANCEL; } else { @@ -1040,9 +1081,9 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa this.mSendButton.setImageResource(getSendButtonImageResource(action, status)); } - public void updateStatusMessages() { + protected void updateStatusMessages() { synchronized (this.messageList) { - if (conversation.getLastClearHistory() != 0) { + if (showLoadMoreMessages(conversation)) { this.messageList.add(0, Message.createLoadMoreMessage(conversation)); } if (conversation.getMode() == Conversation.MODE_SINGLE) { @@ -1068,8 +1109,14 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa } } - protected void showSnackbar(final int message, final int action, - final OnClickListener clickListener) { + private boolean showLoadMoreMessages(final Conversation c) { + final XmppConnection connection = c.getAccount().getXmppConnection(); + final boolean mam = connection != null && connection.getFeatures().mam(); + final MessageArchiveService service = activity.xmppConnectionService.getMessageArchiveService(); + return mam && (c.getLastClearHistory() != 0 || (c.countMessages() == 0 && c.hasMessagesLeftOnServer() && !service.queryInProgress(c))); + } + + protected void showSnackbar(final int message, final int action, final OnClickListener clickListener) { snackbar.setVisibility(View.VISIBLE); snackbar.setOnClickListener(null); snackbarMessage.setText(message); @@ -1262,6 +1309,13 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa updateSendButton(); } + @Override + public void onTextChanged() { + if (conversation != null && conversation.getCorrectingMessage() != null) { + updateSendButton(); + } + } + private int completionIndex = 0; private int lastCompletionLength = 0; private String incomplete; diff --git a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java index db3a451b..2b89ea05 100644 --- a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java @@ -29,6 +29,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TableLayout; +import android.widget.TableRow; import android.widget.TextView; import android.widget.Toast; @@ -51,6 +52,7 @@ import eu.siacs.conversations.utils.CryptoHelper; import eu.siacs.conversations.utils.UIHelper; import eu.siacs.conversations.xml.Element; import eu.siacs.conversations.xmpp.OnKeyStatusUpdated; +import eu.siacs.conversations.xmpp.XmppConnection; import eu.siacs.conversations.xmpp.XmppConnection.Features; import eu.siacs.conversations.xmpp.forms.Data; import eu.siacs.conversations.xmpp.jid.InvalidJidException; @@ -79,6 +81,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate private TextView mServerInfoBlocking; private TextView mServerInfoPep; private TextView mServerInfoHttpUpload; + private TextView mServerInfoPush; private TextView mSessionEst; private TextView mOtrFingerprint; private TextView mAxolotlFingerprint; @@ -225,6 +228,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate } }; private Toast mFetchingMamPrefsToast; + private TableRow mPushRow; public void refreshUiReal() { invalidateOptionsMenu(); @@ -303,15 +307,14 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate @Override public void run() { final Intent intent; - if (avatar != null) { - intent = new Intent(getApplicationContext(), - StartConversationActivity.class); + final XmppConnection connection = mAccount.getXmppConnection(); + if (avatar != null || (connection != null && !connection.getFeatures().pep())) { + intent = new Intent(getApplicationContext(), StartConversationActivity.class); if (xmppConnectionService != null && xmppConnectionService.getAccounts().size() == 1) { intent.putExtra("init", true); } } else { - intent = new Intent(getApplicationContext(), - PublishProfilePictureActivity.class); + intent = new Intent(getApplicationContext(), PublishProfilePictureActivity.class); intent.putExtra(EXTRA_ACCOUNT, mAccount.getJid().toBareJid().toString()); intent.putExtra("setup", true); } @@ -424,6 +427,8 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate this.mServerInfoSm = (TextView) findViewById(R.id.server_info_sm); this.mServerInfoPep = (TextView) findViewById(R.id.server_info_pep); this.mServerInfoHttpUpload = (TextView) findViewById(R.id.server_info_http_upload); + this.mPushRow = (TableRow) findViewById(R.id.push_row); + this.mServerInfoPush = (TextView) findViewById(R.id.server_info_push); this.mOtrFingerprint = (TextView) findViewById(R.id.otr_fingerprint); this.mOtrFingerprintBox = (RelativeLayout) findViewById(R.id.otr_fingerprint_box); this.mOtrFingerprintToClipboardButton = (ImageButton) findViewById(R.id.action_copy_to_clipboard); @@ -691,6 +696,14 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate } else { this.mServerInfoHttpUpload.setText(R.string.server_info_unavailable); } + + this.mPushRow.setVisibility(xmppConnectionService.getPushManagementService().isStub() ? View.GONE : View.VISIBLE); + + if (xmppConnectionService.getPushManagementService().available(mAccount)) { + this.mServerInfoPush.setText(R.string.server_info_available); + } else { + this.mServerInfoPush.setText(R.string.server_info_unavailable); + } final String otrFingerprint = this.mAccount.getOtrFingerprint(); if (otrFingerprint != null) { this.mOtrFingerprintBox.setVisibility(View.VISIBLE); @@ -916,7 +929,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate mFetchingMamPrefsToast.cancel(); } AlertDialog.Builder builder = new Builder(EditAccountActivity.this); - builder.setTitle(R.string.mam_prefs); + builder.setTitle(R.string.server_side_mam_prefs); String defaultAttr = prefs.getAttribute("default"); final List<String> defaults = Arrays.asList("never", "roster", "always"); final AtomicInteger choice = new AtomicInteger(Math.max(0,defaults.indexOf(defaultAttr))); diff --git a/src/main/java/eu/siacs/conversations/ui/EditMessage.java b/src/main/java/eu/siacs/conversations/ui/EditMessage.java index 06868a98..8cc59cde 100644 --- a/src/main/java/eu/siacs/conversations/ui/EditMessage.java +++ b/src/main/java/eu/siacs/conversations/ui/EditMessage.java @@ -69,6 +69,7 @@ public class EditMessage extends EmojiconEditText { this.isUserTyping = false; this.keyboardListener.onTextDeleted(); } + this.keyboardListener.onTextChanged(); } } @@ -84,6 +85,7 @@ public class EditMessage extends EmojiconEditText { void onTypingStarted(); void onTypingStopped(); void onTextDeleted(); + void onTextChanged(); boolean onTabPressed(boolean repeated); } diff --git a/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java b/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java index 83ab83e7..49deab38 100644 --- a/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java @@ -165,7 +165,8 @@ public class SettingsActivity extends XmppActivity implements xmppConnectionService.toggleForegroundService(); } else if (name.equals("confirm_messages") || name.equals("xa_on_silent_mode") - || name.equals("away_when_screen_off")) { + || name.equals("away_when_screen_off") + || name.equals("allow_message_correction")) { if (xmppConnectionServiceBound) { if (name.equals("away_when_screen_off")) { xmppConnectionService.toggleScreenEventReceiver(); diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java index 78c8f67c..99b7d49d 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -124,6 +124,16 @@ public class MessageAdapter extends ArrayAdapter<Message> { if (viewHolder.indicatorReceived != null) { viewHolder.indicatorReceived.setVisibility(View.GONE); } + + if (viewHolder.edit_indicator != null) { + if (message.edited()) { + viewHolder.edit_indicator.setVisibility(View.VISIBLE); + viewHolder.edit_indicator.setImageResource(darkBackground ? R.drawable.ic_mode_edit_white_18dp : R.drawable.ic_mode_edit_black_18dp); + viewHolder.edit_indicator.setAlpha(darkBackground ? 0.7f : 0.57f); + } else { + viewHolder.edit_indicator.setVisibility(View.GONE); + } + } boolean multiReceived = message.getConversation().getMode() == Conversation.MODE_MULTI && message.getMergedStatus() <= Message.STATUS_RECEIVED; if (message.getType() == Message.TYPE_IMAGE || message.getType() == Message.TYPE_FILE || message.getTransferable() != null) { @@ -180,7 +190,7 @@ public class MessageAdapter extends ArrayAdapter<Message> { if (message.getEncryption() == Message.ENCRYPTION_NONE) { viewHolder.indicator.setVisibility(View.GONE); } else { - viewHolder.indicator.setImageResource(darkBackground ? R.drawable.ic_secure_indicator_white : R.drawable.ic_secure_indicator); + viewHolder.indicator.setImageResource(darkBackground ? R.drawable.ic_lock_white_18dp : R.drawable.ic_lock_black_18dp); viewHolder.indicator.setVisibility(View.VISIBLE); if (message.getEncryption() == Message.ENCRYPTION_AXOLOTL) { XmppAxolotlSession.Trust trust = message.getConversation() @@ -466,6 +476,7 @@ public class MessageAdapter extends ArrayAdapter<Message> { .findViewById(R.id.download_button); viewHolder.indicator = (ImageView) view .findViewById(R.id.security_indicator); + viewHolder.edit_indicator = (ImageView) view.findViewById(R.id.edit_indicator); viewHolder.image = (ImageView) view .findViewById(R.id.message_image); viewHolder.messageBody = (TextView) view @@ -486,6 +497,7 @@ public class MessageAdapter extends ArrayAdapter<Message> { .findViewById(R.id.download_button); viewHolder.indicator = (ImageView) view .findViewById(R.id.security_indicator); + viewHolder.edit_indicator = (ImageView) view.findViewById(R.id.edit_indicator); viewHolder.image = (ImageView) view .findViewById(R.id.message_image); viewHolder.messageBody = (TextView) view @@ -691,6 +703,7 @@ public class MessageAdapter extends ArrayAdapter<Message> { protected TextView status_message; protected TextView encryption; public Button load_more_messages; + public ImageView edit_indicator; } class BitmapWorkerTask extends AsyncTask<Message, Void, Bitmap> { diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 6cef8d8c..2653e5f3 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -2,6 +2,8 @@ package eu.siacs.conversations.xmpp; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.os.Parcelable; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.os.SystemClock; @@ -20,11 +22,12 @@ import java.io.IOException; import java.io.InputStream; import java.math.BigInteger; import java.net.ConnectException; +import java.net.IDN; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; -import java.net.URL; import java.net.UnknownHostException; +import java.net.URL; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.Principal; @@ -336,13 +339,7 @@ public class XmppConnection implements Runnable { this.changeStatus(Account.State.OFFLINE); this.attempt--; //don't count attempt when reconnecting instantly anyway } finally { - if (socket != null) { - try { - socket.close(); - } catch (IOException e) { - - } - } + forceCloseSocket(); if (wakeLock.isHeld()) { try { wakeLock.release(); @@ -414,13 +411,7 @@ public class XmppConnection implements Runnable { @Override public void run() { - try { - if (socket != null) { - socket.close(); - } - } catch (final IOException ignored) { - - } + forceCloseSocket(); connect(); } @@ -1074,10 +1065,10 @@ public class XmppConnection implements Runnable { if (mPendingServiceDiscoveries == 0) { Logging.d(Config.LOGTAG,account.getJid().toBareJid()+": done with service discovery"); Logging.d(Config.LOGTAG, account.getJid().toBareJid() + ": online with resource " + account.getResource()); - changeStatus(Account.State.ONLINE); if (bindListener != null) { bindListener.onBind(account); } + changeStatus(Account.State.ONLINE); } } } @@ -1267,14 +1258,45 @@ public class XmppConnection implements Runnable { } } - public void disconnect(final boolean force) { - Logging.d(Config.LOGTAG, account.getJid().toBareJid() + ": disconnecting force="+Boolean.valueOf(force)); - if (force) { + public void waitForPush() { + if (tagWriter.isActive()) { + tagWriter.finish(); + new Thread(new Runnable() { + @Override + public void run() { + try { + while(!tagWriter.finished()) { + Thread.sleep(10); + } + socket.close(); + Logging.d(Config.LOGTAG,account.getJid().toBareJid()+": closed tcp without closing stream"); + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } else { + forceCloseSocket(); + Logging.d(Config.LOGTAG, account.getJid().toBareJid() + ": closed tcp without closing stream (no waiting)"); + } + } + + private void forceCloseSocket() { + if (socket != null) { try { socket.close(); - } catch(Exception e) { + } catch (IOException e) { Logging.d(Config.LOGTAG,account.getJid().toBareJid().toString()+": exception during force close ("+e.getMessage()+")"); } + } + } + + public void disconnect(final boolean force) { + Logging.d(Config.LOGTAG, account.getJid().toBareJid() + ": disconnecting force="+Boolean.valueOf(force)); + if (force) { + forceCloseSocket(); return; } else { if (tagWriter.isActive()) { @@ -1484,17 +1506,13 @@ public class XmppConnection implements Runnable { } public boolean mam() { - if (hasDiscoFeature(account.getJid().toBareJid(), "urn:xmpp:mam:0")) { - return true; - } else { - return hasDiscoFeature(account.getServer(), "urn:xmpp:mam:0"); - } + return hasDiscoFeature(account.getJid().toBareJid(), "urn:xmpp:mam:0") + || hasDiscoFeature(account.getServer(), "urn:xmpp:mam:0"); } - public boolean advancedStreamFeaturesLoaded() { - synchronized (XmppConnection.this.disco) { - return disco.containsKey(account.getServer()); - } + public boolean push() { + return hasDiscoFeature(account.getJid().toBareJid(), "urn:xmpp:push:0") + || hasDiscoFeature(account.getServer(), "urn:xmpp:push:0"); } public boolean rosterVersioning() { diff --git a/src/main/java/eu/siacs/conversations/xmpp/forms/Data.java b/src/main/java/eu/siacs/conversations/xmpp/forms/Data.java index 50a41892..380f0280 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/forms/Data.java +++ b/src/main/java/eu/siacs/conversations/xmpp/forms/Data.java @@ -80,8 +80,13 @@ public class Data extends Element { } public String getFormType() { - Field typeFiled = this.getFieldByName("FORM_TYPE"); - return typeFiled == null ? "" : typeFiled.getValue(); + String type = getValue("FORM_TYPE"); + return type == null ? "" : type; + } + + public String getValue(String name) { + Field field = this.getFieldByName(name); + return field == null ? null : field.getValue(); } public String getTitle() { diff --git a/src/main/res/drawable-hdpi/ic_lock_black_18dp.png b/src/main/res/drawable-hdpi/ic_lock_black_18dp.png Binary files differnew file mode 100644 index 00000000..4c7a7c59 --- /dev/null +++ b/src/main/res/drawable-hdpi/ic_lock_black_18dp.png diff --git a/src/main/res/drawable-hdpi/ic_lock_white_18dp.png b/src/main/res/drawable-hdpi/ic_lock_white_18dp.png Binary files differnew file mode 100644 index 00000000..29e8bfd3 --- /dev/null +++ b/src/main/res/drawable-hdpi/ic_lock_white_18dp.png diff --git a/src/main/res/drawable-hdpi/ic_mode_edit_black_18dp.png b/src/main/res/drawable-hdpi/ic_mode_edit_black_18dp.png Binary files differnew file mode 100644 index 00000000..00e7d074 --- /dev/null +++ b/src/main/res/drawable-hdpi/ic_mode_edit_black_18dp.png diff --git a/src/main/res/drawable-hdpi/ic_mode_edit_white_18dp.png b/src/main/res/drawable-hdpi/ic_mode_edit_white_18dp.png Binary files differnew file mode 100644 index 00000000..558f0ea3 --- /dev/null +++ b/src/main/res/drawable-hdpi/ic_mode_edit_white_18dp.png diff --git a/src/main/res/drawable-hdpi/ic_secure_indicator.png b/src/main/res/drawable-hdpi/ic_secure_indicator.png Binary files differdeleted file mode 100644 index 220463fc..00000000 --- a/src/main/res/drawable-hdpi/ic_secure_indicator.png +++ /dev/null diff --git a/src/main/res/drawable-hdpi/ic_secure_indicator_white.png b/src/main/res/drawable-hdpi/ic_secure_indicator_white.png Binary files differdeleted file mode 100644 index 46eb1195..00000000 --- a/src/main/res/drawable-hdpi/ic_secure_indicator_white.png +++ /dev/null diff --git a/src/main/res/drawable-mdpi/ic_lock_black_18dp.png b/src/main/res/drawable-mdpi/ic_lock_black_18dp.png Binary files differnew file mode 100644 index 00000000..c8b6fe71 --- /dev/null +++ b/src/main/res/drawable-mdpi/ic_lock_black_18dp.png diff --git a/src/main/res/drawable-mdpi/ic_lock_white_18dp.png b/src/main/res/drawable-mdpi/ic_lock_white_18dp.png Binary files differnew file mode 100644 index 00000000..1265e98e --- /dev/null +++ b/src/main/res/drawable-mdpi/ic_lock_white_18dp.png diff --git a/src/main/res/drawable-mdpi/ic_mode_edit_black_18dp.png b/src/main/res/drawable-mdpi/ic_mode_edit_black_18dp.png Binary files differnew file mode 100644 index 00000000..ebd96073 --- /dev/null +++ b/src/main/res/drawable-mdpi/ic_mode_edit_black_18dp.png diff --git a/src/main/res/drawable-mdpi/ic_mode_edit_white_18dp.png b/src/main/res/drawable-mdpi/ic_mode_edit_white_18dp.png Binary files differnew file mode 100644 index 00000000..e23c42db --- /dev/null +++ b/src/main/res/drawable-mdpi/ic_mode_edit_white_18dp.png diff --git a/src/main/res/drawable-mdpi/ic_secure_indicator.png b/src/main/res/drawable-mdpi/ic_secure_indicator.png Binary files differdeleted file mode 100644 index 690d4d03..00000000 --- a/src/main/res/drawable-mdpi/ic_secure_indicator.png +++ /dev/null diff --git a/src/main/res/drawable-mdpi/ic_secure_indicator_white.png b/src/main/res/drawable-mdpi/ic_secure_indicator_white.png Binary files differdeleted file mode 100644 index e2f894ef..00000000 --- a/src/main/res/drawable-mdpi/ic_secure_indicator_white.png +++ /dev/null diff --git a/src/main/res/drawable-xhdpi/ic_lock_black_18dp.png b/src/main/res/drawable-xhdpi/ic_lock_black_18dp.png Binary files differnew file mode 100644 index 00000000..0888c617 --- /dev/null +++ b/src/main/res/drawable-xhdpi/ic_lock_black_18dp.png diff --git a/src/main/res/drawable-xhdpi/ic_lock_white_18dp.png b/src/main/res/drawable-xhdpi/ic_lock_white_18dp.png Binary files differnew file mode 100644 index 00000000..b94735ec --- /dev/null +++ b/src/main/res/drawable-xhdpi/ic_lock_white_18dp.png diff --git a/src/main/res/drawable-xhdpi/ic_mode_edit_black_18dp.png b/src/main/res/drawable-xhdpi/ic_mode_edit_black_18dp.png Binary files differnew file mode 100644 index 00000000..b33c964d --- /dev/null +++ b/src/main/res/drawable-xhdpi/ic_mode_edit_black_18dp.png diff --git a/src/main/res/drawable-xhdpi/ic_mode_edit_white_18dp.png b/src/main/res/drawable-xhdpi/ic_mode_edit_white_18dp.png Binary files differnew file mode 100644 index 00000000..3ee3e172 --- /dev/null +++ b/src/main/res/drawable-xhdpi/ic_mode_edit_white_18dp.png diff --git a/src/main/res/drawable-xhdpi/ic_secure_indicator.png b/src/main/res/drawable-xhdpi/ic_secure_indicator.png Binary files differdeleted file mode 100644 index cd0d1391..00000000 --- a/src/main/res/drawable-xhdpi/ic_secure_indicator.png +++ /dev/null diff --git a/src/main/res/drawable-xhdpi/ic_secure_indicator_white.png b/src/main/res/drawable-xhdpi/ic_secure_indicator_white.png Binary files differdeleted file mode 100644 index b624a8ce..00000000 --- a/src/main/res/drawable-xhdpi/ic_secure_indicator_white.png +++ /dev/null diff --git a/src/main/res/drawable-xxhdpi/ic_lock_black_18dp.png b/src/main/res/drawable-xxhdpi/ic_lock_black_18dp.png Binary files differnew file mode 100644 index 00000000..dbcf3f33 --- /dev/null +++ b/src/main/res/drawable-xxhdpi/ic_lock_black_18dp.png diff --git a/src/main/res/drawable-xxhdpi/ic_lock_white_18dp.png b/src/main/res/drawable-xxhdpi/ic_lock_white_18dp.png Binary files differnew file mode 100644 index 00000000..895aabbf --- /dev/null +++ b/src/main/res/drawable-xxhdpi/ic_lock_white_18dp.png diff --git a/src/main/res/drawable-xxhdpi/ic_mode_edit_black_18dp.png b/src/main/res/drawable-xxhdpi/ic_mode_edit_black_18dp.png Binary files differnew file mode 100644 index 00000000..66d25296 --- /dev/null +++ b/src/main/res/drawable-xxhdpi/ic_mode_edit_black_18dp.png diff --git a/src/main/res/drawable-xxhdpi/ic_mode_edit_white_18dp.png b/src/main/res/drawable-xxhdpi/ic_mode_edit_white_18dp.png Binary files differnew file mode 100644 index 00000000..9d7f2ff9 --- /dev/null +++ b/src/main/res/drawable-xxhdpi/ic_mode_edit_white_18dp.png diff --git a/src/main/res/drawable-xxhdpi/ic_secure_indicator.png b/src/main/res/drawable-xxhdpi/ic_secure_indicator.png Binary files differdeleted file mode 100644 index 6a74ccbe..00000000 --- a/src/main/res/drawable-xxhdpi/ic_secure_indicator.png +++ /dev/null diff --git a/src/main/res/drawable-xxhdpi/ic_secure_indicator_white.png b/src/main/res/drawable-xxhdpi/ic_secure_indicator_white.png Binary files differdeleted file mode 100644 index 4945c959..00000000 --- a/src/main/res/drawable-xxhdpi/ic_secure_indicator_white.png +++ /dev/null diff --git a/src/main/res/drawable-xxxhdpi/ic_lock_black_18dp.png b/src/main/res/drawable-xxxhdpi/ic_lock_black_18dp.png Binary files differnew file mode 100644 index 00000000..c49d420e --- /dev/null +++ b/src/main/res/drawable-xxxhdpi/ic_lock_black_18dp.png diff --git a/src/main/res/drawable-xxxhdpi/ic_lock_white_18dp.png b/src/main/res/drawable-xxxhdpi/ic_lock_white_18dp.png Binary files differnew file mode 100644 index 00000000..0dcada81 --- /dev/null +++ b/src/main/res/drawable-xxxhdpi/ic_lock_white_18dp.png diff --git a/src/main/res/drawable-xxxhdpi/ic_mode_edit_black_18dp.png b/src/main/res/drawable-xxxhdpi/ic_mode_edit_black_18dp.png Binary files differnew file mode 100644 index 00000000..827b6848 --- /dev/null +++ b/src/main/res/drawable-xxxhdpi/ic_mode_edit_black_18dp.png diff --git a/src/main/res/drawable-xxxhdpi/ic_mode_edit_white_18dp.png b/src/main/res/drawable-xxxhdpi/ic_mode_edit_white_18dp.png Binary files differnew file mode 100644 index 00000000..34ec7092 --- /dev/null +++ b/src/main/res/drawable-xxxhdpi/ic_mode_edit_white_18dp.png diff --git a/src/main/res/layout/activity_edit_account.xml b/src/main/res/layout/activity_edit_account.xml index 9bacf9a2..4d0e6056 100644 --- a/src/main/res/layout/activity_edit_account.xml +++ b/src/main/res/layout/activity_edit_account.xml @@ -417,6 +417,26 @@ tools:ignore="RtlHardcoded"/> </TableRow> <TableRow + android:id="@+id/push_row" + android:layout_width="fill_parent" + android:layout_height="wrap_content"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/server_info_push" + android:textColor="@color/primaryText" + android:textSize="?attr/TextSizeBody"/> + + <TextView + android:id="@+id/server_info_push" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="right" + android:textColor="@color/primaryText" + android:textSize="?attr/TextSizeBody"/> + </TableRow> + <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content"> diff --git a/src/main/res/layout/message_received.xml b/src/main/res/layout/message_received.xml index 61b1b669..9362a74a 100644 --- a/src/main/res/layout/message_received.xml +++ b/src/main/res/layout/message_received.xml @@ -93,7 +93,17 @@ android:layout_marginRight="4sp" android:alpha="0.70" android:gravity="center_vertical" - android:src="@drawable/ic_secure_indicator_white" /> + android:src="@drawable/ic_lock_white_18dp" /> + + <ImageView + android:id="@+id/edit_indicator" + android:layout_width="?attr/TextSizeInfo" + android:layout_height="?attr/TextSizeInfo" + android:layout_gravity="center_vertical" + android:layout_marginRight="4sp" + android:alpha="0.70" + android:gravity="center_vertical" + android:src="@drawable/ic_mode_edit_white_18dp" /> <TextView android:id="@+id/message_time" diff --git a/src/main/res/layout/message_sent.xml b/src/main/res/layout/message_sent.xml index 58511f25..e5365a66 100644 --- a/src/main/res/layout/message_sent.xml +++ b/src/main/res/layout/message_sent.xml @@ -92,7 +92,17 @@ android:layout_marginLeft="4sp" android:alpha="0.54" android:gravity="center_vertical" - android:src="@drawable/ic_secure_indicator" /> + android:src="@drawable/ic_lock_black_18dp" /> + + <ImageView + android:id="@+id/edit_indicator" + android:layout_width="?attr/TextSizeInfo" + android:layout_height="?attr/TextSizeInfo" + android:layout_gravity="center_vertical" + android:layout_marginLeft="4sp" + android:alpha="0.54" + android:gravity="center_vertical" + android:src="@drawable/ic_mode_edit_black_18dp" /> <ImageView android:id="@+id/indicator_received" diff --git a/src/main/res/menu/message_context.xml b/src/main/res/menu/message_context.xml index 2fe1ca22..a1df670a 100644 --- a/src/main/res/menu/message_context.xml +++ b/src/main/res/menu/message_context.xml @@ -9,6 +9,10 @@ android:title="@string/copy_text" android:visible="false"/> <item + android:id="@+id/correct_message" + android:title="@string/correct_message" + android:visible="false"/> + <item android:id="@+id/share_with" android:title="@string/share_with" android:visible="false"/> diff --git a/src/main/res/values-ar/strings.xml b/src/main/res/values-ar/strings.xml index b87e7179..2e59983c 100644 --- a/src/main/res/values-ar/strings.xml +++ b/src/main/res/values-ar/strings.xml @@ -92,14 +92,12 @@ <string name="pref_xmpp_resource">الريسورس</string> <string name="pref_accept_files">ضبط استقبال الملفات</string> <string name="pref_accept_files_summary">اقبل تلقائيا الملفات أقل من</string> - <string name="pref_notification_settings">اعدادات الإشعارات</string> <string name="pref_notifications">الإشعارات</string> <string name="pref_notifications_summary">أخبرني عندما تصل رساله جديده</string> <string name="pref_vibrate">إعداد الإهتزاز</string> <string name="pref_vibrate_summary">تفعيل الاهتزاز عندما تصل رساله جديده</string> <string name="pref_sound">التبيه الصوتي</string> <string name="pref_sound_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> @@ -288,7 +286,6 @@ <string name="two_hours">ساعتين</string> <string name="eight_hours">8 ساعات</string> <string name="until_further_notice">حتى إشعار آخر</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_display_enter_key">عرض مفتاح الادخال</string> diff --git a/src/main/res/values-bg/strings.xml b/src/main/res/values-bg/strings.xml index 4cde101f..b7e5a4e0 100644 --- a/src/main/res/values-bg/strings.xml +++ b/src/main/res/values-bg/strings.xml @@ -102,7 +102,7 @@ <string name="pref_xmpp_resource_summary">Името, с което се определя този клиент</string> <string name="pref_accept_files">Приемане на файлове</string> <string name="pref_accept_files_summary">Автоматично приемане на файлове с размер, по-малък от…</string> - <string name="pref_notification_settings">Настройки за известията</string> + <string name="pref_notification_settings">Известие</string> <string name="pref_notifications">Известия</string> <string name="pref_notifications_summary">Известяване при получаване на ново съобщение</string> <string name="pref_vibrate">Вибрация</string> @@ -111,12 +111,12 @@ <string name="pref_sound_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_advanced_options">Разширени</string> <string name="pref_never_send_crash">Никога да не се изпращат доклади за сривове</string> <string name="pref_never_send_crash_summary">Изпращайки проследявания на стека, Вие помагате за непрекъснатото развитие на Conversations</string> <string name="pref_confirm_messages">Потвърждаване на съобщенията</string> <string name="pref_confirm_messages_summary">Уведомява контакта Ви, че сте приели и прочели съобщението му</string> - <string name="pref_ui_options">Настройки на интерфейса</string> + <string name="pref_ui_options">Потр. интерфейс</string> <string name="openpgp_error">OpenKeychain докладва за грешка</string> <string name="error_decrypting_file">В/И грешка при дешифроването на файла</string> <string name="accept">Приемане</string> @@ -191,6 +191,7 @@ <string name="server_info_stream_management">XEP-0198: Управление на потоците</string> <string name="server_info_pep">XEP-0163: PEP (Аватари / OMEMO)</string> <string name="server_info_http_upload">XEP-0363: Качване на файл през HTTP</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> @@ -240,6 +241,7 @@ <string name="you">Вие</string> <string name="action_edit_subject">Редактиране на темата на беседата</string> <string name="conference_not_found">Беседата не е открита</string> + <string name="conference_unknown_error">Беше получена непозната грешка</string> <string name="leave">Напускане</string> <string name="contact_added_you">Контактът е добавен във Вашия списък от контакти</string> <string name="add_back">Добавяне обратно</string> @@ -274,12 +276,14 @@ <string name="sure_delete_fingerprint">Сигурни ли сте, че искате да изтриете този отпечатък?</string> <string name="ignore">Пренебрегване</string> <string name="without_mutual_presence_updates"><b>Внимание:</b> Изпращането на това без съвместни актуализации на присъствието може да доведе до неочаквани проблеми.\n\n<small>Погледнете подробностите за контакта, за да проверите дали сте абониран за актуализации на присъствието.</small></string> - <string name="pref_encryption_settings">Настройки за шифроване</string> + <string name="pref_security_settings">Сигурност</string> <string name="pref_force_encryption">Налагане на шифроване в двете посоки</string> <string name="pref_force_encryption_summary">Съобщенията да се изпращат винаги шифровани (освен в беседите)</string> + <string name="pref_allow_message_correction">Позволяване на поправянето на съобщения</string> + <string name="pref_allow_message_correction_summary">Позволяване на контактите да редактират съобщенията си след като са ги изпратили.</string> <string name="pref_dont_save_encrypted">Шифрованите съобщения да не се запазват</string> <string name="pref_dont_save_encrypted_summary">Внимание: Това може да доведе до загуба на съобщения</string> - <string name="pref_expert_options">Настройки за напреднали</string> + <string name="pref_expert_options">Експертни настройки</string> <string name="pref_expert_options_summary">Моля, бъдете внимателни с тези</string> <string name="title_activity_about">Относно Conversations</string> <string name="pref_about_conversations_summary">Информация за версията и лицензите</string> @@ -297,6 +301,8 @@ <string name="pref_expert_options_other">Други</string> <string name="pref_conference_name">Име на беседата</string> <string name="pref_conference_name_summary">Използване на темата на стаята вместо JID идентификатора за беседите</string> + <string name="pref_autojoin">Автоматично присъединяване към беседите</string> + <string name="pref_autojoin_summary">Спазване на флага за автоматично присъединяване в отметките на беседите</string> <string name="toast_message_otr_fingerprint">Отпечатъкът OTR е копиран!</string> <string name="toast_message_omemo_fingerprint">Отпечатъкът OMEMO е копиран!</string> <string name="conference_banned">Достъпът Ви до тази беседа беше забранен</string> @@ -427,7 +433,7 @@ <string name="two_hours">2 часа</string> <string name="eight_hours">8 часа</string> <string name="until_further_notice">До отмяна</string> - <string name="pref_input_options">Настройки за въвеждане</string> + <string name="pref_input_options">Въвеждане</string> <string name="pref_enter_is_send">Enter изпраща</string> <string name="pref_enter_is_send_summary">Натискането на клавиша Enter изпраща съобщението</string> <string name="pref_display_enter_key">Показване на клавиша Enter</string> @@ -489,14 +495,21 @@ <string name="download_failed_could_not_connect">Неуспешно сваляне: Неуспешна връзка със сървъра</string> <string name="account_status_tor_unavailable">Мрежата на Тор е недостъпна</string> <string name="server_info_broken">Повредено</string> - <string name="pref_presence_settings">Настройки за присъствието</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_xa_on_silent_mode">Недостъпен, в тих режим</string> <string name="pref_xa_on_silent_mode_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="unable_to_fetch_mam_prefs">Неуспешно получаване на настройките за архивирането</string> <string name="captcha_ocr">Текст за проверка</string> <string name="captcha_required">Проверката е задължителна</string> <string name="captcha_hint">въведете текста от изображението</string> @@ -506,7 +519,7 @@ <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_connection_options">Връзка</string> <string name="pref_use_tor">Свързване през Тор</string> <string name="pref_use_tor_summary">Всички връзки да минават през мрежата на Тор. Изисква Орбот</string> <string name="account_settings_hostname">Име на сървър</string> @@ -519,6 +532,7 @@ <item quantity="one">%d съобщение</item> <item quantity="other">%d съобщения</item> </plurals> + <string name="load_more_messages">Зареждане на още съобщения</string> <string name="shared_file_with_x">Файлът е споделен с %s</string> <string name="shared_image_with_x">Изображението е споделено с %s</string> <string name="no_storage_permission">Conversations се нуждае от достъп до външно място за съхранение</string> @@ -529,7 +543,7 @@ <string name="certificate_issuer">Издател</string> <string name="certificate_cn">Име</string> <string name="certificate_o">Организация</string> - <string name="certificate_sha1">Контролна сума SHA1</string> + <string name="certificate_sha1">SHA-1</string> <string name="certicate_info_not_available">(Няма)</string> <string name="certificate_not_found">Няма намерен сертификат</string> <string name="notify_on_all_messages">Известяване за всички съобщения</string> @@ -543,4 +557,8 @@ <string name="battery_optimizations_enabled_dialog">Устройството Ви прилага сериозни оптимизации за използването на батерията върху Conversations, а те може да доведат до забавени известия и дори пропуснати съобщения.\n\nСега ще Ви бъде предложено да ги изключите.</string> <string name="disable">Изключване</string> <string name="selection_too_large">Избраната област е твърде голяма</string> + <string name="no_accounts">(Няма активирани профили)</string> + <string name="this_field_is_required">Това поле е задължително</string> + <string name="correct_message">Поправяне на съобщението</string> + <string name="send_corrected_message">Изпращане на поправеното съобщение</string> </resources> diff --git a/src/main/res/values-ca/strings.xml b/src/main/res/values-ca/strings.xml index 6e91e2b6..6f48ab63 100644 --- a/src/main/res/values-ca/strings.xml +++ b/src/main/res/values-ca/strings.xml @@ -93,7 +93,6 @@ <string name="pref_xmpp_resource_summary">El nom que identifica aquest client amb</string> <string name="pref_accept_files">Acceptar fitxers</string> <string name="pref_accept_files_summary">Accepta fitxers automàticament amb una mida menor a…</string> - <string name="pref_notification_settings">Ajustos de notificacions</string> <string name="pref_notifications">Notificacions</string> <string name="pref_notifications_summary">Notifica quan arriba un nou missatge</string> <string name="pref_vibrate">Vibra</string> @@ -102,12 +101,10 @@ <string name="pref_sound_summary">Reprodueix el to de trucada amb la notificació</string> <string name="pref_notification_grace_period">Notificació del període d\'espera</string> <string name="pref_notification_grace_period_summary">Desactiva les notificacions durant un breu termini després de rebre una còpia de missatges carbon</string> - <string name="pref_advanced_options">Opcions avançades</string> <string name="pref_never_send_crash">Mai enviïs informes d\'errors</string> <string name="pref_never_send_crash_summary">Enviant traces d\'execució d\'ajudes al futur desenvolupament del Conversations.</string> <string name="pref_confirm_messages">Confirmant missatges</string> <string name="pref_confirm_messages_summary">Deixeu que el seu contacte sàpiga quan heu rebut i llegit un missatge</string> - <string name="pref_ui_options">Opcions de UI</string> <string name="openpgp_error">OpenKeychain ha reportat un error</string> <string name="error_decrypting_file">I/O Error al desxifrar un arxiu</string> <string name="accept">Acceptar</string> @@ -249,12 +246,10 @@ <string name="sure_delete_fingerprint">Estàs segur que t\'agradaria eliminar l\'empremta digital?</string> <string name="ignore">Ignorar</string> <string name="without_mutual_presence_updates"><b>Perill:</b>L\'enviament d\'aquest sense actualitzacions de presència podria causar problemes inesperats.\n\n<small> Ves als detalls del contacte per verificar les subscripcions de presència.</small></string> - <string name="pref_encryption_settings">Configuració del xifratge</string> <string name="pref_force_encryption">Força d\'extrema extrem del xifrat</string> <string name="pref_force_encryption_summary">Enviar sempre missatges xifrat( Excepte per les sales)</string> <string name="pref_dont_save_encrypted">No guardar els misstages xifrats</string> <string name="pref_dont_save_encrypted_summary">Perill: Podria portar a la pèrdua dels missatges</string> - <string name="pref_expert_options">Opcions per a experts</string> <string name="pref_expert_options_summary">Aneu amb cura amb aixó</string> <string name="title_activity_about">Sobre Conversations</string> <string name="pref_about_conversations_summary">Informació sobre la construció i la seva llicència</string> @@ -381,7 +376,6 @@ <string name="two_hours">2 Hores</string> <string name="eight_hours">8 Hores</string> <string name="until_further_notice">Fins nou avís</string> - <string name="pref_input_options">Opcions d\'entrada</string> <string name="pref_enter_is_send">Entra per enviar</string> <string name="pref_enter_is_send_summary">Utilitza el botó enter per enviar el missatge</string> <string name="pref_display_enter_key">Mostra el botó enter</string> diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml index d3ad3b2c..b3e29a82 100644 --- a/src/main/res/values-cs/strings.xml +++ b/src/main/res/values-cs/strings.xml @@ -102,7 +102,7 @@ <string name="pref_xmpp_resource_summary">Jméno se kterým se tento klient identifikuje</string> <string name="pref_accept_files">Přijímat soubory</string> <string name="pref_accept_files_summary">Automaticky přijímat soubory menší než…</string> - <string name="pref_notification_settings">Nastavení upozornění</string> + <string name="pref_notification_settings">Upozornění</string> <string name="pref_notifications">Upozornění</string> <string name="pref_notifications_summary">Upozornit při přijetí nové zprávy</string> <string name="pref_vibrate">Vibrovat</string> @@ -111,12 +111,12 @@ <string name="pref_sound_summary">Přehrát zvuk společně s upozorněním</string> <string name="pref_notification_grace_period">Četnost upozornění</string> <string name="pref_notification_grace_period_summary">Neupozorňovat krátce poté co byla obdržena kopie zprávy</string> - <string name="pref_advanced_options">Pokročilé nastavení</string> + <string name="pref_advanced_options">Rozšířené</string> <string name="pref_never_send_crash">Neodesílat detaily o pádu aplikace</string> <string name="pref_never_send_crash_summary">Zasláním detailů o důvodu selhání pomůžete dalšímu vývoji aplikace Konverzace</string> <string name="pref_confirm_messages">Potvrzovat zprávy</string> <string name="pref_confirm_messages_summary">Oznamovat kontaktům, že zpráva byla přijata a přečtena</string> - <string name="pref_ui_options">Nastavení UI</string> + <string name="pref_ui_options">UI</string> <string name="openpgp_error">OpenKeychain nahlásil chybu</string> <string name="error_decrypting_file">I/O chyba dešifrování souboru</string> <string name="accept">Přijmout</string> @@ -191,6 +191,7 @@ <string name="server_info_stream_management">XEP-0198: Nastavení proudu</string> <string name="server_info_pep">XEP-0163: PEP (Avatars / OMEMO)</string> <string name="server_info_http_upload">XEP-0363: HTTP File Upload</string> + <string name="server_info_push">XEP-0357: Push</string> <string name="server_info_available">dostupný</string> <string name="server_info_unavailable">nedostupný</string> <string name="missing_public_keys">Chybí oznámení o veřejném klíči</string> @@ -240,6 +241,7 @@ <string name="you">Já</string> <string name="action_edit_subject">Upravit jméno konference</string> <string name="conference_not_found">Konference nenalezena</string> + <string name="conference_unknown_error">Došlo k neznámé chybě</string> <string name="leave">Odejít</string> <string name="contact_added_you">Kontakt přidán do seznamu</string> <string name="add_back">Opět přidat</string> @@ -274,9 +276,11 @@ <string name="sure_delete_fingerprint">Chcete opravdu smazat tento identifikátor?</string> <string name="ignore">Ignorovat</string> <string name="without_mutual_presence_updates"><b>Varování:</b> Odeslání bez povolení změn stavu může způsobit nečekané problémy na obou stranách.\n\n<small>Přejdi na detaily kontaktu pro ověření povolení o změnách stavu.</small></string> - <string name="pref_encryption_settings">Nastavení šifrování</string> + <string name="pref_security_settings">Zabezpečení</string> <string name="pref_force_encryption">Vynutit šifrování</string> <string name="pref_force_encryption_summary">Vždy zasílat šifrované zprávy (mimo konference)</string> + <string name="pref_allow_message_correction">Povolit opravu zpráv</string> + <string name="pref_allow_message_correction_summary">Povolí kontaktům zpětné upravování jejich zpráv</string> <string name="pref_dont_save_encrypted">Neukládat šifrované zprávy</string> <string name="pref_dont_save_encrypted_summary">Varování: Toto může vést ke ztrátě zpráv</string> <string name="pref_expert_options">Expertní nastavení</string> @@ -297,6 +301,8 @@ <string name="pref_expert_options_other">Další</string> <string name="pref_conference_name">Jméno konference</string> <string name="pref_conference_name_summary">Pro identifikaci konferencí použít téma místnosti místo jejího JID</string> + <string name="pref_autojoin">Automaticky vstupovat do konferencí</string> + <string name="pref_autojoin_summary">Používat autojoin nastavení v záložkách konferencí</string> <string name="toast_message_otr_fingerprint">OTR otisk zkopírován do schránky!</string> <string name="toast_message_omemo_fingerprint">OMEMO otisk zkopírován do schránky!</string> <string name="conference_banned">Vstup do konference byl zakázán</string> @@ -427,7 +433,7 @@ <string name="two_hours">2 hodiny</string> <string name="eight_hours">8 hodin</string> <string name="until_further_notice">Než opět změním</string> - <string name="pref_input_options">Nastavení zadávání</string> + <string name="pref_input_options">Vstup</string> <string name="pref_enter_is_send">Enter odesílá</string> <string name="pref_enter_is_send_summary">Použít klávesu enter pro odesílání zpráv</string> <string name="pref_display_enter_key">Zobrazit klávesu enter</string> @@ -491,14 +497,21 @@ <string name="download_failed_could_not_connect">Stahování selhalo: Nelze se připojit k hostu</string> <string name="account_status_tor_unavailable">Tor síť není dostupná</string> <string name="server_info_broken">Rozbité</string> - <string name="pref_presence_settings">Nastavení přítomnosti</string> + <string name="pref_presence_settings">Stav</string> <string name="pref_away_when_screen_off">Pryč při vypnuté obrazovce</string> <string name="pref_away_when_screen_off_summary">Při vypnuté obrazovce označí váš stav jako pryč</string> <string name="pref_xa_on_silent_mode">Nedostupný při vypnutém zvuku</string> <string name="pref_xa_on_silent_mode_summary">Při tichém módu označí váš stav jako nedostupný</string> + <string name="pref_show_connection_options">Rozšířená nastavení připojení</string> + <string name="pref_show_connection_options_summary">Zobrazovat nastavení hostname a port při vytváření účtu</string> + <string name="hostname_example">xmpp.server.cz</string> <string name="action_add_account_with_certificate">Přidat účet s certifikátem</string> <string name="unable_to_parse_certificate">Nelze načíst certifikát</string> <string name="authenticate_with_certificate">Nechat prázdné pro ověření s certifikátem</string> + <string name="mam_prefs">Nastavení archivace</string> + <string name="server_side_mam_prefs">Nastavení archivace na serveru</string> + <string name="fetching_mam_prefs">Získávání nastavení archivace. Chvíli strpení...</string> + <string name="unable_to_fetch_mam_prefs">Nelze získat nastavení archivace</string> <string name="captcha_ocr">Captcha text</string> <string name="captcha_required">Captcha vyžadována</string> <string name="captcha_hint">opište text z obrázku</string> @@ -508,7 +521,7 @@ <string name="error_fetching_omemo_key">Chyba získání OMEMO klíče!</string> <string name="verified_omemo_key_with_certificate">OMEMO klíč ověřen certifikátem!</string> <string name="device_does_not_support_certificates">Tento přístroj nepodporuje výběr klientského certifikátu!</string> - <string name="pref_connection_options">Možnosti připojení</string> + <string name="pref_connection_options">Připojení</string> <string name="pref_use_tor">Připojit přes Tor</string> <string name="pref_use_tor_summary">Vedení všech připojení po Tor síti vyžaduje aplikaci Orbot</string> <string name="account_settings_hostname">Hostname</string> @@ -522,6 +535,7 @@ <item quantity="few">%d zprávy</item> <item quantity="other">%d zpráv</item> </plurals> + <string name="load_more_messages">Načíst více zpráv</string> <string name="shared_file_with_x">Soubor sdílen s %s</string> <string name="shared_image_with_x">Obrázek sdílen s %s</string> <string name="no_storage_permission">Conversations vyžaduje přístup k externímu úložišti</string> @@ -532,13 +546,15 @@ <string name="certificate_issuer">Vydavatel</string> <string name="certificate_cn">Jméno</string> <string name="certificate_o">Organizace</string> - <string name="certificate_sha1">SHA1</string> + <string name="certificate_sha1">SHA-1</string> <string name="certicate_info_not_available">(Nedostupné)</string> <string name="certificate_not_found">Certifikát nenalezen</string> <string name="notify_on_all_messages">Upozorňovat na všechny zprávy</string> <string name="notify_only_when_highlighted">Upozorňovat pouze pokud zvýrazněno</string> <string name="notify_never">Upozornění vypnuta</string> <string name="notify_paused">Upozornění pozastavena</string> + <string name="pref_picture_compression">Komprimovat obrázky</string> + <string name="pref_picture_compression_summary">Upravit velikost a komprimovat obrázky</string> <string name="always">Vždy</string> <string name="automatically">Automaticky</string> <string name="battery_optimizations_enabled">Povolena optimalizace využití baterie</string> @@ -546,4 +562,8 @@ <string name="battery_optimizations_enabled_dialog">Tento přístroj provádí agresivní optimalizace využití baterie pro konverzace. Ty mohou způsobit zpoždění upozornění nebo ztrátu zpráv.\nnyní budete vyzváni k jejich vypnutí.</string> <string name="disable">Vypnout</string> <string name="selection_too_large">Vybraný obsah je příliš dlouhý</string> + <string name="no_accounts">(Žádné aktivované účty)</string> + <string name="this_field_is_required">Toto pole je vyžadováno</string> + <string name="correct_message">Opravit zprávu</string> + <string name="send_corrected_message">Odeslat opravenou zprávu</string> </resources> diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index c9762030..8dcb9fac 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -204,6 +204,7 @@ <string name="server_info_stream_management">XEP-0198: Stream Management</string> <string name="server_info_pep">XEP-0163: PEP (Avatare/OMEMO)</string> <string name="server_info_http_upload">XEP-0363: HTTP File Upload</string> + <string name="server_info_push">XEP-0357: Push</string> <string name="server_info_available">ja</string> <string name="server_info_unavailable">nein</string> <string name="missing_public_keys">Öffentlicher Schlüssel fehlt</string> @@ -253,6 +254,7 @@ <string name="you">Du</string> <string name="action_edit_subject">Konferenz-Thema bearbeiten</string> <string name="conference_not_found">Konferenz nicht gefunden</string> + <string name="conference_unknown_error">Unbekannter Fehler</string> <string name="leave">Verlassen</string> <string name="contact_added_you">Der Kontakt hat dich zur Kontaktliste hinzugefügt</string> <string name="add_back">Auch hinzufügen</string> @@ -287,12 +289,14 @@ <string name="sure_delete_fingerprint">Soll dieser Fingerabdruck wirklich gelöscht werden?</string> <string name="ignore">Ignorieren</string> <string name="without_mutual_presence_updates"><b>Achtung:</b> Ohne gegenseitige Kenntnis des Online-Status kann es zu unerwarteten Problemen kommen.\n\n<small>Bitte die Einstellungen in den Kontakt-Details prüfen.</small></string> - <string name="pref_encryption_settings">Verschlüsselungs-Einstellungen</string> + <string name="pref_security_settings">Sicherheit</string> <string name="pref_force_encryption">Ende-zu-Ende-Verschlüsselung erzwingen</string> <string name="pref_force_encryption_summary">Nachrichten immer verschlüsseln (außer für Konferenzen)</string> + <string name="pref_allow_message_correction">Nachrichtenkorrektur erlauben</string> + <string name="pref_allow_message_correction_summary">Erlaube Deinen Kontakten das nachträgliche Korrigieren ihrer Nachrichten</string> <string name="pref_dont_save_encrypted">Verschlüsselte Nachrichten nicht speichern</string> <string name="pref_dont_save_encrypted_summary">Achtung: kann zu Nachrichtenverlust führen</string> - <string name="pref_expert_options">Einstellungen für Experten</string> + <string name="pref_expert_options">Experteneinstellungen</string> <string name="pref_expert_options_summary">Hier bitte vorsichtig sein</string> <string name="title_activity_about">Über Conversations</string> <string name="pref_about_conversations_summary">Versions- und Lizenzinformationen</string> @@ -310,6 +314,8 @@ <string name="pref_expert_options_other">Sonstiges</string> <string name="pref_conference_name">Konferenz-Name</string> <string name="pref_conference_name_summary">Konferenz-Thema statt Raum-JID als Namen verwenden</string> + <string name="pref_autojoin">Unterhaltung automatisch beitreten</string> + <string name="pref_autojoin_summary">Autojoin-Flag in Konferenzlesezeichen beachten</string> <string name="toast_message_otr_fingerprint">OTR-Fingerabdruck in die Zwischenablage kopiert!</string> <string name="toast_message_omemo_fingerprint">OMEMO-Fingerabdruck in die Zwischenablage kopiert!</string> <string name="conference_banned">Du wurdest von der Konferenz ausgeschlossen</string> @@ -441,7 +447,7 @@ <string name="two_hours">2 Stunden</string> <string name="eight_hours">8 Stunden</string> <string name="until_further_notice">Bis auf Weiteres</string> - <string name="pref_input_options">Eingabe-Optionen</string> + <string name="pref_input_options">Eingabe</string> <string name="pref_enter_is_send">Eingabe-Taste (Enter) sendet Nachricht</string> <string name="pref_enter_is_send_summary">Eingabe-Taste (Enter) zum Versenden einer Nachricht verwenden</string> <string name="pref_display_enter_key">Zeige Eingabe-Taste (Enter)</string> @@ -551,14 +557,21 @@ <string name="download_failed_could_not_connect">Download fehlgeschlagen: keine Verbindung zum Host</string> <string name="account_status_tor_unavailable">Tor-Netzwerk nicht verfügbar</string> <string name="server_info_broken">Fehlerhaft</string> - <string name="pref_presence_settings">Status Einstellungen</string> + <string name="pref_presence_settings">Status</string> <string name="pref_away_when_screen_off">Abwesend bei abgeschaltetem Bildschirm</string> <string name="pref_away_when_screen_off_summary">Setzt deinen Status auf \"abwesend\", solange dein Bildschirm abgeschaltet ist</string> <string name="pref_xa_on_silent_mode">Nicht verfügbar bei Stummschaltung</string> <string name="pref_xa_on_silent_mode_summary">Setzt deinen Status auf \"nicht verfügbar\", solange dein Telefon lautlos ist</string> + <string name="pref_show_connection_options">Erweiterte Verbindungs-Optionen</string> + <string name="pref_show_connection_options_summary">Hostname- und Port-Optionen bei Kontoeinrichtung anzeigen</string> + <string name="hostname_example">xmpp.domain.de</string> <string name="action_add_account_with_certificate">Konto mit Zertifikat hinzufügen</string> <string name="unable_to_parse_certificate">Zertifikat kann nicht gelesen werden</string> <string name="authenticate_with_certificate">Leer lassen, um mit Zertifikat anzumelden</string> + <string name="mam_prefs">Archivierungseinstellungen</string> + <string name="server_side_mam_prefs">Archivierungseinstellungen des Servers</string> + <string name="fetching_mam_prefs">Archivierungseinstellungen werden abgerufen. Bitte warten …</string> + <string name="unable_to_fetch_mam_prefs">Archivierungseinstellungen konnten nicht abgerufen werden</string> <string name="captcha_ocr">Captcha Text</string> <string name="captcha_required">Captcha erforderlich</string> <string name="captcha_hint">Text aus Captcha eintragen</string> @@ -568,7 +581,7 @@ <string name="error_fetching_omemo_key">Kann OMEMO Schlüssel nicht empfangen!</string> <string name="verified_omemo_key_with_certificate">OMEMO Schlüssel mit Zertifikat bestätigt!</string> <string name="device_does_not_support_certificates">Dein Gerät unterstützt das Auswählen von Client-Zertifikaten nicht!</string> - <string name="pref_connection_options">Verbindungs-Optionen</string> + <string name="pref_connection_options">Verbindung</string> <string name="pref_use_tor">Über TOR verbinden</string> <string name="pref_use_tor_summary">Alle Verbindungen über das Tor-Netzwerk tunneln. Benötigt Orbot</string> <string name="account_settings_hostname">Hostname</string> @@ -581,6 +594,7 @@ <item quantity="one">%d Nachricht</item> <item quantity="other">%d Nachrichten</item> </plurals> + <string name="load_more_messages">Weitere Nachrichten laden</string> <string name="shared_file_with_x">Datei mit %s geteilt</string> <string name="shared_image_with_x">Bild mit %s geteilt</string> <string name="no_storage_permission">Conversations benötigt Zugriff auf externen Speicher</string> @@ -589,9 +603,9 @@ <string name="certificate_information">Zertifikatinformationen</string> <string name="certificate_subject">Betreff</string> <string name="certificate_issuer">Aussteller</string> - <string name="certificate_cn">Gemeinsamer Name</string> + <string name="certificate_cn">Name</string> <string name="certificate_o">Organisation</string> - <string name="certificate_sha1">SHA1</string> + <string name="certificate_sha1">SHA-1</string> <string name="certicate_info_not_available">(Nicht verfügbar)</string> <string name="certificate_not_found">Kein Zertifikat gefunden</string> <string name="notify_on_all_messages">Bei allen Nachrichten benachrichtigen</string> @@ -605,4 +619,8 @@ <string name="battery_optimizations_enabled_dialog">Dein Telefon wendet Batterioptimierungen bei Conversations an, welche verspätete Benachrichtigungen oder Nachrichtenverlust verursachen können. Es ist empfehlenswert dies zu deaktivieren.</string> <string name="disable">Deaktivieren</string> <string name="selection_too_large">Der ausgewählte Bereich ist zu groß</string> + <string name="no_accounts">(Keine aktivierten Konten)</string> + <string name="this_field_is_required">Dieses Feld ist erforderlich</string> + <string name="correct_message">Nachricht korrigieren</string> + <string name="send_corrected_message">Korrigierte Nachricht senden</string> </resources> diff --git a/src/main/res/values-el/strings.xml b/src/main/res/values-el/strings.xml index e55a6b2d..0bdc6a5e 100644 --- a/src/main/res/values-el/strings.xml +++ b/src/main/res/values-el/strings.xml @@ -93,7 +93,6 @@ <string name="pref_xmpp_resource_summary">Το όνομα με το οποίο ταυτοποιείται αυτό το πρόγραμμα-πελάτης</string> <string name="pref_accept_files">Αποδοχή αρχείων</string> <string name="pref_accept_files_summary">Αυτόματη αποδοχή αρχείων μικρότερα από...</string> - <string name="pref_notification_settings">Επιλογές ειδοποιήσεων</string> <string name="pref_notifications">Ειδοποιήσεις</string> <string name="pref_notifications_summary">Ειδοποίηση όταν λαμβάνεται ένα νέο μήνυμα</string> <string name="pref_vibrate">Δόνηση</string> @@ -102,12 +101,10 @@ <string name="pref_sound_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">Στέλνοντας ίχνη στοίβας βοηθάτε την συνεχόμενη ανάπτυξη του Conversations</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="error_decrypting_file">Σφάλμα εισόδου/εξόδου κατά την αποκρυπτογράφηση αρχείου</string> <string name="accept">Αποδοχή</string> @@ -249,12 +246,10 @@ <string name="sure_delete_fingerprint">Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το αποτύπωμα;</string> <string name="ignore">Αγνόηση</string> <string name="without_mutual_presence_updates"><b>Προειδοποίηση:</b> Η αποστολή αυτού χωρίς αμφίδρομες ενημερώσεις παρουσίας μπορεί να προκαλέσει απροσδόκητα προβλήματα.\n\n<small>Πηγαίνετε στις λεπτομέρειες επαφής για να επαληθεύσετε τις συνδρομές παρουσίας σας.</small></string> - <string name="pref_encryption_settings">Ρυθμίσεις κρυπτογράφησης</string> <string name="pref_force_encryption">Επιβολή κρυπτογράφησης από άκρη σε άκρη</string> <string name="pref_force_encryption_summary">Πάντα αποστολή κρυπτογραφημένων μηνυμάτων (εκτός από συνδιασκέψεις)</string> <string name="pref_dont_save_encrypted">Χωρίς αποθήκευση κρυπτογραφημένων μηνυμάτων</string> <string name="pref_dont_save_encrypted_summary">Προειδοποίηση: Αυτό μπορεί να οδηγήσει σε απώλεια μηνυμάτων</string> - <string name="pref_expert_options">Επιλογές για προχωρημένους</string> <string name="pref_expert_options_summary">Παρακαλώ να είστε προσεκτικοί με αυτά</string> <string name="title_activity_about">Σχετικά με το Conversations</string> <string name="pref_about_conversations_summary">Πληροφορίες δημιουργίας και αδειών</string> @@ -381,7 +376,6 @@ <string name="two_hours">2 ώρες</string> <string name="eight_hours">8 ώρες</string> <string name="until_further_notice">Μέχρι νεωτέρας</string> - <string name="pref_input_options">Επιλογές εισόδου</string> <string name="pref_enter_is_send">Αποστολή με το πλήκτρο Enter</string> <string name="pref_enter_is_send_summary">Χρήση του πλήκτρου Enter για την αποστολή μηνύματος</string> <string name="pref_display_enter_key">Εμφάνιση του πλήκτρου Enter</string> diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index d60a26b2..fd21bcea 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -102,21 +102,21 @@ <string name="pref_xmpp_resource_summary">El nombre que identifica el cliente que estás utilizando</string> <string name="pref_accept_files">Aceptar archivos</string> <string name="pref_accept_files_summary">De forma automática aceptar archivos menores que…</string> - <string name="pref_notification_settings">Ajustes de notificación</string> + <string name="pref_notification_settings">Notificaciones</string> <string name="pref_notifications">Notificaciones</string> - <string name="pref_notifications_summary">Notifica cuando llega un nuevo mensaje</string> + <string name="pref_notifications_summary">Notificar cuando llega un nuevo mensaje</string> <string name="pref_vibrate">Vibrar</string> <string name="pref_vibrate_summary">Vibra cuando llega un nuevo mensaje</string> <string name="pref_sound">Sonido</string> <string name="pref_sound_summary">Reproduce tono con la notificación</string> <string name="pref_notification_grace_period">Notificaciones Carbons</string> <string name="pref_notification_grace_period_summary">Deshabilita las notificaciones durante un corto periodo de tiempo después de recibir la copia del mensaje carbon</string> - <string name="pref_advanced_options">Opciones avanzadas</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">Si envías registros de error ayudas al desarrollo de Conversations</string> <string name="pref_confirm_messages">Confirmar mensajes</string> <string name="pref_confirm_messages_summary">Permitir a tus contactos saber cuando recibes y lees un mensaje</string> - <string name="pref_ui_options">Opciones de interfaz</string> + <string name="pref_ui_options">Pantalla</string> <string name="openpgp_error">OpenKeychain reportó un error</string> <string name="error_decrypting_file">Error descifrando archivo</string> <string name="accept">Aceptar</string> @@ -191,6 +191,7 @@ <string name="server_info_stream_management">XEP-0198: Stream Management</string> <string name="server_info_pep">XEP-0163: PEP (Avatars / OMEMO)</string> <string name="server_info_http_upload">XEP-0363: HTTP File Upload</string> + <string name="server_info_push">XEP-0357: Push</string> <string name="server_info_available">Sí</string> <string name="server_info_unavailable">No</string> <string name="missing_public_keys">Se han perdido las claves de anuncio públicas</string> @@ -240,6 +241,7 @@ <string name="you">Tú</string> <string name="action_edit_subject">Editar asunto de la conversación</string> <string name="conference_not_found">Conversación no encontrada</string> + <string name="conference_unknown_error">Error desconocido</string> <string name="leave">Salir</string> <string name="contact_added_you">El contacto te ha añadido a su lista de contactos</string> <string name="add_back">Añadir contacto</string> @@ -274,12 +276,14 @@ <string name="sure_delete_fingerprint">¿Estás seguro de que quieres eliminar esta huella digital OTR?</string> <string name="ignore">Ignorar</string> <string name="without_mutual_presence_updates"><b>Aviso:</b> Enviando esto sin suscripción de presencia por ambas partes podría causar problemas inesperados.\n\n<small>Verficia la suscripción de presencia en detalles del contacto.</small></string> - <string name="pref_encryption_settings">Ajustes de cifrado</string> + <string name="pref_security_settings">Seguridad</string> <string name="pref_force_encryption">Forzar cifrado end-to-end</string> <string name="pref_force_encryption_summary">Siempre enviar mensajes cifrados (excepto para conversaciones en grupo)</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> <string name="pref_dont_save_encrypted">No guardar mensajes cifrados</string> <string name="pref_dont_save_encrypted_summary">Aviso: Esto podría llevar a pérdida de mensajes</string> - <string name="pref_expert_options">Ajustes avanzados</string> + <string name="pref_expert_options">Opciones para expertos</string> <string name="pref_expert_options_summary">Por favor, cuidado con estas opciones</string> <string name="title_activity_about">Acerca de Conversations</string> <string name="pref_about_conversations_summary">Información de compilación y licencia</string> @@ -297,6 +301,8 @@ <string name="pref_expert_options_other">Otros</string> <string name="pref_conference_name">Nombre conversación grupo</string> <string name="pref_conference_name_summary">Usar el asunto de la conversación en lugar del identificador jabber como nombre en las conversaciones en grupo</string> + <string name="pref_autojoin">Unirse a conversaciones en grupo automáticamente</string> + <string name="pref_autojoin_summary">Respetar la opción de unirse automáticamente de los marcadores de las conversaciones en grupo</string> <string name="toast_message_otr_fingerprint">¡Huella digital OTR copiada al portapapeles!</string> <string name="toast_message_omemo_fingerprint">¡Huella digital OMEMO copiada al portapapeles!</string> <string name="conference_banned">Tu entrada a esta conversación ha sido prohibida</string> @@ -357,7 +363,7 @@ <string name="manually_verify">Verificar manualmente</string> <string name="are_you_sure_verify_fingerprint">¿Estás seguro de que quieres verificar el contacto?</string> <string name="pref_show_dynamic_tags">Mostrar etiquetas</string> - <string name="pref_show_dynamic_tags_summary">Muestra información en forma de etiquetas debajo de los contactos</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="conference_with">Crear conversación en grupo</string> <string name="no_conference_server_found">No se ha encontrado el servidor para crear la conversación</string> @@ -427,11 +433,11 @@ <string name="two_hours">2 horas</string> <string name="eight_hours">8 horas</string> <string name="until_further_notice">Hasta nuevo aviso</string> - <string name="pref_input_options">Opciones de entrada</string> + <string name="pref_input_options">Entrada</string> <string name="pref_enter_is_send">Intro para enviar</string> <string name="pref_enter_is_send_summary">Usar la tecla intro para enviar el mensaje</string> <string name="pref_display_enter_key">Mostrar tecla Intro</string> - <string name="pref_display_enter_key_summary">Cambia la tecla de emoticonos por la tecla Intro</string> + <string name="pref_display_enter_key_summary">Cambiar la tecla de emoticonos por la tecla Intro</string> <string name="audio">audio</string> <string name="video">vídeo</string> <string name="image">imagen</string> @@ -449,7 +455,7 @@ <string name="contact_is_typing">%s está escribiendo...</string> <string name="contact_has_stopped_typing">%s ha dejado de escribir</string> <string name="pref_chat_states">Notificación de escritura</string> - <string name="pref_chat_states_summary">Permite a tus contactos saber cuando estás escribiendo un nuevo mensaje</string> + <string name="pref_chat_states_summary">Permitir a tus contactos saber cuando estás escribiendo un nuevo 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> @@ -489,14 +495,21 @@ <string name="download_failed_could_not_connect">Error al descargar: No se ha podido conectar con el servidor</string> <string name="account_status_tor_unavailable">Red Tor no disponible.</string> <string name="server_info_broken">Error</string> - <string name="pref_presence_settings">Opciones de presencia</string> + <string name="pref_presence_settings">Presencia</string> <string name="pref_away_when_screen_off">Ausente con pantalla apagada</string> <string name="pref_away_when_screen_off_summary">Cambia tu estado a ausente cuando la pantalla está apagada</string> <string name="pref_xa_on_silent_mode">No disponible en modo silencio</string> - <string name="pref_xa_on_silent_mode_summary">Cambiar el recurso a no disponible cuando el dispositivo esté en modo silencio</string> + <string name="pref_xa_on_silent_mode_summary">Cambia tu estado a no disponible cuando el dispositivo está en modo silencio</string> + <string name="pref_show_connection_options">Opciones de conexión</string> + <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_ocr">Texto captcha</string> <string name="captcha_required">Captcha requerido</string> <string name="captcha_hint">Introduce el texto de la imagen</string> @@ -506,7 +519,7 @@ <string name="error_fetching_omemo_key">¡Error buscando clave OMEMO!</string> <string name="verified_omemo_key_with_certificate">¡Clave OMEMO con certificado verificada!</string> <string name="device_does_not_support_certificates">¡Tu dispositivo no soporta la elección de certificados de cliente!</string> - <string name="pref_connection_options">Opciones de conexión</string> + <string name="pref_connection_options">Conexión</string> <string name="pref_use_tor">Conectar via Tor</string> <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> @@ -519,6 +532,7 @@ <item quantity="one">%d mensaje</item> <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="no_storage_permission">Conversations necesita acceder al almacenamiento externo</string> @@ -529,7 +543,7 @@ <string name="certificate_issuer">Editor</string> <string name="certificate_cn">Nombre</string> <string name="certificate_o">Organización</string> - <string name="certificate_sha1">SHA1</string> + <string name="certificate_sha1">SHA-1</string> <string name="certicate_info_not_available">(No disponible)</string> <string name="certificate_not_found">Certificado no encontrado</string> <string name="notify_on_all_messages">Notificar para todos los mensajes</string> @@ -543,4 +557,8 @@ <string name="battery_optimizations_enabled_dialog">Tu dispositivo está realizando optimizaciones de uso de batería en Conversations que pueden hacer que los mensajes se retrasen o incluso hacer que se pierdan.\n\nEl sistema te preguntará ahora para deshabilitarlas.</string> <string name="disable">Deshabilitar</string> <string name="selection_too_large">El área seleccionada es demasiado grande</string> + <string name="no_accounts">(No hay cuentas activas)</string> + <string name="this_field_is_required">Este campo es requerido</string> + <string name="correct_message">Corregir mensaje</string> + <string name="send_corrected_message">Enviar mensaje corregido</string> </resources> diff --git a/src/main/res/values-eu/strings.xml b/src/main/res/values-eu/strings.xml index 8e0270db..9407338b 100644 --- a/src/main/res/values-eu/strings.xml +++ b/src/main/res/values-eu/strings.xml @@ -102,7 +102,7 @@ <string name="pref_xmpp_resource_summary">Bezero honek bere burua aurkezteko erabiltzen duen izena</string> <string name="pref_accept_files">Fitxategiak onartu</string> <string name="pref_accept_files_summary">Hurrengo tamaina baino fitxategi txikiagoak automatikoki onartu…</string> - <string name="pref_notification_settings">Jakinarazpenen ezarpenak</string> + <string name="pref_notification_settings">Jakinarazpena</string> <string name="pref_notifications">Jakinarazpenak</string> <string name="pref_notifications_summary">Mezu berri bat heltzerakoan jakinarazi</string> <string name="pref_vibrate">Dardaratu</string> @@ -111,12 +111,12 @@ <string name="pref_sound_summary">Dei-tonua jo jakinarazpenarekin</string> <string name="pref_notification_grace_period">Jakinarazpenen grazia epea</string> <string name="pref_notification_grace_period_summary">Jakinarazpenak denbora labur baterako ezgaitu ikatz-kopia bat jaso ondoren</string> - <string name="pref_advanced_options">Aukera aurreratuak</string> + <string name="pref_advanced_options">Aurreratua</string> <string name="pref_never_send_crash">Gelditze txostenik ez bidali inoiz</string> <string name="pref_never_send_crash_summary">Akats harraskak bidaliz Conversationsen garapenean laguntzen duzu</string> <string name="pref_confirm_messages">Mezuak egiaztatu</string> <string name="pref_confirm_messages_summary">Zure kontaktuak mezu bat noiz jaso eta irakurri duzun jakin dezan baimendu</string> - <string name="pref_ui_options">Erabiltzaile-interfazearen aukerak</string> + <string name="pref_ui_options">Erabiltzaile-interfazea</string> <string name="openpgp_error">OpenKeychainek akats baten berri eman du</string> <string name="error_decrypting_file">Sarrera/Irteera akatsa fitxategia desenkriptatzerakoan</string> <string name="accept">Onartu</string> @@ -191,6 +191,7 @@ <string name="server_info_stream_management">XEP-0198: Stream Management</string> <string name="server_info_pep">XEP-0163: PEP (Avatars / OMEMO)</string> <string name="server_info_http_upload">XEP-0363: HTTP File Upload</string> + <string name="server_info_push">XEP-0357: Push</string> <string name="server_info_available">eskuragarri</string> <string name="server_info_unavailable">ez eskuragarri</string> <string name="missing_public_keys">Gako publikoen iragarpenak faltan</string> @@ -240,6 +241,7 @@ <string name="you">Zu</string> <string name="action_edit_subject">Konferentziaren gaia editatu</string> <string name="conference_not_found">Konferentzia ez da aurkitu</string> + <string name="conference_unknown_error">Akats ezezaguna jaso da</string> <string name="leave">Alde egin</string> <string name="contact_added_you">Kontaktuak bere zerrendara gehitu zaitu</string> <string name="add_back">Bera gehitu</string> @@ -274,12 +276,14 @@ <string name="sure_delete_fingerprint">Ziur al zaude hatz-marka hau ezabatu nahi duzulaz?</string> <string name="ignore">Kasurik ez egin</string> <string name="without_mutual_presence_updates"><b>Adi:</b> Bien arteko presentzia eguneraketarik gabe hau bidaltzeak ustekabeko arazoak sor litzake.\n\n<small>Joan zaitez kontaktuaren xehetasunetara zure presentzia eguneraketak egiaztatzeko.</small></string> - <string name="pref_encryption_settings">Enkriptazio ezarpenak</string> + <string name="pref_security_settings">Segurtasuna</string> <string name="pref_force_encryption">End-to-end enkriptazioa behartu</string> <string name="pref_force_encryption_summary">Mezuak beti enkriptatuta bidali (konferentzietan izan ezik)</string> + <string name="pref_allow_message_correction">Mezuen zuzenketa baimendu</string> + <string name="pref_allow_message_correction_summary">Zure kontaktuak haien mezuak atzeraeraginez editatzea baimendu</string> <string name="pref_dont_save_encrypted">Ez gorde enkriptatutako mezuak</string> <string name="pref_dont_save_encrypted_summary">Adi: Honek mezuen galera ekar lezake</string> - <string name="pref_expert_options">Adituentzako aukerak</string> + <string name="pref_expert_options">Adituentzako ezarpenak</string> <string name="pref_expert_options_summary">Mesedez kontuz ibili hauekin</string> <string name="title_activity_about">Conversationsi buruz</string> <string name="pref_about_conversations_summary">Eraikitze eta lizentzia informazioa</string> @@ -297,6 +301,8 @@ <string name="pref_expert_options_other">Besteak</string> <string name="pref_conference_name">Konferentziaren izena</string> <string name="pref_conference_name_summary">Erabili gelaren gaia konferentziak identifikatzeko eta ez JIDa</string> + <string name="pref_autojoin">Konferentzietara automatikoki batu</string> + <string name="pref_autojoin_summary">Automatikoki batzeko marka errespetatu konferentzien laster-marketan</string> <string name="toast_message_otr_fingerprint">OTR hatz-marka arbelara kopiatu da</string> <string name="toast_message_omemo_fingerprint">OMEMO hatz-marka arbelara kopiatu da</string> <string name="conference_banned">Konferentzia honetara sartzea debekatuta duzu</string> @@ -392,7 +398,7 @@ <string name="manual_verification_explanation">Kontu handiz konpara ezazu beheko hatz-marka zure kontaktuaren hatz-markarekin.\nEnkriptatutako email bat edota telefono dei bat bezalako edozein komunikabide fidagarriren bat erabili dezakezu horiek trukatzeko.</string> <string name="change_password">Pasahitza aldatu</string> <string name="current_password">Oraingo pasahitza</string> - <string name="new_password">Pasahitza berria</string> + <string name="new_password">Pasahitz berria</string> <string name="password_should_not_be_empty">Pasahitza ez luke hutsik egon behar</string> <string name="enable_all_accounts">Kontu guztiak gaitu</string> <string name="disable_all_accounts">Kontu guztiak ezgaitu</string> @@ -427,7 +433,7 @@ <string name="two_hours">2 ordu</string> <string name="eight_hours">8 ordu</string> <string name="until_further_notice">abisatu arte</string> - <string name="pref_input_options">Sarrera aukerak</string> + <string name="pref_input_options">Sarrera</string> <string name="pref_enter_is_send">Sartu teklak bidaltzen du</string> <string name="pref_enter_is_send_summary">Sartu tekla erabili mezua bidaltzeko</string> <string name="pref_display_enter_key">Sartu tekla erakutsi</string> @@ -489,14 +495,21 @@ <string name="download_failed_could_not_connect">Deskargak huts egin du: ezin izan da ostalarira konektatu</string> <string name="account_status_tor_unavailable">Tor sarea ez dago eskuragarri</string> <string name="server_info_broken">Hondatuta</string> - <string name="pref_presence_settings">Presentzia ezarpenak</string> + <string name="pref_presence_settings">Presentzia</string> <string name="pref_away_when_screen_off">Urrun pantaila itzalita dagoenean</string> <string name="pref_away_when_screen_off_summary">Zure baliabidea urrun bezala markatzen du pantaila itzalita dagoenean</string> <string name="pref_xa_on_silent_mode">Ez eskuragarri modu isilean</string> <string name="pref_xa_on_silent_mode_summary">Zure baliabidea ez eskuragarri bezala markatzen du gailua modu isilean dagoenean</string> + <string name="pref_show_connection_options">Konexioaren ezarpen luzatuak</string> + <string name="pref_show_connection_options_summary">Ostalariaren izena eta ataka ezarpenak erakutsi kontu bat ezartzerakoan</string> + <string name="hostname_example">xmpp.adibidea.com</string> <string name="action_add_account_with_certificate">Kontua ziurtagiriarekin gehitu</string> <string name="unable_to_parse_certificate">Ezin izan da ziurtagiria aztertu</string> <string name="authenticate_with_certificate">Utzi hutsik ziurtagiririk gabe autentifikatzeko</string> + <string name="mam_prefs">Artxibatze hobespenak</string> + <string name="server_side_mam_prefs">Zerbitzariaren aldeko artxibatze hobespenak</string> + <string name="fetching_mam_prefs">Artxibatze hobespenak eskuratzen. Mesedez itxaron...</string> + <string name="unable_to_fetch_mam_prefs">Ezin izan dira artxibatze hobespenak eskuratu</string> <string name="captcha_ocr">Captcharen testua</string> <string name="captcha_required">Captcha beharrezkoa da</string> <string name="captcha_hint">Sartu irudiaren testua</string> @@ -506,7 +519,7 @@ <string name="error_fetching_omemo_key">Akatsa OMEMO gakoa eskuratzerakoan!</string> <string name="verified_omemo_key_with_certificate">OMEMO gakoa ziurtagiriarekin egiaztatuta!</string> <string name="device_does_not_support_certificates">Zure gailuak ez du bezero ziurtagiriak aukeratzea onartzen!</string> - <string name="pref_connection_options">Konexioaren aukerak</string> + <string name="pref_connection_options">Konexioa</string> <string name="pref_use_tor">Tor bidez konektatu</string> <string name="pref_use_tor_summary">Konexio guztiak Tor sarean zehar igaro. Orbot behar du</string> <string name="account_settings_hostname">Ostalariaren izena</string> @@ -519,6 +532,7 @@ <item quantity="one">mezu %d</item> <item quantity="other">%d mezu</item> </plurals> + <string name="load_more_messages">Mezu gehiago kargatu</string> <string name="shared_file_with_x">Fitxategia %s(r)ekin partekatu da</string> <string name="shared_image_with_x">Irudia %s(r)ekin partekatu da</string> <string name="no_storage_permission">Conversationsek kanpoko biltegirako sarbidea behar du</string> @@ -529,7 +543,7 @@ <string name="certificate_issuer">Igorlea</string> <string name="certificate_cn">Izen arrunta</string> <string name="certificate_o">Erakundea</string> - <string name="certificate_sha1">SHA1</string> + <string name="certificate_sha1">SHA-1</string> <string name="certicate_info_not_available">(Ez eskuragarri)</string> <string name="certificate_not_found">Ez da ziurtagiririk aurkitu</string> <string name="notify_on_all_messages">Mezu guztiak jakinarazi</string> @@ -542,4 +556,9 @@ <string name="battery_optimizations_enabled_explained">Zure gailua jakinarazpen atzeratuak edota mezuen galera ekar lezaketen bateriaren optimizazio handiak egiten ari da Conversationsen.\nHoriek ezgaitzea gomendatzen da.</string> <string name="battery_optimizations_enabled_dialog">Zure gailua jakinarazpen atzeratuak edota mezuen galera ekar lezaketen bateriaren optimizazio handiak egiten ari da Conversationsen.\nJarraian hauek ezgaitzea eskatuko zaizu.</string> <string name="disable">Ezgaitu</string> + <string name="selection_too_large">Hautatutako zatia handiegia da</string> + <string name="no_accounts">(Ez dago kontu aktiborik)</string> + <string name="this_field_is_required">Datu hau beharrezkoa da</string> + <string name="correct_message">Mezua zuzendu</string> + <string name="send_corrected_message">Mezu zuzendua bidali</string> </resources> diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index 805b8a8c..e16504a6 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -93,7 +93,7 @@ <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">Conversations ne peut pas chiffrer vos messages car votre correspondant n\'a pas communiqué sa clef publique.\n\n<small>Demandez-lui de configurer OpenPGP.</small></string> + <string name="contact_has_no_pgp_key">Conversations ne peut pas 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">Conversations ne peut pas chiffrer votre message car vos contacts ne communiquent pas leur clef publique.\n\n<small>Demandez-leur de configurer OpenPGP.</small></string> <string name="encrypted_message_received"><i>Message chiffré reçu. Appuyez pour déchiffrer.</i></string> @@ -102,7 +102,7 @@ <string name="pref_xmpp_resource_summary">Nom utilisé par ce client pour s\'identifier</string> <string name="pref_accept_files">Accepter les fichiers</string> <string name="pref_accept_files_summary">Accepter automatiquement les fichiers plus petits que…</string> - <string name="pref_notification_settings">Options de notification</string> + <string name="pref_notification_settings">Notification</string> <string name="pref_notifications">Notifications</string> <string name="pref_notifications_summary">Notifier de l\'arrivée d\'un message.</string> <string name="pref_vibrate">Vibration</string> @@ -111,12 +111,12 @@ <string name="pref_sound_summary">Jouer une sonnerie pour notifier.</string> <string name="pref_notification_grace_period">Période sans notification</string> <string name="pref_notification_grace_period_summary">Désactiver momentanément les notifications après l\'arrivée d\'une copie carbone.</string> - <string name="pref_advanced_options">Options avancées</string> + <string name="pref_advanced_options">Avancé</string> <string name="pref_never_send_crash">Ne pas envoyer de rapports d\'erreurs</string> <string name="pref_never_send_crash_summary">En envoyant des logs vous aidez le développement de Conversations.</string> <string name="pref_confirm_messages">Confirmation de lecture</string> <string name="pref_confirm_messages_summary">Informer le contact lorsque vous avez reçu et lu un message.</string> - <string name="pref_ui_options">Options d\'interface</string> + <string name="pref_ui_options">Interface</string> <string name="openpgp_error">OpenKeychain a signalé une erreur</string> <string name="error_decrypting_file">Erreur d\'E/S lors du déchiffrement du fichier</string> <string name="accept">Accepter</string> @@ -191,6 +191,7 @@ <string name="server_info_stream_management">XEP-0198 : Gestion des flux</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> @@ -240,6 +241,7 @@ <string name="you">Vous</string> <string name="action_edit_subject">Modifier le sujet de la conférence</string> <string name="conference_not_found">Impossible de trouver la conférence</string> + <string name="conference_unknown_error">Erreur inconnue reçue</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">Ré-ajouter</string> @@ -274,12 +276,14 @@ <string name="sure_delete_fingerprint">Etes-vous sûr de vouloir supprimer l\'empreinte ?</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 présence.\n\n<small>Vérifiez dans les détails du contact que vous y avez bien souscrit.</small></string> - <string name="pref_encryption_settings">Options de chiffrement</string> + <string name="pref_security_settings">Sécurité</string> <string name="pref_force_encryption">Forcer le chiffrement de bout en bout</string> <string name="pref_force_encryption_summary">Toujours envoyer des messages chiffrés (sauf pour les conférences)</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> <string name="pref_dont_save_encrypted">Messages chiffrés non sauvegardés</string> <string name="pref_dont_save_encrypted_summary">Attention : peut provoquer la perte de messages.</string> - <string name="pref_expert_options">Paramètres expert</string> + <string name="pref_expert_options">Paramètres avancés</string> <string name="pref_expert_options_summary">À utiliser avec précaution.</string> <string name="title_activity_about">À propos</string> <string name="pref_about_conversations_summary">Informations sur la version et les licenses</string> @@ -297,6 +301,8 @@ <string name="pref_expert_options_other">Autres</string> <string name="pref_conference_name">Nom de la conférence </string> <string name="pref_conference_name_summary">Identifier les conférences par leur sujet plutôt que leur JID.</string> + <string name="pref_autojoin">Rejoindre automatiquement les conférences</string> + <string name="pref_autojoin_summary">Respecter le paramètre de connexion automatique des favoris de conférence</string> <string name="toast_message_otr_fingerprint">Empreinte OTR copiée dans le presse-papier !</string> <string name="toast_message_omemo_fingerprint">Empreinte OMEMO copiée dans le presse-papier !</string> <string name="conference_banned">Vous êtes banni de cette conférence</string> @@ -375,7 +381,7 @@ <string name="purge_key">Supprimer la clef</string> <string name="purge_key_desc_part1">Êtes-vous sûr de vouloir supprimer cette clef ?</string> <string name="purge_key_desc_part2">Elle sera considérée compromise de manière irréversible, et vous ne pourrez plus générer de session avec.</string> - <string name="error_no_keys_to_trust_server_error">Il n\'y a aucune clef utilisable disponible pour ce contact.\nLa récupération de nouvelles clefs sur le serveur a échoué. Peut-être y a-t-il un problème avec votre serveur de contacts.</string> + <string name="error_no_keys_to_trust_server_error">Il n\'y a aucune clef utilisable disponible pour ce contact.\nLa récupération de nouvelles clefs sur le serveur a échoué. Peut-être y a-t-il un problème avec votre serveur de contacts ?</string> <string name="error_no_keys_to_trust">il n\'y a pas de clef disponible pour ce contact. Si vous avez purgé toutes ses clefs, il doit en générer de nouvelles.</string> <string name="error_trustkeys_title">Erreur</string> <string name="fetching_history_from_server">Récupération de l\'historique sur le serveur</string> @@ -386,7 +392,7 @@ <string name="otr_session_not_started">Envoyez un message pour commencer la conversation chiffrée</string> <string name="ask_question">Poser une question</string> <string name="smp_explain_question">Si vous et votre contact avez en commun un secret que personne d\'autre ne connait (comme une blague ou ce que vous avez mangé lors de votre dernière rencontre), vous pouvez utiliser ce secret pour vérifier vos empreintes respectives.\n\nVous donnez un indice ou posez votre question à votre contact, qui répondra en faisant attention à la casse.</string> - <string name="smp_explain_answer">Votre contact voudrait confirmer votre identité grâce à un secret partagé. Il vous a envoyé le message/indice suivant concernant ce secret.</string> + <string name="smp_explain_answer">Votre contact souhaite confirmer votre identité grâce à un secret partagé. Il vous a envoyé le message/indice suivant concernant ce secret.</string> <string name="shared_secret_hint_should_not_be_empty">Votre indice ne doit pas être vide</string> <string name="shared_secret_can_not_be_empty">Votre secret partagé ne doit pas être vide</string> <string name="manual_verification_explanation">Comparez avec soin l\'empreinte ci-dessous avec celle de votre contact.\nPour ce faire, vous pouvez utiliser n\'importe quel moyen de communication auquel vous avez confiance : appel téléphonique, e-mail encrypté...</string> @@ -427,7 +433,7 @@ <string name="two_hours">2 heures</string> <string name="eight_hours">8 heures</string> <string name="until_further_notice">Jusqu\'à nouvel ordre</string> - <string name="pref_input_options">Options de saisie</string> + <string name="pref_input_options">Saisie</string> <string name="pref_enter_is_send">Touche Entrée pour envoyer</string> <string name="pref_enter_is_send_summary">Utiliser la touche Entrée pour envoyer un message.</string> <string name="pref_display_enter_key">Afficher la touche Entrée</string> @@ -471,7 +477,7 @@ </plurals> <plurals name="select_contact"> <item quantity="one">%d contact séléctionné</item> - <item quantity="other">%d contacts séléctionnés</item> + <item quantity="other">%d contacts sélectionnés</item> </plurals> <string name="pref_quick_action_summary">Remplacer le bouton Envoyer par une action rapide.</string> <string name="pref_quick_action">Action Rapide</string> @@ -489,14 +495,21 @@ <string name="download_failed_could_not_connect">Échec du téléchargement : impossible de se connecter à l\'hôte</string> <string name="account_status_tor_unavailable">Réseau Tor inaccessible</string> <string name="server_info_broken">Détraqué</string> - <string name="pref_presence_settings">Options de présence</string> + <string name="pref_presence_settings">Présence</string> <string name="pref_away_when_screen_off">Absent quand l\'écran est éteint</string> <string name="pref_away_when_screen_off_summary">Marquer cette ressource comme absente quand l\'écran est éteint.</string> <string name="pref_xa_on_silent_mode">Indisponible en mode silencieux</string> <string name="pref_xa_on_silent_mode_summary">Marque cette ressource comme indisponible quand l\'appareil est en mode silencieux</string> + <string name="pref_show_connection_options">Paramètres de connexioin avancés</string> + <string name="pref_show_connection_options_summary">Montrer le nom d\'hôte et le port lors du paramétrage d\'un compte</string> + <string name="hostname_example">xmpp.example.com</string> <string name="action_add_account_with_certificate">Ajouter un compte avec un certificat</string> <string name="unable_to_parse_certificate">Impossible d\'analyser le certificat</string> <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="unable_to_fetch_mam_prefs">Impossible de récupérer les paramètres d\'archivage</string> <string name="captcha_ocr">Texte du captcha</string> <string name="captcha_required">Captcha obligatoire</string> <string name="captcha_hint">Saisissez le texte dans l\'image</string> @@ -506,7 +519,7 @@ <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="pref_connection_options">Options de connexion</string> + <string name="pref_connection_options">Connexion</string> <string name="pref_use_tor">Connection 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> @@ -519,6 +532,7 @@ <item quantity="one">%d message</item> <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="no_storage_permission">Conversations a besoin d\'accéder au stockage externe</string> @@ -543,4 +557,8 @@ <string name="battery_optimizations_enabled_dialog">Votre appareil applique sur Conversations des optimisations de batterie très strictes qui pourraient provoquer des retards dans les notifications, voire des pertes de messages.\nVous allez maintenant avoir la possibilité de 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> </resources> diff --git a/src/main/res/values-gl/strings.xml b/src/main/res/values-gl/strings.xml index 656c20d5..54079f4e 100644 --- a/src/main/res/values-gl/strings.xml +++ b/src/main/res/values-gl/strings.xml @@ -57,8 +57,12 @@ <string name="pref_xmpp_resource">Recurso</string> <string name="pref_xmpp_resource_summary">O nome que identifica o cliente que estás a empregar</string> <string name="pref_accept_files">Aceptar arquivos</string> +<<<<<<< HEAD <string name="pref_accept_files_size_summary">De forma automática aceptar arquivos menores de…</string> <string name="pref_notification_settings">Axustes de notificación</string> +======= + <string name="pref_accept_files_summary">De forma automática aceptar arquivos menores de…</string> +>>>>>>> 1.10.0 <string name="pref_notifications">Notificacións</string> <string name="pref_notifications_summary">Notifica cuando chega unha nova mensaxe</string> <string name="pref_vibrate">Tremer</string> @@ -67,10 +71,8 @@ <string name="pref_sound_summary">Reproduce un ton ca notificación</string> <string name="pref_notification_grace_period">Notificacións Carbons</string> <string name="pref_notification_grace_period_summary">Deshabilita as notificacións durante un corto periodo de tiempo despois de recibir a copia da mensaxe carbón</string> - <string name="pref_advanced_options">Opcións avanzadas</string> <string name="pref_never_send_crash">Nunca enviar informe de erros</string> <string name="pref_never_send_crash_summary">Enviando volcados de pilas axudas al desenrolo de Conversations</string> - <string name="pref_ui_options">Opcións de interfaz</string> <string name="openpgp_error">OpenKeychain reportou un erro</string> <string name="error_decrypting_file">I/O Erro descifrando arquivo</string> <string name="accept">Aceptar</string> diff --git a/src/main/res/values-id/strings.xml b/src/main/res/values-id/strings.xml index 745e15ad..eae96d30 100644 --- a/src/main/res/values-id/strings.xml +++ b/src/main/res/values-id/strings.xml @@ -93,7 +93,6 @@ <string name="pref_xmpp_resource_summary">Identifikasi nama klien ini dengan</string> <string name="pref_accept_files">Terima berkas</string> <string name="pref_accept_files_summary">Otomatis menerima berkas lebih kecil dari...</string> - <string name="pref_notification_settings">Pengaturan Notifikasi</string> <string name="pref_notifications">Notifikasi</string> <string name="pref_notifications_summary">Notifikasikan jika pesan baru tiba</string> <string name="pref_vibrate">Getar</string> @@ -102,12 +101,10 @@ <string name="pref_sound_summary">mainkan suara saat menerima notifikasi</string> <string name="pref_notification_grace_period">Tenggang waktu pemberitahuan</string> <string name="pref_notification_grace_period_summary">Nonaktifkan pemberitahuan untuk waktu yang singkat setelah salinan diterima</string> - <string name="pref_advanced_options">Opsi Lanjutan</string> <string name="pref_never_send_crash">Jangan kirim laporan kerusakan</string> <string name="pref_never_send_crash_summary">Dengan mengirimkan kesalahan Anda membantu pengembangan Aplikasi Conversations</string> <string name="pref_confirm_messages">Konfirmasi Pesan</string> <string name="pref_confirm_messages_summary">Biarkan kontak Anda tahu kapan Anda telah menerima dan membaca pesan</string> - <string name="pref_ui_options">Opsi Tampilan</string> <string name="openpgp_error">OpenKeychain melaporkan kesalahan</string> <string name="error_decrypting_file">I/O Error menerjemahkan berkas</string> <string name="accept">Menerima</string> @@ -251,12 +248,10 @@ <string name="sure_delete_fingerprint">Apakah anda yakin menghapus sidik jari?</string> <string name="ignore">Abaikan</string> <string name="without_mutual_presence_updates"><b>Perhatian</b> Mengirim ini tanpa kehadiran sesama pembaruan bisa menyebabkan masalah tak terduga.\n\n<small>Pergi ke kontak untuk memverifikasi langganan kehadiran anda.</small></string> - <string name="pref_encryption_settings">Pengaturan enskripsi</string> <string name="pref_force_encryption">Paksa enskripsi end-to-end</string> <string name="pref_force_encryption_summary">Selalu mengirim pesan terenkripsi (kecuali untuk conferences)</string> <string name="pref_dont_save_encrypted">jangan simpan pesan terenskripsi</string> <string name="pref_dont_save_encrypted_summary">Peringatan: Hal ini bisa mengakibatkan hilangnya pesan</string> - <string name="pref_expert_options">Pengaturan lanjutan</string> <string name="pref_expert_options_summary">Harap berhati-hati dengan ini</string> <string name="title_activity_about">Tentang Conversations</string> <string name="pref_about_conversations_summary">Build dan informasi lisensi</string> @@ -386,7 +381,6 @@ <string name="two_hours">2 jam</string> <string name="eight_hours">8 jam</string> <string name="until_further_notice">Sampai pemberitahuan selanjutnya</string> - <string name="pref_input_options">Opsi input</string> <string name="pref_enter_is_send">Enter untuk mengirim</string> <string name="pref_enter_is_send_summary">Gunakan enter untuk mengrim pesan</string> <string name="pref_display_enter_key">Tampilkan masukan kunci</string> diff --git a/src/main/res/values-iw/strings.xml b/src/main/res/values-iw/strings.xml index d6ea073a..8f030b27 100644 --- a/src/main/res/values-iw/strings.xml +++ b/src/main/res/values-iw/strings.xml @@ -100,7 +100,6 @@ <string name="pref_xmpp_resource_summary">השם שבעזרתו לקוח זה מזהה את עצמו</string> <string name="pref_accept_files">קבל קבצים</string> <string name="pref_accept_files_summary">קבל אוטומטית קבצים שגודלם קטן מ…</string> - <string name="pref_notification_settings">הגדרות התראות</string> <string name="pref_notifications">התראות</string> <string name="pref_notifications_summary">תודיע כאשר הודעה חדשה מגיעה</string> <string name="pref_vibrate">הרטט</string> @@ -109,12 +108,10 @@ <string name="pref_sound_summary">נגן צלצול עם כל התראה</string> <string name="pref_notification_grace_period">משך תקופת ארכה</string> <string name="pref_notification_grace_period_summary">נטרל התראות לזמן קצר לאחר שהודעת Carbon Copy מתקבלת</string> - <string name="pref_advanced_options">אפשרויות מתקדמות</string> <string name="pref_never_send_crash">לעולם אל תשלח דיווחי קריסה</string> <string name="pref_never_send_crash_summary">על ידי שליחת עקבות מחסנית אתה עוזר להתקדמות הפיתוח של Conversations</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="error_decrypting_file">שגיאת I/O פענוח קובץ</string> <string name="accept">קבל</string> @@ -265,12 +262,10 @@ <string name="sure_delete_fingerprint">האם את/ה בטוח שברצונך למחוק טביעת אצבע זו?</string> <string name="ignore">התעלם</string> <string name="without_mutual_presence_updates"><b>אזהרה:</b>שליחה ללא הרשאות עדכוני נוכחות הדדיות עלולה לגרום לתוצאות בלתי צפויות.\n\n<small>השתמש בתפריט \"פרטי משתמש\" ואשר עדכוני נוכחות</small></string> - <string name="pref_encryption_settings">הגדרות הצפנה</string> <string name="pref_force_encryption">אלץ הצפנת end-to-end</string> <string name="pref_force_encryption_summary">תמיד שלח הודעות מוצפנות (חוץ מבועידות)</string> <string name="pref_dont_save_encrypted">אל תשמור הודעות מוצפנות</string> <string name="pref_dont_save_encrypted_summary">אזהרה: פעולה זו עלולה לגרום לאיבוד הודעות</string> - <string name="pref_expert_options">הגדרות מתקדמות</string> <string name="pref_expert_options_summary">נא להיזהר!</string> <string name="title_activity_about">אודות Conversations</string> <string name="pref_about_conversations_summary">אודות גרסה ורישיון </string> @@ -414,7 +409,6 @@ <string name="two_hours">2 שעות</string> <string name="eight_hours">8 שעות</string> <string name="until_further_notice">עד אחרית הימים</string> - <string name="pref_input_options">הגדרות קלט</string> <string name="pref_enter_is_send">לחצן Enter שולח את ההודעה</string> <string name="pref_enter_is_send_summary">השתמש בלחצן ה-Enter כלחצן השליחה</string> <string name="pref_display_enter_key">הראה את לחצן ה Enter</string> @@ -475,7 +469,6 @@ <string name="download_failed_file_not_found">ההורדה נכשלה: הקובץ לא נמצא</string> <string name="download_failed_could_not_connect">ההורדה נכשלה: נכשל ביצוע חיבור לשרת</string> <string name="server_info_broken">לא עובד</string> - <string name="pref_presence_settings">הגדרות נוכחות Presence</string> <string name="pref_away_when_screen_off">העבר למצב \"לא נמצא\" כאשר המסך כבוי</string> <string name="pref_away_when_screen_off_summary">מעביר את המכשיר לסטטוס \"לא נמצא\" כאשר המסך כבוי</string> <string name="pref_xa_on_silent_mode">העבר למצב \"לא זמין\" כאשר במצב שקט</string> @@ -489,7 +482,6 @@ <string name="jid_does_not_match_certificate">אין התאמה בין מזהה Jabber לבין תעודה</string> <string name="action_renew_certificate">חידוש תעודה</string> <string name="error_fetching_omemo_key">שגיאה בתפיסת OMEMO!</string> - <string name="pref_connection_options">אפשרוית חיבור</string> <string name="pref_use_tor">התחבר דרך Tor</string> <string name="account_settings_hostname">שם מארח</string> <string name="account_settings_port">פורט</string> diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml index fe5232c9..d436dc99 100644 --- a/src/main/res/values-ja/strings.xml +++ b/src/main/res/values-ja/strings.xml @@ -102,7 +102,7 @@ <string name="pref_xmpp_resource_summary">自分自身を識別するこのクライアントの名前</string> <string name="pref_accept_files">ファイルを受取</string> <string name="pref_accept_files_summary">自動的に小さいファイルを受取…</string> - <string name="pref_notification_settings">通知設定</string> + <string name="pref_notification_settings">通知</string> <string name="pref_notifications">通知</string> <string name="pref_notifications_summary">新しいメッセージが到着したときに通知します</string> <string name="pref_vibrate">振動</string> @@ -111,12 +111,12 @@ <string name="pref_sound_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_advanced_options">詳細</string> <string name="pref_never_send_crash">クラッシュレポートを送信しない</string> <string name="pref_never_send_crash_summary">スタックトレースを送信することで、あなたは Conversations の継続的な開発を支援しています</string> <string name="pref_confirm_messages">メッセージの確認</string> <string name="pref_confirm_messages_summary">あなたがメッセージを受け取って読んだことを、連絡先に知らせます</string> - <string name="pref_ui_options">UI オプション</string> + <string name="pref_ui_options">UI</string> <string name="openpgp_error">OpenKeychain がエラーを報告しました</string> <string name="error_decrypting_file">ファイルの復号化中に I/O エラー</string> <string name="accept">受付</string> @@ -191,6 +191,7 @@ <string name="server_info_stream_management">XEP-0198: ストリーム管理</string> <string name="server_info_pep">XEP-0163: PEP (アバター / OMEMO)</string> <string name="server_info_http_upload">XEP-0363: HTTP ファイルアップロード</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> @@ -240,6 +241,7 @@ <string name="you">あなた</string> <string name="action_edit_subject">会議の件名を編集</string> <string name="conference_not_found">会議が見つかりません</string> + <string name="conference_unknown_error">不明なエラーを受け取りました</string> <string name="leave">退出</string> <string name="contact_added_you">連絡先があなたを連絡先リストに追加しました</string> <string name="add_back">戻りを追加</string> @@ -274,12 +276,14 @@ <string name="sure_delete_fingerprint">このフィンガープリントを削除してもよろしいですか?</string> <string name="ignore">無視</string> <string name="without_mutual_presence_updates"><b>警告:</b> 相互の参加アップデートなしにこれを送信すると、予期しない問題が発生する可能性があります。\n\n<small>あなたの参加サブスクリプションを検証するために、連絡先の詳細に移動します。</small></string> - <string name="pref_encryption_settings">暗号化設定</string> + <string name="pref_security_settings">セキュリティ</string> <string name="pref_force_encryption">強制的にエンドツーエンド暗号化を使用する</string> <string name="pref_force_encryption_summary">常に暗号化されたメッセージを送信します (会議を除く)</string> + <string name="pref_allow_message_correction">メッセージの修正を許可</string> + <string name="pref_allow_message_correction_summary">連絡先が、遡及的に自分のメッセージを編集することを許可します</string> <string name="pref_dont_save_encrypted">暗号化されたメッセージを保存しない</string> <string name="pref_dont_save_encrypted_summary">警告: これはメッセージの損失につながる可能性があります</string> - <string name="pref_expert_options">上級者オプション</string> + <string name="pref_expert_options">エキスパート設定</string> <string name="pref_expert_options_summary">ご利用は注意してください</string> <string name="title_activity_about">Conversations について</string> <string name="pref_about_conversations_summary">ビルドおよびライセンス情報</string> @@ -297,6 +301,8 @@ <string name="pref_expert_options_other">その他</string> <string name="pref_conference_name">会議名</string> <string name="pref_conference_name_summary">会議を識別するために JID の代わりにルームのテーマを使用します</string> + <string name="pref_autojoin">自動的に会議に参加</string> + <string name="pref_autojoin_summary">会議ブックマークの自動参加フラグを尊重します</string> <string name="toast_message_otr_fingerprint">OTR フィンガープリントをクリップボードにコピーしました!</string> <string name="toast_message_omemo_fingerprint">OMEMO フィンガープリントをクリップボードにコピーしました!</string> <string name="conference_banned">あなたはこの会議から禁止されています</string> @@ -427,7 +433,7 @@ <string name="two_hours">2 時間</string> <string name="eight_hours">8 時間</string> <string name="until_further_notice">通知があるまで</string> - <string name="pref_input_options">入力オプション</string> + <string name="pref_input_options">入力</string> <string name="pref_enter_is_send">Enter は送信</string> <string name="pref_enter_is_send_summary">Enter キーをメッセージの送信に使用します</string> <string name="pref_display_enter_key">Enter キーを表示</string> @@ -487,14 +493,21 @@ <string name="download_failed_could_not_connect">ダウンロードに失敗しました: ホストに接続できませんでした</string> <string name="account_status_tor_unavailable">Tor ネットワークが利用できません</string> <string name="server_info_broken">壊れています</string> - <string name="pref_presence_settings">参加設定</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_xa_on_silent_mode">サイレントモード時は利用不可</string> <string name="pref_xa_on_silent_mode_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="unable_to_fetch_mam_prefs">アーカイブの設定を取得できません</string> <string name="captcha_ocr">キャプチャ テキスト</string> <string name="captcha_required">キャプチャが必要です</string> <string name="captcha_hint">画像からテキストを入力してください</string> @@ -504,7 +517,7 @@ <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_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> @@ -516,6 +529,7 @@ <plurals name="x_messages"> <item quantity="other">%d メッセージ</item> </plurals> + <string name="load_more_messages">さらにメッセージをロード</string> <string name="shared_file_with_x">%s でファイルを共有</string> <string name="shared_image_with_x">%s で画像を共有</string> <string name="no_storage_permission">Conversations は外部ストレージにアクセスが必要です</string> @@ -526,7 +540,7 @@ <string name="certificate_issuer">発行者</string> <string name="certificate_cn">一般名称</string> <string name="certificate_o">組織</string> - <string name="certificate_sha1">SHA1</string> + <string name="certificate_sha1">SHA-1</string> <string name="certicate_info_not_available">(利用不可)</string> <string name="certificate_not_found">証明書がありません</string> <string name="notify_on_all_messages">すべてのメッセージで通知</string> @@ -540,4 +554,8 @@ <string name="battery_optimizations_enabled_dialog">お使いのデバイスは、Conversations で通知の遅延やメッセージの損失につながる可能性のある、いくつかの重いバッテリーの最適化を行っています。\n\n今、それらを無効にするように求められます。</string> <string name="disable">無効</string> <string name="selection_too_large">選択した範囲が大きすぎます</string> + <string name="no_accounts">(アクティベートしたアカウントはありません)</string> + <string name="this_field_is_required">このフィールドは必須です</string> + <string name="correct_message">メッセージを修正</string> + <string name="send_corrected_message">修正したメッセージを送信</string> </resources> diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml index 4c00d81f..0931f7f6 100644 --- a/src/main/res/values-ko/strings.xml +++ b/src/main/res/values-ko/strings.xml @@ -9,6 +9,7 @@ <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">명단에서 삭제 </string> <string name="action_block_contact">연락처 </string> <string name="action_unblock_contact">연락처 차단 해제 </string> @@ -27,6 +28,8 @@ <string name="minutes_ago">%d 분 전 </string> <string name="unread_conversations">읽지 않은 대화 </string> <string name="sending">보내는중... </string> + <string name="message_decrypting">메세지 복호화중입니다. 기다리세요...</string> + <string name="pgp_message">OpenPGP로 암호화된 메세지</string> <string name="nick_in_use">사용중인 별명입니다 </string> <string name="admin">관리자 </string> <string name="owner">소유자 </string> @@ -72,8 +75,12 @@ <string name="clear_conversation_history">대화 기록 삭제 </string> <string name="clear_histor_msg">이 대화의 모든 메세지를 삭제하시겠습니까? 경고: 이것은 다른 기기나 서버에 있는 메세지에는 영향을 미치지 않습니다. </string> <string name="delete_messages">메세지 삭제 </string> + <string name="also_end_conversation">나중에 이 대화 끝내기 </string> <string name="choose_presence">연락할 프레즌스 선택 </string> + <string name="send_unencrypted_message">암호화하지 않은 메세지 전송</string> <string name="send_otr_message">OTR 암호화된 메세지 전송 </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> @@ -82,18 +89,19 @@ <string name="openkeychain_required_long">Conversations는 메세지를 암호화 및 복호화하고 공개 키를 관리하기 위해 OpenKeychain이라는 제 3자 앱을 활용합니다. OpenKeychain은 GPLv3 라이센스를 사용하며 F-Droid와 Google Play에서 구하실 수 있습니다. (이후 Conversations를 재시작하세요) </string> <string name="restart">재시작 </string> <string name="install">설치 </string> + <string name="openkeychain_not_installed">OpenKeychain을 설치하세요</string> <string name="offering">제공중... </string> <string name="waiting">대기중... </string> <string name="no_pgp_key">OpenPGP 키가 발견되지 않음 </string> <string name="contact_has_no_pgp_key">당신의 연락처가 그들의 공개 키를 선언하지 않고 있기 때문에 Conversations는 당신의 메세지를 암호화할 수 없습니다. OpenPGP를 설정하도록 당신의 연락처에게 물어보세요. </string> <string name="no_pgp_keys">OpenPGP 키가 발견되지 않음 </string> <string name="contacts_have_no_pgp_keys">당신의 연락처가 그들의 공개 키를 선언하지 않고 있기 때문에 Conversations는 당신의 메세지를 암호화할 수 없습니다. OpenPGP를 설정하도록 당신의 연락처에게 물어보세요. </string> + <string name="encrypted_message_received"><i>암호화된 메세지가 도착했습니다. 터치하여 복호화하세요.</i></string> <string name="pref_general">일반 </string> <string name="pref_xmpp_resource">XMPP 자원 </string> <string name="pref_xmpp_resource_summary">이 클라이언트가 자신을 알아보는 이름</string> <string name="pref_accept_files">파일 수락 </string> <string name="pref_accept_files_summary">이 크기보다 작은 파일을 자동으로 수락 </string> - <string name="pref_notification_settings">알림 설정 </string> <string name="pref_notifications">알림 </string> <string name="pref_notifications_summary">새 메세지 도착시 알림 </string> <string name="pref_vibrate">진동 </string> @@ -102,12 +110,10 @@ <string name="pref_sound_summary">알림과 동시에 벨소리 재생 </string> <string name="pref_notification_grace_period">알림 유예 </string> <string name="pref_notification_grace_period_summary">Carbon Copy 수신 후에 잠시동안 알림 해제</string> - <string name="pref_advanced_options">추가 설정 </string> <string name="pref_never_send_crash">충돌 보고서 보내지 않음 </string> <string name="pref_never_send_crash_summary">Stack trace 정보를 보냄으로서 Conversations의 개발에 기여할 수 있습니다 </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="error_decrypting_file">파일 복호화 입출력 오류 </string> <string name="accept">수락 </string> @@ -142,8 +148,10 @@ <string name="account_status_regis_not_sup">서버가 등록을 지원하지 않습니다</string> <string name="account_status_security_error">보안 오류 </string> <string name="account_status_incompatible_server">호환되지 않는 서버 </string> + <string name="encryption_choice_unencrypted">암호화되지 않음</string> <string name="encryption_choice_otr">OTR</string> <string name="encryption_choice_pgp">OpenPGP </string> + <string name="encryption_choice_omemo">OMEMO</string> <string name="mgmt_account_edit">계정 편집 </string> <string name="mgmt_account_delete">계정 삭제 </string> <string name="mgmt_account_disable">임시로 해제</string> @@ -162,6 +170,7 @@ <string name="passwords_do_not_match">암호가 일치하지 않습니다 </string> <string name="invalid_jid">올바른 Jabber ID가 아닙니다 </string> <string name="error_out_of_memory">메모리 부족. 이미지 용량이 너무 큽니다 </string> + <string name="add_phone_book_text">주소록에 %s를 추가하시겠습니까?</string> <string name="contact_status_online">접속중 </string> <string name="contact_status_free_to_chat">대화 가능 </string> <string name="contact_status_away">자리 비움 </string> @@ -177,6 +186,8 @@ <string name="server_info_blocking">XEP-0191: Blocking Command </string> <string name="server_info_roster_version">XEP-0237: Roster Versioning </string> <string name="server_info_stream_management">XEP-0198: Stream Management </string> + <string name="server_info_pep">XEP-0163: PEP (Avatars / OMEMO)</string> + <string name="server_info_http_upload">XEP-0363: HTTP 파일 업로드</string> <string name="server_info_available">가능 </string> <string name="server_info_unavailable">불가 </string> <string name="missing_public_keys">공개 키 선언 누락 </string> @@ -189,22 +200,33 @@ <string name="last_seen_days">%d 일 전까지 접속했었음 </string> <string name="never_seen">접속한적 없음 </string> <string name="install_openkeychain">암호화된 메세지. 복호화하기 위해 OpenKeychain을 설치하세요. </string> - <string name="unknown_otr_fingerprint">알 수 없는 OTR 지문 </string> + <string name="unknown_otr_fingerprint">알 수 없는 OTR 핑거프린트</string> <string name="openpgp_messages_found">OpenPGP 암호화 메세지 발견 </string> <string name="reception_failed">접수 실패 </string> - <string name="your_fingerprint">당신의 지문 </string> - <string name="otr_fingerprint">OTR 지문 </string> + <string name="your_fingerprint">당신의 핑거프린트</string> + <string name="otr_fingerprint">OTR 핑거프린트</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">메세지의 v\\OMEMO 핑거프린트</string> + <string name="this_device_omemo_fingerprint">OMEMO 핑거프린트 소유</string> + <string name="other_devices">다른 기기들</string> + <string name="trust_omemo_fingerprints">OMEMO 핑거프린트 신뢰</string> + <string name="fetching_keys">키 가져오는 중...</string> + <string name="done">완료</string> <string name="verify">검증 </string> <string name="decrypt">복호화 </string> <string name="conferences">회의 </string> <string name="search">검색 </string> <string name="create_contact">연락처 생성 </string> + <string name="enter_contact">연락처 입력</string> <string name="join_conference">회의 참석 </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="select">선택</string> <string name="contact_already_exists">이미 존재하는 연락처입니다 </string> <string name="join">참석 </string> <string name="conference_address">회의 주소 </string> @@ -245,16 +267,14 @@ <string name="missing_presence_updates">연락처로부터 프레즌스 업데이트 찾을 수 없음 </string> <string name="request_presence_updates">먼저 연락처로부터 프레즌스 업데이트를 요청하세요. 이는 당신의 연락처가 어떤 클라이언트를 사용하는지 결정하는 데 사용됩니다. </string> <string name="request_now">지금 요청 </string> - <string name="delete_fingerprint">지문 삭제 </string> - <string name="sure_delete_fingerprint">이 지문을 삭제하시겠습니까? </string> + <string name="delete_fingerprint">핑거프린트 삭제 </string> + <string name="sure_delete_fingerprint">이 핑거프린트를 삭제하시겠습니까? </string> <string name="ignore">무시 </string> <string name="without_mutual_presence_updates">경고: 상호간의 프레즌스 업데이트 없이 이것을 보내면 예기치 못한 문제를 발생시킬 수 있습니다. 당신의 프레즌스 구독을 검증하기 위해 연락처 상세 정보로 가세요. </string> - <string name="pref_encryption_settings">암호화 설정 </string> <string name="pref_force_encryption">강제적인 종단간 암호화</string> <string name="pref_force_encryption_summary">언제나 암호화 메세지로 전송 (회의 제외) </string> <string name="pref_dont_save_encrypted">암호화된 메세지 저장하지 않음 </string> <string name="pref_dont_save_encrypted_summary">경고: 메세지가 손실될 수 있습니다 </string> - <string name="pref_expert_options">전문가 설정 </string> <string name="pref_expert_options_summary">설정시 주의하시기 바랍니다</string> <string name="title_activity_about">Conversations에 대해서 </string> <string name="pref_about_conversations_summary">빌드 및 라이센스 정보 </string> @@ -272,16 +292,20 @@ <string name="pref_expert_options_other">기타 </string> <string name="pref_conference_name">회의 이름 </string> <string name="pref_conference_name_summary">회의를 식별하기 위해 JID 대신 방 제목을 사용 </string> - <string name="toast_message_otr_fingerprint">OTR 지문이 클립보드에 복사되었습니다 </string> + <string name="toast_message_otr_fingerprint">OTR 핑거프린트가 클립보드에 복사되었습니다 </string> + <string name="toast_message_omemo_fingerprint">OMEMO 핑거프린트가 클립보드에 복사되었습니다</string> <string name="conference_banned">당신은 이 회의에서 금지되었습니다 </string> <string name="conference_members_only">이 회의는 멤버 전용입니다 </string> <string name="conference_kicked">당신은 이 회의에서 추방되었습니다 </string> <string name="using_account">using account %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="message_options">메세지 설정 </string> <string name="copy_text">텍스트 복사 </string> <string name="copy_original_url">원본 URL 복사 </string> <string name="send_again">다시 보내기 </string> + <string name="file_url">파일 URL</string> <string name="message_text">메세지 텍스트 </string> <string name="url_copied_to_clipboard">URL이 클립보드에 복사되었습니다 </string> <string name="message_copied_to_clipboard">메세지가 클립보드에 복사되었습니다 </string> @@ -291,7 +315,7 @@ <string name="show_block_list">차단 목록 보기 </string> <string name="account_details">계정 정보 </string> <string name="verify_otr">OTR 검증 </string> - <string name="remote_fingerprint">Remote Fingerprint</string> + <string name="remote_fingerprint">원격 핑거프린트</string> <string name="scan">스캔 </string> <string name="smp">Socialist Millionaire Protocol</string> <string name="shared_secret_hint">힌트 혹은 질문 </string> @@ -309,6 +333,9 @@ <string name="conversations_foreground_service">Conversations</string> <string name="pref_keep_foreground_service">포어그라운드에서 서비스 유지 </string> <string name="pref_keep_foreground_service_summary">운영체제가 접속을 해제하지 못하도록 예방합니다 </string> + <string name="pref_export_logs">내보내기 기록</string> + <string name="pref_export_logs_summary">기록을 SD 카드에 쓰기</string> + <string name="notification_export_logs_title">기록을 SD 카드에 쓰는 중</string> <string name="choose_file">파일 선택 </string> <string name="receiving_x_file">수신중 %1$s (%2$d%% 완료) </string> <string name="download_x_file">%s 다운로드 </string> @@ -321,9 +348,9 @@ <string name="file_transmission_failed">파일 전송 실패 </string> <string name="file_deleted">파일이 삭제되었습니다 </string> <string name="no_application_found_to_open_file">파일을 열기 위한 앱이 발견되지 않았습니다 </string> - <string name="could_not_verify_fingerprint">지문을 검증할 수 없습니다 </string> + <string name="could_not_verify_fingerprint">핑거프린트를 검증할 수 없습니다 </string> <string name="manually_verify">수동 검증 </string> - <string name="are_you_sure_verify_fingerprint">연락처의 OTR 지문을 검증하시겠습니까? </string> + <string name="are_you_sure_verify_fingerprint">연락처의 OTR 핑거프린트를 검증하시겠습니까? </string> <string name="pref_show_dynamic_tags">동적 태그 표시 </string> <string name="pref_show_dynamic_tags_summary">연락처 밑에 읽기 전용 태그 표시 </string> <string name="enable_notifications">알림 사용 </string> @@ -334,7 +361,18 @@ <string name="secret_accepted">비밀 접수됨 </string> <string name="reset">초기화 </string> <string name="account_image_description">계정 아바타 </string> - <string name="copy_otr_clipboard_description">OTR 지문을 클립보드에 복사 </string> + <string name="copy_otr_clipboard_description">OTR 핑거프린트를 클립보드에 복사 </string> + <string name="copy_omemo_clipboard_description">OMEMO 핑거프린트를 클립보드에 복사</string> + <string name="regenerate_omemo_key">OMEMO 키 다시 생성</string> + <string name="wipe_omemo_pep">PEP로부터 다른 기기들 제거</string> + <string name="clear_other_devices">기기 제거</string> + <string name="clear_other_devices_desc">OMEMO 선언으로부터 모든 기기를 지우시겠습니까? 다음에 기기들이 접속할 때, 기기들이 스스로 다시 선언하지만, 그 동안에 보내진 메세지는 받지 못할수도 있습니다.</string> + <string name="purge_key">키 제거</string> + <string name="purge_key_desc_part1">이 키를 제거하시겠습니까?</string> + <string name="purge_key_desc_part2">이것은 되돌릴 수 없으며 훼손된 것으로 간주됩니다. 이것으로는 다시는 세션을 만들 수 없게 됩니다.</string> + <string name="error_no_keys_to_trust_server_error">이 연락처에 사용할 수 있는 키가 없습니다. \n서버로부터 새로운 키를 가져올 수 없습니다. 아마 연락처의 서버에 오류가 있는 것 같습니다.</string> + <string name="error_no_keys_to_trust">이 연락처에 사용할 수 있는 키가 없습니다. 당신이 그들의 키 중에서 어떤 것이든 제거했다면, 그들이 새로운 키를 만들어야 합니다.</string> + <string name="error_trustkeys_title">오류</string> <string name="fetching_history_from_server">서버로부터 기록 가져오는중 </string> <string name="no_more_history_on_server">서버에 더이상 기록이 없습니다 </string> <string name="updating">업데이트중...</string> @@ -342,11 +380,11 @@ <string name="could_not_change_password">암호를 변경할 수 없습니다 </string> <string name="otr_session_not_started">암호화된 대화를 시작하기 위해 메세지 보내기 </string> <string name="ask_question">질문하기 </string> - <string name="smp_explain_question">만약 당신과 당신의 연락처가 다른 사람은 모르는 비밀을 공유하고 있다면, 그 비밀을 서로의 지문을 검증하는 데 사용할 수 있습니다. 대소문자가 구분된 대답을 할 연락처에게 힌트나 질문을 주세요. </string> - <string name="smp_explain_answer">당신의 연락처는 당신의 지문을 검증하고자 공유된 비밀을 확인하려고 합니다. 당신의 연락처는 그 비밀에 관한 다음과 같은 힌트 혹은 질문을 제공했습니다. </string> + <string name="smp_explain_question">만약 당신과 당신의 연락처가 다른 사람은 모르는 비밀을 공유하고 있다면, 그 비밀을 서로의 핑거프린트를 검증하는 데 사용할 수 있습니다. 대소문자가 구분된 대답을 할 연락처에게 힌트나 질문을 주세요. </string> + <string name="smp_explain_answer">당신의 연락처는 당신의 핑거프린트를 검증하고자 공유된 비밀을 확인하려고 합니다. 당신의 연락처는 그 비밀에 관한 다음과 같은 힌트 혹은 질문을 제공했습니다. </string> <string name="shared_secret_hint_should_not_be_empty">힌트를 반드시 입력해야 합니다 </string> <string name="shared_secret_can_not_be_empty">공유된 비밀을 반드시 입력해야 합니다 </string> - <string name="manual_verification_explanation">아래에 보이는 지문을 당신의 연락처의 지문과 세심하게 비교하세요. 당신은 암호화된 이메일이나 전화와 같은 믿을만한 통신수단으로 이것을 주고 받을 수 있습니다. </string> + <string name="manual_verification_explanation">아래에 보이는 핑거프린트를 당신의 연락처의 핑거프린트와 세심하게 비교하세요. 당신은 암호화된 이메일이나 전화와 같은 믿을만한 통신수단으로 이것을 주고 받을 수 있습니다. </string> <string name="change_password">암호 변경 </string> <string name="current_password">현재 암호 </string> <string name="new_password">새 암호 </string> @@ -372,7 +410,10 @@ <string name="public_conference">공개적으로 접근 가능한 회의 </string> <string name="private_conference">멤버 전용 사설 회의 </string> <string name="conference_options">회의 설정 </string> + <string name="members_only">멤버 전용 (사설)</string> <string name="non_anonymous">익명 아님 </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="never">안함 </string> @@ -381,7 +422,6 @@ <string name="two_hours">2시간 </string> <string name="eight_hours">8시간 </string> <string name="until_further_notice">나중에 알릴때까지 </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_display_enter_key">엔터 키 표시 </string> @@ -400,6 +440,7 @@ <string name="offering_x_file">%s 제공중 </string> <string name="hide_offline">오프라인 숨기기 </string> <string name="disable_account">계정 해제 </string> + <string name="contact_is_typing">%s 이(가) 입력중입니다...</string> <string name="contact_has_stopped_typing">%s 이(가) 입력을 중단했습니다 </string> <string name="pref_chat_states">입력 알림 </string> <string name="pref_chat_states_summary">새 메세지를 작성할 때 이를 연락처에게 알립니다 </string> @@ -429,4 +470,67 @@ <string name="none">없음</string> <string name="recently_used">최근 사용된 항목</string> <string name="choose_quick_action">빠른 동작 선택</string> + <string name="search_for_contacts_or_groups">연락처 또는 그룹 검색</string> + <string name="send_private_message">개인 메세지 전송</string> + <string name="user_has_left_conference">%s 이(가) 회의에서 나갔습니다.</string> + <string name="username">사용자 이름</string> + <string name="username_hint">사용자 이름</string> + <string name="invalid_username">이것은 올바른 사용자 이름이 아닙니다</string> + <string name="download_failed_server_not_found">다운로드 실패: 서버가 발견되지 않음</string> + <string name="download_failed_file_not_found">다운로드 실패: 파일이 발견되지 않음</string> + <string name="download_failed_could_not_connect">다운도륻 실패: 호스트에 접속할 수 없음</string> + <string name="pref_use_white_background">하얀색 배경 사용</string> + <string name="pref_use_white_background_summary">받은 메세지를 하얀색 배경에 검은색 글씨로 표시</string> + <string name="account_status_tor_unavailable">Tor 네트워크 사용할 수 없음</string> + <string name="server_info_broken">손상됨</string> + <string name="pref_away_when_screen_off">화면이 꺼져있을 경우 자리 비움으로 표시</string> + <string name="pref_away_when_screen_off_summary">화면이 꺼져있을 경우에 자리 비움으로 상태를 표시함</string> + <string name="pref_xa_on_silent_mode">음소거 모드에서는 사용할 수 없음</string> + <string name="pref_xa_on_silent_mode_summary">기기가 음소거 모드일때는 사용할 수 없음으로 상태를 표시함</string> + <string name="action_add_account_with_certificate">인증서가 있는 계정 추가</string> + <string name="unable_to_parse_certificate">인증서를 분석할 수 없음</string> + <string name="captcha_ocr">Captcha 텍스트</string> + <string name="captcha_required">Captcha가 필요함</string> + <string name="captcha_hint">이미지로부터 텍스트 입력</string> + <string name="certificate_chain_is_not_trusted">인증서 체인을 신뢰할 수 없습니다</string> + <string name="jid_does_not_match_certificate">Jabber ID가 인증서와 일치하지 않습니다</string> + <string name="action_renew_certificate">인증서 갱신</string> + <string name="error_fetching_omemo_key">OMEMO key를 가져오는 도중 오류가 발생했습니다</string> + <string name="verified_omemo_key_with_certificate">OMEMO 키와 인증서 검증됨</string> + <string name="device_does_not_support_certificates">기기가 선택된 클라이언트 인증서를 지원하지 않습니다</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> + <plurals name="x_messages"> + <item quantity="other">%d 메세지</item> + </plurals> + <string name="shared_file_with_x">파일을 %s와 공유함</string> + <string name="shared_image_with_x">이미지를 %s와 공유함</string> + <string name="no_storage_permission">Conversations는 외부 저장소로의 접근을 필요로 합니다</string> + <string name="sync_with_contacts">연락처와 동기화</string> + <string name="sync_with_contacts_long">Conversations는 XMPP 명단과 연락처 명단을 대조시켜서 이름과 아바타를 표시하고자 합니다.\n\nConversations는 당신의 서버에 업로드하지 않고 기기 내부적으로만 연락처를 읽고 대조를 할 것입니다.\n\n이제 연락처에 접근할 권한을 당신에게 물어볼 것입니다.</string> + <string name="certificate_information">인증서 정보</string> + <string name="certificate_subject">제목</string> + <string name="certificate_issuer">발행자</string> + <string name="certificate_cn">이름</string> + <string name="certificate_o">단체</string> + <string name="certicate_info_not_available">(사용할 수 없음)</string> + <string name="certificate_not_found">인증서가 발견되지 않았습니다</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="pref_picture_compression">사진 압축</string> + <string name="always">항상</string> + <string name="automatically">자동</string> + <string name="battery_optimizations_enabled">배터리 최적화 사용됨</string> + <string name="battery_optimizations_enabled_explained">당신의 기기는 메세지를 받지 못하게 되거나 알림을 지연시킬 수도 있는 고강도의 배터리 최적화를 Conversations에 하고 있습니다.\n배터리 최적화를 해제하는 것을 추천합니다.</string> + <string name="battery_optimizations_enabled_dialog">당신의 기기는 메세지를 받지 못하게 되거나 알림을 지연시킬 수도 있는 고강도의 배터리 최적화를 Conversations에 하고 있습니다.\n이것을 해제할 것인지 물어볼 것입니다.</string> + <string name="disable">해제</string> + <string name="selection_too_large">선택된 영역이 너무 큽니다</string> </resources> diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index 37dbfb57..5b45b935 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -102,7 +102,7 @@ <string name="pref_xmpp_resource_summary">De naam waarmee deze cliënt zich identificeert</string> <string name="pref_accept_files">Aanvaard bestanden</string> <string name="pref_accept_files_summary">Aanvaard automatisch bestanden kleiner dan…</string> - <string name="pref_notification_settings">Meldingsinstellingen</string> + <string name="pref_notification_settings">Melding</string> <string name="pref_notifications">Meldingen</string> <string name="pref_notifications_summary">Melding als een nieuw bericht arriveert</string> <string name="pref_vibrate">Trillen</string> @@ -111,12 +111,12 @@ <string name="pref_sound_summary">Speel beltoon af bij melding</string> <string name="pref_notification_grace_period">Uitstelperiode voor meldingen</string> <string name="pref_notification_grace_period_summary">Schakel meldingen voor korte tijd uit als er een carbon copy wordt ontvangen</string> - <string name="pref_advanced_options">Geavanceerde instellingen</string> + <string name="pref_advanced_options">Geavanceerd</string> <string name="pref_never_send_crash">Verstuur nooit crashrapportages</string> <string name="pref_never_send_crash_summary">Door crashrapportages te versturen help je de ontwikkeling van Conversations</string> <string name="pref_confirm_messages">Bevestig berichten</string> <string name="pref_confirm_messages_summary">Laat je contacten weten wanneer je berichten hebt ontvangen en gelezen</string> - <string name="pref_ui_options">UI-opties</string> + <string name="pref_ui_options">Gebruikersomgeving</string> <string name="openpgp_error">OpenKeychain rapporteerde een fout</string> <string name="error_decrypting_file">I/O-fout tijdens ontsleutelen van bestand</string> <string name="accept">Aanvaarden</string> @@ -191,6 +191,7 @@ <string name="server_info_stream_management">XEP-0198: Stream Management</string> <string name="server_info_pep">XEP-0163: PEP (Avatars / OMEMO)</string> <string name="server_info_http_upload">XEP-0363: HTTP File Upload</string> + <string name="server_info_push">XEP-0357: Push</string> <string name="server_info_available">beschikbaar</string> <string name="server_info_unavailable">niet beschikbaar</string> <string name="missing_public_keys">Ontbrekende publieke sleutel-aankondigingen</string> @@ -240,6 +241,7 @@ <string name="you">Jij</string> <string name="action_edit_subject">Onderwerp van groepsgesprek bewerken</string> <string name="conference_not_found">Groepsgesprek niet gevonden</string> + <string name="conference_unknown_error">Onbekende fout ontvangen</string> <string name="leave">Verlaten</string> <string name="contact_added_you">Contact heeft je toegevoegd aan zijn/haar contacten</string> <string name="add_back">Contact toevoegen aan eigen contacten</string> @@ -274,12 +276,14 @@ <string name="sure_delete_fingerprint">Ben je zeker dat je deze vingerafdruk wil verwijderen?</string> <string name="ignore">Negeren</string> <string name="without_mutual_presence_updates"><b>Waarschuwing:</b> Dit verzenden zonder wederzijdse aanwezigheidsupdates kan voor onverwachte problemen zorgen.\n\n<small>Ga naar contactgegevens om je aanwezigheidsupdates te bevestigen.</small></string> - <string name="pref_encryption_settings">Versleutelingsinstellingen</string> + <string name="pref_security_settings">Beveiliging</string> <string name="pref_force_encryption">Verplicht end-to-end-versleuteling</string> <string name="pref_force_encryption_summary">Stuur berichten altijd versleuteld (behalve in groepsgesprekken)</string> + <string name="pref_allow_message_correction">Berichtverbetering toestaan</string> + <string name="pref_allow_message_correction_summary">Sta je contacten toe hun berichten na het versturen te verbeteren</string> <string name="pref_dont_save_encrypted">Sla versleutelde berichten niet op</string> <string name="pref_dont_save_encrypted_summary">Waarschuwing: dit kan leiden tot verlies van berichten</string> - <string name="pref_expert_options">Expert-instellingen</string> + <string name="pref_expert_options">Instellingen voor experts</string> <string name="pref_expert_options_summary">Wees voorzichtig met deze instellingen</string> <string name="title_activity_about">Over Conversations</string> <string name="pref_about_conversations_summary">Build en licentie-informatie</string> @@ -297,6 +301,8 @@ <string name="pref_expert_options_other">Andere</string> <string name="pref_conference_name">Groepsgespreksnaam</string> <string name="pref_conference_name_summary">Gebruik onderwerp van kamer ipv JID om groepsgesprekken te identificeren</string> + <string name="pref_autojoin">Automatisch deelnemen aan groepsgesprekken</string> + <string name="pref_autojoin_summary">Respecteer de autojoin-vlag bij groepsgespreksbladwijzers</string> <string name="toast_message_otr_fingerprint">OTR-vingerafdruk gekopieerd naar klembord!</string> <string name="toast_message_omemo_fingerprint">OMEMO-vingerafdruk gekopieerd naar klembord!</string> <string name="conference_banned">Je bent verbannen uit dit groepsgesprek</string> @@ -427,7 +433,7 @@ <string name="two_hours">2 uur</string> <string name="eight_hours">8 uur</string> <string name="until_further_notice">Voor onbepaalde duur</string> - <string name="pref_input_options">Invoer-opties</string> + <string name="pref_input_options">Invoer</string> <string name="pref_enter_is_send">Enter is versturen</string> <string name="pref_enter_is_send_summary">Gebruik de enter-toets om berichten te versturen</string> <string name="pref_display_enter_key">Toon enter-toets</string> @@ -489,14 +495,21 @@ <string name="download_failed_could_not_connect">Downloaden mislukt: kon geen verbinding maken met host</string> <string name="account_status_tor_unavailable">Tor-netwerk niet beschikbaar</string> <string name="server_info_broken">Gebroken</string> - <string name="pref_presence_settings">Aanwezigheidsinstellingen</string> + <string name="pref_presence_settings">Aanwezigheid</string> <string name="pref_away_when_screen_off">Even weg wanneer scherm uit staat</string> <string name="pref_away_when_screen_off_summary">Stelt je bron in als even weg wanneer het scherm uitgeschakeld is</string> <string name="pref_xa_on_silent_mode">Niet beschikbaar in stille modus</string> <string name="pref_xa_on_silent_mode_summary">Stelt je bron in als niet beschikbaar wanneer je apparaat in stille modus staat</string> + <string name="pref_show_connection_options">Uitgebreide verbindingsinstellingen</string> + <string name="pref_show_connection_options_summary">Toon hostnaam- en poortinstellingen bij instellen van een account</string> + <string name="hostname_example">xmpp.voorbeeld.be</string> <string name="action_add_account_with_certificate">Account met certificaat toevoegen</string> <string name="unable_to_parse_certificate">Kan certificaat niet verwerken</string> <string name="authenticate_with_certificate">Laat leeg om te authenticeren met certificaat</string> + <string name="mam_prefs">Archiefvoorkeuren</string> + <string name="server_side_mam_prefs">Voorkeuren voor archief aan serverzijde</string> + <string name="fetching_mam_prefs">Ophalen van archiefvoorkeuren. Even geduld…</string> + <string name="unable_to_fetch_mam_prefs">Kon archiefvoorkeuren niet ophalen</string> <string name="captcha_ocr">Captcha-tekst</string> <string name="captcha_required">Captcha vereist</string> <string name="captcha_hint">voer de tekst van de afbeelding in</string> @@ -506,7 +519,7 @@ <string name="error_fetching_omemo_key">Fout bij ophalen van OMEMO-sleutel!</string> <string name="verified_omemo_key_with_certificate">OMEMO-sleutel geverifieerd met certificaat!</string> <string name="device_does_not_support_certificates">Je apparaat ondersteunt de selectie van cliënt-certificaten niet!</string> - <string name="pref_connection_options">Verbindingsopties</string> + <string name="pref_connection_options">Verbinding</string> <string name="pref_use_tor">Verbinden via Tor</string> <string name="pref_use_tor_summary">Tunnel alle verbindingen door het Tor-netwerk. Vereist Orbot</string> <string name="account_settings_hostname">Hostnaam</string> @@ -519,6 +532,7 @@ <item quantity="one">%d bericht</item> <item quantity="other">%d berichten</item> </plurals> + <string name="load_more_messages">Laad meer berichten</string> <string name="shared_file_with_x">Bestand gedeeld met %s</string> <string name="shared_image_with_x">Afbeelding gedeeld met %s</string> <string name="no_storage_permission">Conversations heeft toegang nodig tot de externe opslag</string> @@ -529,7 +543,7 @@ <string name="certificate_issuer">Uitgever</string> <string name="certificate_cn">Algemene naam</string> <string name="certificate_o">Organisatie</string> - <string name="certificate_sha1">SHA1</string> + <string name="certificate_sha1">SHA-1</string> <string name="certicate_info_not_available">(Niet beschikbaar)</string> <string name="certificate_not_found">Geen certificaat gevonden</string> <string name="notify_on_all_messages">Melding bij alle berichten</string> @@ -543,4 +557,8 @@ <string name="battery_optimizations_enabled_dialog">Je apparaat voert sterke batterij-optimalisaties uit op Conversations, die kunnen leiden tot vertraagde meldingen of zelfs verlies van berichten.\nJe zal nu gevraagd worden deze optimalisaties uit te schakelen.</string> <string name="disable">Uitschakelen</string> <string name="selection_too_large">Het gekozen vlak is te groot</string> + <string name="no_accounts">(Geen actieve accounts)</string> + <string name="this_field_is_required">Dit veld is vereist</string> + <string name="correct_message">Bericht verbeteren</string> + <string name="send_corrected_message">Verbeterd bericht sturen</string> </resources> diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index 3a6f12e8..b9e2f7cd 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -9,6 +9,7 @@ <string name="action_secure">Konwersacja szyfrowana</string> <string name="action_add_account">Dodaj konto</string> <string name="action_edit_contact">Edytuj nazwę</string> + <string name="action_add_phone_book">Dodaj do kontaktów</string> <string name="action_delete_contact">Usuń z rostera</string> <string name="action_block_contact">Zablokuj kontakt</string> <string name="action_unblock_contact">Odblokuj kontakt</string> @@ -27,6 +28,8 @@ <string name="minutes_ago">%d minut temu</string> <string name="unread_conversations">nieprzeczytanych konwersacji</string> <string name="sending">wysyłanie...</string> + <string name="message_decrypting">Odszyfrowywanie wiadomości. To zajmie tylko chwilę...</string> + <string name="pgp_message">Wiadomość zaszyfrowana OpenPGP</string> <string name="nick_in_use">Nazwa jest już w użyciu</string> <string name="admin">Admin</string> <string name="owner">Właściciel</string> @@ -63,7 +66,7 @@ <string name="problem_connecting_to_accounts">Nie można połączyć się z wieloma kontami</string> <string name="touch_to_fix">Dotknij tutaj aby zarządzać swoimi kontami</string> <string name="attach_file">Dołącz plik</string> - <string name="not_in_roster">Kontakt nie jest na twoim rosterze. Czy chcesz go dodać?</string> + <string name="not_in_roster">Kontakt nie należy do Twojej listy kontaktów. Czy chcesz go dodać?</string> <string name="add_contact">Dodaj kontakt</string> <string name="send_failed">wysyłanie nie powiodło się</string> <string name="send_rejected">odrzucono</string> @@ -72,24 +75,28 @@ <string name="clear_conversation_history">Wyczyść historię konwersacji</string> <string name="clear_histor_msg">Czy na pewno usunąć wszystkie wiadomości powiązane z konwersacją?\n\n<b>Uwaga:</b> Działanie nie wpływa na wiadomości przechowywane na innych urządzeniach lub serwerach.</string> <string name="delete_messages">Usuń wiadomości</string> + <string name="also_end_conversation">po czym zakończ tę rozmowę</string> <string name="choose_presence">Wybierz widoczność dla kontaktu</string> <string name="send_unencrypted_message">Wyślij wiadomość bez szyfrowania</string> <string name="send_otr_message">Wyślij zaszyfrowaną wiadomość (OTR)</string> <string name="send_omemo_message">Wyślij wiadomość zaszyfrowaną OMEMO</string> + <string name="send_omemo_x509_message">Wyślij wiadomość zaszyfrowaną v\\OMEMO</string> <string name="send_pgp_message">Wyślij zaszyfrowaną wiadomość (OpenPGP)</string> - <string name="your_nick_has_been_changed">Twoja nazwa została zmieniona</string> + <string name="your_nick_has_been_changed">Twój nick został zmieniony</string> <string name="send_unencrypted">Wyślij bez szyfrowania</string> <string name="decryption_failed">Nie można odszyfrować. Sprawdź poprawność klucza prywatnego.</string> <string name="openkeychain_required">OpenKeychain</string> <string name="openkeychain_required_long">Conversations używa zewnętrznej aplikacji <b>OpenKeychain</b> do szyfrowania wiadomości i zarządzania kluczami publicznymi.\n\nOpenKeychain rozpowszechniany jest na licencji GPLv3 przez F-Droid lub Google Play.\n\n<small>(Zrestartuj Conversations po instalacji).</small></string> <string name="restart">Zrestartuj</string> <string name="install">Zainstaluj</string> + <string name="openkeychain_not_installed">Proszę zainstalować OpenKeychain</string> <string name="offering">oferowanie...</string> <string name="waiting">oczekiwanie...</string> <string name="no_pgp_key">Nie znaleziono klucza OpenPGP</string> <string name="contact_has_no_pgp_key">Conversations nie może zaszyfrować wiadomości, ponieważ kontakt nie udostępnia klucza publicznego.\n\n<small>Zasugeruj rozmówcy instalację OpenPGP.</small></string> <string name="no_pgp_keys">Nie znaleziono kluczy OpenPGP</string> <string name="contacts_have_no_pgp_keys">Conversations nie może zaszyfrować wiadomości, ponieważ kontakty nie udostępniają kluczy publicznych.\n\n<small>Zasugeruj rozmówcom instalację OpenPGP.</small></string> + <string name="encrypted_message_received"><i>Odebrano zaszyfrowaną wiadomość. Dotknij by odszyfrować</i></string> <string name="pref_general">Główne</string> <string name="pref_xmpp_resource">Zasób XMPP</string> <string name="pref_xmpp_resource_summary">Nazwa identyfikująca urządzenie</string> @@ -166,6 +173,7 @@ <string name="passwords_do_not_match">Hasła są niezgodne</string> <string name="invalid_jid">Wprowadzono niepoprawny Jabber ID</string> <string name="error_out_of_memory">Brak pamięci, obraz jest za duży</string> + <string name="add_phone_book_text">Czy chcesz dodać %s do listy kontaktów?</string> <string name="contact_status_online">dostępny</string> <string name="contact_status_free_to_chat">chętny do rozmowy</string> <string name="contact_status_away">zaraz wracam</string> @@ -201,22 +209,27 @@ <string name="your_fingerprint">Twój odcisk klucza</string> <string name="otr_fingerprint">Odcisk klucza OTR</string> <string name="omemo_fingerprint">Odcisk OMEMO</string> + <string name="omemo_fingerprint_x509">Odcisk v\\OMEMO</string> <string name="omemo_fingerprint_selected_message">Odcisk OMEMO wiadomości</string> + <string name="omemo_fingerprint_x509_selected_message">Odcisk v\\OMEMO wiadomości</string> <string name="this_device_omemo_fingerprint">Własny odcisk OMEMO</string> <string name="other_devices">Pozostałe urządzenia</string> <string name="trust_omemo_fingerprints">Zaufane odciski OMEMO</string> + <string name="fetching_keys">Pobieranie kluczy...</string> <string name="done">Ukończono</string> <string name="verify">Weryfikuj</string> <string name="decrypt">Odszyfruj</string> <string name="conferences">Konferencje</string> <string name="search">Szukaj</string> <string name="create_contact">Utwórz kontakt</string> + <string name="enter_contact">Wpisz kontakt</string> <string name="join_conference">Dołącz do konferencji</string> <string name="delete_contact">Usuń kontakt</string> <string name="view_contact_details">Szczegóły kontaktu</string> <string name="block_contact">Zablokuj kontakt</string> <string name="unblock_contact">Odblokuj kontakt</string> <string name="create">Utwórz</string> + <string name="select">Wybierz</string> <string name="contact_already_exists">Kontakt już istnieje</string> <string name="join">Dołącz</string> <string name="conference_address">Adres konferencji</string> @@ -325,6 +338,9 @@ <string name="conversations_foreground_service">Conversations</string> <string name="pref_keep_foreground_service">Usługa na pierwszym planie</string> <string name="pref_keep_foreground_service_summary">Uniemożliwia systemowi przerwanie połączenia</string> + <string name="pref_export_logs">Wyeksportuj historię rozmów</string> + <string name="pref_export_logs_summary">Zapisz historię na karcie SD</string> + <string name="notification_export_logs_title">Zapisywanie historii na karcie SD...</string> <string name="choose_file">Wybierz plik</string> <string name="receiving_x_file">Odbieranie %1$s (ukończono %2$d%%)</string> <string name="download_x_file">Pobierz %s</string> @@ -359,6 +375,7 @@ <string name="purge_key">Skasuj klucz</string> <string name="purge_key_desc_part1">Czy na pewno chcesz skasować usunąć odcisk klucza?</string> <string name="purge_key_desc_part2">Zostanie bez odwołania uznane za zdradzone, i nigdy więcej nie będzie można stworzyć z nim sesji.</string> + <string name="error_no_keys_to_trust_server_error">Nie ma dostępnych kluczy dl atego kontaktu.\nPobieranie nowych kluczy z serwera nie powiodło się. Byćmoże jest coś nie tak z Twoim serwerem kontaktów?</string> <string name="error_no_keys_to_trust">Nie ma dostępnych żadnych użytecznych kluczy dla tego kontaktu. Jeśli usunąłeś jakieś jego klucze, kontakt będzie musiał wygenerować nowe.</string> <string name="error_trustkeys_title">Błąd</string> <string name="fetching_history_from_server">Pobieranie historii z serwera</string> @@ -429,6 +446,7 @@ <string name="offering_x_file">Oferowanie %s</string> <string name="hide_offline">Ukryj niedostępnych</string> <string name="disable_account">Wyłącz konto</string> + <string name="contact_is_typing">%s pisze...</string> <string name="contact_has_stopped_typing">%s przestał(a) pisać</string> <string name="pref_chat_states">Powiadomienia pisania</string> <string name="pref_chat_states_summary">Powiadamiaj rozmówcę, kiedy rozpoczynasz nową wiadomość</string> @@ -471,5 +489,59 @@ <string name="download_failed_server_not_found">Pobieranie nieudane: Nie odnaleziono serwera</string> <string name="download_failed_file_not_found">Pobieranie nieudane: Nie odnaleziono pliku</string> <string name="download_failed_could_not_connect">Pobieranie nieudane: Nie można połączyć z hostem</string> + <string name="account_status_tor_unavailable">Sieć TOR jest niedostepna</string> <string name="server_info_broken">Zepsute</string> + <string name="pref_away_when_screen_off">Status \"Oddalony\" gdy wyświetlacz jest wyłączony</string> + <string name="pref_away_when_screen_off_summary">Oznacza Twój zasób jako \"Oddalony\", gdy wyświetlacz jest wyłączony</string> + <string name="pref_xa_on_silent_mode">Niedostepne w trybie cichym</string> + <string name="pref_xa_on_silent_mode_summary">Oznacza Twój zasób jako \"Nieobecny\" gdy urządzenie jest w trybie cichym</string> + <string name="action_add_account_with_certificate">Dodaj konto za pomocą certyfikatu</string> + <string name="unable_to_parse_certificate">Nie mogę odczytać certyfikatu</string> + <string name="authenticate_with_certificate">Pozostaw puste by autoryzować za pomocą certyfikatu</string> + <string name="captcha_ocr">Captcha</string> + <string name="captcha_required">Captcha wymagana</string> + <string name="captcha_hint">przepisz tekst z obrazka</string> + <string name="certificate_chain_is_not_trusted">Łańcuch certyfikatu nie jest zaufany</string> + <string name="jid_does_not_match_certificate">Jabber ID nie odpowiada certyfikatowi</string> + <string name="action_renew_certificate">Odnów certyfikat</string> + <string name="error_fetching_omemo_key">Błąd pobierania klucza OMEMO!</string> + <string name="verified_omemo_key_with_certificate">Zweryfikowano klucz OMEMO z certyfikatem</string> + <string name="device_does_not_support_certificates">Twoje urządzenie nie wspiera wyboru certyfikatów klienckich</string> + <string name="pref_use_tor">Połącz przez sieć TOR</string> + <string name="pref_use_tor_summary">Tuneluj wszystkie połączenia przez sieć TOR. Wymaga zainstalowania aplikacji \"Orbot\"</string> + <string name="account_settings_hostname">Nazwa hosta</string> + <string name="account_settings_port">Port</string> + <string name="hostname_or_onion">Adres serwera lub \".onion\" adres</string> + <string name="not_a_valid_port">To nie jest prawidłowy numer portu</string> + <string name="not_valid_hostname">To nie jest prawidłowa nazwa hosta</string> + <string name="connected_accounts">%1$d z %2$d kont połączonych</string> + <plurals name="x_messages"> + <item quantity="one">%d wiadomość</item> + <item quantity="few">%d wiadomości</item> + <item quantity="other">%d wiadomości</item> + </plurals> + <string name="shared_file_with_x">Dzielony plik z %s</string> + <string name="shared_image_with_x">Dzielony obraz z %s</string> + <string name="no_storage_permission">Conversations potrzebuje dostęp do zewnętrznego magazynu</string> + <string name="sync_with_contacts">Synchronizuj z kontaktami</string> + <string name="sync_with_contacts_long">Conversations chce dopasować Twoje kontakty XMPP z listą kontaktów w telefonie, by uzupełnić ich pełne imiona oraz awatary.\nConversations jedynie przeczyta Twoje kontakty i dopasuje je lokalnie, bez wysyłania na Twój serwer.\n\nZostaniesz teraz poproszony o przydzielenie pozwolenia na odczyt Twoich kontaktów.</string> + <string name="certificate_information">Informacja o certyfikacie</string> + <string name="certificate_subject">Temat</string> + <string name="certificate_issuer">Wystawca</string> + <string name="certificate_cn">Nazwa</string> + <string name="certificate_o">Organizacja</string> + <string name="certicate_info_not_available">(Niedostępne)</string> + <string name="certificate_not_found">Nie znaleziono certyfikatu</string> + <string name="notify_on_all_messages">Powiadom o wszystkich wiadomościach</string> + <string name="notify_only_when_highlighted">Powiadom tylko gdy wspomniano</string> + <string name="notify_never">Powiadomienia wyłączone</string> + <string name="notify_paused">Powiadomienia wstrzymane</string> + <string name="pref_picture_compression">Kompresuj obrazki</string> + <string name="always">Zawsze</string> + <string name="automatically">Automatycznie</string> + <string name="battery_optimizations_enabled">Optymalizacje zużycia baterii włączone</string> + <string name="battery_optimizations_enabled_explained">Twoje urządzenie wykonuje poważnie optymalizacje zużycia baterii przez Conversations, które mogą powodować opóźnienie powiadomień lub nawet utratę wiadomości.\nZaleca się ich wyłączenie.</string> + <string name="battery_optimizations_enabled_dialog">Twoje urządzenie wykonuje poważnie optymalizacje zużycia baterii przez Conversations, które mogą powodować opóźnienie powiadomień lub nawet utratę wiadomości.\nZostaniesz teraz poproszony o ich wyłączenie</string> + <string name="disable">Wyłącz</string> + <string name="selection_too_large">Zaznaczony obszar jest zbyt duży</string> </resources> diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 00000000..368e17fa --- /dev/null +++ b/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,568 @@ +<?xml version='1.0' encoding='UTF-8'?> +<resources> + <string name="action_settings">Configurações</string> + <string name="action_add">Nova conversa</string> + <string name="action_accounts">Gerenciar contas</string> + <string name="action_end_conversation">Encerrar essa conversa</string> + <string name="action_contact_details">Detalhes do contato</string> + <string name="action_muc_details">Detalhes da conferência</string> + <string name="action_secure">Conversa segura</string> + <string name="action_add_account">Adicionar conta</string> + <string name="action_edit_contact">Editar o nome</string> + <string name="action_add_phone_book">Adicionar ao livro de endereços</string> + <string name="action_delete_contact">Excluir da lista de contatos</string> + <string name="action_block_contact">Bloquear contato</string> + <string name="action_unblock_contact">Desbloquear contato</string> + <string name="action_block_domain">Bloquear domínio</string> + <string name="action_unblock_domain">Desbloquear domínio</string> + <string name="title_activity_manage_accounts">Gerenciar contas</string> + <string name="title_activity_settings">Configurações</string> + <string name="title_activity_conference_details">Detalhes da conferência</string> + <string name="title_activity_contact_details">Detalhes do contato</string> + <string name="title_activity_sharewith">Compartilhar com a conversa</string> + <string name="title_activity_start_conversation">Conversar</string> + <string name="title_activity_choose_contact">Selecione o contato</string> + <string name="title_activity_block_list">Lista de bloqueios</string> + <string name="just_now">agora</string> + <string name="minute_ago">1 minuto atrás</string> + <string name="minutes_ago">%d minutos atrás</string> + <string name="unread_conversations">conversas não lidas</string> + <string name="sending">enviando...</string> + <string name="message_decrypting">Descriptografando a mensagem. Por favor, aguarde...</string> + <string name="pgp_message">Mensagem criptografada via OpenPGP</string> + <string name="nick_in_use">Este apelido já está em uso</string> + <string name="admin">Administrador</string> + <string name="owner">Dono</string> + <string name="moderator">Moderador</string> + <string name="participant">Participante</string> + <string name="visitor">Visitante</string> + <string name="remove_contact_text">Deseja remover %s da sua lista de contatos? As conversas associadas a esse contato não serão removidas.</string> + <string name="block_contact_text">Deseja bloquear o recebimento de mensagens de %s?</string> + <string name="unblock_contact_text">Deseja desbloquear o recebimento de mensagens de %s?</string> + <string name="block_domain_text">Bloquear todos os contatos de %s?</string> + <string name="unblock_domain_text">Desbloquear todos os contatos de %s?</string> + <string name="contact_blocked">Contato bloqueado</string> + <string name="remove_bookmark_text">Você deseja remover %s dos favoritos? As conversas associadas a esse favorito não serão removidas.</string> + <string name="register_account">Registrar uma nova conta no servidor</string> + <string name="change_password_on_server">Alterar a senha no servidor</string> + <string name="share_with">Compartilhar com...</string> + <string name="start_conversation">Conversar</string> + <string name="invite_contact">Convidar um contato</string> + <string name="contacts">Contatos</string> + <string name="cancel">Cancelar</string> + <string name="set">Definir</string> + <string name="add">Adicionar</string> + <string name="edit">Editar</string> + <string name="delete">Excluir</string> + <string name="block">Bloquear</string> + <string name="unblock">Desbloquear</string> + <string name="save">Salvar</string> + <string name="ok">Ok</string> + <string name="crash_report_title">Ocorreu um erro no Conversations</string> + <string name="crash_report_message">Ao enviar os stack traces você está colaborando com o desenvolvimento do Conversations\n<b>Atenção:</b> Isso usará a sua conta XMPP para enviar o stack trace para o desenvolvedor.</string> + <string name="send_now">Enviar agora</string> + <string name="send_never">Não pergunte novamente</string> + <string name="problem_connecting_to_account">Não foi possível se conectar à conta</string> + <string name="problem_connecting_to_accounts">Não foi possível se conectar a múltiplas contas</string> + <string name="touch_to_fix">Toque aqui para gerenciar suas contas</string> + <string name="attach_file">Anexar arquivo</string> + <string name="not_in_roster">Essa pessoa não está na sua lista de contatos. Deseja adicioná-la?</string> + <string name="add_contact">Adicionar contato</string> + <string name="send_failed">não foi entregue</string> + <string name="send_rejected">rejeitada</string> + <string name="preparing_image">Preparando a imagem para transmissão</string> + <string name="action_clear_history">Limpar o histórico</string> + <string name="clear_conversation_history">Limpa o histórico de conversas</string> + <string name="clear_histor_msg">Deseja excluir todas as mensagens dessa conversa?\n\n<b>Atenção:</b> Isso não afetará mensagens armazenadas em outros dispositivos ou servidores.</string> + <string name="delete_messages">Excluir mensagens</string> + <string name="also_end_conversation">Encerrar essa conversa em seguida</string> + <string name="choose_presence">Selecione a presença para esse contato</string> + <string name="send_unencrypted_message">Enviar mensagem não criptografada</string> + <string name="send_otr_message">Enviar mensagem criptografada via OTR</string> + <string name="send_omemo_message">Enviar mensagem criptografada via OMEMO</string> + <string name="send_omemo_x509_message">Enviar mensagem criptografada via v\\OMEMO</string> + <string name="send_pgp_message">Enviar mensagem criptografada via OpenPGP</string> + <string name="your_nick_has_been_changed">Seu apelido foi alterado</string> + <string name="send_unencrypted">Enviar descriptografada</string> + <string name="decryption_failed">Não foi possível descriptografar. Talvez você não tenha a chave privada apropriada.</string> + <string name="openkeychain_required">OpenKeychain</string> + <string name="openkeychain_required_long">O Conversations utiliza um aplicativo de terceiros chamado <b>OpenKeychain</b> para criptografar e descriptografar as mensagens e gerenciar suas chaves públicas.\n\nO OpenKeychain é licenciado sob a GPLv3 e está disponível no F-Droid e Google Play.\n\n<small>(Por favor reinicie o Conversations em seguida)</small></string> + <string name="restart">Reiniciar</string> + <string name="install">Instalar</string> + <string name="openkeychain_not_installed">Por favor, instale o OpenKeychain</string> + <string name="offering">oferecendo...</string> + <string name="waiting">aguardando...</string> + <string name="no_pgp_key">Não foi encontrada nenhuma chave OpenPGP</string> + <string name="contact_has_no_pgp_key">O Conversations não conseguiu criptografar suas mensagens porque o seu contato não está anunciando a chave pública dele(a).\n\n<small>Por favor, solicite ao seu contato para configurar o OpenPGP.</small></string> + <string name="no_pgp_keys">Não foi encontrada nenhuma chave OpenPGP</string> + <string name="contacts_have_no_pgp_keys">O Conversations não conseguiu criptografar suas mensagens porque os seus contatos não estão anunciando a chave pública deles(as).\n\n<small>Por favor, solicite aos seus contatos que configurem o OpenPGP.</small></string> + <string name="encrypted_message_received"><i>Foi recebida uma mensagem criptografada. Toque para descriptografar.</i></string> + <string name="pref_general">Geral</string> + <string name="pref_xmpp_resource">Recurso XMPP</string> + <string name="pref_xmpp_resource_summary">O nome pelo qual esse cliente se identifica</string> + <string name="pref_accept_files">Aceitar arquivos</string> + <string name="pref_accept_files_summary">Aceitar automaticamente arquivos menores que...</string> + <string name="pref_notification_settings">Notificação</string> + <string name="pref_notifications">Notificações</string> + <string name="pref_notifications_summary">Notificar quando uma nova mensagem for recebida</string> + <string name="pref_vibrate">Vibração</string> + <string name="pref_vibrate_summary">Vibrar quando uma nova mensagem for recebida</string> + <string name="pref_sound">Som</string> + <string name="pref_sound_summary">Som de notificação</string> + <string name="pref_notification_grace_period">Tempo de espera da notificação</string> + <string name="pref_notification_grace_period_summary">Desativar notificações por um curto período após uma copia ser recebida</string> + <string name="pref_advanced_options">Avançado</string> + <string name="pref_never_send_crash">Nunca enviar relatórios de erros</string> + <string name="pref_never_send_crash_summary">Ao enviar os stack traces você está colaborando com o desenvolvimento do Conversations</string> + <string name="pref_confirm_messages">Confirmação de mensangens</string> + <string name="pref_confirm_messages_summary">Permitir que um contato saiba quando você recebeu e leu uma mensagem</string> + <string name="pref_ui_options">IU</string> + <string name="openpgp_error">O OpenKeychain informou um erro</string> + <string name="error_decrypting_file">Ocorreu um erro de E/S na descriptografia o arquivo</string> + <string name="accept">Aceitar</string> + <string name="error">Ocorreu um erro</string> + <string name="pref_grant_presence_updates">Permitir atualizações de presença</string> + <string name="pref_grant_presence_updates_summary">Permitir antecipadamente e solicitar por atualizações de presença aos contatos que você criar</string> + <string name="subscriptions">Inscrições</string> + <string name="your_account">Sua conta</string> + <string name="keys">Chaves</string> + <string name="send_presence_updates">Enviar atualizações de presença</string> + <string name="receive_presence_updates">Receber atualizações de presença</string> + <string name="ask_for_presence_updates">Pedir por atualizações de presença</string> + <string name="attach_choose_picture">Selecionar uma imagem</string> + <string name="attach_take_picture">Tirar uma foto</string> + <string name="preemptively_grant">Autorizar antecipadamente as solicitações de inscrição</string> + <string name="error_not_an_image_file">O arquivo selecionado não é uma imagem</string> + <string name="error_compressing_image">Ocorreu um erro durante a conversão do arquivo de imagem</string> + <string name="error_file_not_found">Arquivo não encontrado</string> + <string name="error_io_exception">Ocorreu um erro genérico de E/S. Você tem espaço de armazenamento suficiente no seu aparelho?</string> + <string name="error_security_exception_during_image_copy">O aplicativo que você usou para selecionar esta imagem não nos forneceu permissões suficientes para ler o arquivo.\n\n<small>Utilize um gerenciador de arquivos diferente para selecionar a imagem.</small></string> + <string name="account_status_unknown">Desconhecido</string> + <string name="account_status_disabled">Temporariamente desabilitado</string> + <string name="account_status_online">Conectado</string> + <string name="account_status_connecting">Conectando\u2026</string> + <string name="account_status_offline">Desconectado</string> + <string name="account_status_unauthorized">Não autorizado</string> + <string name="account_status_not_found">Servidor não encontrado</string> + <string name="account_status_no_internet">Sem conectividade</string> + <string name="account_status_regis_fail">Não foi possível efetuar o registro</string> + <string name="account_status_regis_conflict">Esse nome de usuário já está em uso</string> + <string name="account_status_regis_success">Registro efetuado com sucesso</string> + <string name="account_status_regis_not_sup">O servidor não aceita o registro</string> + <string name="account_status_security_error">Erro de segurança</string> + <string name="account_status_incompatible_server">Servidor incompatível</string> + <string name="encryption_choice_unencrypted">Descriptografada</string> + <string name="encryption_choice_otr">OTR</string> + <string name="encryption_choice_pgp">OpenPGP</string> + <string name="encryption_choice_omemo">OMEMO</string> + <string name="mgmt_account_edit">Editar a conta</string> + <string name="mgmt_account_delete">Excluir a conta</string> + <string name="mgmt_account_disable">Desabilitar temporariamente</string> + <string name="mgmt_account_publish_avatar">Publicar o avatar</string> + <string name="mgmt_account_publish_pgp">Publicar a chave pública OpenPGP</string> + <string name="mgmt_account_enable">Habilitar a conta</string> + <string name="mgmt_account_are_you_sure">Tem certeza?</string> + <string name="mgmt_account_delete_confirm_text">Se você excluir a sua conta todo o seu histórico de conversas será perdido</string> + <string name="attach_record_voice">Gravar voz</string> + <string name="account_settings_jabber_id">ID Jabber</string> + <string name="account_settings_password">Senha</string> + <string name="account_settings_example_jabber_id">nomedeusuario@exemplo.com</string> + <string name="account_settings_confirm_password">Confirme a senha</string> + <string name="password">Senha</string> + <string name="confirm_password">Confirme a senha</string> + <string name="passwords_do_not_match">As senhas não coincidem</string> + <string name="invalid_jid">Esse não é um ID Jabber válido</string> + <string name="error_out_of_memory">Memória insuficiente. A imagem é muito grande</string> + <string name="add_phone_book_text">Deseja adicionar %s ao seu livro de endereços?</string> + <string name="contact_status_online">conectado</string> + <string name="contact_status_free_to_chat">disponível para conversar</string> + <string name="contact_status_away">afastado</string> + <string name="contact_status_extended_away">indisponível</string> + <string name="contact_status_do_not_disturb">não pertube</string> + <string name="contact_status_offline">desconectado</string> + <string name="muc_details_conference">Conferência</string> + <string name="muc_details_other_members">Outros membros</string> + <string name="server_info_show_more">Informações do servidor</string> + <string name="server_info_mam">XEP-0313: MAM</string> + <string name="server_info_carbon_messages">XEP-0280: Cópias das mensagens</string> + <string name="server_info_csi">XEP-0352: Indicação do status do cliente</string> + <string name="server_info_blocking">XEP-0191: Comando de bloqueio</string> + <string name="server_info_roster_version">XEP-0237: Versionamento da lista de contatos</string> + <string name="server_info_stream_management">XEP-0198: Gerenciamento de fluxo</string> + <string name="server_info_pep">XEP-0163: PEP (Avatares / OMEMO)</string> + <string name="server_info_http_upload">XEP-0363: Envio de arquivos via HTTP</string> + <string name="server_info_push">XEP-0357: Push</string> + <string name="server_info_available">disponível</string> + <string name="server_info_unavailable">indisponível</string> + <string name="missing_public_keys">Avisos de ausência de chave pública</string> + <string name="last_seen_now">visto agora</string> + <string name="last_seen_min">visto há 1 minuto atrás</string> + <string name="last_seen_mins">visto há %d minutos atrás</string> + <string name="last_seen_hour">visto há 1 hora atrás</string> + <string name="last_seen_hours">visto há %d horas atrás</string> + <string name="last_seen_day">visto há 1 dia atrás</string> + <string name="last_seen_days">visto há %d dias atrás</string> + <string name="never_seen">nunca visto</string> + <string name="install_openkeychain">Mensagem criptografada. Por favor instale o OpenKeychain para descriptografar.</string> + <string name="unknown_otr_fingerprint">Impressão digital OTR desconhecida</string> + <string name="openpgp_messages_found">Foram encontradas mensagens criptografadas com OpenPGP</string> + <string name="reception_failed">A recepção falhou</string> + <string name="your_fingerprint">Sua impressão digital</string> + <string name="otr_fingerprint">Impressão digital OTR</string> + <string name="omemo_fingerprint">Impressão digital OMEMO</string> + <string name="omemo_fingerprint_x509">Impressão digital v\\OMEMO</string> + <string name="omemo_fingerprint_selected_message">Impressão digital OMEMO da mensagem</string> + <string name="omemo_fingerprint_x509_selected_message">Impressão digital v\\OMEMO da mensagem</string> + <string name="this_device_omemo_fingerprint">Impressão digital OMEMO própria</string> + <string name="other_devices">Outros dispositivos</string> + <string name="trust_omemo_fingerprints">Confiar nas impressões digitais OMEMO</string> + <string name="fetching_keys">Buscando as chaves...</string> + <string name="done">Concluído</string> + <string name="verify">Verificar</string> + <string name="decrypt">Descriptografar</string> + <string name="conferences">Conferências</string> + <string name="search">Pesquisar</string> + <string name="create_contact">Criar contato</string> + <string name="enter_contact">Digite o contato</string> + <string name="join_conference">Entrar na conferência</string> + <string name="delete_contact">Excluir o contato</string> + <string name="view_contact_details">Ver os detalhes do contato</string> + <string name="block_contact">Bloquear o contato</string> + <string name="unblock_contact">Desbloquear o contato</string> + <string name="create">Criar</string> + <string name="select">Selecionar</string> + <string name="contact_already_exists">Esse contato já existe</string> + <string name="join">Entrar</string> + <string name="conference_address">Endereço da conferência</string> + <string name="conference_address_example">sala@conferencia.example.com</string> + <string name="save_as_bookmark">Salvar como favorito</string> + <string name="delete_bookmark">Excluir o favorito</string> + <string name="bookmark_already_exists">Esse favorito já existe</string> + <string name="you">Você</string> + <string name="action_edit_subject">Editar o assunto da conferência</string> + <string name="conference_not_found">A conferência não foi encontrada</string> + <string name="conference_unknown_error">Foi recebido um erro desconhecido</string> + <string name="leave">Sair</string> + <string name="contact_added_you">O contato foi adicionado à sua lista de contatos</string> + <string name="add_back">Adicionar novamente</string> + <string name="contact_has_read_up_to_this_point">%s leu até esse ponto</string> + <string name="publish">Publicar</string> + <string name="touch_to_choose_picture">Toque o avatar para selecionar uma imagem da galeria</string> + <string name="publish_avatar_explanation">Por favor observe: todos aqueles que acompanham suas atualizações de presença poderão ver essa imagem</string> + <string name="publishing">Publicando...</string> + <string name="error_publish_avatar_server_reject">O servidor rejeitou sua publicação</string> + <string name="error_publish_avatar_converting">Ocorreu um erro durante a conversão da sua imagem</string> + <string name="error_saving_avatar">Não foi possível salvar o avatar no disco</string> + <string name="or_long_press_for_default">(Ou mantenha pressionado para voltar ao padrão)</string> + <string name="error_publish_avatar_no_server_support">O seu servidor não suporta a publicação de avatares</string> + <string name="private_message">sussurado</string> + <string name="private_message_to">para %s</string> + <string name="send_private_message_to">Enviar mensagem privada para %s</string> + <string name="connect">Conectar</string> + <string name="account_already_exists">Essa conta já existe</string> + <string name="next">Próximo</string> + <string name="server_info_session_established">Sessão atual estebelecida</string> + <string name="additional_information">Informação adicional</string> + <string name="skip">Pular</string> + <string name="disable_notifications">Desabilitar notificações</string> + <string name="disable_notifications_for_this_conversation">Desabilitar notificações para essa conversa</string> + <string name="enable">Habilitar</string> + <string name="conference_requires_password">Essa conferencia requer uma senha</string> + <string name="enter_password">Digite a senha</string> + <string name="missing_presence_updates">Sem atualizações de presença do contato</string> + <string name="request_presence_updates">Por favor, primeiro solicite atualizações de presençado seu contato.\n\n<small>Isso determinará qual(is) cliente(s) o seu contato está usando.</small></string> + <string name="request_now">Solicitar agora</string> + <string name="delete_fingerprint">Excluir impressão digital</string> + <string name="sure_delete_fingerprint">Tem certeza que deseja remover essa impressão digital?</string> + <string name="ignore">Ignorar</string> + <string name="without_mutual_presence_updates"><b>Aviso:</b> Enviar isso sem atualizações mútuas de presença pode provocar problemas inesperados.\n\n<small>Verifique nos detalhes do contato suas inscrições de presença.</small></string> + <string name="pref_security_settings">Segurança</string> + <string name="pref_force_encryption">Forçar criptografia ponto-a-ponto</string> + <string name="pref_force_encryption_summary">Sempre envie mensagem criptografada (exceto para conferências)</string> + <string name="pref_allow_message_correction">Permitir a correção da mensagem</string> + <string name="pref_allow_message_correction_summary">Permite que seus contatos edite suas mensagens retroativamente</string> + <string name="pref_dont_save_encrypted">Não salve as mensagens criptografadas</string> + <string name="pref_dont_save_encrypted_summary">Atenção: Isso pode levar a perda de mensagens</string> + <string name="pref_expert_options">Configurações avançadas</string> + <string name="pref_expert_options_summary">Por favor, use com cuidado</string> + <string name="title_activity_about">Sobre o Conversations</string> + <string name="pref_about_conversations_summary">Informações de licenciamento e construção</string> + <string name="title_pref_quiet_hours">Horário de sossego</string> + <string name="title_pref_quiet_hours_start_time">Início</string> + <string name="title_pref_quiet_hours_end_time">Fim</string> + <string name="title_pref_enable_quiet_hours">Habilitar horário de sossego</string> + <string name="pref_quiet_hours_summary">As notificações serão silenciadas no horário de sossego</string> + <string name="pref_use_larger_font">Aumentar o tamanho da fonte</string> + <string name="pref_use_larger_font_summary">Usar fontes maiores por todo aplicativo</string> + <string name="pref_use_send_button_to_indicate_status">O botão de envio indica o status</string> + <string name="pref_use_indicate_received">Solicitar confirmação de recebimento</string> + <string name="pref_use_indicate_received_summary">As mensagens recebidas serão marcadas com um tique verde, se suportado</string> + <string name="pref_use_send_button_to_indicate_status_summary">Colorir o botão de envio para indicar o status do contato</string> + <string name="pref_expert_options_other">Outras</string> + <string name="pref_conference_name">Nome da conferência</string> + <string name="pref_conference_name_summary">Use o assunto da sala ao invés do JID para identificar as conferências</string> + <string name="pref_autojoin">Entrar automaticamente nas conferências</string> + <string name="pref_autojoin_summary">Respeitar a opção de entrada automática dos marcadores de conferência</string> + <string name="toast_message_otr_fingerprint">Impressão digital OTR copiada para a área de transferência!</string> + <string name="toast_message_omemo_fingerprint">Impressão digital OMEMO copiada para a área de transferência!</string> + <string name="conference_banned">Você foi banido dessa conferência</string> + <string name="conference_members_only">Essa conferência é restrita a seus membros</string> + <string name="conference_kicked">Você foi expulso dessa conferência</string> + <string name="using_account">usando a conta %s</string> + <string name="checking_x">Verificando %s no host HTTP</string> + <string name="not_connected_try_again">Você não está conectado. Tente novamente mais tarde.</string> + <string name="check_x_filesize">Verificar o tamanho de %s</string> + <string name="message_options">Opções da mensagem</string> + <string name="copy_text">Copiar o texto</string> + <string name="copy_original_url">Copiar a URL original</string> + <string name="send_again">Enviar novamente</string> + <string name="file_url">URL do arquivo</string> + <string name="message_text">Texto da mensagem</string> + <string name="url_copied_to_clipboard">A URL foi copiada para a área de transferência</string> + <string name="message_copied_to_clipboard">A mensagem foi copiada para a área de transferência</string> + <string name="image_transmission_failed">Não foi possível enviar a imagem</string> + <string name="scan_qr_code">Escanear QR code</string> + <string name="show_qr_code">Exibir QR code</string> + <string name="show_block_list">Exibir a lista de bloqueios</string> + <string name="account_details">Detalhes da conta</string> + <string name="verify_otr">Verificar OTR</string> + <string name="remote_fingerprint">Impressão digital remota</string> + <string name="scan">escanear</string> + <string name="smp">Socialist Millionaire Protocol</string> + <string name="shared_secret_hint">Dica ou pergunta</string> + <string name="shared_secret_secret">Segredo compartilhado</string> + <string name="confirm">Confirmar</string> + <string name="in_progress">Em progresso</string> + <string name="respond">Responder</string> + <string name="failed">Erro</string> + <string name="secrets_do_not_match">Os segredos não correspondem</string> + <string name="try_again">Tentar novamente</string> + <string name="finish">Finalizar</string> + <string name="verified">Verificado!</string> + <string name="smp_requested">O contato solicitou uma verificação SMP</string> + <string name="no_otr_session_found">Não foi encontrada nenhuma sessão OTR válida!</string> + <string name="conversations_foreground_service">Conversations</string> + <string name="pref_keep_foreground_service">Manter o serviço em segundo plano</string> + <string name="pref_keep_foreground_service_summary">Impede que o sistema operacional encerre sua conexão</string> + <string name="pref_export_logs">Exportar registros</string> + <string name="pref_export_logs_summary">Escrever os registros no cartão SD</string> + <string name="notification_export_logs_title">Escrevendo os registros no cartão SD</string> + <string name="choose_file">Selecione o arquivo</string> + <string name="receiving_x_file">Recebendo %1$s (completou %2$d%%)</string> + <string name="download_x_file">Baixar %s</string> + <string name="file">arquivo</string> + <string name="open_x_file">Abrir %s</string> + <string name="sending_file">enviando (completou %1$d%%)</string> + <string name="preparing_file">Preparando o arquivo para o envio</string> + <string name="x_file_offered_for_download">%s oferecido para baixar</string> + <string name="cancel_transmission">Cancelar transmissão</string> + <string name="file_transmission_failed">não foi possível transferir o arquivo</string> + <string name="file_deleted">O arquivo foi excluído</string> + <string name="no_application_found_to_open_file">Não foi encontrado nenhum aplicativo para abrir o arquivo</string> + <string name="could_not_verify_fingerprint">Não foi possível verificar a impressão digital</string> + <string name="manually_verify">Verificado manualmente</string> + <string name="are_you_sure_verify_fingerprint">Deseja realmente verificar as impressões digitais OTR dos seus contatos?</string> + <string name="pref_show_dynamic_tags">Exibir etiquetas dinâmicas</string> + <string name="pref_show_dynamic_tags_summary">Exibir etiquetas somente de leitura abaixo dos contatos</string> + <string name="enable_notifications">Habilitar notificações</string> + <string name="conference_with">Criar conferência com...</string> + <string name="no_conference_server_found">Não foi encontrado nenhum servidor de conferências</string> + <string name="conference_creation_failed">Não foi possível criar a conferência!</string> + <string name="conference_created">A conferência foi criada!</string> + <string name="secret_accepted">O segredo foi aceito!</string> + <string name="reset">Redefinir</string> + <string name="account_image_description">Avatar da conta</string> + <string name="copy_otr_clipboard_description">Copiar a impressão digital OTR para a área de transferência</string> + <string name="copy_omemo_clipboard_description">Copiar a impressão digital OMEMO para a área de transferência</string> + <string name="regenerate_omemo_key">Regerar a chave OMEMO</string> + <string name="wipe_omemo_pep">Remover outros dispositivos do PEP</string> + <string name="clear_other_devices">Remover dispositivos</string> + <string name="clear_other_devices_desc">Deseja realmente remover todos os outros dispositivos dos anúncios OMEMO? Na próxima vez que seus dispositivos conectarem eles se reanunciarão, entretanto, eles podem não receber mensagens nesse intervalo de tempo.</string> + <string name="purge_key">Expurgar a chave</string> + <string name="purge_key_desc_part1">Deseja realmente expurgar essa chave?</string> + <string name="purge_key_desc_part2">Ela será considerada irreversivelmente comprometida e você nunca mais conseguirá estabelecer uma sessão com ela.</string> + <string name="error_no_keys_to_trust_server_error">Não existe nenhuma chave utilizável para esse contato.\nNão foi possível obter nenhuma chave nova do servidor. Pode haver alguma coisa errada com o seu servidor de contatos.</string> + <string name="error_no_keys_to_trust">Não existe nenhuma chave utilizável para esse contato. Caso você tenha expurgado alguma chave dele, ele terá que gerar uma nova.</string> + <string name="error_trustkeys_title">Erro</string> + <string name="fetching_history_from_server">Obtendo histórico do servidor</string> + <string name="no_more_history_on_server">Nenhum outro histórico do servidor</string> + <string name="updating">Atualizando...</string> + <string name="password_changed">A senha foi alterada!</string> + <string name="could_not_change_password">Não foi possível alterar a senha</string> + <string name="otr_session_not_started">Envie uma mensagem para iniciar uma conversa criptografada</string> + <string name="ask_question">Faça uma pergunta</string> + <string name="smp_explain_question">Caso você e o seu contato tenham um segredo em comum que ninguém mais saiba (como, por exemplo, uma piada interna ou o que vocês comeram na última vez que se encontraram) vocês podem usar isso para verificar a impressão digital um do outro.\n\nVocê fornece uma dica ou pergunta para o seu contato responder. Atenção! A resposta diferencia maiúsculas de minúsculas.</string> + <string name="smp_explain_answer">O seu contato gostaria de verificar sua impressão digital através de um segredo compartilhado. O seu contato enviou a seguinte dica/questão para esse segredo.</string> + <string name="shared_secret_hint_should_not_be_empty">Sua dica não pode estar em branco</string> + <string name="shared_secret_can_not_be_empty">O seu segredo compartilhado não pode estar em branco</string> + <string name="manual_verification_explanation">Compare cuidadosamente a impressão digital abaixo com aquela do seu contato.\nVocê pode usar qualquer forma de comunicação segura, como um e-mail criptografado ou uma ligação telefônica para efetuar a troca.</string> + <string name="change_password">Alterar a senha</string> + <string name="current_password">Senha atual</string> + <string name="new_password">Nova senha</string> + <string name="password_should_not_be_empty">A senha não pode estar em branco</string> + <string name="enable_all_accounts">Habilitar todas as contas</string> + <string name="disable_all_accounts">Desabilitar todas as contas</string> + <string name="perform_action_with">Realizar a ação com</string> + <string name="no_affiliation">Sem afiliação</string> + <string name="no_role">Sem papel</string> + <string name="outcast">Banido</string> + <string name="member">Membro</string> + <string name="advanced_mode">Modo avançado</string> + <string name="grant_membership">Conceder filiação</string> + <string name="remove_membership">Revogar a filiação</string> + <string name="grant_admin_privileges">Conceder privilégios de administrador</string> + <string name="remove_admin_privileges">Revogar os privilégios de administrador</string> + <string name="remove_from_room">Remover da conferência</string> + <string name="could_not_change_affiliation">Não foi possível alterar a filiação de %s</string> + <string name="ban_from_conference">Banir da conferência</string> + <string name="removing_from_public_conference">Você está tentando remover %s de uma conferência pública. A única forma de fazer isso é banir essa pessoa para sempre.</string> + <string name="ban_now">Banir agora</string> + <string name="could_not_change_role">Não foi possível alterar o papel de %s</string> + <string name="public_conference">Conferência aberta ao público</string> + <string name="private_conference">Conferência privada, somente para membros</string> + <string name="conference_options">Opções da conferência</string> + <string name="members_only">Privada, somente para membros</string> + <string name="non_anonymous">Não-anônima</string> + <string name="moderated">Moderada</string> + <string name="you_are_not_participating">Você não está participando</string> + <string name="modified_conference_options">As opções da conferência foram alteradas.</string> + <string name="could_not_modify_conference_options">Não foi possível alterar as opções da conferência</string> + <string name="never">Nunca</string> + <string name="thirty_minutes">30 minutos</string> + <string name="one_hour">1 hora</string> + <string name="two_hours">2 horas</string> + <string name="eight_hours">8 horas</string> + <string name="until_further_notice">Até segunda ordem</string> + <string name="pref_input_options">Entrada</string> + <string name="pref_enter_is_send">Enter envia</string> + <string name="pref_enter_is_send_summary">Use o botão Enter para enviar a mensagem</string> + <string name="pref_display_enter_key">Exibir o botão Enter</string> + <string name="pref_display_enter_key_summary">Altere o botão de emoticons para um botão Enter</string> + <string name="audio">áudio</string> + <string name="video">vídeo</string> + <string name="image">imagem</string> + <string name="pdf_document">Documento PDF</string> + <string name="apk">Aplicativo Android</string> + <string name="vcard">Contato</string> + <string name="received_x_file">%s recebido</string> + <string name="disable_foreground_service">Desabilitar o serviço em segundo plano</string> + <string name="touch_to_open_conversations">Toque para abrir o Conversations</string> + <string name="avatar_has_been_published">O avatar foi publicado.</string> + <string name="sending_x_file">Enviando %s</string> + <string name="offering_x_file">Oferecendo %s</string> + <string name="hide_offline">Ocultar desconectados</string> + <string name="disable_account">Desabilitar a conta</string> + <string name="contact_is_typing">%s está digitando...</string> + <string name="contact_has_stopped_typing">%s parou de digitar</string> + <string name="pref_chat_states">Notificações de digitação</string> + <string name="pref_chat_states_summary">Permitir que seus contatos vejam quando você estiver digitando uma nova mensagem</string> + <string name="send_location">Enviar localização</string> + <string name="show_location">Exibir localização</string> + <string name="no_application_found_to_display_location">Não foi encontrado nenhum aplicativo para exibir a localização</string> + <string name="location">Localização</string> + <string name="received_location">Localização recebida</string> + <string name="title_undo_swipe_out_conversation">A conversa foi fechada</string> + <string name="title_undo_swipe_out_muc">Saiu da conferência</string> + <string name="pref_dont_trust_system_cas_title">Não confiar nas CAs do sistema</string> + <string name="pref_dont_trust_system_cas_summary">Todos os certificados devem ser aprovados manualmente</string> + <string name="pref_remove_trusted_certificates_title">Remover certificados</string> + <string name="pref_remove_trusted_certificates_summary">Excluir os certificados aprovados manualmente</string> + <string name="toast_no_trusted_certs">Nenhum certificado aprovado manualmente</string> + <string name="dialog_manage_certs_title">Remover certificados</string> + <string name="dialog_manage_certs_positivebutton">Excluir a seleção</string> + <string name="dialog_manage_certs_negativebutton">Cancelar</string> + <plurals name="toast_delete_certificates"> + <item quantity="one">%d certificado cancelado</item> + <item quantity="other">%d certificados cancelados</item> + </plurals> + <plurals name="select_contact"> + <item quantity="one">Selecionar %d contato</item> + <item quantity="other">Selecionar %d contatos</item> + </plurals> + <string name="pref_quick_action_summary">Trocar o botão enviar pelo de ação rápida</string> + <string name="pref_quick_action">Ação rápida</string> + <string name="none">Nenhuma</string> + <string name="recently_used">Usada mais recentemente</string> + <string name="choose_quick_action">Selecione a ação rápida</string> + <string name="search_for_contacts_or_groups">Pesquisar por contatos ou grupos</string> + <string name="send_private_message">Enviar mensagem privada</string> + <string name="user_has_left_conference">%s deixou a conferência.</string> + <string name="username">Nome de usuário</string> + <string name="username_hint">Nome de usuário</string> + <string name="invalid_username">Esse não é um nome de usuário válido</string> + <string name="download_failed_server_not_found">Não foi possível fazer o download: servidor não encontrado</string> + <string name="download_failed_file_not_found">Não foi possível fazer o download: arquivo não encontrado</string> + <string name="download_failed_could_not_connect">Não foi possível fazer o download: não foi possível conectar ao host</string> + <string name="pref_use_white_background">Usar fundo branco</string> + <string name="pref_use_white_background_summary">Exibir a mensagens recebidas como texto preto em um fundo branco</string> + <string name="account_status_tor_unavailable">Rede Tor não disponível</string> + <string name="server_info_broken">Quebrado</string> + <string name="pref_presence_settings">Presença</string> + <string name="pref_away_when_screen_off">Afastado quando a tela estiver desligada</string> + <string name="pref_away_when_screen_off_summary">Marcar o seu status como afastado quando a tela estiver desligada</string> + <string name="pref_xa_on_silent_mode">Não disponível quando em modo silencioso</string> + <string name="pref_xa_on_silent_mode_summary">Marcar o seu status como não disponível quando o dispositivo estiver em modo silencioso</string> + <string name="pref_show_connection_options">Configurações detalhadas da conexão</string> + <string name="pref_show_connection_options_summary">Exibe o nome de host e configurações da porta ao configurar uma conta</string> + <string name="hostname_example">xmpp.example.com</string> + <string name="action_add_account_with_certificate">Adicionar uma conta com certificado</string> + <string name="unable_to_parse_certificate">Não foi possível analisar o certificado</string> + <string name="authenticate_with_certificate">Deixe em branco para autenticar com um certificado</string> + <string name="mam_prefs">Preferências de arquivamento</string> + <string name="server_side_mam_prefs">Preferências de arquivamento no servidor</string> + <string name="fetching_mam_prefs">Obtendo as preferências de arquivamento. Por favor aguarde...</string> + <string name="unable_to_fetch_mam_prefs">Não foi possível obter as preferências de arquivamento</string> + <string name="captcha_ocr">Texto captcha</string> + <string name="captcha_required">Captcha obrigatório</string> + <string name="captcha_hint">digite o texto da imagem</string> + <string name="certificate_chain_is_not_trusted">A cadeia de certificação não é confiável</string> + <string name="jid_does_not_match_certificate">O ID Jaber não corresponde ao certificado</string> + <string name="action_renew_certificate">Renovar o certificado</string> + <string name="error_fetching_omemo_key">Ocorreu um erro na obtenção da chave OMEMO!</string> + <string name="verified_omemo_key_with_certificate">A chave OMEMO foi verificada com o certificado.</string> + <string name="device_does_not_support_certificates">O seu dispositivo não suporta a seleção de certificados de clientes.</string> + <string name="pref_connection_options">Conexão</string> + <string name="pref_use_tor">Conectar via Tor</string> + <string name="pref_use_tor_summary">Faça o tunelamento de todas as conexões através de redes Tor. Necessita do Orbot.</string> + <string name="account_settings_hostname">Nome do host</string> + <string name="account_settings_port">Porta</string> + <string name="hostname_or_onion">Server- ou .onion-Address</string> + <string name="not_a_valid_port">Esse número de porta não é válido</string> + <string name="not_valid_hostname">Esse nome de host não é válido</string> + <string name="connected_accounts">%1$d de %2$d contas conectadas</string> + <plurals name="x_messages"> + <item quantity="one">%d mensagem</item> + <item quantity="other">%d mensagens</item> + </plurals> + <string name="load_more_messages">Carregar mais mensagens</string> + <string name="shared_file_with_x">Arquivo compartilhado com %s</string> + <string name="shared_image_with_x">Imagem compartilhada com %s</string> + <string name="no_storage_permission">O Conversations necessita de acesso ao armazenamento externo</string> + <string name="sync_with_contacts">Sincronizar com os contatos</string> + <string name="sync_with_contacts_long">O Conversations quer procurar por correspondências entre contatos da sua conta Jabber e do seu telefone, para complementar as informações de nome completo e avatares\n\nO Conversations fará a verificação localmente, sem enviar nenhuma informação sua para o servidor\n\nVocê será solicitado a fornecer permissão de acesso aos seus contatos agora.</string> + <string name="certificate_information">Informação do certificado</string> + <string name="certificate_subject">Assunto</string> + <string name="certificate_issuer">Emitente</string> + <string name="certificate_cn">Common Name</string> + <string name="certificate_o">Organização</string> + <string name="certificate_sha1">SHA-1</string> + <string name="certicate_info_not_available">(Não disponível)</string> + <string name="certificate_not_found">Não foi encontrado nenhum certificado</string> + <string name="notify_on_all_messages">Notificar em todas as mensagens</string> + <string name="notify_only_when_highlighted">Notificar somente quando destacado</string> + <string name="notify_never">Notificações desabilitadas</string> + <string name="notify_paused">Notificações pausadas</string> + <string name="pref_picture_compression">Comprimir imagens</string> + <string name="pref_picture_compression_summary">Redimensiona e comprime as imagens</string> + <string name="always">Sempre</string> + <string name="automatically">Automaticamente</string> + <string name="battery_optimizations_enabled">Otimizações de bateria habilitadas</string> + <string name="battery_optimizations_enabled_explained">O seu dispositivo está aplicando uma otimização de bateria intensa no Conversations, que pode levar a atraso nas notificações ou até mesmo perda de mensagens.\nÉ recomendado desabilitar isso.</string> + <string name="battery_optimizations_enabled_dialog">O seu dispositivo está aplicando uma otimização de bateria intensa no Conversations, que pode levar a atraso nas notificações ou até mesmo perda de mensagens.\nAgora você será solicitado a desabilitá-la.</string> + <string name="disable">Desabilitar</string> + <string name="selection_too_large">A área selecionada é muito grande</string> + <string name="no_accounts">(Nenhuma conta ativa)</string> + <string name="this_field_is_required">Este campo é necessário</string> + <string name="correct_message">Corrigir a mensagem</string> + <string name="send_corrected_message">Enviar a mensagem corrigida</string> +</resources> diff --git a/src/main/res/values-pt/strings.xml b/src/main/res/values-pt/strings.xml index 137d38b4..30265948 100644 --- a/src/main/res/values-pt/strings.xml +++ b/src/main/res/values-pt/strings.xml @@ -88,7 +88,6 @@ <string name="pref_xmpp_resource_summary">O nome pelo qual esse cliente se identifica</string> <string name="pref_accept_files">Aceitar arquivos</string> <string name="pref_accept_files_summary">Automaticamente aceita arquivos menores que...</string> - <string name="pref_notification_settings">Configurações de notificação</string> <string name="pref_notifications">Notificações</string> <string name="pref_notifications_summary">Notificar quando uma nova mensagem for recebida</string> <string name="pref_vibrate">Vibrar</string> @@ -97,12 +96,10 @@ <string name="pref_sound_summary">Tocar um som com a notificação</string> <string name="pref_notification_grace_period">Período de carência da notificação</string> <string name="pref_notification_grace_period_summary">Desativar notificações por um curto período após a copia oculta ser recebida</string> - <string name="pref_advanced_options">Opções avançadas</string> <string name="pref_never_send_crash">Nunca enviar relatórios de quebra</string> <string name="pref_never_send_crash_summary">Ao enviar os stack traces você ajuda o desenvolvimento do aplicativo</string> <string name="pref_confirm_messages">Confirmar mensanges</string> <string name="pref_confirm_messages_summary">Permitir que um contato saiba quando você recebeu e leu uma mensagem</string> - <string name="pref_ui_options">Opções de UI</string> <string name="openpgp_error">O OpenKeychain informou um erro</string> <string name="error_decrypting_file">Erro de I/O de critpografia</string> <string name="accept">Aceitar</string> @@ -230,12 +227,10 @@ <string name="request_now">Solicitar agora</string> <string name="delete_fingerprint">Remover impressão</string> <string name="sure_delete_fingerprint">Tem certeza que deseja remover essa assinatura?</string> - <string name="pref_encryption_settings">Configurações de criptografia</string> <string name="pref_force_encryption">Forçar criptografia ponto-a-ponto</string> <string name="pref_force_encryption_summary">Sempre envie mensagem criptografada (exceto para conferências)</string> <string name="pref_dont_save_encrypted">Não salve mensagens criptografadas</string> <string name="pref_dont_save_encrypted_summary">Atenção: Isso pode levar a perda de mensagens</string> - <string name="pref_expert_options">Opções de expert</string> <string name="pref_expert_options_summary">Por favor tenha cuidado com essas</string> <string name="title_activity_about">Sobre Conversas</string> <string name="pref_about_conversations_summary">Informação de licença e construção</string> @@ -265,7 +260,6 @@ <string name="two_hours">2 horas</string> <string name="eight_hours">8 horas</string> <string name="until_further_notice">Até segunda ordem</string> - <string name="pref_input_options">Opções de entrada</string> <string name="pref_enter_is_send">O enter envia</string> <string name="pref_enter_is_send_summary">Use o enter para enviar a mensagem</string> <string name="pref_display_enter_key">Exibir tecla enter</string> diff --git a/src/main/res/values-ro-rRO/strings.xml b/src/main/res/values-ro-rRO/strings.xml index c78fc00e..07fed1fb 100644 --- a/src/main/res/values-ro-rRO/strings.xml +++ b/src/main/res/values-ro-rRO/strings.xml @@ -102,7 +102,7 @@ <string name="pref_xmpp_resource_summary">Numele cu care acest client se identifica</string> <string name="pref_accept_files">Accepta fisiere</string> <string name="pref_accept_files_summary">Accepta automat fisiere mai mici decat...</string> - <string name="pref_notification_settings">Setari notificari</string> + <string name="pref_notification_settings">Notificare</string> <string name="pref_notifications">Notificari</string> <string name="pref_notifications_summary">Notifica cand un nou mesaj este primit</string> <string name="pref_vibrate">Vibreaza</string> @@ -191,6 +191,7 @@ <string name="server_info_stream_management">XEP-0198: Management flux</string> <string name="server_info_pep">XEP-0163: PEP (Avatare / OMEMO)</string> <string name="server_info_http_upload">XEP-0363: Incarcare fisiere prin HTTP</string> + <string name="server_info_push">XEP-0357: Push</string> <string name="server_info_available">disponibil</string> <string name="server_info_unavailable">indisponibil</string> <string name="missing_public_keys">Cheile publice ce nu au fost anuntate</string> @@ -240,6 +241,7 @@ <string name="you">Tu</string> <string name="action_edit_subject">Editeaza titlul conferintei</string> <string name="conference_not_found">Conferinta nu a fost gasita</string> + <string name="conference_unknown_error">A fost primita o eroare necunoscuta</string> <string name="leave">Paraseste</string> <string name="contact_added_you">Contactul a fost adaugat in lista </string> <string name="add_back">Adauga inapoi</string> @@ -274,9 +276,11 @@ <string name="sure_delete_fingerprint">Sigur vrei sa stergi amprenta</string> <string name="ignore">Ignora</string> <string name="without_mutual_presence_updates"><b>Atentie:</b> Trimitand aceasta fara actualizari de prezenta reciproce, ar putea produce probleme neprevazute.\n\n<small>Mergi la lista de contacte, la detalii, sa iti verifici abonarile la actualizarile de prezenta.</small></string> - <string name="pref_encryption_settings">Setari criptare</string> + <string name="pref_security_settings">Siguranta</string> <string name="pref_force_encryption">Forteaza criptarea conexiunii de la un capat la altul</string> <string name="pref_force_encryption_summary">Trimite mereu mesajele criptate (exceptand conferintele)</string> + <string name="pref_allow_message_correction">Permite corectia mesajelor</string> + <string name="pref_allow_message_correction_summary">Permite contactelor sa isi editeze mesajele din trecut</string> <string name="pref_dont_save_encrypted">Nu salva mesaje criptate</string> <string name="pref_dont_save_encrypted_summary">Atentie: Asta poate duce la pierderea de mesaje</string> <string name="pref_expert_options">Optiuni expert</string> @@ -297,6 +301,8 @@ <string name="pref_expert_options_other">Altele</string> <string name="pref_conference_name">Titlu conferinta</string> <string name="pref_conference_name_summary">Foloseste subiectul camerei in locul JID pentru a identifica conferinta</string> + <string name="pref_autojoin">Alatura-te automat conferintelor</string> + <string name="pref_autojoin_summary">Respecta setarea de alaturare automata la o conferinta conform semnului de carte</string> <string name="toast_message_otr_fingerprint">Amprenta OTR copiata in memorie</string> <string name="toast_message_omemo_fingerprint">Amprenta OMEMO copiata in memorie!</string> <string name="conference_banned">Ti-a fost interzis accesul la aceasta conferinta</string> @@ -496,9 +502,16 @@ <string name="pref_away_when_screen_off_summary">Marcheaza clientul drept plecat cand ecranul este oprit</string> <string name="pref_xa_on_silent_mode">Indisponibil in mod silentios</string> <string name="pref_xa_on_silent_mode_summary">Declara clientul drept indisponibil atunci cand dispozitivul este in mod silentios</string> + <string name="pref_show_connection_options">Optiuni avansate conexiune</string> + <string name="pref_show_connection_options_summary">Arata optiunea de setare a numelui de gazda si a portului atunci cand se configureaza un cont</string> + <string name="hostname_example">xmpp.example.com</string> <string name="action_add_account_with_certificate">Adauga un cont cu certificat</string> <string name="unable_to_parse_certificate">Nu se poate analiza certificatul</string> <string name="authenticate_with_certificate">Lasa gol pentru a autentifica cu un certificat</string> + <string name="mam_prefs">Preferinte arhivare</string> + <string name="server_side_mam_prefs">Preferinte arhivare pe server</string> + <string name="fetching_mam_prefs">Descarc preferinte arhivare. Va rugam asteptati...</string> + <string name="unable_to_fetch_mam_prefs">Nu s-au putut descarca preferintele de arhivare</string> <string name="captcha_ocr">Text captcha de verificare</string> <string name="captcha_required">Text captcha de verificare necesar</string> <string name="captcha_hint">introdu textul din imagine</string> @@ -522,6 +535,7 @@ <item quantity="few">%d mesaje</item> <item quantity="other">%d mesaje</item> </plurals> + <string name="load_more_messages">Incarca mai multe mesaje</string> <string name="shared_file_with_x">Partajeaza fisierul cu %s...</string> <string name="shared_image_with_x">Partajeaza imaginea cu %s.</string> <string name="no_storage_permission">Conversations are nevoie de acces la stocarea externa</string> @@ -533,7 +547,7 @@ Emitent</string> <string name="certificate_cn">Nume comun</string> <string name="certificate_o">Organizatie</string> - <string name="certificate_sha1">SHA1</string> + <string name="certificate_sha1">SHA-1</string> <string name="certicate_info_not_available">(Indisponibil)</string> <string name="certificate_not_found">Certificat inexistent</string> <string name="notify_on_all_messages">Notifica la toate mesajele</string> @@ -547,4 +561,8 @@ Emitent</string> <string name="battery_optimizations_enabled_dialog">Dispozitivul dumneavoastra incearca sa optimizeze agresiv consumul bateriei pentru Conversations, asta poate duce la notificari intarziate sau chiar pierderi de mesaje.\nIn continuare veti fi rugat sa dezactivati aceste optimizari.</string> <string name="disable">Dezactivat</string> <string name="selection_too_large">Zona selectata este prea mare</string> + <string name="no_accounts">(Nici un cont activat)</string> + <string name="this_field_is_required">Acest camp este obligatoriu</string> + <string name="correct_message">Corectie mesaj</string> + <string name="send_corrected_message">Trimite text corectat</string> </resources> diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml index fb539f6a..21c341f9 100644 --- a/src/main/res/values-ru/strings.xml +++ b/src/main/res/values-ru/strings.xml @@ -102,7 +102,6 @@ <string name="pref_xmpp_resource_summary">Имя которым Conversations идентифицирует себя</string> <string name="pref_accept_files">Принимать файлы</string> <string name="pref_accept_files_summary">Автоматический прием файлов…</string> - <string name="pref_notification_settings">Настройки Уведомлений</string> <string name="pref_notifications">Уведомление</string> <string name="pref_notifications_summary">Использовать звуковое уведомление когда приходят новые сообщения</string> <string name="pref_vibrate">Вибрация</string> @@ -111,12 +110,10 @@ <string name="pref_sound_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">Отправляя отчеты об ошибках, вы помогаете исправить и улучшить Conversations, поддерживая дальнейшее развитие программы</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="error_decrypting_file">Ошибка расшифровки файла</string> <string name="accept">Принять</string> @@ -274,12 +271,10 @@ <string name="sure_delete_fingerprint">Вы уверены, что хотите удалить данную контрольную сумму?</string> <string name="ignore">Отменить</string> <string name="without_mutual_presence_updates"><b>Внимание:</b> Если обновления присутствия не включены на обеих сторонах, это может привести к возникновению неожиданных проблемам.\n\n<small>Уточните сведения о контакте, проверив настройки обновлений присутствия.</small></string> - <string name="pref_encryption_settings">Настройки шифрования</string> <string name="pref_force_encryption">Обязательное сквозное шифрование</string> <string name="pref_force_encryption_summary">Всегда отправлять сообщения зашифрованными (за исключением конференций)</string> <string name="pref_dont_save_encrypted">Не сохранять зашифрованные сообщения</string> <string name="pref_dont_save_encrypted_summary">Внимание: Это может привести к потере сообщений</string> - <string name="pref_expert_options">Расширенные настройки</string> <string name="pref_expert_options_summary">Пожалуйста, будьте осторожны с данными настройками</string> <string name="title_activity_about">О Conversations</string> <string name="pref_about_conversations_summary">Информация о билде и лицензировании</string> @@ -426,7 +421,6 @@ <string name="two_hours">2 часа</string> <string name="eight_hours">8 часов</string> <string name="until_further_notice">До следующего уведомления</string> - <string name="pref_input_options">Настройки ввода</string> <string name="pref_enter_is_send">Отправить на \"Enter\"</string> <string name="pref_enter_is_send_summary">Клавиша \"Enter\" отправляет сообщение</string> <string name="pref_display_enter_key">Показывать клавишу ввода</string> @@ -492,7 +486,6 @@ <string name="download_failed_could_not_connect">Загрузка не удалась: не удалось подключиться к серверу</string> <string name="account_status_tor_unavailable">Сеть Tor недоступна</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_xa_on_silent_mode">Не доступен в режиме без звука</string> @@ -508,7 +501,6 @@ <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> @@ -526,7 +518,6 @@ <string name="certificate_subject">Subject</string> <string name="certificate_issuer">Выпустил</string> <string name="certificate_o">Организация</string> - <string name="certificate_sha1">SHA-1</string> <string name="certicate_info_not_available">(недоступно)</string> <string name="certificate_not_found">Сертификатов не найдено</string> <string name="notify_on_all_messages">Уведомлять о всех сообщениях</string> diff --git a/src/main/res/values-sk/strings.xml b/src/main/res/values-sk/strings.xml index 2990a8ed..ce99da94 100644 --- a/src/main/res/values-sk/strings.xml +++ b/src/main/res/values-sk/strings.xml @@ -96,7 +96,6 @@ <string name="pref_xmpp_resource_summary">Meno, ktorým sa tento klient identifikuje</string> <string name="pref_accept_files">Prijať súbory</string> <string name="pref_accept_files_summary">Automaticky prijať súbory menšie ako…</string> - <string name="pref_notification_settings">Nastavenia upozornení</string> <string name="pref_notifications">Upozornenia</string> <string name="pref_notifications_summary">Upozorniť pri prijatí novej správy</string> <string name="pref_vibrate">Vibrovať</string> @@ -105,12 +104,10 @@ <string name="pref_sound_summary">Prehrať zvuk spolu s upozornením</string> <string name="pref_notification_grace_period">Doba na prečítanie upozornenia</string> <string name="pref_notification_grace_period_summary">Neupozorňovať krátko po obdržaní kópie správy</string> - <string name="pref_advanced_options">Rozšírené možnosti</string> <string name="pref_never_send_crash">Neodosielať detaily o zlyhaní aplikácie</string> <string name="pref_never_send_crash_summary">Zaslaním detailov o dôvode zlyhania pomáhate ďalšiemu vývoju aplikácie Conversations</string> <string name="pref_confirm_messages">Potvrdzovať správy</string> <string name="pref_confirm_messages_summary">Oznámi kontaktom, že správa bola prijatá a prečítaná</string> - <string name="pref_ui_options">Možnosti UI</string> <string name="openpgp_error">OpenKeychain nahlásil chybu</string> <string name="error_decrypting_file">I/O chyba dešifrovania súboru</string> <string name="accept">Prijať</string> @@ -262,12 +259,10 @@ <string name="sure_delete_fingerprint">Naozaj chcete vymazať tento identifikátor?</string> <string name="ignore">Ignorovať</string> <string name="without_mutual_presence_updates"><b>Varovanie:</b> Odoslanie bez povolenia zmien stavu môže spôsobiť nečakané problémy na obidvoch stranách.\n\n<small>Prejdi na detaily kontaktu pre overenie povolenia o zmenách stavu.</small></string> - <string name="pref_encryption_settings">Nastavenie šifrovania</string> <string name="pref_force_encryption">Vynútiť šifrovanie</string> <string name="pref_force_encryption_summary">Vždy zasielať šifrované správy (okrem skupinových konverzácií)</string> <string name="pref_dont_save_encrypted">Neukladať šifrované správy</string> <string name="pref_dont_save_encrypted_summary">Varovanie: Toto môže viesť k strate správ</string> - <string name="pref_expert_options">Expertné možnosti</string> <string name="pref_expert_options_summary">S týmto narábajte veľmi opatrne, prosím</string> <string name="title_activity_about">O Conversations</string> <string name="pref_about_conversations_summary">Informácie o tvorbe a licencii</string> @@ -400,7 +395,6 @@ <string name="two_hours">2 hodiny</string> <string name="eight_hours">8 hodín</string> <string name="until_further_notice">Až do odvolania</string> - <string name="pref_input_options">Možnosti zadávaní</string> <string name="pref_enter_is_send">Enter odosiela</string> <string name="pref_enter_is_send_summary">Použiť klávesu enter na odoslanie správy</string> <string name="pref_display_enter_key">Zobraziť klávesu enter</string> diff --git a/src/main/res/values-sr/strings.xml b/src/main/res/values-sr/strings.xml index 0d107d88..1b206044 100644 --- a/src/main/res/values-sr/strings.xml +++ b/src/main/res/values-sr/strings.xml @@ -240,6 +240,7 @@ <string name="you">Ви</string> <string name="action_edit_subject">Уреди предмет групног ћаскања</string> <string name="conference_not_found">Групно ћаскање није нађено</string> + <string name="conference_unknown_error">Примљена је непозната грешка</string> <string name="leave">Напусти</string> <string name="contact_added_you">Контакт вас је додао на списак контаката</string> <string name="add_back">Додај га</string> @@ -496,6 +497,7 @@ <string name="pref_away_when_screen_off_summary">Означава ваш ресурс одсутним кад је екран искључен</string> <string name="pref_xa_on_silent_mode">Недоступан у тихом режиму</string> <string name="pref_xa_on_silent_mode_summary">Означава ваш ресурс недоступним кад је уређај у тихом режиму</string> + <string name="hostname_example">xmpp.primer.com</string> <string name="action_add_account_with_certificate">Додај налог сертификатом</string> <string name="unable_to_parse_certificate">Не могу да рашчланим сертификат</string> <string name="authenticate_with_certificate">Оставите празно за аутентификацију сертификатом</string> @@ -522,6 +524,7 @@ <item quantity="few">%d поруке</item> <item quantity="other">%d порука</item> </plurals> + <string name="load_more_messages">Учитај још порука</string> <string name="shared_file_with_x">Подељен фајл са %s</string> <string name="shared_image_with_x">Подељена слика са %s</string> <string name="no_storage_permission">Конверзацији је потребан приступ спољашњем складишту</string> @@ -546,4 +549,6 @@ <string name="battery_optimizations_enabled_dialog">Ваш уређај користи оптимизацију потрошње батерије за Конверзацију што може да доведе до застоја обавештења или чак губитка порука.\n\nСада ћете бити упитани да то искључите.</string> <string name="disable">Искључи</string> <string name="selection_too_large">Назначена површина је превелика</string> + <string name="no_accounts">(Нема активираних налога)</string> + <string name="this_field_is_required">Ово поље је захтевано</string> </resources> diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml index 837b193a..4cae93c2 100644 --- a/src/main/res/values-sv/strings.xml +++ b/src/main/res/values-sv/strings.xml @@ -102,7 +102,7 @@ <string name="pref_xmpp_resource_summary">Namnet klienten identifierar sig med</string> <string name="pref_accept_files">Acceptera filer</string> <string name="pref_accept_files_summary">Acceptera automatiskt filer som är mindre än…</string> - <string name="pref_notification_settings">Notifieringsinställningar</string> + <string name="pref_notification_settings">Notifiering</string> <string name="pref_notifications">Notifieringar</string> <string name="pref_notifications_summary">Notifiera när meddelande tagits emot</string> <string name="pref_vibrate">Vibrera</string> @@ -111,12 +111,12 @@ <string name="pref_sound_summary">Spela ljud med notifiering</string> <string name="pref_notification_grace_period">Notifieringsfrist</string> <string name="pref_notification_grace_period_summary">Inaktivera notifieringar en kort stund efter att en carbon copy tagits emot</string> - <string name="pref_advanced_options">Avancerade inställningar</string> + <string name="pref_advanced_options">Avancerat</string> <string name="pref_never_send_crash">Skicka aldrig krasch-rapporter</string> <string name="pref_never_send_crash_summary">Genom att skicka in stack traces hjälper du utvecklarna av Conversations</string> <string name="pref_confirm_messages">Bekräfta meddelanden</string> <string name="pref_confirm_messages_summary">Låter dina kontakter veta när du har tagit emot och läst ett meddelande</string> - <string name="pref_ui_options">UI-inställningar</string> + <string name="pref_ui_options">Gränssnitt</string> <string name="openpgp_error">OpenKeychain rapporterade ett fel</string> <string name="error_decrypting_file">I/O-fel vid avkryptering av fil</string> <string name="accept">Acceptera</string> @@ -191,6 +191,7 @@ <string name="server_info_stream_management">XEP-0198: Stream Management</string> <string name="server_info_pep">XEP-0163: PEP (Avatarbilder / OMEMO)</string> <string name="server_info_http_upload">XEP-0363: Ladda upp via HTTP</string> + <string name="server_info_push">XEP-0357: Push</string> <string name="server_info_available">tillgänglig</string> <string name="server_info_unavailable">otillgänglig</string> <string name="missing_public_keys">Annonsering om publik nyckel saknas</string> @@ -240,6 +241,7 @@ <string name="you">Du</string> <string name="action_edit_subject">Ändra konferensämne</string> <string name="conference_not_found">Konferens hittades inte</string> + <string name="conference_unknown_error">Mottog okänt fel</string> <string name="leave">Lämna</string> <string name="contact_added_you">Kontakten lade till dig i sin kontaktlista</string> <string name="add_back">Addera tillbaka</string> @@ -274,9 +276,11 @@ <string name="sure_delete_fingerprint">Är du säker på att du vill ta bort detta fingeravtryck?</string> <string name="ignore">Ignorera</string> <string name="without_mutual_presence_updates"><b>Varning:</b> Skicka detta utan gemensamma tillgänglighetsuppdateringar kan ge oväntade problem.\n\n<small>Gå till kontaktdetaljer för att verifiera dina tillgänglighetsuppdateringar.</small></string> - <string name="pref_encryption_settings">Krypteringsinställningar</string> + <string name="pref_security_settings">Säkerhet</string> <string name="pref_force_encryption">Tvinga kryptering</string> <string name="pref_force_encryption_summary">Sänd alltid krypterade meddelanden (utom för konferenser)</string> + <string name="pref_allow_message_correction">Tillåt korrigeringar av meddelanden</string> + <string name="pref_allow_message_correction_summary">Tillåt att dina kontakter kan ändra sina meddelanden i efterhand</string> <string name="pref_dont_save_encrypted">Spara inte krypterade meddelanden</string> <string name="pref_dont_save_encrypted_summary">Varning: Detta kan leda till att meddelanden förloras</string> <string name="pref_expert_options">Expertinställningar</string> @@ -297,6 +301,8 @@ <string name="pref_expert_options_other">Annat</string> <string name="pref_conference_name">Konferensnamn</string> <string name="pref_conference_name_summary">Använd konferensens ämne istället för JID för att identifiera konferenser</string> + <string name="pref_autojoin">Anslut till konferenser automatiskt</string> + <string name="pref_autojoin_summary">Respektera flaggan för automatisk anslutning till konferenser i bokmärkena</string> <string name="toast_message_otr_fingerprint">OTR-fingeravtryck har kopierats till urklipp!</string> <string name="toast_message_omemo_fingerprint">OMEMO-fingeravtryck har kopierats till urklipp!</string> <string name="conference_banned">Du är bannlyst från denna konferens</string> @@ -427,7 +433,7 @@ <string name="two_hours">2 timmar</string> <string name="eight_hours">8 timmar</string> <string name="until_further_notice">Tills vidare</string> - <string name="pref_input_options">Inmatningsalternativ</string> + <string name="pref_input_options">Input</string> <string name="pref_enter_is_send">Skicka med enter</string> <string name="pref_enter_is_send_summary">Använd enter-knappen för att skicka meddelande</string> <string name="pref_display_enter_key">Visa enter-knappen</string> @@ -489,14 +495,21 @@ <string name="download_failed_could_not_connect">Nerladdningen gick fel: Kunder inte ansluta till server</string> <string name="account_status_tor_unavailable">Tor-nätverk ej tillgängligt</string> <string name="server_info_broken">Sönder</string> - <string name="pref_presence_settings">Tillgänglighetsinställningar</string> + <string name="pref_presence_settings">Tillgänglighet</string> <string name="pref_away_when_screen_off">Status borta när skärmen är av</string> <string name="pref_away_when_screen_off_summary">Sätter din tillgänglighet till borta när skrämen är av</string> <string name="pref_xa_on_silent_mode">Status ej tillgänglig i tyst läge</string> <string name="pref_xa_on_silent_mode_summary">Sätter din tillgänglighet till ej tillgänglig när enheten är i tyst läge</string> + <string name="pref_show_connection_options">Utökade anslutningsinställningar</string> + <string name="pref_show_connection_options_summary">Visa val av servernamn och port vid inställning av konto</string> + <string name="hostname_example">xmpp.example.com</string> <string name="action_add_account_with_certificate">Lägg till konto med certifikat</string> <string name="unable_to_parse_certificate">Kan inte läsa certifikat</string> <string name="authenticate_with_certificate">Lämna tom för att för att logga in med certifikat</string> + <string name="mam_prefs">Arkiveringsinställningar</string> + <string name="server_side_mam_prefs">Arkiveringsinställningar på servern</string> + <string name="fetching_mam_prefs">Hämtar arkiveringsinställningar, vänta...</string> + <string name="unable_to_fetch_mam_prefs">Kan ej hämta arkiveringsinställningar</string> <string name="captcha_ocr">CAPTCHA-text</string> <string name="captcha_required">CAPTCHA krävs</string> <string name="captcha_hint">skriv in texten från bilden</string> @@ -506,7 +519,7 @@ <string name="error_fetching_omemo_key">Misslyckades med att hämta OMEMO-nyckel!</string> <string name="verified_omemo_key_with_certificate">Verifierade OMEMO-nyckel med certifikat!</string> <string name="device_does_not_support_certificates">Din enhet stödjer inte val av klientcertifikat!</string> - <string name="pref_connection_options">Anslutningsalternativ</string> + <string name="pref_connection_options">Anslutning</string> <string name="pref_use_tor">Ansluten via Tor</string> <string name="pref_use_tor_summary">Tunnla alla anslutningar genom Tor-nätverket. Kräver Orbot</string> <string name="account_settings_hostname">Servernamn</string> @@ -519,6 +532,7 @@ <item quantity="one">%d meddelande</item> <item quantity="other">%d meddelanden</item> </plurals> + <string name="load_more_messages">Ladda fler meddelanden</string> <string name="shared_file_with_x">Delade fil med %s</string> <string name="shared_image_with_x">Delade bild med %s</string> <string name="no_storage_permission">Conversations behöver access till extern lagring</string> @@ -529,7 +543,7 @@ <string name="certificate_issuer">Utfärdare</string> <string name="certificate_cn">Common Name</string> <string name="certificate_o">Organisation</string> - <string name="certificate_sha1">SHA1</string> + <string name="certificate_sha1">SHA-1</string> <string name="certicate_info_not_available">(Ej tillgänglig)</string> <string name="certificate_not_found">Inget certifikat funnet</string> <string name="notify_on_all_messages">Notifiera för alla meddelanden</string> @@ -543,4 +557,8 @@ <string name="battery_optimizations_enabled_dialog">Din enhet har kraftiga batterioptimeringar som påverkar Conversations på så sätt att inkommande meddelanden kan försenas eller kan till och med gå förlorade.\nDu kommer nu att bli ombedd att stänga av batterioptimeringarna för Conversations.</string> <string name="disable">Deaktivera</string> <string name="selection_too_large">The valda området är för stort</string> + <string name="no_accounts">(Inget konto aktiverat)</string> + <string name="this_field_is_required">Detta fält måste fyllas i</string> + <string name="correct_message">Korrigera meddelanden</string> + <string name="send_corrected_message">Skicka korrigerat meddelande</string> </resources> diff --git a/src/main/res/values-tr-rTR/strings.xml b/src/main/res/values-tr-rTR/strings.xml index ba38cde5..87891fa1 100644 --- a/src/main/res/values-tr-rTR/strings.xml +++ b/src/main/res/values-tr-rTR/strings.xml @@ -102,7 +102,7 @@ <string name="pref_xmpp_resource_summary">İstemci kimliği</string> <string name="pref_accept_files">Dosyaları kabul et</string> <string name="pref_accept_files_summary">…‘den küçük olan dosyaları otomatik olarak kabul et</string> - <string name="pref_notification_settings">Bildirim Ayarları</string> + <string name="pref_notification_settings">Bildirim</string> <string name="pref_notifications">Bildirimler</string> <string name="pref_notifications_summary">Yeni ileti geldiğinde bildir</string> <string name="pref_vibrate">Titreşim</string> @@ -111,12 +111,12 @@ <string name="pref_sound_summary">Bildirimle birlikte zil çalsın</string> <string name="pref_notification_grace_period">Bildirim mühleti</string> <string name="pref_notification_grace_period_summary">Karbon kopya alındıktan sonra kısa bir süre için bildirimleri kapa</string> - <string name="pref_advanced_options">İleri Seçenekler</string> + <string name="pref_advanced_options">Gelişmiş</string> <string name="pref_never_send_crash">Asla çöküş raporu gönderme</string> <string name="pref_never_send_crash_summary">Çöküş raporu göndermeniz Conversations\n’ın geliştirilmesine katkıda bulunacaktır.</string> <string name="pref_confirm_messages">İletileri onayla</string> <string name="pref_confirm_messages_summary">Karşı tarafa ileti alındı ve okundu raporu gönder.</string> - <string name="pref_ui_options">Arabirim Seçenekleri</string> + <string name="pref_ui_options">Arabirim</string> <string name="openpgp_error">OpenKeychain bir hata bildirdi</string> <string name="error_decrypting_file">Dosyanın deşifresinde G/Ç hatası</string> <string name="accept">Kabul et</string> @@ -191,6 +191,7 @@ <string name="server_info_stream_management">XEP-0198: Stream Management</string> <string name="server_info_pep">XEP-0163: PEP (Avatars / OMEMO)</string> <string name="server_info_http_upload">XEP-0363: HTTP File Upload</string> + <string name="server_info_push">XEP-0357: Push</string> <string name="server_info_available">mevcut</string> <string name="server_info_unavailable">mevcut değil</string> <string name="missing_public_keys">Kayıp genel anahtar bildirimleri</string> @@ -240,6 +241,7 @@ <string name="you">Siz</string> <string name="action_edit_subject">Grup sohbet konusunu düzenle</string> <string name="conference_not_found">Grup sohbet bulunamadı</string> + <string name="conference_unknown_error">Bilinmeyen hata alındı</string> <string name="leave">Ayrıl</string> <string name="contact_added_you">Kişi sizi listesine ekledi</string> <string name="add_back">Siz de ekleyin</string> @@ -274,9 +276,11 @@ <string name="sure_delete_fingerprint">Bu parmak izini silmek istediğinizden emin misiniz?</string> <string name="ignore">Yok say</string> <string name="without_mutual_presence_updates"><b>Uyarı:</b> Karşılıklı çevrimiçi durum bildirimi güncellemeleri olmaksızın bunu göndermeniz beklenmedik sorunlara sebep olabilir.\n\n\n\n<small>Çevrimiçi durum bildirimi aboneliklerinizi kontrol etmek için kişi bilgilerine gidin.</small></string> - <string name="pref_encryption_settings">Şifreleme ayarları</string> + <string name="pref_security_settings">Güvenlik</string> <string name="pref_force_encryption">Uçtan uca şifrelemeye zorla</string> <string name="pref_force_encryption_summary">Her zaman şifrelenmiş ileti gönder (Conversations hariç)</string> + <string name="pref_allow_message_correction">İleti düzeltmeye izin ver</string> + <string name="pref_allow_message_correction_summary">Kişilerinizin geçmiş iletilerini düzeltmelerine izin ver</string> <string name="pref_dont_save_encrypted">Şifrelenmiş iletileri kaydetme</string> <string name="pref_dont_save_encrypted_summary">Uyarı: Bu, iletilerin kaybedilmesine neden olabilir</string> <string name="pref_expert_options">Uzman seçenekleri</string> @@ -297,6 +301,8 @@ <string name="pref_expert_options_other">Diğer</string> <string name="pref_conference_name">Grup sohbet ismi</string> <string name="pref_conference_name_summary">Grup sohbetleri tanımlamak için JID yerine odanın konusunu kullan</string> + <string name="pref_autojoin">Grup sohbet\'e otomatik olarak katıl</string> + <string name="pref_autojoin_summary">Grup sohbet yer imlerinde otomatik katıl bayrağına riayet et</string> <string name="toast_message_otr_fingerprint">OTR parmak izi panoya kopyalandı!</string> <string name="toast_message_omemo_fingerprint">OMEMO parmak izi panoya kopyalandı!</string> <string name="conference_banned">Grup sohbetinden atıldınız</string> @@ -427,7 +433,7 @@ <string name="two_hours">2 saat</string> <string name="eight_hours">8 saat</string> <string name="until_further_notice">İkinci bildirime kadar</string> - <string name="pref_input_options">Girdi seçenekleri</string> + <string name="pref_input_options">Girdi</string> <string name="pref_enter_is_send">Enter=gönder</string> <string name="pref_enter_is_send_summary">İleti göndermek için \"enter\" tuşunu kullanın</string> <string name="pref_display_enter_key">\"Enter\" tuşunu göster</string> @@ -487,14 +493,21 @@ <string name="download_failed_could_not_connect">İndirme başarısız: Sunucuya bağlanılamadı</string> <string name="account_status_tor_unavailable">Tor ağına erişilemiyor</string> <string name="server_info_broken">Bozuk</string> - <string name="pref_presence_settings">Çevrimiçi durum bildirim ayarları</string> + <string name="pref_presence_settings">Durum</string> <string name="pref_away_when_screen_off">Ekran kapandığında uzakta</string> <string name="pref_away_when_screen_off_summary">Ekran kapandığında çevrimiçi durum bildiriminizi uzakta olarak değiştirir</string> <string name="pref_xa_on_silent_mode">Sessiz moddayken erişilemez</string> <string name="pref_xa_on_silent_mode_summary">Telefonunuz sessizdeyken, durum bildiriminizi müsait değil olarak değiştirir</string> + <string name="pref_show_connection_options">Genişletilmiş bağlantı seçenekleri</string> + <string name="pref_show_connection_options_summary">Hesap oluştururken sunucu adıyla port seçeneğini göster</string> + <string name="hostname_example">xmpp.ornek.com</string> <string name="action_add_account_with_certificate">Sertifikalı hesap ekle</string> <string name="unable_to_parse_certificate">Sertifika çözümlenemedi</string> <string name="authenticate_with_certificate">w/ sertifikasının kimlik denetimi için boş bırak </string> + <string name="mam_prefs">Arşivleme tercihleri</string> + <string name="server_side_mam_prefs">Sunucu tarafı arşivleme tercihleri</string> + <string name="fetching_mam_prefs">Arşivleme tercihleri alınıyor. Lütfen bekleyin...</string> + <string name="unable_to_fetch_mam_prefs">Arşivleme tercihleri alınamadı</string> <string name="captcha_ocr">Captcha metni</string> <string name="captcha_required">Captcha gerekli</string> <string name="captcha_hint">resimdeki metni girin</string> @@ -504,7 +517,7 @@ <string name="error_fetching_omemo_key">OMEMO anahtarı alınırken hata oluştu!</string> <string name="verified_omemo_key_with_certificate">Sertifikalı OMEMO anahtarı onaylandı!</string> <string name="device_does_not_support_certificates">Cihazınız seçilen istemci sertifikalarını desteklemiyor!</string> - <string name="pref_connection_options">Bağlantı seçenekleri</string> + <string name="pref_connection_options">Bağlantı</string> <string name="pref_use_tor">Tor üzerinden bağlan</string> <string name="pref_use_tor_summary">Bütün bağlantıları Tor ağı üzerinden aktar. Orbot gerekir.</string> <string name="account_settings_hostname">Sunucu adı</string> @@ -516,6 +529,7 @@ <plurals name="x_messages"> <item quantity="other">%d ileti</item> </plurals> + <string name="load_more_messages">Daha fazla ileti yükle</string> <string name="shared_file_with_x">%s ile paylaşılan dosyalar</string> <string name="shared_image_with_x">%s ile paylaşılan resim</string> <string name="no_storage_permission">Conversations’ın harici depolama alanına erişmesi gerek </string> @@ -526,7 +540,7 @@ <string name="certificate_issuer">Veren</string> <string name="certificate_cn">Ortak ad</string> <string name="certificate_o">Organizasyon</string> - <string name="certificate_sha1">SHA1</string> + <string name="certificate_sha1">SHA-1</string> <string name="certicate_info_not_available">(mevcut değil)</string> <string name="certificate_not_found">Sertifika bulunamadı</string> <string name="notify_on_all_messages">Tüm iletilerde uyar</string> @@ -540,4 +554,8 @@ <string name="battery_optimizations_enabled_dialog">Cihazınız Conversations üzerinde yoğun pil optimizasyonu yaptığı için bildirimlerde gecikmeler olabilir hatta bazı ileti kayıpları yaşanabilir.\n Şimdi bunları devre dışı bırakmanız istenecek.</string> <string name="disable">Devre dışı</string> <string name="selection_too_large">Seçilen alan çok büyük</string> + <string name="no_accounts">(Aktif hesap bulunmuyor)</string> + <string name="this_field_is_required">Bu alan zorunludur</string> + <string name="correct_message">ileti düzelt</string> + <string name="send_corrected_message">Düzeltilmiş iletiyi gönder</string> </resources> diff --git a/src/main/res/values-vi/strings.xml b/src/main/res/values-vi/strings.xml index c757504a..2d7511d6 100644 --- a/src/main/res/values-vi/strings.xml +++ b/src/main/res/values-vi/strings.xml @@ -1,2 +1,537 @@ <?xml version='1.0' encoding='UTF-8'?> -<resources/> +<resources> + <string name="action_settings">Cài đặt</string> + <string name="action_add">Hội thoại mới</string> + <string name="action_accounts">Quản lý tài khoản</string> + <string name="action_end_conversation">Kết thúc hội thoại</string> + <string name="action_contact_details">Thông tin liên hệ</string> + <string name="action_muc_details">Chi tiết diễn đàn</string> + <string name="action_secure">Bảo mật hội thoại</string> + <string name="action_add_account">Thêm tài khoản</string> + <string name="action_edit_contact">Chỉnh sửa tên</string> + <string name="action_add_phone_book">Thêm vào danh bạ</string> + <string name="action_delete_contact">Xoá khỏi danh sách bạn bè</string> + <string name="action_block_contact">Chặn liên hệ</string> + <string name="action_unblock_contact">Bỏ chặn liên hệ</string> + <string name="action_block_domain">Chặn miền</string> + <string name="action_unblock_domain">Bỏ chặn miền</string> + <string name="title_activity_manage_accounts">Quản lý tài khoản</string> + <string name="title_activity_settings">Cài đặt</string> + <string name="title_activity_conference_details">Chi tiết diễn đàn</string> + <string name="title_activity_contact_details">Chi tiết liên hệ</string> + <string name="title_activity_sharewith">Chia sẻ qua Conversation</string> + <string name="title_activity_start_conversation">Khởi chạy Conversation</string> + <string name="title_activity_choose_contact">Chọn liên hệ</string> + <string name="title_activity_block_list">Danh sách chặn</string> + <string name="just_now">mới đây</string> + <string name="minute_ago">1 phút trước</string> + <string name="minutes_ago">%d phút trước</string> + <string name="unread_conversations">Các hội thoại chưa đọc</string> + <string name="sending">đang gửi...</string> + <string name="message_decrypting">Đang giải mã tin nhắn. Xin chờ...</string> + <string name="pgp_message">Tin nhắn mã hoá bằng OpenPGP</string> + <string name="nick_in_use">Biệt danh đã được sử dụng</string> + <string name="admin">Quản trị viên</string> + <string name="owner">Chủ nhân</string> + <string name="moderator">Điều phối viên</string> + <string name="participant">Thành viên</string> + <string name="visitor">Khách</string> + <string name="remove_contact_text">Bạn có muốn xoá %s khỏi danh sách bạn bè? Hội thoại gắn với liên hệ này sẽ không bị xoá.</string> + <string name="block_contact_text">Bạn có muốn chặn %s gửi tin nhắn cho bạn?</string> + <string name="unblock_contact_text">Bạn có muốn bỏ chặn %s và cho phép họ gửi tin nhắn cho bạn?</string> + <string name="block_domain_text">Chặn tất cả liên hệ từ %s?</string> + <string name="unblock_domain_text">Bỏ chặn tất cả liên hệ từ %s?</string> + <string name="contact_blocked">Đã chặn liên hệ</string> + <string name="remove_bookmark_text">Bạn có muốn xoá đánh dấu %s? Hội thoại gắn với đánh dấu này sẽ không bị xoá.</string> + <string name="register_account">Đăng ký tài khoản mới trên máy chủ</string> + <string name="change_password_on_server">Đổi mật k trên máy chủ</string> + <string name="share_with">Chia sẻ với...</string> + <string name="start_conversation">Khởi chạy Conversation</string> + <string name="invite_contact">Mời liên hệ</string> + <string name="contacts">Danh bạ</string> + <string name="cancel">Huỷ</string> + <string name="set">Đặt</string> + <string name="add">Thêm</string> + <string name="edit">Chỉnh sửa</string> + <string name="delete">Xoá</string> + <string name="block">Chặn</string> + <string name="unblock">Bỏ chặn</string> + <string name="save">Lưu</string> + <string name="ok">OK</string> + <string name="crash_report_title">Conversations đã đột ngột dừng</string> + <string name="crash_report_message">Bằng việc gửi báo cáo hoạt động, bạn đang hỗ trợ nhóm phát triển của Conversations\n<b>Cảnh báo:</b> Thao tác này sẽ sử dụng tài khoản XMPP của bạn để gửi báo cáo hoạt động đến nhà phát triển.</string> + <string name="send_now">Gửi ngay</string> + <string name="send_never">Đừng hỏi lại nữa</string> + <string name="problem_connecting_to_account">Không thể kết nối đến tài khoản</string> + <string name="problem_connecting_to_accounts">Không thể kết nối đến nhiều tài khoản</string> + <string name="touch_to_fix">Chạm vào đây để quản lý các tài khoản</string> + <string name="attach_file">Đính kèm tập tin</string> + <string name="not_in_roster">Liên hệ này không có trong danh sách bạn bè. Bạn có muốn thêm nó vào?</string> + <string name="add_contact">Thêm liên hệ</string> + <string name="send_failed">thất bại khi chuyển</string> + <string name="send_rejected">bị từ chối</string> + <string name="preparing_image">Đang chuẩn bị hình để chuyển</string> + <string name="action_clear_history">Xoá lịch sử</string> + <string name="clear_conversation_history">Xoá lịch sử hội thoại</string> + <string name="clear_histor_msg">Bạn có muốn xoá toàn bộ tin nhắn trong hội thoại này?\n\n<b>Cảnh báo:</b> Thao tác này sẽ không ảnh hưởng đến tin nhắn đã lưu trên các thiết bị hoặc máy chủ khác.</string> + <string name="delete_messages">Xoá tin nhắn</string> + <string name="also_end_conversation">Dừng hội thoại này sau đó</string> + <string name="choose_presence">Chọn sự hiện diện đối với liên hệ</string> + <string name="send_unencrypted_message">Gửi tin nhắn không mã hoá</string> + <string name="send_otr_message">Gửi tin nhắn mã hoá OTR</string> + <string name="send_omemo_message">Gửi tin nhắn mã hoá OMEMO</string> + <string name="send_omemo_x509_message">Gửi tin nhắn mã hoá v\\OMEMO</string> + <string name="send_pgp_message">Gửi tin nhắn mã hoá OpenPGP</string> + <string name="your_nick_has_been_changed">Biệt danh của bạn đã được đổi</string> + <string name="send_unencrypted">Gửi dạng không mã hoá</string> + <string name="decryption_failed">Giải mã thất bại. Có lẽ bạn không có đúng khoá cá nhân.</string> + <string name="openkeychain_required">OpenKeychain</string> + <string name="openkeychain_required_long">Conversations dùng ứng dụng bên thứ ba gọi là <b>OpenKeychain</b> để mã hoá và giải mã tin nhắn đồng thời quản lý khoá công cộng của bạn.\n\nOpenKeychain được cấp giấy phép GPLv3 và có thể tải về từ F-Droid cũng như Google Play.\n\n<small>(Xin khởi chạy lại Conversations sau đó.)</small></string> + <string name="restart">Khởi chạy lại</string> + <string name="install">Cài đặt</string> + <string name="openkeychain_not_installed">Xin cài đặt OpenKeychain</string> + <string name="offering">đang đề xuất...</string> + <string name="waiting">đang chờ...</string> + <string name="no_pgp_key">Không tìm thấy khoá OpenPGP</string> + <string name="contact_has_no_pgp_key">Conversations không thể mã hoá tin nhắn vì liên hệ của bạn không thông báo khoá công cộng của anh/chị ấy.\n\n<small>Hãy yêu cầu liên hệ đó cài đặt OpenPGP.</small></string> + <string name="no_pgp_keys">Không tìm thấy các khoá OpenPGP</string> + <string name="contacts_have_no_pgp_keys">Conversations không thể mã hoá tin nhắn vì các liên hệ của bạn không thông báo khoá công cộng của họ.\n\n<small>Hãy yêu cầu họ cài đặt OpenPGP.</small></string> + <string name="encrypted_message_received"><i>Đã nhận tin nhắn được mã hoá. Chạm để giải mã.</i></string> + <string name="pref_general">Tổng quan</string> + <string name="pref_xmpp_resource">Ứng dụng XMPP</string> + <string name="pref_xmpp_resource_summary">Tên của máy trạm này được tự đặt là</string> + <string name="pref_accept_files">Chấp thuận các tập tin</string> + <string name="pref_accept_files_summary">Tự động chấp thuận các tập tin nhỏ hơn...</string> + <string name="pref_notifications">Thông báo</string> + <string name="pref_notifications_summary">Thông báo khi có tin nhắn mới</string> + <string name="pref_vibrate">Rung</string> + <string name="pref_vibrate_summary">Rung khi có tin nhắn mới</string> + <string name="pref_sound">Âm báo</string> + <string name="pref_sound_summary">Chơi nhạc chuông cùng với thông báo</string> + <string name="pref_notification_grace_period">Thời gian gia hạn thông báo</string> + <string name="pref_notification_grace_period_summary">Tắt thông báo trong một thời gian ngắn sau khi nhận được bản sao giấy than</string> + <string name="pref_never_send_crash">Không bao giờ gửi báo cáo dừng chạy</string> + <string name="pref_never_send_crash_summary">Bằng việc gửi báo cáo hoạt động, bạn đang hỗ trợ nhóm phát triển của Conversations</string> + <string name="pref_confirm_messages">Xác nhận tin nhắn</string> + <string name="pref_confirm_messages_summary">Báo cho liên hệ của bạn biết khi bạn đã nhận và đọc tin nhắn</string> + <string name="openpgp_error">OpenKeychain đã báo cáo một lỗi</string> + <string name="error_decrypting_file">Tập tin giải mã lỗi I/O</string> + <string name="accept">Chấp thuận</string> + <string name="error">Đã có lỗi xảy ra</string> + <string name="pref_grant_presence_updates">Trao quyền cập nhật hiện diện</string> + <string name="pref_grant_presence_updates_summary">Ưu tiên trao quyền và hỏi đăng ký hiện diện cho các liên hệ bạn đã tạo</string> + <string name="subscriptions">Đăng ký</string> + <string name="your_account">Tài khoản của bạn</string> + <string name="keys">Các khoá</string> + <string name="send_presence_updates">Gửi cập nhật hiện diện</string> + <string name="receive_presence_updates">Nhận cập nhật hiện diện</string> + <string name="ask_for_presence_updates">Hỏi cập nhật hiện diện</string> + <string name="attach_choose_picture">Chọn hình</string> + <string name="attach_take_picture">Chụp hình</string> + <string name="preemptively_grant">Ưu tiên trao quyền yêu cầu đăng ký</string> + <string name="error_not_an_image_file">Tập tin bạn chọn không phải là hình ảnh</string> + <string name="error_compressing_image">Lỗi khi chuyển đổi tập tin hình ảnh</string> + <string name="error_file_not_found">Không tìm thấy tập tin</string> + <string name="error_io_exception">Lỗi I/O tổng quát. Có lẽ đã hết dung lượng lưu trữ?</string> + <string name="error_security_exception_during_image_copy">Ứng dụng mà bạn dùng để chọn hình này không cung cấp đủ quyền truy cập để đọc tập tin.\n\n<small>Hãy sử dụng trình quản lý tập tin khác để chọn hình</small></string> + <string name="account_status_unknown">Không rõ</string> + <string name="account_status_disabled">Tạm thời tắt</string> + <string name="account_status_online">Trực tuyến</string> + <string name="account_status_connecting">Đang kết nối\u2026</string> + <string name="account_status_offline">Ngoại tuyến</string> + <string name="account_status_unauthorized">Chưa xác minh</string> + <string name="account_status_not_found">Không tìm thấy máy chủ</string> + <string name="account_status_no_internet">Không có kết nối mạng</string> + <string name="account_status_regis_fail">Đăng ký thất bại</string> + <string name="account_status_regis_conflict">Tên người dùng đã được sử dụng</string> + <string name="account_status_regis_success">Đăng ký hoàn tất</string> + <string name="account_status_regis_not_sup">Máy chủ không hỗ trợ việc đăng ký</string> + <string name="account_status_security_error">Lỗi bảo mật</string> + <string name="account_status_incompatible_server">Máy chủ không tương thích</string> + <string name="encryption_choice_unencrypted">Không mã hoá</string> + <string name="encryption_choice_otr">OTR</string> + <string name="encryption_choice_pgp">OpenPGP</string> + <string name="encryption_choice_omemo">OMEMO</string> + <string name="mgmt_account_edit">Chỉnh sửa tài khoản</string> + <string name="mgmt_account_delete">Xoá tài khoản</string> + <string name="mgmt_account_disable">Tạm thời tắt</string> + <string name="mgmt_account_publish_avatar">Đăng ảnh đại diện</string> + <string name="mgmt_account_publish_pgp">Đăng khoá công cộng OpenPGP</string> + <string name="mgmt_account_enable">Bật tài khoản</string> + <string name="mgmt_account_are_you_sure">Bạn chắc chứ?</string> + <string name="mgmt_account_delete_confirm_text">Nếu xoá tài khoản, toàn bộ lịch sử hội thoại của bạn sẽ bị mất</string> + <string name="attach_record_voice">Ghi âm</string> + <string name="account_settings_jabber_id">ID Jabber</string> + <string name="account_settings_password">Mật khẩu</string> + <string name="account_settings_example_jabber_id">username@example.com</string> + <string name="account_settings_confirm_password">Xác nhận mật khẩu</string> + <string name="password">Mật khẩu</string> + <string name="confirm_password">Xác nhận mật khẩu</string> + <string name="passwords_do_not_match">Mật khẩu không trùng khớp</string> + <string name="invalid_jid">ID Jabber này không hợp lệ</string> + <string name="error_out_of_memory">Hết bộ nhớ. Ảnh quá lớn</string> + <string name="add_phone_book_text">Bạn có muốn thêm %s vào danh bạ?</string> + <string name="contact_status_online">trực tuyến</string> + <string name="contact_status_free_to_chat">rảnh để trò chuyện</string> + <string name="contact_status_away">vắng mặt</string> + <string name="contact_status_extended_away">vắng mặt mở rộng</string> + <string name="contact_status_do_not_disturb">đừng làm phiền</string> + <string name="contact_status_offline">ngoại tuyến</string> + <string name="muc_details_conference">Diễn đàn</string> + <string name="muc_details_other_members">Các thành viên khác</string> + <string name="server_info_show_more">Thông tin máy chủ</string> + <string name="server_info_mam">XEP-0313: MAM</string> + <string name="server_info_carbon_messages">XEP-0280: Message Carbons</string> + <string name="server_info_csi">XEP-0352: Biểu thị trạng thái máy trạm</string> + <string name="server_info_blocking">XEP-0191: Blocking Command</string> + <string name="server_info_roster_version">XEP-0237: Phiên bản hoá danh sách bạn bè</string> + <string name="server_info_stream_management">XEP-0198: Stream Management</string> + <string name="server_info_pep">XEP-0163: PEP (Avatars / OMEMO)</string> + <string name="server_info_http_upload">XEP-0363: HTTP File Upload</string> + <string name="server_info_available">sẵn sàng</string> + <string name="server_info_unavailable">không sẵn sàng</string> + <string name="missing_public_keys">Thông báo khoá công cộng bị thất lạc</string> + <string name="last_seen_now">thấy lần cuối vừa đây</string> + <string name="last_seen_min">thấy lần cuối 1 phút trước</string> + <string name="last_seen_mins">thấy lần cuối %d phút trước</string> + <string name="last_seen_hour">thấy lần cuối 1 tiếng trước</string> + <string name="last_seen_hours">thấy lần cuối %d tiếng trước</string> + <string name="last_seen_day">thấy lần cuối 1 ngày trước</string> + <string name="last_seen_days">thấy lần cuối %d ngày trước</string> + <string name="never_seen">chưa từng gặp</string> + <string name="install_openkeychain">Tin nhắn được mã hoá. Xin cài đặt OpenKeychain để giải mã.</string> + <string name="unknown_otr_fingerprint">Dấu vân tay OTR lạ</string> + <string name="openpgp_messages_found">Đã tìm thấy các tin nhắn mã hoá OpenPGP</string> + <string name="reception_failed">Tiếp nhận thất bại</string> + <string name="your_fingerprint">Dấu vân tay của bạn</string> + <string name="otr_fingerprint">Dấu vân tay OTR</string> + <string name="omemo_fingerprint">Dấu vân tay OMEMO</string> + <string name="omemo_fingerprint_x509">Dấu vân tay v\\OMEMO</string> + <string name="omemo_fingerprint_selected_message">Dấu vân tay OMEMO của tin nhắn</string> + <string name="omemo_fingerprint_x509_selected_message">Dấu vân tay v\\OMEMO của tin nhắn</string> + <string name="this_device_omemo_fingerprint">Dấu vân tay OMEMO thiết bị</string> + <string name="other_devices">Các thiết bị khác</string> + <string name="trust_omemo_fingerprints">Tin tưởng các dấu vân tay OMEMO</string> + <string name="fetching_keys">Đang nhận khoá...</string> + <string name="done">Xong</string> + <string name="verify">Xác minh</string> + <string name="decrypt">Giải mã</string> + <string name="conferences">Các diễn đàn</string> + <string name="search">Tìm kiếm</string> + <string name="create_contact">Tạo liên hệ</string> + <string name="enter_contact">Nhập liên hệ</string> + <string name="join_conference">Tham gia diễn đàn</string> + <string name="delete_contact">Xoá liên hệ</string> + <string name="view_contact_details">Xem chi tiết liên hệ</string> + <string name="block_contact">Chặn liên hệ</string> + <string name="unblock_contact">Bỏ chặn liên hệ</string> + <string name="create">Tạo</string> + <string name="select">Chọn</string> + <string name="contact_already_exists">Đã có liên hệ này rồi</string> + <string name="join">Tham gia</string> + <string name="conference_address">Địa chỉ diễn đàn</string> + <string name="conference_address_example">room@conference.example.com</string> + <string name="save_as_bookmark">Lưu thành đánh dấu</string> + <string name="delete_bookmark">Xoá đánh dấu</string> + <string name="bookmark_already_exists">Đã có đánh dấu này rồi</string> + <string name="you">Bạn</string> + <string name="action_edit_subject">Chỉnh sửa tiêu đề diễn đàn</string> + <string name="conference_not_found">Không tìm thấy diễn đàn</string> + <string name="leave">Rời khỏi</string> + <string name="contact_added_you">Liên hệ đã thêm bạn vào danh bạ</string> + <string name="add_back">Thêm họ vào</string> + <string name="contact_has_read_up_to_this_point">%s đã đọc đến điểm này</string> + <string name="publish">Đăng</string> + <string name="touch_to_choose_picture">Chạm ảnh đại diện để chọn hình từ bộ sưu tập</string> + <string name="publish_avatar_explanation">Xin chú ý: Ai đã đăng ký nhận cập nhật hiện diện của bạn sẽ có quyền xem hình này.</string> + <string name="publishing">Đang đăng...</string> + <string name="error_publish_avatar_server_reject">Máy chủ đã từ chối đăng tải của bạn</string> + <string name="error_publish_avatar_converting">Đã xảy ra lỗi khi chuyển đổi hình của bạn</string> + <string name="error_saving_avatar">Không thể lưu ảnh đại diện vào ổ đĩa</string> + <string name="or_long_press_for_default">(Hoặc nhấn giữ để chuyển về mặc định)</string> + <string name="error_publish_avatar_no_server_support">Máy chủ của bạn không hỗ trợ việc đăng tải ảnh đại diện</string> + <string name="private_message">đã thì thầm</string> + <string name="private_message_to">đến %s</string> + <string name="send_private_message_to">Gửi tin nhắn riêng tư đến %s</string> + <string name="connect">Kết nối</string> + <string name="account_already_exists">Đã có tài khoản này rồi</string> + <string name="next">Tiếp theo</string> + <string name="server_info_session_established">Đã thiết lập phiên hiện thời</string> + <string name="additional_information">Thông tin thêm</string> + <string name="skip">Bỏ qua</string> + <string name="disable_notifications">Tắt thông báo</string> + <string name="disable_notifications_for_this_conversation">Tắt thông báo cho hội thoại này</string> + <string name="enable">Bật</string> + <string name="conference_requires_password">Diễn đàn yêu cầu mật khẩu</string> + <string name="enter_password">Nhập mật khẩu</string> + <string name="missing_presence_updates">Đang mất cập nhật hiện diện từ liên hệ</string> + <string name="request_presence_updates">Xin yêu cầu cập nhật hiện diện từ liên hệ của bạn trước.\n\n<small>Nó sẽ được dùng để xác định (các) liên hệ hiện đang sử dụng máy trạm nào.</small></string> + <string name="request_now">Yêu cầu ngay</string> + <string name="delete_fingerprint">Xoá dấu vân tay</string> + <string name="sure_delete_fingerprint">Có chắc là bạn muốn xoá dấu vân tay này?</string> + <string name="ignore">Bỏ qua</string> + <string name="without_mutual_presence_updates"><b>Cảnh báo:</b> Gửi mà không có cập nhật hiện diện của nhau có thể gây ra vấn đề khó lường.\n\n<small>Vào chi tiết liên hệ để xác minh đăng ký hiện diện của bạn.</small></string> + <string name="pref_force_encryption">Bắt buộc mã hoá hai đầu</string> + <string name="pref_force_encryption_summary">Luôn gửi tin nhắn được mã hoá (ngoại trừ trong diễn đàn)</string> + <string name="pref_dont_save_encrypted">Đừng lưu tin nhắn được mã hoá</string> + <string name="pref_dont_save_encrypted_summary">Cảnh báo: Có thể làm mất tin nhắn</string> + <string name="pref_expert_options_summary">Xin hãy cẩn trọng với chúng</string> + <string name="title_activity_about">Thông tin về Conversations</string> + <string name="pref_about_conversations_summary">Thông tin bản dựng và giấy phép</string> + <string name="title_pref_quiet_hours">Giờ yên lặng</string> + <string name="title_pref_quiet_hours_start_time">Thời gian bắt đầu</string> + <string name="title_pref_quiet_hours_end_time">Thời gian kết thúc</string> + <string name="title_pref_enable_quiet_hours">Bật giờ yên lặng</string> + <string name="pref_quiet_hours_summary">Thông báo sẽ được tắt trong giờ yên lặng</string> + <string name="pref_use_larger_font">Tăng kích cỡ chữ</string> + <string name="pref_use_larger_font_summary">Dùng cỡ chữ lớn hơn trên toàn ứng dụng</string> + <string name="pref_use_send_button_to_indicate_status">Nút gửi biểu thị trạng thái</string> + <string name="pref_use_indicate_received">Yêu cầu thông báo nhận tin nhắn</string> + <string name="pref_use_indicate_received_summary">Các tin nhắn đã nhận sẽ được đánh dấu kiểm màu xanh lá nếu được hỗ trợ</string> + <string name="pref_use_send_button_to_indicate_status_summary">Tô màu nút gửi để biểu thị trạng thái của liên hệ</string> + <string name="pref_expert_options_other">Khác</string> + <string name="pref_conference_name">Tên diễn đàn</string> + <string name="pref_conference_name_summary">Dùng tiêu đề của phòng thay cho JID để định danh diễn đàn</string> + <string name="toast_message_otr_fingerprint">Đã chép dấu vân tay OTR vào clipboard!</string> + <string name="toast_message_omemo_fingerprint">Đã chép dấu vân tay OMEMO vào clipboard!</string> + <string name="conference_banned">Bạn đã bị cấm tham gia diễn đàn này</string> + <string name="conference_members_only">Diễn đàn này chỉ dành cho thành viên</string> + <string name="conference_kicked">Bạn đã bị đuổi khỏi diễn đàn này</string> + <string name="using_account">đang dùng tài khoản %s</string> + <string name="checking_x">Đang kiểm tra %s trên máy chủ HTTTP</string> + <string name="not_connected_try_again">Bạn chưa kết nối mạng. Xin thử lại sau</string> + <string name="check_x_filesize">Kiểm tra kích cỡ %s</string> + <string name="message_options">Tuỳ chọn tin nhắn</string> + <string name="copy_text">Sao chép văn bản</string> + <string name="copy_original_url">Sao chép URL gốc</string> + <string name="send_again">Gửi lại</string> + <string name="file_url">URL tập tin</string> + <string name="message_text">Văn bản tin nhắn</string> + <string name="url_copied_to_clipboard">Đã chép URL vào clipboard</string> + <string name="message_copied_to_clipboard">Đã chép tin nhắn vào clipboard</string> + <string name="image_transmission_failed">Thất bại khi chuyển hình</string> + <string name="scan_qr_code">Quét mã QR</string> + <string name="show_qr_code">Hiện mã QR</string> + <string name="show_block_list">Quét danh sách chặn</string> + <string name="account_details">Chi tiết tài khoản</string> + <string name="verify_otr">Xác minh OTR</string> + <string name="remote_fingerprint">Dấu vân tay từ xa</string> + <string name="scan">quét</string> + <string name="smp">Giao thức Socialist Millionaire</string> + <string name="shared_secret_hint">Gợi ý hoặc Câu hỏi</string> + <string name="shared_secret_secret">Bí mật đã chia sẻ</string> + <string name="confirm">Xác nhận</string> + <string name="in_progress">Đang diễn ra</string> + <string name="respond">Hồi đáp</string> + <string name="failed">Đã thất bại</string> + <string name="secrets_do_not_match">Bí mật không trùng khớp</string> + <string name="try_again">Thử lại</string> + <string name="finish">Kết thúc</string> + <string name="verified">Đã xác minh!</string> + <string name="smp_requested">Liên hệ đã yêu cầu xác minh SMP</string> + <string name="no_otr_session_found">Không tìm thấy phiên OTR hợp lệ nào!</string> + <string name="conversations_foreground_service">Conversations</string> + <string name="pref_keep_foreground_service">Giữ dịch vụ luôn chạy</string> + <string name="pref_keep_foreground_service_summary">Ngăn hệ điều hành ngắt kết nối của bạn</string> + <string name="pref_export_logs">Xuất nhật ký</string> + <string name="pref_export_logs_summary">Chép nhật ký vào thẻ SD</string> + <string name="notification_export_logs_title">Đang chép nhật ký vào thẻ SD</string> + <string name="choose_file">Chọn tập tin</string> + <string name="receiving_x_file">Đang nhận %1$s (đã hoàn tất %2$d%%)</string> + <string name="download_x_file">Tải về %s</string> + <string name="file">tập tin</string> + <string name="open_x_file">Mở %s</string> + <string name="sending_file">đang gửi (đã hoàn tất %1$d%%)</string> + <string name="preparing_file">Đang chuẩn bị tập tin để chuyển</string> + <string name="x_file_offered_for_download">Đã đề xuất tải về %s</string> + <string name="cancel_transmission">Huỷ chuyển tập tin</string> + <string name="file_transmission_failed">chuyển tập tin đã thất bại</string> + <string name="file_deleted">Đã xoá tập tin</string> + <string name="no_application_found_to_open_file">Không tìm thấy ứng dụng nào để mở tập tin</string> + <string name="could_not_verify_fingerprint">Không thể xác minh dấu vân tay</string> + <string name="manually_verify">Xác minh thủ công</string> + <string name="are_you_sure_verify_fingerprint">Có chắc là bạn muốn xác minh dấu vân tay OTR của liên hệ không?</string> + <string name="pref_show_dynamic_tags">Hiện các nhãn động</string> + <string name="pref_show_dynamic_tags_summary">Hiện nhãn chỉ đọc bên dưới các liên hệ</string> + <string name="enable_notifications">Bật thông báo</string> + <string name="conference_with">Tạo diễn đàn với...</string> + <string name="no_conference_server_found">Không tìm thấy máy chủ diễn đàn nào</string> + <string name="conference_creation_failed">Tạo diễn đàn thất bại!</string> + <string name="conference_created">Đã tạo diễn đàn!</string> + <string name="secret_accepted">Đã chấp thuận bí mật!</string> + <string name="reset">Cài lại</string> + <string name="account_image_description">Ảnh đại diện tài khoản</string> + <string name="copy_otr_clipboard_description">Sao chép dấu vân tay OTR vào clipboard</string> + <string name="copy_omemo_clipboard_description">Sao chép dấu vân tay OMEMO vào clipboard</string> + <string name="regenerate_omemo_key">Tạo lại khoá OMEMO</string> + <string name="wipe_omemo_pep">Xoá các thiết bị khác khỏi PEP</string> + <string name="clear_other_devices">Xoá các thiết bị</string> + <string name="clear_other_devices_desc">Có chắc là bạn muốn xoá toàn bộ các thiết bị khác khỏi thông báo OMEMO? Lần sau khi kết nối, các thiết bị sẽ tự thông báo lại nhưng có khả năng chúng sẽ không nhận được tin nhắn đã gửi trong khoảng thời gian đó.</string> + <string name="purge_key">Xoá khoá</string> + <string name="purge_key_desc_part1">Có chắc là bạn muốn xoá khoá này không?</string> + <string name="purge_key_desc_part2">Nó sẽ bị xem là hỏng mãi mãi và bạn sẽ không thể dựng một phiên khác với nó nữa.</string> + <string name="error_no_keys_to_trust_server_error">Không có khoá nào dùng được cho liên hệ này.\nViệc nhận khoá mới từ máy chủ cũng thất bại. Có lẽ là máy chủ dành cho các liên hệ đã gặp sự cố gì đó.</string> + <string name="error_no_keys_to_trust">Không còn khoá nào sẵn có cho liên hệ này. Nếu bạn đã xoá bất kỳ khoá nào, họ phải tạo khoá mới.</string> + <string name="error_trustkeys_title">Lỗi</string> + <string name="fetching_history_from_server">Đang nhận lịch sử từ máy chủ</string> + <string name="no_more_history_on_server">Không còn lịch sử nào trên máy chủ</string> + <string name="updating">Đang cập nhật...</string> + <string name="password_changed">Đã đổi mật khẩu!</string> + <string name="could_not_change_password">Không thể đổi mật khẩu</string> + <string name="otr_session_not_started">Gửi tin nhắn để bắt đầu chat có mã hoá</string> + <string name="ask_question">Đưa câu hỏi</string> + <string name="smp_explain_question">Nếu bạn và liên hệ có một bí mật chung mà không ai khác biết (như là một câu nói đùa hoặc chỉ đơn giản là bữa trưa trong lần gặp gần đây nhất), bạn có thể dùng bí mật đó để xác minh dấu vân tay của nhau.\n\nBạn đưa ra gợi ý hoặc câu hỏi cho liên hệ và họ sẽ phải nhập câu trả lời có tính cả viết hoa viết thường.</string> + <string name="smp_explain_answer">Liên hệ muốn xác minh dấu vân tay của bạn bằng một bí mật đã chia sẻ. Liên hệ đã cung cấp gợi ý hoặc câu hỏi cho bí mật sau đây.</string> + <string name="shared_secret_hint_should_not_be_empty">Không được để trống gợi ý</string> + <string name="shared_secret_can_not_be_empty">Không được để trống bí mật đã chia sẻ</string> + <string name="manual_verification_explanation">So sánh cẩn thận dấu vân tay dưới đây với dấu của liên hệ.\nBạn có thể dùng bất kỳ phương tiện giao tiếp đáng tin cậy nào như email được mã hoá hoặc điện thoại để trao đổi vân tay.</string> + <string name="change_password">Đổi mật khẩu</string> + <string name="current_password">Mật khẩu hiện tại</string> + <string name="new_password">Mật khẩu mới</string> + <string name="password_should_not_be_empty">Không được để trống mật khẩu</string> + <string name="enable_all_accounts">Bật toàn bộ tài khoản</string> + <string name="disable_all_accounts">Tắt toàn bộ tài khoản</string> + <string name="perform_action_with">Thực hiện thao tác với</string> + <string name="no_affiliation">Không có quan hệ gì</string> + <string name="no_role">Không có phận sự gì</string> + <string name="outcast">Kẻ bị ruồng bỏ</string> + <string name="member">Thành viên</string> + <string name="advanced_mode">Chế độ nâng cao</string> + <string name="grant_membership">Trao quyền thành viên</string> + <string name="remove_membership">Huỷ quyền thành viên</string> + <string name="grant_admin_privileges">Trao quyền quản trị</string> + <string name="remove_admin_privileges">Huỷ quyền quản trị</string> + <string name="remove_from_room">Xoá khỏi diễn đàn</string> + <string name="could_not_change_affiliation">Không thể đổi mối quan hệ của %s</string> + <string name="ban_from_conference">Cấm khỏi diễn đàn</string> + <string name="removing_from_public_conference">Bạn đang cố loại bỏ %s ra khỏi một diễn đàn công cộng. Biện pháp duy nhất là cấm người dùng đó mãi mãi.</string> + <string name="ban_now">Cấm ngay</string> + <string name="could_not_change_role">Không thể đổi phận sự của %s</string> + <string name="public_conference">Diễn đàn công cộng</string> + <string name="private_conference">Diễn đàn riêng, chỉ dành cho thành viên</string> + <string name="conference_options">Tuỳ chọn diễn đàn</string> + <string name="members_only">Riêng, chỉ dành cho thành viên</string> + <string name="non_anonymous">Không ẩn danh</string> + <string name="moderated">Đã điều phối</string> + <string name="you_are_not_participating">Hiện bạn chưa tham gia</string> + <string name="modified_conference_options">Tuỳ chọn diễn đàn đã chỉnh sửa!</string> + <string name="could_not_modify_conference_options">Không thể chỉnh sửa tuỳ chọn diễn đàn</string> + <string name="never">Chưa từng</string> + <string name="thirty_minutes">30 phút</string> + <string name="one_hour">1 tiếng</string> + <string name="two_hours">2 tiếng</string> + <string name="eight_hours">8 tiếng</string> + <string name="until_further_notice">Cho đến thông báo tiếp theo</string> + <string name="pref_enter_is_send">Bấm Enter để gửi</string> + <string name="pref_enter_is_send_summary">Bấm nút Enter để gửi tin nhắn</string> + <string name="pref_display_enter_key">Hiện nút Enter</string> + <string name="pref_display_enter_key_summary">Đổi nút biểu tượng cảm xúc thành nút Enter</string> + <string name="audio">âm thanh</string> + <string name="video">video</string> + <string name="image">hình ảnh</string> + <string name="pdf_document">tài liệu PDF</string> + <string name="apk">Ứng dụng Android</string> + <string name="vcard">Liên hệ</string> + <string name="received_x_file">Đã nhận %s</string> + <string name="disable_foreground_service">Tắt dịch vụ luôn chạy</string> + <string name="touch_to_open_conversations">Chạm để mở Conversations</string> + <string name="avatar_has_been_published">Đã đăng tải ảnh đại diện!</string> + <string name="sending_x_file">Đang gửi %s</string> + <string name="offering_x_file">Đang đề xuất %s</string> + <string name="hide_offline">Ẩn ngoại tuyến</string> + <string name="disable_account">Tắt tài khoản</string> + <string name="contact_is_typing">%s đang gõ...</string> + <string name="contact_has_stopped_typing">%s đã ngừng gõ</string> + <string name="pref_chat_states">Thông báo đang gõ</string> + <string name="pref_chat_states_summary">Báo cho liên hệ biết khi bạn đang viết tin nhắn mới</string> + <string name="send_location">Gửi vị trí</string> + <string name="show_location">Hiện vị trí</string> + <string name="no_application_found_to_display_location">Không thấy ứng dụng nào có thể hiện vị trí</string> + <string name="location">Vị trí</string> + <string name="received_location">Vị trí đã nhận</string> + <string name="title_undo_swipe_out_conversation">Đã đóng cuộc hội thoại</string> + <string name="title_undo_swipe_out_muc">Đã rời khỏi diễn đàn</string> + <string name="pref_dont_trust_system_cas_title">Đừng tin các CA hệ thống</string> + <string name="pref_dont_trust_system_cas_summary">Tất cả chứng nhận phải được phê duyệt thủ công</string> + <string name="pref_remove_trusted_certificates_title">Xoá các chứng nhận</string> + <string name="pref_remove_trusted_certificates_summary">Xoá thủ công các chứng nhận đã phê duyệt</string> + <string name="toast_no_trusted_certs">Không có chứng nhận được phê duyệt thủ công</string> + <string name="dialog_manage_certs_title">Xoá các chứng nhận</string> + <string name="dialog_manage_certs_positivebutton">Xoá lựa chọn</string> + <string name="dialog_manage_certs_negativebutton">Huỷ</string> + <plurals name="toast_delete_certificates"> + <item quantity="other">Đã xoá %d chứng nhận</item> + </plurals> + <plurals name="select_contact"> + <item quantity="other">Chọn %d liên hệ</item> + </plurals> + <string name="pref_quick_action_summary">Thay nút gửi với thao tác nhanh</string> + <string name="pref_quick_action">Thao tác nhanh</string> + <string name="none">Không có</string> + <string name="recently_used">Dùng gần đây nhất</string> + <string name="choose_quick_action">Chọn thao tác nhanh</string> + <string name="search_for_contacts_or_groups">Tìm các liên hệ và nhóm</string> + <string name="send_private_message">Gửi tin nhắn cá nhân</string> + <string name="user_has_left_conference">%s đã rời khỏi diễn đàn!</string> + <string name="username">Tên người dùng</string> + <string name="username_hint">Tên người dùng</string> + <string name="invalid_username">Đây không phải là tên người dùng hợp lệ</string> + <string name="download_failed_server_not_found">Tải xuống thất bại: Không thấy máy chủ</string> + <string name="download_failed_file_not_found">Tải xuống thất bại: Không thấy tập tin</string> + <string name="download_failed_could_not_connect">Tải xuống thất bại: Không thể kết nối đến máy chủ</string> + <string name="pref_use_white_background">Dùng nền trắng</string> + <string name="pref_use_white_background_summary">Hiện các tin nhắn nhận được dưới dạng chữ đen trên nền trắng</string> + <string name="account_status_tor_unavailable">Mạng Tor chưa sẵn sàng</string> + <string name="server_info_broken">Bị hỏng</string> + <string name="pref_away_when_screen_off">Vắng mặt khi màn hình tắt</string> + <string name="pref_away_when_screen_off_summary">Hiện ứng dụng là \'vắng mặt\' khi màn hình tắt</string> + <string name="pref_xa_on_silent_mode">Không sẵn sàng trong chế độ yên lặng</string> + <string name="pref_xa_on_silent_mode_summary">Hiện ứng dụng là \'không sẵn sàng\' khi thiết bị ở chế độ yên lặng</string> + <string name="action_add_account_with_certificate">Thêm tài khoản với chứng nhận</string> + <string name="unable_to_parse_certificate">Không thể phân tích chứng nhận</string> + <string name="authenticate_with_certificate">Bỏ trống để xác minh với chứng nhận</string> + <string name="captcha_ocr">Các ký tự xác minh</string> + <string name="captcha_required">Yêu cầu hình xác minh</string> + <string name="captcha_hint">nhập văn bản từ hình</string> + <string name="certificate_chain_is_not_trusted">Chuỗi chứng nhận không được tin tưởng</string> + <string name="jid_does_not_match_certificate">ID Jabber không khớp với chứng nhận</string> + <string name="action_renew_certificate">Gia hạn chứng nhận</string> + <string name="error_fetching_omemo_key">Lỗi nhập khoá OMEMO!</string> + <string name="verified_omemo_key_with_certificate">Khoá OMEMO đã xác minh với chứng nhận!</string> + <string name="device_does_not_support_certificates">Thiết bị không hỗ trợ chọn lựa các chứng chỉ của máy trạm!</string> + <string name="pref_use_tor">Kết nối đến Tor</string> + <string name="pref_use_tor_summary">Chuyển toàn bộ kết nối thông qua mạng Tor. Cần có Orbot</string> + <string name="account_settings_hostname">Tên máy chủ</string> + <string name="account_settings_port">Cổng</string> + <string name="hostname_or_onion">Máy chủ- hoặc địa chỉ .onion-</string> + <string name="not_a_valid_port">Đây không phải là số cổng hợp lệ</string> + <string name="not_valid_hostname">Đây không phải là tên máy chủ hợp lệ</string> + <string name="connected_accounts">%1$d trên %2$d tài khoản đã kết nối</string> + <plurals name="x_messages"> + <item quantity="other">%dv tin nhắn</item> + </plurals> + <string name="shared_file_with_x">Chia sẻ tập tin với %s</string> + <string name="shared_image_with_x">Chia sẻ hình với %s</string> + <string name="no_storage_permission">Conversations cần quyền truy cập ổ nhớ ngoài</string> + <string name="sync_with_contacts">Đồng bộ với danh bạ</string> + <string name="sync_with_contacts_long">Conversations muốn so sánh danh sách bạn bè XMPP với danh bạ của bạn để hiện tên đầy đủ và ảnh đại diện của họ.\n\nConversations sẽ chỉ đọc danh bạ và so sánh trên thiết bị chứ không tải lên máy chủ.\n\nBây giờ, bạn sẽ được hỏi trao quyền truy cập danh bạ.</string> + <string name="certificate_information">Thông tin chứng nhận</string> + <string name="certificate_subject">Tiêu đề</string> + <string name="certificate_issuer">Nhà phát hành</string> + <string name="certificate_cn">Tên thường</string> + <string name="certificate_o">Tổ chức</string> + <string name="certicate_info_not_available">(Không sẵn sàng)</string> + <string name="certificate_not_found">Không thấy chứng nhận nào</string> + <string name="notify_on_all_messages">Thông báo tất cả tin nhắn</string> + <string name="notify_only_when_highlighted">Thông báo chỉ khi được làm nổi bật</string> + <string name="notify_never">Đã tắt thông báo</string> + <string name="notify_paused">Đã dừng thông báo</string> + <string name="pref_picture_compression">Nén hình ảnh</string> + <string name="always">Luôn luôn</string> + <string name="automatically">Tự động</string> + <string name="battery_optimizations_enabled">Đã bật tối ưu pin</string> + <string name="battery_optimizations_enabled_explained">Thiết bị đang thực hiện tối ưu hoá pin trên Conversations và nó có thể gây trì hoãn thông báo hay thậm chí làm mất tin nhắn.\nBạn nên tắt chế độ đó đi.</string> + <string name="battery_optimizations_enabled_dialog">Thiết bị đang thực hiện tối ưu hoá pin trên Conversations và nó có thể gây trì hoãn thông báo hay thậm chí làm mất tin nhắn.\n\nBây giờ, bạn sẽ được yêu cầu tắt chế độ đó đi.</string> + <string name="disable">Tắt</string> + <string name="selection_too_large">Khu vực chọn quá lớn</string> +</resources> diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml index fe209a23..9041e756 100644 --- a/src/main/res/values-zh-rCN/strings.xml +++ b/src/main/res/values-zh-rCN/strings.xml @@ -102,7 +102,7 @@ <string name="pref_xmpp_resource_summary">客户端标识名称</string> <string name="pref_accept_files">接收文件</string> <string name="pref_accept_files_summary">自动接收小于 … 的文件</string> - <string name="pref_notification_settings">通知设置</string> + <string name="pref_notification_settings">通知</string> <string name="pref_notifications">通知</string> <string name="pref_notifications_summary">收到新消息时通知</string> <string name="pref_vibrate">震动</string> @@ -111,12 +111,12 @@ <string name="pref_sound_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_advanced_options">高级</string> <string name="pref_never_send_crash">总不发送崩溃报告</string> <string name="pref_never_send_crash_summary">发送堆栈跟踪帮助 Conversations 开发人员</string> <string name="pref_confirm_messages">确认消息</string> <string name="pref_confirm_messages_summary">当你已收到消息并且已阅时通知好友</string> - <string name="pref_ui_options">UI 选项</string> + <string name="pref_ui_options">UI</string> <string name="openpgp_error">OpenKeychain 报告了一个错误</string> <string name="error_decrypting_file">解密文件时出现 I/O 错误</string> <string name="accept">接受</string> @@ -191,6 +191,7 @@ <string name="server_info_stream_management">XEP-0198: 流管理</string> <string name="server_info_pep">XEP-0163: PEP (替身 / OMEMO)</string> <string name="server_info_http_upload">XEP-0363: HTTP 文件上传</string> + <string name="server_info_push">XEP-0357: Push</string> <string name="server_info_available">有效</string> <string name="server_info_unavailable">无效</string> <string name="missing_public_keys">缺少公钥通知</string> @@ -240,6 +241,7 @@ <string name="you">你</string> <string name="action_edit_subject">编辑讨论组主题</string> <string name="conference_not_found">讨论组未找到</string> + <string name="conference_unknown_error">收到未知错误</string> <string name="leave">离开</string> <string name="contact_added_you">联系人已添加你到联系人列表</string> <string name="add_back">反向添加</string> @@ -274,12 +276,14 @@ <string name="sure_delete_fingerprint">是否确定删除该指纹?</string> <string name="ignore">忽略</string> <string name="without_mutual_presence_updates"><b>警告:</b>在没有相互更新在线联系人的情况下发送将会出现未知问题。\n\n<small>前往联系人详情以验证您订阅的在线联系人。</small></string> - <string name="pref_encryption_settings">加密设置</string> + <string name="pref_security_settings">安全</string> <string name="pref_force_encryption">强制要求端对端加密</string> <string name="pref_force_encryption_summary"> 总是发送加密信息(讨论组信息除外)</string> + <string name="pref_allow_message_correction">允许更正消息</string> + <string name="pref_allow_message_correction_summary">允许您的联系人追回编辑他们的信息</string> <string name="pref_dont_save_encrypted">不保存加密信息</string> <string name="pref_dont_save_encrypted_summary">警告:此操作将会导致信息丢失</string> - <string name="pref_expert_options">专家选项</string> + <string name="pref_expert_options">高级设置</string> <string name="pref_expert_options_summary">请谨慎使用</string> <string name="title_activity_about">关于 Conversations</string> <string name="pref_about_conversations_summary">编译及许可证信息</string> @@ -297,6 +301,8 @@ <string name="pref_expert_options_other">其他</string> <string name="pref_conference_name">讨论组名称</string> <string name="pref_conference_name_summary">用讨论组的主题来标示讨论组而不是 JID</string> + <string name="pref_autojoin">自动加入讨论组</string> + <string name="pref_autojoin_summary">将讨论组加入到自动加入书签</string> <string name="toast_message_otr_fingerprint">OTR 指纹已拷贝到剪贴板!</string> <string name="toast_message_omemo_fingerprint">OMEMO 指纹已拷贝到剪贴板!</string> <string name="conference_banned">你被此讨论组屏蔽</string> @@ -427,7 +433,7 @@ <string name="two_hours">2 个小时</string> <string name="eight_hours">8 个小时</string> <string name="until_further_notice">直到新的通知</string> - <string name="pref_input_options">输入选项</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_display_enter_key">显示回车键</string> @@ -487,14 +493,21 @@ <string name="download_failed_could_not_connect">下载失败:无法连接到服务器</string> <string name="account_status_tor_unavailable">Tor network 不可用</string> <string name="server_info_broken">损坏</string> - <string name="pref_presence_settings">上线设置</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_xa_on_silent_mode">静音模式时不可用</string> <string name="pref_xa_on_silent_mode_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">留空以认证 w/ 证书</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_ocr">验证码</string> <string name="captcha_required">需要验证码</string> <string name="captcha_hint">输入图片中的文字</string> @@ -504,7 +517,7 @@ <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_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> @@ -516,6 +529,7 @@ <plurals name="x_messages"> <item quantity="other">%d 条消息</item> </plurals> + <string name="load_more_messages">载入更多消息</string> <string name="shared_file_with_x">用 %s 分享文件</string> <string name="shared_image_with_x">用 %s 分享图片</string> <string name="no_storage_permission">Conversations 需要访问外部存储</string> @@ -526,7 +540,7 @@ <string name="certificate_issuer">发行人</string> <string name="certificate_cn">通用名称</string> <string name="certificate_o">组织</string> - <string name="certificate_sha1">SHA1</string> + <string name="certificate_sha1">SHA-1</string> <string name="certicate_info_not_available">(不可用)</string> <string name="certificate_not_found">未发现证书</string> <string name="notify_on_all_messages">为所有信息显示通知</string> @@ -542,4 +556,8 @@ 你将会被提示禁用该功能。</string> <string name="disable">禁用</string> <string name="selection_too_large">选择区域过大</string> + <string name="no_accounts">(没有激活的账户)</string> + <string name="this_field_is_required">必填</string> + <string name="correct_message">更正消息</string> + <string name="send_corrected_message">发送更正后的消息</string> </resources> diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml index 3a5ce0fe..4d831111 100644 --- a/src/main/res/values-zh-rTW/strings.xml +++ b/src/main/res/values-zh-rTW/strings.xml @@ -76,8 +76,12 @@ <string name="pref_xmpp_resource">XMPP 資源</string> <string name="pref_xmpp_resource_summary">客戶端標示名稱</string> <string name="pref_accept_files">接收文件</string> +<<<<<<< HEAD <string name="pref_accept_files_size_summary">自動接收小於 … 的文件</string> <string name="pref_notification_settings">通知設定</string> +======= + <string name="pref_accept_files_summary">自動接收小於 … 的文件</string> +>>>>>>> 1.10.0 <string name="pref_notifications">通知</string> <string name="pref_notifications_summary">收到新訊息時通知</string> <string name="pref_vibrate">震動</string> @@ -86,12 +90,10 @@ <string name="pref_sound_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">發送「堆疊追蹤」給 Conversations 的開發人員能幫助改進本程式</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="error_decrypting_file">解密文件時出現 I/O 錯誤</string> <string name="accept">接受</string> @@ -224,12 +226,10 @@ <string name="sure_delete_fingerprint">你確定刪除該指紋嗎?</string> <string name="ignore">忽略</string> <string name="without_mutual_presence_updates"><b>警告:</b> 在沒有互相關注狀態訊息的情況下發送或會引起不能預計的問題。\n\n<small>請檢視聯絡人詳情頁面以確認你們的關注狀態。</small></string> - <string name="pref_encryption_settings">加密設定</string> <string name="pref_force_encryption">強制要求端到端加密</string> <string name="pref_force_encryption_summary">總是發送加密訊息 (群組訊息除外)</string> <string name="pref_dont_save_encrypted">不儲存加密訊息</string> <string name="pref_dont_save_encrypted_summary">警告: 此操作或會導致訊息丟失</string> - <string name="pref_expert_options">專家選項</string> <string name="pref_expert_options_summary">請小心設定</string> <string name="pref_use_larger_font">增加字體大小</string> <string name="pref_use_larger_font_summary">讓整個 app 界面使用更大號的字體</string> diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 66fcb264..f1c1b91f 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <resources> - <string name="app_name" translatable="false">Conversations</string> <string name="action_settings">Settings</string> <string name="action_add">New conversation</string> @@ -79,7 +78,7 @@ <string name="delete_messages">Delete messages</string> <string name="also_end_conversation">End this conversation afterwards</string> <string name="choose_presence">Choose presence to contact</string> - <string name="send_unencrypted_message">Send plain text message</string> + <string name="send_unencrypted_message">Send unencrypted message</string> <string name="send_otr_message">Send OTR encrypted message</string> <string name="send_omemo_message">Send OMEMO encrypted message</string> <string name="send_omemo_x509_message">Send v\\OMEMO encrypted message</string> @@ -110,18 +109,16 @@ <string name="pref_accept_files_download_summary">Download and accept files automatically only when using Wi-Fi</string> <string name="pref_accept_files_download_link">Image links</string> <string name="pref_accept_files_download_link_summary">Automatically download image links</string> - <string name="pref_notification_settings">Notification Settings</string> + <string name="pref_notification_settings">Notification</string> <string name="pref_notifications">Notifications</string> <string name="pref_notifications_summary">Notify when a new message arrives</string> <string name="pref_vibrate">Vibrate</string> <string name="pref_vibrate_summary">Also vibrate when a new message arrives</string> <string name="pref_sound">Sound</string> <string name="pref_sound_summary">Play ringtone with notification</string> - <string name="pref_conference_notifications">Conference notifications</string> - <string name="pref_conference_notifications_summary">Always notify when a new conference message arrives instead of only when highlighted</string> <string name="pref_notification_grace_period">Notification grace period</string> <string name="pref_notification_grace_period_summary">Disable notifications for a short time after a carbon copy was received</string> - <string name="pref_advanced_options">Advanced Options</string> + <string name="pref_advanced_options">Advanced</string> <string name="pref_never_send_crash">Never send crash reports</string> <string name="pref_never_send_crash_summary">By sending in stack traces you are helping the ongoing development of Conversations</string> <string name="pref_confirm_messages">Confirm Messages</string> @@ -129,7 +126,7 @@ <string name="pref_confirm_messages_none">No confirmation</string> <string name="pref_confirm_messages_received">Confirmation for received message</string> <string name="pref_confirm_messages_read_and_received">Confirmation for received and read message</string> - <string name="pref_ui_options">UI Options</string> + <string name="pref_ui_options">UI</string> <string name="pref_parse_emoticons">Parse Emoticons</string> <string name="pref_parse_emoticons_summary">Replace emoticons with smilies.</string> <string name="openpgp_error">OpenKeychain reported an error</string> @@ -206,6 +203,7 @@ <string name="server_info_stream_management">XEP-0198: Stream Management</string> <string name="server_info_pep">XEP-0163: PEP (Avatars / OMEMO)</string> <string name="server_info_http_upload">XEP-0363: HTTP File Upload</string> + <string name="server_info_push">XEP-0357: Push</string> <string name="server_info_available">available</string> <string name="server_info_unavailable">unavailable</string> <string name="missing_public_keys">Missing public key announcements</string> @@ -290,12 +288,14 @@ <string name="sure_delete_fingerprint">Are you sure you would like to delete this fingerprint?</string> <string name="ignore">Ignore</string> <string name="without_mutual_presence_updates"><b>Warning:</b> Sending this without mutual presence updates could cause unexpected problems.\n\n<small>Go to contact details to verify your presence subscriptions.</small></string> - <string name="pref_encryption_settings">Encryption settings</string> + <string name="pref_security_settings">Security</string> <string name="pref_force_encryption">Force end-to-end encryption</string> <string name="pref_force_encryption_summary">Always send messages encrypted (except for conferences)</string> + <string name="pref_allow_message_correction">Allow message correction</string> + <string name="pref_allow_message_correction_summary">Allow your contacts to retroactively edit their messages</string> <string name="pref_dont_save_encrypted">Don’t save encrypted messages</string> <string name="pref_dont_save_encrypted_summary">Warning: This could lead to message loss</string> - <string name="pref_expert_options">Expert options</string> + <string name="pref_expert_options">Expert settings</string> <string name="pref_expert_options_summary">Please be careful with these</string> <string name="title_activity_about">About Conversations</string> <string name="pref_about_conversations_summary">Build and licensing information</string> @@ -477,7 +477,7 @@ <string name="two_hours">2 hours</string> <string name="eight_hours">8 hours</string> <string name="until_further_notice">Until further notice</string> - <string name="pref_input_options">Input options</string> + <string name="pref_input_options">Input</string> <string name="pref_enter_is_send">Enter is send</string> <string name="pref_enter_is_send_summary">Use enter key to send message</string> <string name="pref_display_enter_key">Show enter key</string> @@ -588,18 +588,19 @@ <string name="download_failed_could_not_connect">Download failed: Could not connect to host</string> <string name="account_status_tor_unavailable">Tor network unavailable</string> <string name="server_info_broken">Broken</string> - <string name="pref_presence_settings">Presence settings</string> + <string name="pref_presence_settings">Presence</string> <string name="pref_away_when_screen_off">Away when screen is off</string> <string name="pref_away_when_screen_off_summary">Marks your resource as away when the screen is turned off</string> <string name="pref_xa_on_silent_mode">Not available in silent mode</string> <string name="pref_xa_on_silent_mode_summary">Marks your resource as not available when device is in silent mode</string> - <string name="pref_show_connection_options">Extended connection options</string> - <string name="pref_show_connection_options_summary">Show hostname and port options when setting up an account</string> + <string name="pref_show_connection_options">Extended connection settings</string> + <string name="pref_show_connection_options_summary">Show hostname and port settings when setting up an account</string> <string name="hostname_example">xmpp.example.com</string> <string name="action_add_account_with_certificate">Add account with certificate</string> <string name="unable_to_parse_certificate">Unable to parse certificate</string> <string name="authenticate_with_certificate">Leave empty to authenticate w/ certificate</string> <string name="mam_prefs">Archiving preferences</string> + <string name="server_side_mam_prefs">Server-side archiving preferences</string> <string name="fetching_mam_prefs">Fetching archiving preferences. Please wait…</string> <string name="unable_to_fetch_mam_prefs">Unable to fetch archiving preferences</string> <string name="captcha_ocr">Captcha text</string> @@ -611,7 +612,7 @@ <string name="error_fetching_omemo_key">Error fetching OMEMO key!</string> <string name="verified_omemo_key_with_certificate">Verified OMEMO key with certificate!</string> <string name="device_does_not_support_certificates">Your device does not support the selection of client certificates!</string> - <string name="pref_connection_options">Connection options</string> + <string name="pref_connection_options">Connection</string> <string name="pref_use_tor">Connect via Tor</string> <string name="pref_use_tor_summary">Tunnel all connections through the Tor network. Requires Orbot</string> <string name="account_settings_hostname">Hostname</string> @@ -635,7 +636,7 @@ <string name="certificate_issuer">Issuer</string> <string name="certificate_cn">Common Name</string> <string name="certificate_o">Organization</string> - <string name="certificate_sha1">SHA1</string> + <string name="certificate_sha1">SHA-1</string> <string name="certicate_info_not_available">(Not available)</string> <string name="certificate_not_found">No certificate found</string> <string name="notify_on_all_messages">Notify on all messages</string> @@ -651,4 +652,6 @@ <string name="selection_too_large">The selected area is too large</string> <string name="no_accounts">(No activated accounts)</string> <string name="this_field_is_required">This field is required</string> + <string name="correct_message">Correct message</string> + <string name="send_corrected_message">Send corrected message</string> </resources> diff --git a/src/main/res/xml/preferences.xml b/src/main/res/xml/preferences.xml index dd8e1f78..98982c2b 100644 --- a/src/main/res/xml/preferences.xml +++ b/src/main/res/xml/preferences.xml @@ -179,7 +179,7 @@ android:key="expert" android:summary="@string/pref_expert_options_summary" android:title="@string/pref_expert_options"> - <PreferenceCategory android:title="@string/pref_encryption_settings"> + <PreferenceCategory android:title="@string/pref_security_settings"> <CheckBoxPreference android:defaultValue="false" android:key="dont_save_encrypted" @@ -194,6 +194,11 @@ android:key="remove_trusted_certificates" android:summary="@string/pref_remove_trusted_certificates_summary" android:title="@string/pref_remove_trusted_certificates_title"/> + <CheckBoxPreference + android:defaultValue="true" + android:key="allow_message_correction" + android:title="@string/pref_allow_message_correction" + android:summary="@string/pref_allow_message_correction_summary"/> </PreferenceCategory> <PreferenceCategory android:key="connection_options" diff --git a/src/playstore/AndroidManifest.xml b/src/playstore/AndroidManifest.xml new file mode 100644 index 00000000..a1b91be3 --- /dev/null +++ b/src/playstore/AndroidManifest.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest + package="eu.siacs.conversations" + xmlns:android="http://schemas.android.com/apk/res/android"> + + <permission android:name="eu.siacs.conversations.permission.C2D_MESSAGE" + android:protectionLevel="signature"/> + <uses-permission android:name="eu.siacs.conversations.permission.C2D_MESSAGE"/> + + <application> + + <receiver + android:name="com.google.android.gms.gcm.GcmReceiver" + android:exported="true" + android:permission="com.google.android.c2dm.permission.SEND" > + <intent-filter> + <action android:name="com.google.android.c2dm.intent.RECEIVE" /> + <category android:name="com.example.gcm" /> + </intent-filter> + </receiver> + <service + android:name=".services.PushMessageReceiver" + android:exported="false" > + <intent-filter> + <action android:name="com.google.android.c2dm.intent.RECEIVE" /> + </intent-filter> + </service> + + <service android:name=".services.InstanceIdService" android:exported="false"> + <intent-filter> + <action android:name="com.google.android.gms.iid.InstanceID"/> + </intent-filter> + </service> + </application> +</manifest> diff --git a/src/playstore/java/eu/siacs/conversations/services/InstanceIdService.java b/src/playstore/java/eu/siacs/conversations/services/InstanceIdService.java new file mode 100644 index 00000000..dc080430 --- /dev/null +++ b/src/playstore/java/eu/siacs/conversations/services/InstanceIdService.java @@ -0,0 +1,15 @@ +package eu.siacs.conversations.services; + +import android.content.Intent; + +import com.google.android.gms.iid.InstanceIDListenerService; + +public class InstanceIdService extends InstanceIDListenerService { + + @Override + public void onTokenRefresh() { + Intent intent = new Intent(this, XmppConnectionService.class); + intent.setAction(XmppConnectionService.ACTION_GCM_TOKEN_REFRESH); + startService(intent); + } +} diff --git a/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java b/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java new file mode 100644 index 00000000..3fdaf832 --- /dev/null +++ b/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java @@ -0,0 +1,119 @@ +package eu.siacs.conversations.services; + +import android.provider.Settings; +import android.util.Log; + +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.GoogleApiAvailability; +import com.google.android.gms.gcm.GoogleCloudMessaging; +import com.google.android.gms.iid.InstanceID; + +import java.io.IOException; + +import eu.siacs.conversations.Config; +import eu.siacs.conversations.R; +import eu.siacs.conversations.entities.Account; +import eu.siacs.conversations.xml.Element; +import eu.siacs.conversations.xmpp.OnIqPacketReceived; +import eu.siacs.conversations.xmpp.XmppConnection; +import eu.siacs.conversations.xmpp.forms.Data; +import eu.siacs.conversations.xmpp.jid.InvalidJidException; +import eu.siacs.conversations.xmpp.jid.Jid; +import eu.siacs.conversations.xmpp.stanzas.IqPacket; + +public class PushManagementService { + + private static final String APP_SERVER = "push.siacs.eu"; + + protected final XmppConnectionService mXmppConnectionService; + + public PushManagementService(XmppConnectionService service) { + this.mXmppConnectionService = service; + } + + public void registerPushTokenOnServer(final Account account) { + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": has push support"); + retrieveGcmInstanceToken(new OnGcmInstanceTokenRetrieved() { + @Override + public void onGcmInstanceTokenRetrieved(String token) { + try { + final String deviceId = Settings.Secure.getString(mXmppConnectionService.getContentResolver(), Settings.Secure.ANDROID_ID); + IqPacket packet = mXmppConnectionService.getIqGenerator().pushTokenToAppServer(Jid.fromString(APP_SERVER), token, deviceId); + mXmppConnectionService.sendIqPacket(account, packet, new OnIqPacketReceived() { + @Override + public void onIqPacketReceived(Account account, IqPacket packet) { + Element command = packet.findChild("command","http://jabber.org/protocol/commands"); + if (packet.getType() == IqPacket.TYPE.RESULT && command != null) { + Element x = command.findChild("x","jabber:x:data"); + if (x != null) { + Data data = Data.parse(x); + try { + String node = data.getValue("node"); + String secret = data.getValue("secret"); + Jid jid = Jid.fromString(data.getValue("jid")); + if (node != null && secret != null) { + enablePushOnServer(account, jid, node, secret); + } + } catch (InvalidJidException e) { + e.printStackTrace(); + } + } + } else { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": invalid response from app server"); + } + } + }); + } catch (InvalidJidException ignored) { + + } + } + }); + } + + private void enablePushOnServer(final Account account, final Jid jid, final String node, final String secret) { + IqPacket enable = mXmppConnectionService.getIqGenerator().enablePush(jid, node, secret); + mXmppConnectionService.sendIqPacket(account, enable, new OnIqPacketReceived() { + @Override + public void onIqPacketReceived(Account account, IqPacket packet) { + if (packet.getType() == IqPacket.TYPE.RESULT) { + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": successfully enabled push on server"); + } else if (packet.getType() == IqPacket.TYPE.ERROR) { + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": enabling push on server failed"); + } + } + }); + } + + private void retrieveGcmInstanceToken(final OnGcmInstanceTokenRetrieved instanceTokenRetrieved) { + new Thread(new Runnable() { + @Override + public void run() { + InstanceID instanceID = InstanceID.getInstance(mXmppConnectionService); + try { + String token = instanceID.getToken(mXmppConnectionService.getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); + instanceTokenRetrieved.onGcmInstanceTokenRetrieved(token); + } catch (IOException e) { + } + } + }).start(); + + } + + + public boolean available(Account account) { + final XmppConnection connection = account.getXmppConnection(); + return connection != null && connection.getFeatures().push() && playServicesAvailable(); + } + + private boolean playServicesAvailable() { + return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(mXmppConnectionService) == ConnectionResult.SUCCESS; + } + + public boolean isStub() { + return false; + } + + interface OnGcmInstanceTokenRetrieved { + void onGcmInstanceTokenRetrieved(String token); + } +} diff --git a/src/playstore/java/eu/siacs/conversations/services/PushMessageReceiver.java b/src/playstore/java/eu/siacs/conversations/services/PushMessageReceiver.java new file mode 100644 index 00000000..37c95e13 --- /dev/null +++ b/src/playstore/java/eu/siacs/conversations/services/PushMessageReceiver.java @@ -0,0 +1,20 @@ +package eu.siacs.conversations.services; + +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; + +import com.google.android.gms.gcm.GcmListenerService; + +import eu.siacs.conversations.Config; + +public class PushMessageReceiver extends GcmListenerService { + + @Override + public void onMessageReceived(String from, Bundle data) { + Intent intent = new Intent(this, XmppConnectionService.class); + intent.setAction(XmppConnectionService.ACTION_GCM_MESSAGE_RECEIVED); + intent.replaceExtras(data); + startService(intent); + } +} |