diff --git a/Telegram/Resources/icons/menu/translate.png b/Telegram/Resources/icons/menu/translate.png new file mode 100644 index 000000000..b37521976 Binary files /dev/null and b/Telegram/Resources/icons/menu/translate.png differ diff --git a/Telegram/Resources/icons/menu/translate@2x.png b/Telegram/Resources/icons/menu/translate@2x.png new file mode 100644 index 000000000..b4b7b9a26 Binary files /dev/null and b/Telegram/Resources/icons/menu/translate@2x.png differ diff --git a/Telegram/Resources/icons/menu/translate@3x.png b/Telegram/Resources/icons/menu/translate@3x.png new file mode 100644 index 000000000..1ee1ff844 Binary files /dev/null and b/Telegram/Resources/icons/menu/translate@3x.png differ diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 19de99a52..da118bb84 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -2258,6 +2258,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_context_delete_from_disk" = "Delete from disk"; "lng_context_delete_all_files" = "Delete all files"; "lng_context_save_custom_sound" = "Save for notifications"; +"lng_context_translate" = "Translate"; +"lng_context_translate_selected" = "Translate Selected Text"; "lng_context_animated_emoji" = "This message contains emoji from **{name} pack**."; "lng_context_animated_emoji_many#one" = "This message contains emoji from **{count} pack**."; diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index be79da7b6..b122c6397 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -52,6 +52,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/report_messages_box.h" #include "boxes/sticker_set_box.h" #include "boxes/premium_preview_box.h" +#include "boxes/translate_box.h" #include "chat_helpers/message_field.h" #include "chat_helpers/emoji_interactions.h" #include "history/history_widget.h" @@ -2267,6 +2268,13 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { : tr::lng_context_copy_selected(tr::now)), [=] { copySelectedText(); }, &st::menuIconCopy); + _menu->addAction(tr::lng_context_translate_selected({}), [=] { + _controller->show(Box( + Ui::TranslateBox, + item->history()->peer, + MsgId(), + getSelectedText().rich)); + }, &st::menuIconTranslate); } addItemActions(item, item); if (!selectedState.count) { @@ -2358,6 +2366,13 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { [=] { copySelectedText(); }, &st::menuIconCopy); } + _menu->addAction(tr::lng_context_translate_selected({}), [=] { + _controller->show(Box( + Ui::TranslateBox, + item->history()->peer, + MsgId(), + getSelectedText().rich)); + }, &st::menuIconTranslate); addItemActions(item, item); } else { addItemActions(item, albumPartItem); @@ -2415,6 +2430,18 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { copyContextText(itemId); }, &st::menuIconCopy); } + if (!item->isService() + && view + && actionText.isEmpty() + && (view->hasVisibleText() || mediaHasTextForCopy)) { + _menu->addAction(tr::lng_context_translate(tr::now), [=] { + _controller->show(Box( + Ui::TranslateBox, + item->history()->peer, + item->fullId().msg, + item->originalText())); + }, &st::menuIconTranslate); + } } } if (!actionText.isEmpty() && !hasCopyRestriction(item)) { diff --git a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp index 7ed6de1f2..06497c91a 100644 --- a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp +++ b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp @@ -41,6 +41,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/report_messages_box.h" #include "boxes/sticker_set_box.h" #include "boxes/stickers_box.h" +#include "boxes/translate_box.h" #include "data/data_photo.h" #include "data/data_photo_media.h" #include "data/data_document.h" @@ -1004,6 +1005,18 @@ base::unique_qptr FillContextMenu( } }, &st::menuIconCopy); } + if (request.overSelection) { + const auto owner = &view->history()->owner(); + result->addAction(tr::lng_context_translate_selected(tr::now), [=] { + if (const auto item = owner->message(itemId)) { + list->controller()->show(Box( + Ui::TranslateBox, + item->history()->peer, + MsgId(), + list->getSelectedText().rich)); + } + }, &st::menuIconTranslate); + } AddTopMessageActions(result, request, list); if (lnkPhoto && request.selectedItems.empty()) { @@ -1038,6 +1051,17 @@ base::unique_qptr FillContextMenu( } }, &st::menuIconCopy); } + if (!link && (view->hasVisibleText() || mediaHasTextForCopy)) { + result->addAction(tr::lng_context_translate(tr::now), [=] { + if (const auto item = owner->message(itemId)) { + list->controller()->show(Box( + Ui::TranslateBox, + item->history()->peer, + item->fullId().msg, + item->originalText())); + } + }, &st::menuIconTranslate); + } } if (!view || !list->hasCopyRestriction(view->data())) { diff --git a/Telegram/SourceFiles/ui/menu_icons.style b/Telegram/SourceFiles/ui/menu_icons.style index 4871e9f8c..f11d4811f 100644 --- a/Telegram/SourceFiles/ui/menu_icons.style +++ b/Telegram/SourceFiles/ui/menu_icons.style @@ -92,6 +92,7 @@ menuIconSearch: icon {{ "menu/search", menuIconColor }}; menuIconStartStream: icon {{ "menu/start_stream", menuIconColor }}; menuIconStartStreamWith: icon {{ "menu/start_stream_with", menuIconColor }}; menuIconVideoChat: icon {{ "menu/video_chat", menuIconColor }}; +menuIconTranslate: icon {{ "menu/translate", menuIconColor }}; menuIconTTLAny: icon {{ "menu/auto_delete_plain", menuIconColor }}; menuIconTTLAnyTextPosition: point(11px, 22px);