diff --git a/submodules/SettingsUI/Sources/Language Selection/LocalizationListControllerNode.swift b/submodules/SettingsUI/Sources/Language Selection/LocalizationListControllerNode.swift index 0f163c559f..4cb8d7a64a 100644 --- a/submodules/SettingsUI/Sources/Language Selection/LocalizationListControllerNode.swift +++ b/submodules/SettingsUI/Sources/Language Selection/LocalizationListControllerNode.swift @@ -465,14 +465,22 @@ final class LocalizationListControllerNode: ViewControllerTracingNode { if let languages = translationSettings.ignoredLanguages { ignoredLanguages = languages } else { - if let activeLanguageCode = activeLanguageCode, supportedTranslationLanguages.contains(activeLanguageCode) { - ignoredLanguages = [activeLanguageCode] + if let activeLanguage = activeLanguageCode, supportedTranslationLanguages.contains(activeLanguage) { + ignoredLanguages = [activeLanguage] + } + let systemLanguage = systemLanguageCode() + if !ignoredLanguages.contains(systemLanguage) { + ignoredLanguages.append(systemLanguage) } } } else { translateChats = isPremium - if let activeLanguageCode = activeLanguageCode, supportedTranslationLanguages.contains(activeLanguageCode) { - ignoredLanguages = [activeLanguageCode] + if let activeLanguage = activeLanguageCode, supportedTranslationLanguages.contains(activeLanguage) { + ignoredLanguages = [activeLanguage] + } + let systemLanguageCode = systemLanguageCode() + if !ignoredLanguages.contains(systemLanguageCode) { + ignoredLanguages.append(systemLanguageCode) } } diff --git a/submodules/SettingsUI/Sources/Language Selection/TranslatonSettingsController.swift b/submodules/SettingsUI/Sources/Language Selection/TranslatonSettingsController.swift index bccbe7f287..c934f0fc34 100644 --- a/submodules/SettingsUI/Sources/Language Selection/TranslatonSettingsController.swift +++ b/submodules/SettingsUI/Sources/Language Selection/TranslatonSettingsController.swift @@ -77,7 +77,7 @@ private func translationSettingsControllerEntries(theme: PresentationTheme, stri if let ignoredLanguages = settings.ignoredLanguages { selectedLanguages = Set(ignoredLanguages) } else { - selectedLanguages = Set([strings.baseLanguageCode]) + selectedLanguages = Set([strings.baseLanguageCode, systemLanguageCode()]) } for (code, title, subtitle) in languages { entries.append(.language(index, theme, title, subtitle, selectedLanguages.contains(code), code)) @@ -100,6 +100,7 @@ public func translationSettingsController(context: AccountContext) -> ViewContro if value { if current.ignoredLanguages == nil { updatedIgnoredLanguages.append(interfaceLanguageCode) + updatedIgnoredLanguages.append(systemLanguageCode()) } if !updatedIgnoredLanguages.contains(code) { updatedIgnoredLanguages.append(code) diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index a8a97b4d8a..4695e36b80 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -10083,6 +10083,12 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G guard let strongSelf = self, let peerId = strongSelf.chatLocation.peerId else { return } + var langCode = langCode + if langCode == "nb" { + langCode = "nl" + } else if langCode == "pt-br" { + langCode = "pt" + } let _ = updateChatTranslationStateInteractively(engine: strongSelf.context.engine, peerId: peerId, { current in return current?.withToLang(langCode).withIsEnabled(true) }).start() @@ -10098,7 +10104,11 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } updated.ignoredLanguages = ignoredLanguages } else { - updated.ignoredLanguages = [strongSelf.presentationData.strings.baseLanguageCode, langCode] + var ignoredLanguages = Set() + ignoredLanguages.insert(strongSelf.presentationData.strings.baseLanguageCode) + ignoredLanguages.insert(systemLanguageCode()) + ignoredLanguages.insert(langCode) + updated.ignoredLanguages = Array(ignoredLanguages) } return updated }).start() diff --git a/submodules/TelegramUI/Sources/ChatControllerNode.swift b/submodules/TelegramUI/Sources/ChatControllerNode.swift index ac92e08b49..eddab96fbc 100644 --- a/submodules/TelegramUI/Sources/ChatControllerNode.swift +++ b/submodules/TelegramUI/Sources/ChatControllerNode.swift @@ -1096,7 +1096,17 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { var dismissedTranslationPanelNode: ChatTranslationPanelNode? var immediatelyLayoutTranslationPanelNodeAndAnimateAppearance = false var translationPanelHeight: CGFloat? + + var hasTranslationPanel = false if let _ = self.chatPresentationInterfaceState.translationState { + if case .overlay = self.chatPresentationInterfaceState.mode { + } else if self.chatPresentationInterfaceState.renderedPeer?.peer?.restrictionText(platform: "ios", contentSettings: self.context.currentContentSettings.with { $0 }) != nil { + } else if self.chatPresentationInterfaceState.search != nil { + } else { + hasTranslationPanel = true + } + } + if hasTranslationPanel { let translationPanelNode: ChatTranslationPanelNode if let current = self.chatTranslationPanel { translationPanelNode = current diff --git a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift index d142239edf..b75cf9e60f 100644 --- a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift +++ b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift @@ -1295,6 +1295,11 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { var translateToLanguage: String? if let translationState, isPremium && translationState.isEnabled { translateToLanguage = translationState.toLang ?? presentationData.strings.baseLanguageCode + if translateToLanguage == "nb" { + translateToLanguage = "nl" + } else if translateToLanguage == "pt-br" { + translateToLanguage = "pt" + } } let associatedData = extractAssociatedData(chatLocation: chatLocation, view: view, automaticDownloadNetworkType: networkType, animatedEmojiStickers: animatedEmojiStickers, additionalAnimatedEmojiStickers: additionalAnimatedEmojiStickers, subject: subject, currentlyPlayingMessageId: currentlyPlayingMessageId, isCopyProtectionEnabled: isCopyProtectionEnabled, availableReactions: availableReactions, defaultReaction: defaultReaction, isPremium: isPremium, alwaysDisplayTranscribeButton: alwaysDisplayTranscribeButton, accountPeer: accountPeer, topicAuthorId: topicAuthorId, hasBots: chatHasBots, translateToLanguage: translateToLanguage) diff --git a/submodules/TranslateUI/Sources/ChatTranslation.swift b/submodules/TranslateUI/Sources/ChatTranslation.swift index f5144b9c4b..27edbd09d7 100644 --- a/submodules/TranslateUI/Sources/ChatTranslation.swift +++ b/submodules/TranslateUI/Sources/ChatTranslation.swift @@ -148,6 +148,9 @@ public func translateMessageIds(context: AccountContext, messageIds: [EngineMess } public func chatTranslationState(context: AccountContext, peerId: EnginePeer.Id) -> Signal { + if peerId.id == PeerId.Id._internalFromInt64Value(777000) { + return .single(nil) + } if #available(iOS 12.0, *) { let baseLang = context.sharedContext.currentPresentationData.with { $0 }.strings.baseLanguageCode return context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.translationSettings]) @@ -160,8 +163,10 @@ public func chatTranslationState(context: AccountContext, peerId: EnginePeer.Id) var dontTranslateLanguages = Set() if let ignoredLanguages = settings.ignoredLanguages { dontTranslateLanguages = Set(ignoredLanguages) + } else { + dontTranslateLanguages.insert(baseLang) + dontTranslateLanguages.insert(systemLanguageCode()) } - dontTranslateLanguages.insert(baseLang) return cachedChatTranslationState(engine: context.engine, peerId: peerId) |> mapToSignal { cached in diff --git a/submodules/TranslateUI/Sources/Translate.swift b/submodules/TranslateUI/Sources/Translate.swift index 88e7bdd4a4..1aaa3e889b 100644 --- a/submodules/TranslateUI/Sources/Translate.swift +++ b/submodules/TranslateUI/Sources/Translate.swift @@ -178,3 +178,11 @@ public func canTranslateText(context: AccountContext, text: String, showTranslat return (false, nil) } } + +public func systemLanguageCode() -> String { + if let systemLanguage = Locale.preferredLanguages.first { + let language = systemLanguage.components(separatedBy: "-").first ?? systemLanguage + return language + } + return "" +} diff --git a/submodules/TranslateUI/Sources/TranslateScreen.swift b/submodules/TranslateUI/Sources/TranslateScreen.swift index fca8de62e4..790b35520d 100644 --- a/submodules/TranslateUI/Sources/TranslateScreen.swift +++ b/submodules/TranslateUI/Sources/TranslateScreen.swift @@ -1001,11 +1001,16 @@ public class TranslateScreen: ViewController { } var toLanguage = toLanguage ?? baseLanguageCode - if toLanguage == fromLanguage { toLanguage = "en" } + if toLanguage == "nb" { + toLanguage = "nl" + } else if toLanguage == "pt-br" { + toLanguage = "pt" + } + var copyTranslationImpl: ((String) -> Void)? var changeLanguageImpl: ((String, String, @escaping (String, String) -> Void) -> Void)? var expandImpl: (() -> Void)?