diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle index 7998b563..3458dd88 100644 --- a/TMessagesProj/build.gradle +++ b/TMessagesProj/build.gradle @@ -80,7 +80,7 @@ android { defaultConfig { minSdkVersion 8 targetSdkVersion 19 - versionCode 344 - versionName "1.9.2" + versionCode 345 + versionName "1.9.3" } } diff --git a/TMessagesProj/src/main/AndroidManifest.xml b/TMessagesProj/src/main/AndroidManifest.xml index f7bfaaa0..b6a7aa8a 100644 --- a/TMessagesProj/src/main/AndroidManifest.xml +++ b/TMessagesProj/src/main/AndroidManifest.xml @@ -147,6 +147,8 @@ + + diff --git a/TMessagesProj/src/main/java/org/telegram/android/ContactsController.java b/TMessagesProj/src/main/java/org/telegram/android/ContactsController.java index 6278d4e5..59ef6766 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/ContactsController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/ContactsController.java @@ -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 delayedContactsUpdate = new ArrayList(); - 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; diff --git a/TMessagesProj/src/main/java/org/telegram/android/LocaleController.java b/TMessagesProj/src/main/java/org/telegram/android/LocaleController.java index c582bc0e..febbab75 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/LocaleController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/LocaleController.java @@ -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) { diff --git a/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java b/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java index 5a395168..d48d7b70 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/MessagesController.java @@ -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(); diff --git a/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java b/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java index cc3327a4..9bcfcf38 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java +++ b/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java @@ -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 pushMessagesDict = new HashMap(); private NotificationManagerCompat notificationManager = null; private HashMap pushDialogs = new HashMap(); + private HashMap wearNoticationsIds = new HashMap(); + private int wearNotificationId = 10000; public ArrayList popupMessages = new ArrayList(); 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 sortedDialogs = new ArrayList(); + HashMap> messagesByDialogs = new HashMap>(); + for (MessageObject messageObject : pushMessages) { + long dialog_id = messageObject.getDialogId(); + if ((int)dialog_id == 0) { + continue; + } + + ArrayList arrayList = messagesByDialogs.get(dialog_id); + if (arrayList == null) { + arrayList = new ArrayList(); + messagesByDialogs.put(dialog_id, arrayList); + sortedDialogs.add(0, dialog_id); + } + arrayList.add(messageObject); + } + + HashMap oldIds = new HashMap(); + oldIds.putAll(wearNoticationsIds); + wearNoticationsIds.clear(); + + for (long dialog_id : sortedDialogs) { + ArrayList 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 entry : oldIds.entrySet()) { + notificationManager.cancel(entry.getValue()); + } + } + private void dismissNotification() { try { notificationManager.cancel(1); diff --git a/TMessagesProj/src/main/java/org/telegram/android/WearReplyReceiver.java b/TMessagesProj/src/main/java/org/telegram/android/WearReplyReceiver.java new file mode 100644 index 00000000..9e32dc6a --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/android/WearReplyReceiver.java @@ -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); + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java index 136883bb..1b58638c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMediaCell.java @@ -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(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index c8e44a03..59b2734f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -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); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java index e2d872e3..8076f045 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java @@ -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; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java index 67534eb8..d5770b10 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java @@ -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); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/MessagesActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/MessagesActivity.java index 552f1752..1bceb8cf 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/MessagesActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/MessagesActivity.java @@ -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 { diff --git a/TMessagesProj/src/main/res/drawable-hdpi/ic_reply_icon.png b/TMessagesProj/src/main/res/drawable-hdpi/ic_reply_icon.png new file mode 100755 index 00000000..f483f342 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/ic_reply_icon.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/ic_reply_icon.png b/TMessagesProj/src/main/res/drawable-mdpi/ic_reply_icon.png new file mode 100755 index 00000000..51386590 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/ic_reply_icon.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/ic_reply_icon.png b/TMessagesProj/src/main/res/drawable-xhdpi/ic_reply_icon.png new file mode 100755 index 00000000..9caeae67 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/ic_reply_icon.png differ diff --git a/TMessagesProj/src/main/res/values-ar/strings.xml b/TMessagesProj/src/main/res/values-ar/strings.xml index d7adca22..2796762a 100644 --- a/TMessagesProj/src/main/res/values-ar/strings.xml +++ b/TMessagesProj/src/main/res/values-ar/strings.xml @@ -152,6 +152,8 @@ %1$s,\nتم تسجيل الدخول لحسابك من جهاز جديد يوم %2$s\n\nالجهاز: %3$s\nالموقع: %4$s\n\nإذا لم يكن أنت من سجل الدخول، يمكنك الذهاب للإعدادات ثم تسجيل الخروج من كافة الأجهزة الأخرى.\n\nشكرًا,\nفريق عمل تيليجرام %1$s قام بتغيير صورته الشخصية الرد + Reply to %1$s + Reply to %1$s اختر جهة اتصال لا توجد جهات اتصال بعد @@ -377,6 +379,8 @@ هل أنت متأكد من رغبتك في حذف جهة الاتصال هذه؟ هل أنت متأكد من أنك تريد بدء محادثة سرية؟ أعد الإرسال باستخدام اسمي + هل ترغب في إرسال رسالة إلى %1$s؟ + ؟%1$s هل تريد إعادة توجيه الرسائل إلى تيليجرام سريع @@ -424,6 +428,12 @@ من %1$d جهات اتصال من %1$d جهة اتصال من %1$d جهة اتصال + + dd MMM + dd.MM.yy + dd.MM.yyyy + d MMMM + d MMMM yyyy CACHE_TAG \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values-de/strings.xml b/TMessagesProj/src/main/res/values-de/strings.xml index 19d79b04..97e1b000 100644 --- a/TMessagesProj/src/main/res/values-de/strings.xml +++ b/TMessagesProj/src/main/res/values-de/strings.xml @@ -152,6 +152,8 @@ %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 %1$s hat das Profilbild geändert Beantworten + Reply to %1$s + Reply to %1$s Kontakt auswählen Noch keine Kontakte @@ -377,6 +379,8 @@ Diesen Kontakt wirklich löschen? Geheimen Chat starten? mit meinem Namen weiterleiten + Nachricht an %1$s senden? + Nachrichten an %1$s weiterleiten? Telegram Schnell @@ -424,6 +428,12 @@ von %1$d Kontakten von %1$d Kontakten von %1$d Kontakten + + dd MMM + dd.MM.yy + dd.MM.yyyy + d MMMM + d MMMM yyyy CACHE_TAG \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values-es/strings.xml b/TMessagesProj/src/main/res/values-es/strings.xml index 66d490e8..3ef00b5d 100644 --- a/TMessagesProj/src/main/res/values-es/strings.xml +++ b/TMessagesProj/src/main/res/values-es/strings.xml @@ -152,6 +152,8 @@ %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 %1$s actualizó su foto de perfil Responder + Reply to %1$s + Reply to %1$s Elegir contacto Aún sin contactos @@ -377,6 +379,8 @@ ¿Quieres eliminar este contacto? ¿Quieres iniciar un chat secreto? reenviar desde mi nombre + ¿Enviar mensajes a %1$s? + ¿Reenviar mensajes a %1$s? Telegram Rápida @@ -424,6 +428,12 @@ de %1$d contactos de %1$d contactos de %1$d contactos + + dd \'de\' MMM + dd.MM.yy + dd.MM.yyyy + d \'de\' MMMM + d \'de\' MMMM \'de\' yyyy CACHE_TAG \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values-it/strings.xml b/TMessagesProj/src/main/res/values-it/strings.xml index 954886b6..befdbb86 100644 --- a/TMessagesProj/src/main/res/values-it/strings.xml +++ b/TMessagesProj/src/main/res/values-it/strings.xml @@ -152,6 +152,8 @@ %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 %1$s ha aggiornato la foto del profilo Rispondi + Reply to %1$s + Reply to %1$s Seleziona contatto Ancora nessun contatto @@ -377,6 +379,8 @@ Eliminare questo contatto? Iniziare una chat segreta? inoltra dal mio nome + Inviare i messaggi a %1$s? + Vuoi inoltrare i messaggi a %1$s? Telegram Veloce @@ -424,6 +428,12 @@ da %1$d contatti da %1$d contatti da %1$d contatti + + dd MMM + dd.MM.yy + dd.MM.yyyy + d MMMM + d MMMM yyyy CACHE_TAG \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values-nl/strings.xml b/TMessagesProj/src/main/res/values-nl/strings.xml index 0699e32b..403e510c 100644 --- a/TMessagesProj/src/main/res/values-nl/strings.xml +++ b/TMessagesProj/src/main/res/values-nl/strings.xml @@ -152,6 +152,8 @@ %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 %1$s heeft zijn/haar profielfoto gewijzigd Antwoord + Reply to %1$s + Reply to %1$s Kies een contact Nog geen contacten @@ -377,6 +379,8 @@ Weet je zeker dat je deze contactpersoon wilt verwijderen? Weet je zeker dat je een geheime chat wilt starten? doorsturen via mijn eigen naam + Berichten naar %1$s verzenden? + Berichten doorsturen naar %1$s? Telegram Snel @@ -424,6 +428,12 @@ van %1$d contactpersonen van %1$d contactpersonen van %1$d contactpersonen + + dd MMM + dd.MM.yy + dd.MM.yyyy + d MMMM + d MMMM yyyy CACHE_TAG \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values-pt-rBR/strings.xml b/TMessagesProj/src/main/res/values-pt-rBR/strings.xml index 52e2cc57..515b1dfb 100644 --- a/TMessagesProj/src/main/res/values-pt-rBR/strings.xml +++ b/TMessagesProj/src/main/res/values-pt-rBR/strings.xml @@ -152,6 +152,8 @@ %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 %1$s atualizou a foto do perfil Responder + Reply to %1$s + Reply to %1$s Selecionar Contato Ainda não há contatos @@ -377,6 +379,8 @@ Você tem certeza que deseja deletar este contato? Você tem certeza que deseja começar uma conversa secreta? encaminhar pelo meu nome + Enviar mensagens para %1$s? + Encaminhar mensagem para %1$s? Telegram Rápido @@ -424,6 +428,12 @@ de %1$d contatos de %1$d contatos de %1$d contatos + + dd MMM + dd.MM.yy + dd.MM.yyyy + d MMMM + d MMMM yyyy CACHE_TAG \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values-pt-rPT/strings.xml b/TMessagesProj/src/main/res/values-pt-rPT/strings.xml index 6c6ffea9..85c12846 100644 --- a/TMessagesProj/src/main/res/values-pt-rPT/strings.xml +++ b/TMessagesProj/src/main/res/values-pt-rPT/strings.xml @@ -152,6 +152,8 @@ %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 %1$s atualizou a foto do perfil Responder + Reply to %1$s + Reply to %1$s Selecionar Contato Ainda não há contatos @@ -377,6 +379,8 @@ Você tem certeza que deseja deletar este contato? Você tem certeza que deseja começar uma conversa secreta? encaminhar pelo meu nome + Enviar mensagens para %1$s? + Encaminhar mensagem para %1$s? Telegram Rápido @@ -424,6 +428,12 @@ de %1$d contatos de %1$d contatos de %1$d contatos + + dd MMM + dd.MM.yy + dd.MM.yyyy + d MMMM + d MMMM yyyy CACHE_TAG \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values/strings.xml b/TMessagesProj/src/main/res/values/strings.xml index 55896522..f139a53e 100644 --- a/TMessagesProj/src/main/res/values/strings.xml +++ b/TMessagesProj/src/main/res/values/strings.xml @@ -152,6 +152,8 @@ %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 %1$s updated profile photo Reply + Reply to %1$s + Reply to %1$s Select Contact No contacts yet @@ -377,6 +379,8 @@ Are you sure you want to delete this contact? Are you sure you want to start a secret chat? forward from my name + Send messages to %1$s? + Forward messages to %1$s? Telegram Fast @@ -424,6 +428,12 @@ from %1$d contacts from %1$d contacts from %1$d contacts + + MMM dd + dd.MM.yy + dd.MM.yyyy + MMMM d + MMMM d, yyyy CACHE_TAG \ No newline at end of file