Update localization

This commit is contained in:
Ilya Laktyushin 2025-05-26 01:05:11 +02:00
parent e27ff72830
commit 3985c538a8
11 changed files with 46 additions and 27 deletions

View File

@ -14341,3 +14341,30 @@ Sorry for the inconvenience.";
"Chat.PauseVoiceMessageTooltip" = "Pause to trim or replay."; "Chat.PauseVoiceMessageTooltip" = "Pause to trim or replay.";
"Chat.PauseVideoMessageTooltip" = "Pause to trim or replay."; "Chat.PauseVideoMessageTooltip" = "Pause to trim or replay.";
"Chat.TrimVoiceMessageToResume.Title" = "Trim to selected range?";
"Chat.TrimVoiceMessageToResume.Text" = "Audio outside that range will be discarded, and recording will start immediately.";
"Chat.TrimVoiceMessageToResume.Proceed" = "Proceed";
"Contacts.LimitedAccess.Text" = "You have limited Telegram from accessing all of your contacts.";
"Contacts.LimitedAccess.Manage" = "MANAGE";
"Media.PhotoHdOn" = "The photo will be sent in high quality.";
"Media.PhotoHdOff" = "The photo will be sent in standard quality.";
"Attachment.SendInHd" = "Send in High Quality";
"Share.PostToStory" = "Post\nto Story";
"PeerInfo.QRCode.Scan" = "Scan QR Code";
"PeerInfo.Topics.Title" = "Topics";
"PeerInfo.Topics.EnableTopics" = "Enable Topics";
"PeerInfo.Topics.EnableTopicsInfo" = "The group chat will be divided into topics created by admins or users.";
"PeerInfo.Topics.DisplayAs" = "DISPLAY AS";
"PeerInfo.Topics.DisplayAsInfo" = "Choose how topics appear for all members.";
"PeerInfo.Topics.Tabs" = "Tabs";
"PeerInfo.Topics.List" = "List";
"PeerInfo.OptionTopics.Enabled" = "Enabled";
"PeerInfo.OptionTopics.Disabled" = "Disabled";

View File

@ -149,8 +149,7 @@ private enum ContactListNodeEntry: Comparable, Identifiable {
interaction.authorize() interaction.authorize()
}) })
case .permissionLimited: case .permissionLimited:
//TODO:localize return LimitedPermissionItem(presentationData: ItemListPresentationData(presentationData), text: presentationData.strings.Contacts_LimitedAccess_Text, action: {
return LimitedPermissionItem(presentationData: ItemListPresentationData(presentationData), text: "You have limited Telegram from accessing all of your contacts.", action: {
interaction.openContactAccessPicker() interaction.openContactAccessPicker()
}) })
case let .option(_, option, header, _, _): case let .option(_, option, header, _, _):

View File

@ -160,8 +160,7 @@ public class LimitedPermissionItemNode: ListViewItemNode {
let attributedText = NSAttributedString(string: item.text, font: textFont, textColor: item.presentationData.theme.list.itemSecondaryTextColor) let attributedText = NSAttributedString(string: item.text, font: textFont, textColor: item.presentationData.theme.list.itemSecondaryTextColor)
//TODO:localize let (buttonTextLayout, buttonTextApply) = makeButtonTitleLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: item.presentationData.strings.Contacts_LimitedAccess_Manage, font: Font.semibold(15.0), textColor: item.presentationData.theme.list.itemCheckColors.foregroundColor), backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: params.width - leftInset - rightInset, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets()))
let (buttonTextLayout, buttonTextApply) = makeButtonTitleLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: "MANAGE", font: Font.semibold(15.0), textColor: item.presentationData.theme.list.itemCheckColors.foregroundColor), backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: params.width - leftInset - rightInset, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets()))
let (textLayout, textApply) = makeTextLayout(TextNodeLayoutArguments(attributedString: attributedText, backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: params.width - leftInset - rightInset - buttonTextLayout.size.width - 20.0, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) let (textLayout, textApply) = makeTextLayout(TextNodeLayoutArguments(attributedString: attributedText, backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: params.width - leftInset - rightInset - buttonTextLayout.size.width - 20.0, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets()))

View File

@ -1239,8 +1239,7 @@
[self tooltipTimerTick]; [self tooltipTimerTick];
} }
//TODO:localize NSString *text = hd ? TGLocalized(@"Media.PhotoHdOn") : TGLocalized(@"Media.PhotoHdOff");
NSString *text = hd ? @"The photo will be sent in high quality." : @"The photo will be sent in standard quality.";
[_context presentTooltip:text icon:[TGPhotoEditorInterfaceAssets qualityIconForHighQuality:hd filled: true] sourceRect:rect]; [_context presentTooltip:text icon:[TGPhotoEditorInterfaceAssets qualityIconForHighQuality:hd filled: true] sourceRect:rect];
} }

