Translation

Telegram allows translating chat messages: Telegram Premium users may even enable real-time chat translation.

textWithEntities#751f3146 text:string entities:Vector<MessageEntity> = TextWithEntities;

messages.translateResult#33db32f8 result:Vector<TextWithEntities> = messages.TranslatedText;


---functions---

messages.translateText#63183030 flags:# peer:flags.0?InputPeer id:flags.0?Vector<int> text:flags.1?Vector<TextWithEntities> to_lang:string = messages.TranslatedText;

messages.translateText can be used to translate a list of chat messages (by populating the peer and id flags), or a generic list of messages (by populating the text flag, for example when translating instant view articles).

The method will return a vector of textWithEntities constructors, containing the translated text, and, only for Telegram Premium users, the corresponding styled text entities (i.e. correctly repositioned bold, italic, link entities for the translated message, corresponding to the same entities in the original message).

Real-time translation

userFull#b9b12c6c flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true can_pin_message:flags.7?true has_scheduled:flags.12?true video_calls_available:flags.13?true voice_messages_forbidden:flags.20?true translations_disabled:flags.23?true stories_pinned_available:flags.26?true blocked_my_stories_from:flags.27?true wallpaper_overridden:flags.28?true id:long about:flags.1?string settings:PeerSettings personal_photo:flags.21?Photo profile_photo:flags.2?Photo fallback_photo:flags.22?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo pinned_msg_id:flags.6?int common_chats_count:int folder_id:flags.11?int ttl_period:flags.14?int theme_emoticon:flags.15?string private_forward_name:flags.16?string bot_group_admin_rights:flags.17?ChatAdminRights bot_broadcast_admin_rights:flags.18?ChatAdminRights premium_gifts:flags.19?Vector<PremiumGiftOption> wallpaper:flags.24?WallPaper stories:flags.25?PeerStories = UserFull;

chatFull#c9d31138 flags:# can_set_username:flags.7?true has_scheduled:flags.8?true translations_disabled:flags.19?true id:long about:string participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:flags.13?ExportedChatInvite bot_info:flags.3?Vector<BotInfo> pinned_msg_id:flags.6?int folder_id:flags.11?int call:flags.12?InputGroupCall ttl_period:flags.14?int groupcall_default_join_as:flags.15?Peer theme_emoticon:flags.16?string requests_pending:flags.17?int recent_requesters:flags.17?Vector<long> available_reactions:flags.18?ChatReactions = ChatFull;

channelFull#f2bcb6f flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_set_location:flags.16?true has_scheduled:flags.19?true can_view_stats:flags.20?true blocked:flags.22?true flags2:# can_delete_channel:flags2.0?true antispam:flags2.1?true participants_hidden:flags2.2?true translations_disabled:flags2.3?true stories_pinned_available:flags2.5?true view_forum_as_messages:flags2.6?true id:long about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:flags.23?ExportedChatInvite bot_info:Vector<BotInfo> migrated_from_chat_id:flags.4?long migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int folder_id:flags.11?int linked_chat_id:flags.14?long location:flags.15?ChannelLocation slowmode_seconds:flags.17?int slowmode_next_send_date:flags.18?int stats_dc:flags.12?int pts:int call:flags.21?InputGroupCall ttl_period:flags.24?int pending_suggestions:flags.25?Vector<string> groupcall_default_join_as:flags.26?Peer theme_emoticon:flags.27?string requests_pending:flags.28?int recent_requesters:flags.28?Vector<long> default_send_as:flags.29?Peer available_reactions:flags.30?ChatReactions stories:flags2.4?PeerStories wallpaper:flags2.7?WallPaper = ChatFull;

---functions---

messages.togglePeerTranslations#e47cb579 flags:# disabled:flags.0?true peer:InputPeer = Bool;

Telegram Premium users may also enable real-time chat translation.
If the currently logged in account is a Premium account, and the translations_disabled flag of userFull, chatFull, channelFull is not set, the client should run a local language recognition model for all messages received from private chats (not secret chats), chats and channels, and if:

  • The language recognition model was ran on at least 8 messages in the chat,
  • and the language of at least 35% of the processed messages was successfully detected,
  • and at least 65% of the messages whose language was successfully detected are in a foreign language (a language that is not the system language nor the Telegram in-app language, and a language that was not explicitly excluded from translation by the user),
  • then, a popup should be displayed to the user, offering to enable real-time chat translation, or to disallow translation of the detected language (the detected language is the language with most occurrences amongst all processed messages).

If the user dismisses the autotranslation popup, invoke messages.togglePeerTranslations with the disabled flag set: this will set the translations_disabled flag in the corresponding full info constructor, signaling to the other sessions that the autotranslation popup should not be displayed.

If the user enables autotranslation, store the preference locally and invoke messages.translateText for every received message, preferrably batching requests by specifying multiple message IDs in id.