Translation fixes

This commit is contained in:
Ilya Laktyushin 2023-01-26 23:20:27 +04:00
parent d3aa8f2dc8
commit bb11c789e2
8 changed files with 60 additions and 8 deletions

View File

@ -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)
}
}

View File

@ -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)

View File

@ -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<String>()
ignoredLanguages.insert(strongSelf.presentationData.strings.baseLanguageCode)
ignoredLanguages.insert(systemLanguageCode())
ignoredLanguages.insert(langCode)
updated.ignoredLanguages = Array(ignoredLanguages)
}
return updated
}).start()

View File

@ -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

View File

@ -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)

View File

@ -148,6 +148,9 @@ public func translateMessageIds(context: AccountContext, messageIds: [EngineMess
}
public func chatTranslationState(context: AccountContext, peerId: EnginePeer.Id) -> Signal<ChatTranslationState?, NoError> {
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<String>()
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

View File

@ -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 ""
}

View File

@ -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)?