View File

@ -2719,7 +2719,7 @@ public final class MediaPickerScreenImpl: ViewController, MediaPickerScreen, Att
} }
if price == nil { if price == nil {
//TODO:localize //TODO:localize
items.append(.action(ContextMenuActionItem(text: "Send in High Quality", icon: { theme in items.append(.action(ContextMenuActionItem(text: strings.Attachment_SendInHd, icon: { theme in
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/QualityHd"), color: theme.contextMenu.primaryColor) return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/QualityHd"), color: theme.contextMenu.primaryColor)
}, action: { [weak self] _, f in }, action: { [weak self] _, f in
f(.default) f(.default)

View File

@ -190,8 +190,7 @@ public final class SelectablePeerNode: ASDisplayNode {
switch storyMode { switch storyMode {
case .createStory: case .createStory:
//TODO:localize title = strings.Share_PostToStory
title = "Post\nto Story"
overrideImage = .storyIcon overrideImage = .storyIcon
case .repostStory: case .repostStory:
title = strings.Share_RepostStory title = strings.Share_RepostStory

View File

@ -898,9 +898,8 @@ private class ChatQrCodeScreenNode: ViewControllerTracingNode, ASScrollViewDeleg
self.doneButton.title = self.presentationData.strings.Share_ShareMessage self.doneButton.title = self.presentationData.strings.Share_ShareMessage
} }
//TODO:localize
self.scanButton = SolidRoundedButtonNode(theme: SolidRoundedButtonTheme(backgroundColor: .clear, foregroundColor: self.presentationData.theme.actionSheet.controlAccentColor), font: .regular, height: 42.0, cornerRadius: 0.0, gloss: false) self.scanButton = SolidRoundedButtonNode(theme: SolidRoundedButtonTheme(backgroundColor: .clear, foregroundColor: self.presentationData.theme.actionSheet.controlAccentColor), font: .regular, height: 42.0, cornerRadius: 0.0, gloss: false)
self.scanButton.title = "Scan QR Code" self.scanButton.title = presentationData.strings.PeerInfo_QRCode_Scan
self.scanButton.icon = UIImage(bundleImageName: "Settings/ScanQr") self.scanButton.icon = UIImage(bundleImageName: "Settings/ScanQr")
self.listNode = ListView() self.listNode = ListView()

View File

@ -75,7 +75,7 @@ final class ForumModeComponent: Component {
ItemComponent( ItemComponent(
theme: component.theme, theme: component.theme,
animation: "ForumTabs", animation: "ForumTabs",
title: "Tabs", title: component.strings.PeerInfo_Topics_Tabs,
isSelected: component.mode == .tabs isSelected: component.mode == .tabs
) )
), ),
@ -104,7 +104,7 @@ final class ForumModeComponent: Component {
ItemComponent( ItemComponent(
theme: component.theme, theme: component.theme,
animation: "ForumList", animation: "ForumList",
title: "List", title: component.strings.PeerInfo_Topics_List,
isSelected: component.mode == .list isSelected: component.mode == .list
) )
), ),

View File

@ -153,7 +153,7 @@ final class ForumSettingsScreenComponent: Component {
if case .legacyGroup = peer { if case .legacyGroup = peer {
let context = component.context let context = component.context
let signal: Signal<EnginePeer.Id?, NoError> = context.engine.peers.convertGroupToSupergroup(peerId: peer.id, additionalProcessing: { upgradedPeerId -> Signal<Never, NoError> in let signal: Signal<EnginePeer.Id?, NoError> = context.engine.peers.convertGroupToSupergroup(peerId: peer.id, additionalProcessing: { upgradedPeerId -> Signal<Never, NoError> in
return context.engine.peers.setChannelForumMode(id: upgradedPeerId, isForum: true, displayForumAsTabs: false) return context.engine.peers.setChannelForumMode(id: upgradedPeerId, isForum: true, displayForumAsTabs: displayForumAsTabs)
}) })
|> map(Optional.init) |> map(Optional.init)
|> `catch` { [weak self] error -> Signal<PeerId?, NoError> in |> `catch` { [weak self] error -> Signal<PeerId?, NoError> in
@ -244,11 +244,10 @@ final class ForumSettingsScreenComponent: Component {
let presentationData = component.context.sharedContext.currentPresentationData.with { $0 } let presentationData = component.context.sharedContext.currentPresentationData.with { $0 }
//TODO:localize
let navigationTitleSize = self.navigationTitle.update( let navigationTitleSize = self.navigationTitle.update(
transition: transition, transition: transition,
component: AnyComponent(MultilineTextComponent( component: AnyComponent(MultilineTextComponent(
text: .plain(NSAttributedString(string: "Topics", font: Font.semibold(17.0), textColor: environment.theme.rootController.navigationBar.primaryTextColor)), text: .plain(NSAttributedString(string: environment.strings.PeerInfo_Topics_Title, font: Font.semibold(17.0), textColor: environment.theme.rootController.navigationBar.primaryTextColor)),
horizontalAlignment: .center horizontalAlignment: .center
)), )),
environment: {}, environment: {},
@ -293,7 +292,7 @@ final class ForumSettingsScreenComponent: Component {
contentHeight += 124.0 contentHeight += 124.0
let subtitleString = NSMutableAttributedString(attributedString: parseMarkdownIntoAttributedString("The group chat will be divided into topics created by admins or users.", attributes: MarkdownAttributes( let subtitleString = NSMutableAttributedString(attributedString: parseMarkdownIntoAttributedString(environment.strings.PeerInfo_Topics_EnableTopicsInfo, attributes: MarkdownAttributes(
body: MarkdownAttributeSet(font: Font.regular(15.0), textColor: environment.theme.list.freeTextColor), body: MarkdownAttributeSet(font: Font.regular(15.0), textColor: environment.theme.list.freeTextColor),
bold: MarkdownAttributeSet(font: Font.semibold(15.0), textColor: environment.theme.list.freeTextColor), bold: MarkdownAttributeSet(font: Font.semibold(15.0), textColor: environment.theme.list.freeTextColor),
link: MarkdownAttributeSet(font: Font.regular(15.0), textColor: environment.theme.list.itemAccentColor), link: MarkdownAttributeSet(font: Font.regular(15.0), textColor: environment.theme.list.itemAccentColor),
@ -344,7 +343,7 @@ final class ForumSettingsScreenComponent: Component {
title: AnyComponent(VStack([ title: AnyComponent(VStack([
AnyComponentWithIdentity(id: AnyHashable(0), component: AnyComponent(MultilineTextComponent( AnyComponentWithIdentity(id: AnyHashable(0), component: AnyComponent(MultilineTextComponent(
text: .plain(NSAttributedString( text: .plain(NSAttributedString(
string: "Enable Topics", string: environment.strings.PeerInfo_Topics_EnableTopics,
font: Font.regular(presentationData.listsFontSize.baseDisplaySize), font: Font.regular(presentationData.listsFontSize.baseDisplaySize),
textColor: environment.theme.list.itemPrimaryTextColor textColor: environment.theme.list.itemPrimaryTextColor
)), )),
@ -389,7 +388,7 @@ final class ForumSettingsScreenComponent: Component {
theme: environment.theme, theme: environment.theme,
header: AnyComponent(MultilineTextComponent( header: AnyComponent(MultilineTextComponent(
text: .plain(NSAttributedString( text: .plain(NSAttributedString(
string: "DISPLAY AS", string: environment.strings.PeerInfo_Topics_DisplayAs,
font: Font.regular(presentationData.listsFontSize.itemListBaseHeaderFontSize), font: Font.regular(presentationData.listsFontSize.itemListBaseHeaderFontSize),
textColor: environment.theme.list.freeTextColor textColor: environment.theme.list.freeTextColor
)), )),
@ -397,7 +396,7 @@ final class ForumSettingsScreenComponent: Component {
)), )),
footer: AnyComponent(MultilineTextComponent( footer: AnyComponent(MultilineTextComponent(
text: .markdown( text: .markdown(
text: "Choose how topics appear for all members.", text: environment.strings.PeerInfo_Topics_DisplayAsInfo,
attributes: MarkdownAttributes( attributes: MarkdownAttributes(
body: MarkdownAttributeSet(font: Font.regular(presentationData.listsFontSize.itemListBaseHeaderFontSize), textColor: environment.theme.list.freeTextColor), body: MarkdownAttributeSet(font: Font.regular(presentationData.listsFontSize.itemListBaseHeaderFontSize), textColor: environment.theme.list.freeTextColor),
bold: MarkdownAttributeSet(font: Font.semibold(presentationData.listsFontSize.itemListBaseHeaderFontSize), textColor: environment.theme.list.freeTextColor), bold: MarkdownAttributeSet(font: Font.semibold(presentationData.listsFontSize.itemListBaseHeaderFontSize), textColor: environment.theme.list.freeTextColor),

View File

@ -2581,8 +2581,7 @@ private func editingItems(data: PeerInfoScreenData?, boostStatus: ChannelBoostSt
} }
if canSetupTopics { if canSetupTopics {
//TODO:localize let label = channel.flags.contains(.isForum) ? presentationData.strings.PeerInfo_OptionTopics_Enabled : presentationData.strings.PeerInfo_OptionTopics_Disabled
let label = channel.flags.contains(.isForum) ? "Enabled" : "Disabled"
items[.peerDataSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemTopics, label: .text(label), text: presentationData.strings.PeerInfo_OptionTopics, icon: UIImage(bundleImageName: "Settings/Menu/Topics"), action: { items[.peerDataSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemTopics, label: .text(label), text: presentationData.strings.PeerInfo_OptionTopics, icon: UIImage(bundleImageName: "Settings/Menu/Topics"), action: {
if let topicsLimitedReason = topicsLimitedReason { if let topicsLimitedReason = topicsLimitedReason {
interaction.displayTopicsLimited(topicsLimitedReason) interaction.displayTopicsLimited(topicsLimitedReason)
@ -2710,8 +2709,7 @@ private func editingItems(data: PeerInfoScreenData?, boostStatus: ChannelBoostSt
} }
if canSetupTopics { if canSetupTopics {
//TODO:localize items[.peerPublicSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemTopics, label: .text(presentationData.strings.PeerInfo_OptionTopics_Disabled), text: presentationData.strings.PeerInfo_OptionTopics, icon: UIImage(bundleImageName: "Settings/Menu/Topics"), action: {
items[.peerPublicSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemTopics, label: .text("Disabled"), text: presentationData.strings.PeerInfo_OptionTopics, icon: UIImage(bundleImageName: "Settings/Menu/Topics"), action: {
if let topicsLimitedReason = topicsLimitedReason { if let topicsLimitedReason = topicsLimitedReason {
interaction.displayTopicsLimited(topicsLimitedReason) interaction.displayTopicsLimited(topicsLimitedReason)
} else { } else {

View File

@ -505,11 +505,11 @@ extension ChatControllerImpl {
self.present( self.present(
textAlertController( textAlertController(
context: self.context, context: self.context,
title: "Trim to selected range?", title: self.presentationData.strings.Chat_TrimVoiceMessageToResume_Title,
text: "Audio outside that range will be discarded, and recording will start immediately.", text: self.presentationData.strings.Chat_TrimVoiceMessageToResume_Text,
actions: [ actions: [
TextAlertAction(type: .genericAction, title: self.presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .genericAction, title: self.presentationData.strings.Common_Cancel, action: {}),
TextAlertAction(type: .defaultAction, title: "Proceed", action: { TextAlertAction(type: .defaultAction, title: self.presentationData.strings.Chat_TrimVoiceMessageToResume_Proceed, action: {
proceed() proceed()
}) })
] ]