Translation improvements

This commit is contained in:
Ilya Laktyushin
2023-01-31 17:23:23 +04:00
parent e8ec6331ff
commit 7cea4071ba
7 changed files with 72 additions and 21 deletions

View File

@@ -114,11 +114,19 @@ final class ChatTranslationPanelNode: ASDisplayNode {
if languageCode.hasSuffix(rawSuffix) {
languageCode = String(languageCode.dropLast(rawSuffix.count))
}
let locale = Locale(identifier: languageCode)
let toLang = interfaceState.translationState?.toLang ?? languageCode
let toLanguage: String = locale.localizedString(forLanguageCode: toLang) ?? ""
let buttonText = interfaceState.translationState?.isEnabled == true ? interfaceState.strings.Conversation_Translation_ShowOriginal : interfaceState.strings.Conversation_Translation_TranslateTo(toLanguage).string
let toLang = interfaceState.translationState?.toLang ?? languageCode
let key = "Translation.Language.\(toLang)"
var toLanguage: String?
if let string = interfaceState.strings.primaryComponent.dict[key] {
toLanguage = string
} else {
let languageLocale = Locale(identifier: languageCode)
toLanguage = languageLocale.localizedString(forLanguageCode: toLang) ?? ""
}
let buttonText = interfaceState.translationState?.isEnabled == true ? interfaceState.strings.Conversation_Translation_ShowOriginal : interfaceState.strings.Conversation_Translation_TranslateTo(toLanguage ?? "").string
self.buttonTextNode.attributedText = NSAttributedString(string: buttonText, font: Font.regular(17.0), textColor: interfaceState.theme.rootController.navigationBar.accentTextColor)
}
@@ -182,13 +190,13 @@ final class ChatTranslationPanelNode: ASDisplayNode {
subItems.append(.separator)
let enLocale = Locale(identifier: "en")
var languages: [(String, String, String)] = []
var languages: [(String, String)] = []
var addedLanguages = Set<String>()
var topLanguages: [String] = []
var langCode = languageCode
if langCode == "nb" {
langCode = "nl"
langCode = "no"
} else if langCode == "pt-br" {
langCode = "pt"
}
@@ -196,16 +204,24 @@ final class ChatTranslationPanelNode: ASDisplayNode {
topLanguages.append(contentsOf: popularTranslationLanguages)
for code in topLanguages {
if !addedLanguages.contains(code), let title = enLocale.localizedString(forLanguageCode: code) {
let languageLocale = Locale(identifier: code)
let subtitle = languageLocale.localizedString(forLanguageCode: code) ?? title
let value = (code, title.capitalized, subtitle.capitalized)
if code == languageCode {
languages.insert(value, at: 0)
} else {
languages.append(value)
if !addedLanguages.contains(code) {
let key = "Translation.Language.\(code)"
var title: String?
if let string = presentationData.strings.primaryComponent.dict[key] {
title = string
} else if let engTitle = enLocale.localizedString(forLanguageCode: code) {
let languageLocale = Locale(identifier: code)
title = languageLocale.localizedString(forLanguageCode: code) ?? engTitle
}
if let title {
let value = (code, title.capitalized)
if code == languageCode {
languages.insert(value, at: 0)
} else {
languages.append(value)
}
addedLanguages.insert(code)
}
addedLanguages.insert(code)
}
}
@@ -222,7 +238,7 @@ final class ChatTranslationPanelNode: ASDisplayNode {
// }
// }
for (langCode, title, _) in languages {
for (langCode, title) in languages {
subItems.append(.action(ContextMenuActionItem(text: title , icon: { theme in
if translationState.toLang == langCode {
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Check"), color: theme.contextMenu.primaryColor)