added Android Wear support

This commit is contained in:
DrKLO 2014-10-04 19:56:09 +04:00
parent 3354342390
commit 4baa0f66a0
23 changed files with 283 additions and 43 deletions

View file

@ -80,7 +80,7 @@ android {
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 344
versionName "1.9.2"
versionCode 345
versionName "1.9.3"
}
}

View file

@ -147,6 +147,8 @@
</intent-filter>
</receiver>
<receiver android:name="org.telegram.android.WearReplyReceiver" android:enabled="true"/>
<uses-library android:name="com.sec.android.app.multiwindow" android:required="false" />
<meta-data android:name="com.sec.android.support.multiwindow" android:value="true" />
<meta-data android:name="com.sec.android.multiwindow.DEFAULT_SIZE_W" android:value="632dp" />

View file

@ -17,7 +17,6 @@ import android.database.Cursor;
import android.net.Uri;
import android.provider.BaseColumns;
import android.provider.ContactsContract;
import android.provider.Settings;
import android.util.SparseArray;
import org.telegram.PhoneFormat.PhoneFormat;
@ -49,7 +48,6 @@ public class ContactsController {
private boolean contactsBookLoaded = false;
private String lastContactsVersions = "";
private ArrayList<Integer> delayedContactsUpdate = new ArrayList<Integer>();
public int nameDisplayOrder = 1;
public static class Contact {
public int id;
@ -101,14 +99,6 @@ public class ContactsController {
return localInstance;
}
public ContactsController() {
try {
nameDisplayOrder = Settings.System.getInt(ApplicationLoader.applicationContext.getContentResolver(), "android.contacts.DISPLAY_ORDER");
} catch (Exception e) {
//don't promt
}
}
public void cleanup() {
contactsBook.clear();
contactsBookSPhones.clear();
@ -1576,7 +1566,7 @@ public class ContactsController {
public static String formatName(String firstName, String lastName) {
String result = null;
if (ContactsController.getInstance().nameDisplayOrder == 1) {
if (LocaleController.nameDisplayOrder == 1) {
result = firstName;
if (result == null || result.length() == 0) {
result = lastName;

View file

@ -47,6 +47,7 @@ public class LocaleController {
static final int QUANTITY_MANY = 0x0010;
public static boolean isRTL = false;
public static int nameDisplayOrder = 1;
private static boolean is24HourFormat = false;
public static FastDateFormat formatterDay;
public static FastDateFormat formatterWeek;
@ -74,7 +75,7 @@ public class LocaleController {
@Override
public void run() {
if (!formatterMonth.getTimeZone().equals(TimeZone.getDefault())) {
LocaleController.recreateFormatters();
LocaleController.getInstance().recreateFormatters();
}
}
});
@ -541,14 +542,18 @@ public class LocaleController {
return getString("LanguageName", R.string.LanguageName);
}
public static String getString(String key, int res) {
String value = getInstance().localeValues.get(key);
private String getStringInternal(String key, int res) {
String value = localeValues.get(key);
if (value == null) {
value = ApplicationLoader.applicationContext.getString(res);
}
return value;
}
public static String getString(String key, int res) {
return getInstance().getStringInternal(key, res);
}
public static String formatPluralString(String key, int plural) {
if (key == null || key.length() == 0 || getInstance().currentPluralRules == null) {
return "LOC_ERR:" + key;
@ -664,32 +669,44 @@ public class LocaleController {
}
}
public static void recreateFormatters() {
public void recreateFormatters() {
Locale locale = Locale.getDefault();
String lang = locale.getLanguage();
if (lang == null) {
lang = "en";
}
isRTL = lang.toLowerCase().equals("ar");
if (lang.equals("en")) {
formatterMonth = FastDateFormat.getInstance("MMM dd", locale);
formatterYear = FastDateFormat.getInstance("dd.MM.yy", locale);
formatterYearMax = FastDateFormat.getInstance("dd.MM.yyyy", locale);
chatDate = FastDateFormat.getInstance("MMMM d", locale);
chatFullDate = FastDateFormat.getInstance("MMMM d, yyyy", locale);
} else if (lang.startsWith("es")) {
formatterMonth = FastDateFormat.getInstance("dd 'de' MMM", locale);
formatterYear = FastDateFormat.getInstance("dd.MM.yy", locale);
formatterYearMax = FastDateFormat.getInstance("dd.MM.yyyy", locale);
chatDate = FastDateFormat.getInstance("d 'de' MMMM", locale);
chatFullDate = FastDateFormat.getInstance("d 'de' MMMM 'de' yyyy", locale);
} else {
formatterMonth = FastDateFormat.getInstance("dd MMM", locale);
formatterYear = FastDateFormat.getInstance("dd.MM.yy", locale);
formatterYearMax = FastDateFormat.getInstance("dd.MM.yyyy", locale);
chatDate = FastDateFormat.getInstance("d MMMM", locale);
chatFullDate = FastDateFormat.getInstance("d MMMM yyyy", locale);
nameDisplayOrder = lang.toLowerCase().equals("ko") ? 2 : 1;
String formatString = getStringInternal("formatterMonth", R.string.formatterMonth);
if (formatString == null || formatString.length() == 0) {
formatString = "dd MMM";
}
formatterMonth = FastDateFormat.getInstance(formatString, locale);
formatString = getStringInternal("formatterYear", R.string.formatterYear);
if (formatString == null || formatString.length() == 0) {
formatString = "dd.MM.yy";
}
formatterYear = FastDateFormat.getInstance(formatString, locale);
formatString = getStringInternal("formatterYearMax", R.string.formatterYearMax);
if (formatString == null || formatString.length() == 0) {
formatString = "dd.MM.yyyy";
}
formatterYearMax = FastDateFormat.getInstance(formatString, locale);
formatString = getStringInternal("chatDate", R.string.chatDate);
if (formatString == null || formatString.length() == 0) {
formatString = "d MMMM";
}
chatDate = FastDateFormat.getInstance(formatString, locale);
formatString = getStringInternal("chatFullDate", R.string.chatFullDate);
if (formatString == null || formatString.length() == 0) {
formatString = "d MMMM yyyy";
}
chatFullDate = FastDateFormat.getInstance(formatString, locale);
formatterWeek = FastDateFormat.getInstance("EEE", locale);
if (lang != null) {

View file

@ -1648,7 +1648,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
int high_id = (int)(dialog_id >> 32);
if (lower_part != 0) {
if (max_id == 0 && offset == 0 || high_id == 1) {
if (max_positive_id == 0 && offset == 0 || high_id == 1) {
return;
}
TLRPC.TL_messages_readHistory req = new TLRPC.TL_messages_readHistory();

View file

@ -18,10 +18,12 @@ import android.content.pm.ResolveInfo;
import android.graphics.drawable.BitmapDrawable;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Build;
import android.os.SystemClock;
import android.provider.Settings;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
import android.support.v4.app.RemoteInput;
import org.json.JSONArray;
import org.json.JSONObject;
@ -47,6 +49,8 @@ public class NotificationsController {
private HashMap<Integer, MessageObject> pushMessagesDict = new HashMap<Integer, MessageObject>();
private NotificationManagerCompat notificationManager = null;
private HashMap<Long, Integer> pushDialogs = new HashMap<Long, Integer>();
private HashMap<Long, Integer> wearNoticationsIds = new HashMap<Long, Integer>();
private int wearNotificationId = 10000;
public ArrayList<MessageObject> popupMessages = new ArrayList<MessageObject>();
private long openned_dialog_id = 0;
private int total_unread_count = 0;
@ -79,6 +83,7 @@ public class NotificationsController {
pushMessagesDict.clear();
pushDialogs.clear();
popupMessages.clear();
wearNoticationsIds.clear();
notifyCheck = false;
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
@ -261,6 +266,7 @@ public class NotificationsController {
MessageObject lastMessageObject = pushMessages.get(0);
long dialog_id = lastMessageObject.getDialogId();
int mid = lastMessageObject.messageOwner.id;
int chat_id = lastMessageObject.messageOwner.to_id.chat_id;
int user_id = lastMessageObject.messageOwner.to_id.user_id;
if (user_id == 0) {
@ -387,7 +393,9 @@ public class NotificationsController {
.setSmallIcon(R.drawable.notification)
.setAutoCancel(true)
.setNumber(total_unread_count)
.setContentIntent(contentIntent);
.setContentIntent(contentIntent)
.setGroup("messages")
.setGroupSummary(true);
String lastMessage = null;
String lastMessageFull = null;
@ -479,18 +487,119 @@ public class NotificationsController {
mBuilder.setVibrate(new long[]{0, 0});
}
//RemoteInput remoteInput = new RemoteInput.Builder(EXTRA_VOICE_REPLY).setLabel(LocaleController.getString("Reply", R.string.Reply)).build();
notificationManager.notify(1, mBuilder.build());
if (preferences.getBoolean("EnablePebbleNotifications", false)) {
sendAlertToPebble(lastMessageFull);
}
showWearNotifications(notifyAboutLast);
scheduleNotificationRepeat();
} catch (Exception e) {
FileLog.e("tmessages", e);
}
}
public void showWearNotifications(boolean notifyAboutLast) {
if (Build.VERSION.SDK_INT < 19) {
return;
}
ArrayList<Long> sortedDialogs = new ArrayList<Long>();
HashMap<Long, ArrayList<MessageObject>> messagesByDialogs = new HashMap<Long, ArrayList<MessageObject>>();
for (MessageObject messageObject : pushMessages) {
long dialog_id = messageObject.getDialogId();
if ((int)dialog_id == 0) {
continue;
}
ArrayList<MessageObject> arrayList = messagesByDialogs.get(dialog_id);
if (arrayList == null) {
arrayList = new ArrayList<MessageObject>();
messagesByDialogs.put(dialog_id, arrayList);
sortedDialogs.add(0, dialog_id);
}
arrayList.add(messageObject);
}
HashMap<Long, Integer> oldIds = new HashMap<Long, Integer>();
oldIds.putAll(wearNoticationsIds);
wearNoticationsIds.clear();
for (long dialog_id : sortedDialogs) {
ArrayList<MessageObject> messageObjects = messagesByDialogs.get(dialog_id);
int max_id = messageObjects.get(0).messageOwner.id;
TLRPC.Chat chat = null;
TLRPC.User user = null;
String name = null;
if (dialog_id > 0) {
user = MessagesController.getInstance().getUser((int)dialog_id);
if (user == null) {
continue;
}
} else {
chat = MessagesController.getInstance().getChat(-(int)dialog_id);
if (chat == null) {
continue;
}
}
if (chat != null) {
name = chat.title;
} else {
name = ContactsController.formatName(user.first_name, user.last_name);
}
Integer notificationId = oldIds.get(dialog_id);
if (notificationId == null) {
notificationId = wearNotificationId++;
} else {
oldIds.remove(dialog_id);
}
Intent replyIntent = new Intent(ApplicationLoader.applicationContext, WearReplyReceiver.class);
replyIntent.putExtra("dialog_id", dialog_id);
replyIntent.putExtra("max_id", max_id);
PendingIntent replyPendingIntent = PendingIntent.getBroadcast(ApplicationLoader.applicationContext, notificationId, replyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
RemoteInput remoteInput = new RemoteInput.Builder(EXTRA_VOICE_REPLY).setLabel(LocaleController.getString("Reply", R.string.Reply)).build();
String replyToString;
if (chat != null) {
replyToString = LocaleController.formatString("ReplyToGroup", R.string.ReplyToGroup, name);
} else {
replyToString = LocaleController.formatString("ReplyToUser", R.string.ReplyToUser, name);
}
NotificationCompat.Action action = new NotificationCompat.Action.Builder(R.drawable.ic_reply_icon, replyToString, replyPendingIntent).addRemoteInput(remoteInput).build();
String text = "";
for (MessageObject messageObject : messageObjects) {
String message = getStringForMessage(messageObject, false);
if (message == null) {
continue;
}
if (chat != null) {
message = message.replace(" @ " + name, "");
} else {
message = message.replace(name + ": ", "").replace(name + " ", "");
}
if (text.length() > 0) {
text += "\n\n";
}
text += message;
}
NotificationCompat.Builder builder = new NotificationCompat.Builder(ApplicationLoader.applicationContext)
.setContentTitle(name)
.setSmallIcon(R.drawable.notification)
.setGroup("messages")
.setContentText(text)
.setGroupSummary(false)
.extend(new NotificationCompat.WearableExtender().addAction(action));
notificationManager.notify(notificationId, builder.build());
wearNoticationsIds.put(dialog_id, notificationId);
}
for (HashMap.Entry<Long, Integer> entry : oldIds.entrySet()) {
notificationManager.cancel(entry.getValue());
}
}
private void dismissNotification() {
try {
notificationManager.cancel(1);

View file

@ -0,0 +1,37 @@
/*
* This is the source code of Telegram for Android v. 1.7.x.
* It is licensed under GNU GPL v. 2 or later.
* You should have received a copy of the license in this archive (see LICENSE).
*
* Copyright Nikolai Kudashov, 2013-2014.
*/
package org.telegram.android;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.RemoteInput;
public class WearReplyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
if (remoteInput == null) {
return;
}
CharSequence text = remoteInput.getCharSequence(NotificationsController.EXTRA_VOICE_REPLY);
if (text == null || text.length() == 0) {
return;
}
long dialog_id = intent.getLongExtra("dialog_id", 0);
int max_id = intent.getIntExtra("max_id", 0);
if (dialog_id == 0 || max_id == 0) {
return;
}
SendMessagesHelper.getInstance().sendMessage(text.toString(), dialog_id);
MessagesController.getInstance().markDialogAsRead(dialog_id, max_id, max_id, 0, 0, true, false);
}
}

View file

@ -136,6 +136,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
progressPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
progressPaint.setStyle(Paint.Style.STROKE);
progressPaint.setStrokeCap(Paint.Cap.ROUND);
progressPaint.setStrokeWidth(AndroidUtilities.dp(2));
decelerateInterpolator = new DecelerateInterpolator();

View file

@ -544,6 +544,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
args.putBoolean("onlySelect", true);
args.putBoolean("serverOnly", true);
args.putString("selectAlertString", LocaleController.getString("ForwardMessagesTo", R.string.ForwardMessagesTo));
args.putString("selectAlertStringGroup", LocaleController.getString("ForwardMessagesToGroup", R.string.ForwardMessagesToGroup));
MessagesActivity fragment = new MessagesActivity(args);
fragment.setDelegate(ChatActivity.this);
presentFragment(fragment);
@ -2914,6 +2915,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
args.putBoolean("onlySelect", true);
args.putBoolean("serverOnly", true);
args.putString("selectAlertString", LocaleController.getString("ForwardMessagesTo", R.string.ForwardMessagesTo));
args.putString("selectAlertStringGroup", LocaleController.getString("ForwardMessagesToGroup", R.string.ForwardMessagesToGroup));
MessagesActivity fragment = new MessagesActivity(args);
fragment.setDelegate(this);
presentFragment(fragment);

View file

@ -39,7 +39,6 @@ import org.telegram.android.NotificationCenter;
import org.telegram.messenger.R;
import org.telegram.messenger.RPCRequest;
import org.telegram.messenger.UserConfig;
import org.telegram.messenger.Utilities;
import org.telegram.ui.Adapters.ContactsActivityAdapter;
import org.telegram.ui.Adapters.ContactsActivitySearchAdapter;
import org.telegram.ui.Cells.ChatOrUserCell;

View file

@ -576,6 +576,7 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa
Bundle args = new Bundle();
args.putBoolean("onlySelect", true);
args.putString("selectAlertString", LocaleController.getString("SendMessagesTo", R.string.SendMessagesTo));
args.putString("selectAlertStringGroup", LocaleController.getString("SendMessagesToGroup", R.string.SendMessagesToGroup));
MessagesActivity fragment = new MessagesActivity(args);
fragment.setDelegate(this);
actionBarLayout.presentFragment(fragment, false, true, true);

View file

@ -53,6 +53,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
private View progressView;
private View empryView;
private String selectAlertString;
private String selectAlertStringGroup;
private boolean serverOnly = false;
private static boolean dialogsLoaded = false;
@ -101,6 +102,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
onlySelect = arguments.getBoolean("onlySelect", false);
serverOnly = arguments.getBoolean("serverOnly", false);
selectAlertString = arguments.getString("selectAlertString");
selectAlertStringGroup = arguments.getString("selectAlertStringGroup");
}
if (!dialogsLoaded) {
MessagesController.getInstance().loadDialogs(0, 0, 100, true);
@ -538,7 +540,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
}
private void didSelectResult(final long dialog_id, boolean useAlert, final boolean param) {
if (useAlert && selectAlertString != null) {
if (useAlert && selectAlertString != null && selectAlertStringGroup != null) {
if (getParentActivity() == null) {
return;
}
@ -552,7 +554,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
if (chat == null) {
return;
}
builder.setMessage(LocaleController.formatStringSimple(selectAlertString, chat.title));
builder.setMessage(LocaleController.formatStringSimple(selectAlertStringGroup, chat.title));
} else {
if (lower_part > 0) {
TLRPC.User user = MessagesController.getInstance().getUser(lower_part);
@ -565,7 +567,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
if (chat == null) {
return;
}
builder.setMessage(LocaleController.formatStringSimple(selectAlertString, chat.title));
builder.setMessage(LocaleController.formatStringSimple(selectAlertStringGroup, chat.title));
}
}
} else {

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 B

View file

@ -152,6 +152,8 @@
<string name="NotificationUnrecognizedDevice">%1$s,\nتم تسجيل الدخول لحسابك من جهاز جديد يوم %2$s\n\nالجهاز: %3$s\nالموقع: %4$s\n\nإذا لم يكن أنت من سجل الدخول، يمكنك الذهاب للإعدادات ثم تسجيل الخروج من كافة الأجهزة الأخرى.\n\nشكرًا,\nفريق عمل تيليجرام</string>
<string name="NotificationContactNewPhoto">%1$s قام بتغيير صورته الشخصية</string>
<string name="Reply">الرد</string>
<string name="ReplyToGroup">Reply to %1$s</string>
<string name="ReplyToUser">Reply to %1$s</string>
<!--contacts view-->
<string name="SelectContact">اختر جهة اتصال</string>
<string name="NoContacts">لا توجد جهات اتصال بعد</string>
@ -377,6 +379,8 @@
<string name="AreYouSureDeleteContact">هل أنت متأكد من رغبتك في حذف جهة الاتصال هذه؟</string>
<string name="AreYouSureSecretChat">هل أنت متأكد من أنك تريد بدء محادثة سرية؟</string>
<string name="ForwardFromMyName">أعد الإرسال باستخدام اسمي</string>
<string name="SendMessagesToGroup">هل ترغب في إرسال رسالة إلى %1$s؟</string>
<string name="ForwardMessagesToGroup">؟%1$s هل تريد إعادة توجيه الرسائل إلى</string>
<!--Intro view-->
<string name="Page1Title">تيليجرام</string>
<string name="Page2Title">سريع</string>
@ -424,6 +428,12 @@
<string name="FromContacts_few">من %1$d جهات اتصال</string>
<string name="FromContacts_many">من %1$d جهة اتصال</string>
<string name="FromContacts_other">من %1$d جهة اتصال</string>
<!--date formatters-->
<string name="formatterMonth">dd MMM</string>
<string name="formatterYear">dd.MM.yy</string>
<string name="formatterYearMax">dd.MM.yyyy</string>
<string name="chatDate">d MMMM</string>
<string name="chatFullDate">d MMMM yyyy</string>
<!--Don't change this! Not for localization!-->
<string name="CacheTag">CACHE_TAG</string>
</resources>

View file

@ -152,6 +152,8 @@
<string name="NotificationUnrecognizedDevice">%1$s,\nWir haben eine Anmeldung von einem neuen Gerät am %2$s festgestellt.\n\nGerät: %3$s\nStandort: %4$s\n\nWenn du das nicht selbst gewesen bist, melde alle anderen Sitzungen in den Telegram Einstellungen unverzüglich ab.\n\nMit freundlichen Grüßen,\nDas Telegram Team</string>
<string name="NotificationContactNewPhoto">%1$s hat das Profilbild geändert</string>
<string name="Reply">Beantworten</string>
<string name="ReplyToGroup">Reply to %1$s</string>
<string name="ReplyToUser">Reply to %1$s</string>
<!--contacts view-->
<string name="SelectContact">Kontakt auswählen</string>
<string name="NoContacts">Noch keine Kontakte</string>
@ -377,6 +379,8 @@
<string name="AreYouSureDeleteContact">Diesen Kontakt wirklich löschen?</string>
<string name="AreYouSureSecretChat">Geheimen Chat starten?</string>
<string name="ForwardFromMyName">mit meinem Namen weiterleiten</string>
<string name="SendMessagesToGroup">Nachricht an %1$s senden?</string>
<string name="ForwardMessagesToGroup">Nachrichten an %1$s weiterleiten?</string>
<!--Intro view-->
<string name="Page1Title">Telegram</string>
<string name="Page2Title">Schnell</string>
@ -424,6 +428,12 @@
<string name="FromContacts_few">von %1$d Kontakten</string>
<string name="FromContacts_many">von %1$d Kontakten</string>
<string name="FromContacts_other">von %1$d Kontakten</string>
<!--date formatters-->
<string name="formatterMonth">dd MMM</string>
<string name="formatterYear">dd.MM.yy</string>
<string name="formatterYearMax">dd.MM.yyyy</string>
<string name="chatDate">d MMMM</string>
<string name="chatFullDate">d MMMM yyyy</string>
<!--Don't change this! Not for localization!-->
<string name="CacheTag">CACHE_TAG</string>
</resources>

View file

@ -152,6 +152,8 @@
<string name="NotificationUnrecognizedDevice">%1$s,\nDetectamos un inicio de sesión en tu cuenta desde un nuevo dispositivo, el %2$s\n\nDispositivo: %3$s\nUbicación: %4$s\n\nSi no eras tú, puedes ir a Ajustes - Cerrar todas las otras sesiones.\n\nAtentamente,\nEl equipo de Telegram</string>
<string name="NotificationContactNewPhoto">%1$s actualizó su foto de perfil</string>
<string name="Reply">Responder</string>
<string name="ReplyToGroup">Reply to %1$s</string>
<string name="ReplyToUser">Reply to %1$s</string>
<!--contacts view-->
<string name="SelectContact">Elegir contacto</string>
<string name="NoContacts">Aún sin contactos</string>
@ -377,6 +379,8 @@
<string name="AreYouSureDeleteContact">¿Quieres eliminar este contacto?</string>
<string name="AreYouSureSecretChat">¿Quieres iniciar un chat secreto?</string>
<string name="ForwardFromMyName">reenviar desde mi nombre</string>
<string name="SendMessagesToGroup">¿Enviar mensajes a %1$s?</string>
<string name="ForwardMessagesToGroup">¿Reenviar mensajes a %1$s?</string>
<!--Intro view-->
<string name="Page1Title">Telegram</string>
<string name="Page2Title">Rápida</string>
@ -424,6 +428,12 @@
<string name="FromContacts_few">de %1$d contactos</string>
<string name="FromContacts_many">de %1$d contactos</string>
<string name="FromContacts_other">de %1$d contactos</string>
<!--date formatters-->
<string name="formatterMonth">dd \'de\' MMM</string>
<string name="formatterYear">dd.MM.yy</string>
<string name="formatterYearMax">dd.MM.yyyy</string>
<string name="chatDate">d \'de\' MMMM</string>
<string name="chatFullDate">d \'de\' MMMM \'de\' yyyy</string>
<!--Don't change this! Not for localization!-->
<string name="CacheTag">CACHE_TAG</string>
</resources>

View file

@ -152,6 +152,8 @@
<string name="NotificationUnrecognizedDevice">%1$s,\nAbbiamo rilevato un accesso al tuo account da un nuovo dispositivo %2$s\n\nDispositivo: %3$s\nPosizione: %4$s\n\nSe non sei stato tu, puoi andare su Impostazioni - Termina tutte le sessioni.\n\nGrazie,\nil team di Telegram</string>
<string name="NotificationContactNewPhoto">%1$s ha aggiornato la foto del profilo</string>
<string name="Reply">Rispondi</string>
<string name="ReplyToGroup">Reply to %1$s</string>
<string name="ReplyToUser">Reply to %1$s</string>
<!--contacts view-->
<string name="SelectContact">Seleziona contatto</string>
<string name="NoContacts">Ancora nessun contatto</string>
@ -377,6 +379,8 @@
<string name="AreYouSureDeleteContact">Eliminare questo contatto?</string>
<string name="AreYouSureSecretChat">Iniziare una chat segreta?</string>
<string name="ForwardFromMyName">inoltra dal mio nome</string>
<string name="SendMessagesToGroup">Inviare i messaggi a %1$s?</string>
<string name="ForwardMessagesToGroup">Vuoi inoltrare i messaggi a %1$s?</string>
<!--Intro view-->
<string name="Page1Title">Telegram</string>
<string name="Page2Title">Veloce</string>
@ -424,6 +428,12 @@
<string name="FromContacts_few">da %1$d contatti</string>
<string name="FromContacts_many">da %1$d contatti</string>
<string name="FromContacts_other">da %1$d contatti</string>
<!--date formatters-->
<string name="formatterMonth">dd MMM</string>
<string name="formatterYear">dd.MM.yy</string>
<string name="formatterYearMax">dd.MM.yyyy</string>
<string name="chatDate">d MMMM</string>
<string name="chatFullDate">d MMMM yyyy</string>
<!--Don't change this! Not for localization!-->
<string name="CacheTag">CACHE_TAG</string>
</resources>

View file

@ -152,6 +152,8 @@
<string name="NotificationUnrecognizedDevice">%1$s,\nEr is op je account ingelogd vanaf een nieuw apparaat op %2$s\n\nApparaat: %3$s\nLocatie: %4$s\n\nAls jij dit niet was, kun je alle sessies beëindigen via Instellingen Beëindig alle andere sessies.\n\nBedankt,\nHet Telegram-team</string>
<string name="NotificationContactNewPhoto">%1$s heeft zijn/haar profielfoto gewijzigd</string>
<string name="Reply">Antwoord</string>
<string name="ReplyToGroup">Reply to %1$s</string>
<string name="ReplyToUser">Reply to %1$s</string>
<!--contacts view-->
<string name="SelectContact">Kies een contact</string>
<string name="NoContacts">Nog geen contacten</string>
@ -377,6 +379,8 @@
<string name="AreYouSureDeleteContact">Weet je zeker dat je deze contactpersoon wilt verwijderen?</string>
<string name="AreYouSureSecretChat">Weet je zeker dat je een geheime chat wilt starten?</string>
<string name="ForwardFromMyName">doorsturen via mijn eigen naam</string>
<string name="SendMessagesToGroup">Berichten naar %1$s verzenden?</string>
<string name="ForwardMessagesToGroup">Berichten doorsturen naar %1$s?</string>
<!--Intro view-->
<string name="Page1Title">Telegram</string>
<string name="Page2Title">Snel</string>
@ -424,6 +428,12 @@
<string name="FromContacts_few">van %1$d contactpersonen</string>
<string name="FromContacts_many">van %1$d contactpersonen</string>
<string name="FromContacts_other">van %1$d contactpersonen</string>
<!--date formatters-->
<string name="formatterMonth">dd MMM</string>
<string name="formatterYear">dd.MM.yy</string>
<string name="formatterYearMax">dd.MM.yyyy</string>
<string name="chatDate">d MMMM</string>
<string name="chatFullDate">d MMMM yyyy</string>
<!--Don't change this! Not for localization!-->
<string name="CacheTag">CACHE_TAG</string>
</resources>

View file

@ -152,6 +152,8 @@
<string name="NotificationUnrecognizedDevice">%1$s,\nNós detectamos um login na sua conta de um novo dispositivo %2$s\n\nDispositivo: %3$s\nLocalização: %4$s\nSe não foi você, você pode ir em Configurações - Terminar todas as sessões.\n\nAtenciosamente,\nTime do Telegram</string>
<string name="NotificationContactNewPhoto">%1$s atualizou a foto do perfil</string>
<string name="Reply">Responder</string>
<string name="ReplyToGroup">Reply to %1$s</string>
<string name="ReplyToUser">Reply to %1$s</string>
<!--contacts view-->
<string name="SelectContact">Selecionar Contato</string>
<string name="NoContacts">Ainda não há contatos</string>
@ -377,6 +379,8 @@
<string name="AreYouSureDeleteContact">Você tem certeza que deseja deletar este contato?</string>
<string name="AreYouSureSecretChat">Você tem certeza que deseja começar uma conversa secreta?</string>
<string name="ForwardFromMyName">encaminhar pelo meu nome</string>
<string name="SendMessagesToGroup">Enviar mensagens para %1$s?</string>
<string name="ForwardMessagesToGroup">Encaminhar mensagem para %1$s?</string>
<!--Intro view-->
<string name="Page1Title">Telegram</string>
<string name="Page2Title">Rápido</string>
@ -424,6 +428,12 @@
<string name="FromContacts_few">de %1$d contatos</string>
<string name="FromContacts_many">de %1$d contatos</string>
<string name="FromContacts_other">de %1$d contatos</string>
<!--date formatters-->
<string name="formatterMonth">dd MMM</string>
<string name="formatterYear">dd.MM.yy</string>
<string name="formatterYearMax">dd.MM.yyyy</string>
<string name="chatDate">d MMMM</string>
<string name="chatFullDate">d MMMM yyyy</string>
<!--Don't change this! Not for localization!-->
<string name="CacheTag">CACHE_TAG</string>
</resources>

View file

@ -152,6 +152,8 @@
<string name="NotificationUnrecognizedDevice">%1$s,\nNós detectamos um login na sua conta de um novo dispositivo %2$s\n\nDispositivo: %3$s\nLocalização: %4$s\nSe não foi você, você pode ir em Configurações - Terminar todas as sessões.\n\nAtenciosamente,\nTime do Telegram</string>
<string name="NotificationContactNewPhoto">%1$s atualizou a foto do perfil</string>
<string name="Reply">Responder</string>
<string name="ReplyToGroup">Reply to %1$s</string>
<string name="ReplyToUser">Reply to %1$s</string>
<!--contacts view-->
<string name="SelectContact">Selecionar Contato</string>
<string name="NoContacts">Ainda não há contatos</string>
@ -377,6 +379,8 @@
<string name="AreYouSureDeleteContact">Você tem certeza que deseja deletar este contato?</string>
<string name="AreYouSureSecretChat">Você tem certeza que deseja começar uma conversa secreta?</string>
<string name="ForwardFromMyName">encaminhar pelo meu nome</string>
<string name="SendMessagesToGroup">Enviar mensagens para %1$s?</string>
<string name="ForwardMessagesToGroup">Encaminhar mensagem para %1$s?</string>
<!--Intro view-->
<string name="Page1Title">Telegram</string>
<string name="Page2Title">Rápido</string>
@ -424,6 +428,12 @@
<string name="FromContacts_few">de %1$d contatos</string>
<string name="FromContacts_many">de %1$d contatos</string>
<string name="FromContacts_other">de %1$d contatos</string>
<!--date formatters-->
<string name="formatterMonth">dd MMM</string>
<string name="formatterYear">dd.MM.yy</string>
<string name="formatterYearMax">dd.MM.yyyy</string>
<string name="chatDate">d MMMM</string>
<string name="chatFullDate">d MMMM yyyy</string>
<!--Don't change this! Not for localization!-->
<string name="CacheTag">CACHE_TAG</string>
</resources>

View file

@ -152,6 +152,8 @@
<string name="NotificationUnrecognizedDevice">%1$s,\nWe detected a login into your account from a new device on %2$s\n\nDevice: %3$s\nLocation: %4$s\n\nIf this wasn\'t you, you can go to Settings - Terminate all sessions.\n\nSincerely,\nThe Telegram Team</string>
<string name="NotificationContactNewPhoto">%1$s updated profile photo</string>
<string name="Reply">Reply</string>
<string name="ReplyToGroup">Reply to %1$s</string>
<string name="ReplyToUser">Reply to %1$s</string>
<!--contacts view-->
<string name="SelectContact">Select Contact</string>
<string name="NoContacts">No contacts yet</string>
@ -377,6 +379,8 @@
<string name="AreYouSureDeleteContact">Are you sure you want to delete this contact?</string>
<string name="AreYouSureSecretChat">Are you sure you want to start a secret chat?</string>
<string name="ForwardFromMyName">forward from my name</string>
<string name="SendMessagesToGroup">Send messages to %1$s?</string>
<string name="ForwardMessagesToGroup">Forward messages to %1$s?</string>
<!--Intro view-->
<string name="Page1Title">Telegram</string>
<string name="Page2Title">Fast</string>
@ -424,6 +428,12 @@
<string name="FromContacts_few">from %1$d contacts</string>
<string name="FromContacts_many">from %1$d contacts</string>
<string name="FromContacts_other">from %1$d contacts</string>
<!--date formatters-->
<string name="formatterMonth">MMM dd</string>
<string name="formatterYear">dd.MM.yy</string>
<string name="formatterYearMax">dd.MM.yyyy</string>
<string name="chatDate">MMMM d</string>
<string name="chatFullDate">MMMM d, yyyy</string>
<!--Don't change this! Not for localization!-->
<string name="CacheTag">CACHE_TAG</string>
</resources>