From e491e82cd1018251d03cfe5af60b1081109c863d Mon Sep 17 00:00:00 2001 From: Ivan Migalev Date: Mon, 6 Nov 2023 19:17:23 +0100 Subject: [PATCH] (IDEA-327207) Settings Transfer: fix localization issues GitOrigin-RevId: ab36838f1488285e8e0765349ed16a9bbfed4392 --- .../resources/messages/IdeBundle.properties | 7 +++ .../com/intellij/ide/RecentProjectMetaInfo.kt | 3 +- .../TransferSettingsFacade.kt | 63 ------------------- .../vswin/VSWinTransferSettingsProvider.kt | 4 +- .../sections/IdeRepresentationItem.kt | 17 ++--- .../ideVersion/sections/KeymapSection.kt | 24 +++---- .../ideVersion/sections/PluginsSection.kt | 5 +- .../sections/RecentProjectsSection.kt | 4 +- .../transfer/TransferSettingsProgress.kt | 13 ++-- 9 files changed, 37 insertions(+), 103 deletions(-) delete mode 100644 platform/platform-impl/src/com/intellij/ide/customize/transferSettings/TransferSettingsFacade.kt diff --git a/platform/platform-api/resources/messages/IdeBundle.properties b/platform/platform-api/resources/messages/IdeBundle.properties index 3e21bbb2ebf0..cb7291d5ba88 100644 --- a/platform/platform-api/resources/messages/IdeBundle.properties +++ b/platform/platform-api/resources/messages/IdeBundle.properties @@ -277,6 +277,13 @@ error.cannot.convert.project=Cannot convert project: {0} message.text.files.do.not.exist=The following files don''t exist:
\ {0}The corresponding modules won''t be converted. Do you want to continue? +transfer-settings.keymap.extension-custom-shortcuts=Some extensions from {0} might have added custom shortcuts. These shortcuts are also displayed in this list +transfer-settings.keymap.custom-shortcuts=Only custom shortcuts +transfer-settings.keymap.more=more\u2026 +transfer-settings.plugins.more=and {0} more +transfer-settings.sections.more=More.. +transfer-settings.vs-win.resharper-settings-found=ReSharper settings are found and will be imported + select.in.file.structure=File Structure about.box.build.number=Build #{0} diff --git a/platform/platform-impl/src/com/intellij/ide/RecentProjectMetaInfo.kt b/platform/platform-impl/src/com/intellij/ide/RecentProjectMetaInfo.kt index 7a2f25d10512..9eb1b24f295c 100644 --- a/platform/platform-impl/src/com/intellij/ide/RecentProjectMetaInfo.kt +++ b/platform/platform-impl/src/com/intellij/ide/RecentProjectMetaInfo.kt @@ -5,6 +5,7 @@ package com.intellij.ide import com.intellij.openapi.components.BaseState import com.intellij.openapi.util.IntellijInternalApi +import com.intellij.openapi.util.NlsSafe import com.intellij.openapi.wm.impl.FrameInfo import com.intellij.util.xmlb.annotations.Attribute import com.intellij.util.xmlb.annotations.MapAnnotation @@ -24,7 +25,7 @@ class RecentProjectMetaInfo : BaseState() { var hidden: Boolean by property(false) @get:Attribute - var displayName: String? by string() + var displayName: @NlsSafe String? by string() // to set frame title as early as possible @get:Attribute diff --git a/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/TransferSettingsFacade.kt b/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/TransferSettingsFacade.kt deleted file mode 100644 index 14da3bdf6905..000000000000 --- a/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/TransferSettingsFacade.kt +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.intellij.ide.customize.transferSettings - -import com.intellij.ide.customize.transferSettings.controllers.TransferSettingsListener -import com.intellij.ide.customize.transferSettings.models.IdeVersion -import com.intellij.ide.customize.transferSettings.models.Settings -import com.intellij.ide.customize.transferSettings.models.TransferSettingsModel -import com.intellij.ide.customize.transferSettings.providers.TransferSettingsPerformContext -import com.intellij.ide.customize.transferSettings.providers.vscode.VSCodeTransferSettingsProvider -import com.intellij.ide.customize.transferSettings.ui.TransferSettingsProgressIndicatorBase -import com.intellij.ide.customize.transferSettings.ui.TransferSettingsView -import com.intellij.openapi.project.Project -import com.intellij.util.concurrency.ThreadingAssertions -import javax.swing.JButton -import javax.swing.JLabel -import javax.swing.JProgressBar - -class TransferSettingsFacade(private val project: Project?) { - private val config = DefaultTransferSettingsConfiguration(TransferSettingsDataProvider(VSCodeTransferSettingsProvider()), false) - val hasVsCode = (config.dataProvider.orderedIdeVersions.firstOrNull() as? IdeVersion)?.provider is VSCodeTransferSettingsProvider - - private val model: TransferSettingsModel = TransferSettingsModel(config, true) - - val button by lazy { JButton("Import") } - val status by lazy { JLabel("No yet status") } - val progressBar by lazy { JProgressBar(0, 100) } - val successOrFailureLabel by lazy { JLabel().apply { isVisible = false } } - private val progressBase by lazy { TransferSettingsProgressIndicatorBase(progressBar, status, successOrFailureLabel) } - - val view by lazy { initView() } - - private fun initView(): TransferSettingsView { - ThreadingAssertions.assertEventDispatchThread() - - val view = TransferSettingsView(config, model) - - button.addActionListener { - val selectedIde = view.selectedIde as? IdeVersion ?: error("Selected ide is null or not IdeVersion") - config.controller.performImport(project, selectedIde, progressBase) - } - - config.controller.addListener(object : TransferSettingsListener { - override fun importStarted(ideVersion: IdeVersion, settings: Settings) { - successOrFailureLabel.isVisible = false - button.isEnabled = false - } - - override fun importFailed(ideVersion: IdeVersion, settings: Settings, throwable: Throwable) { - successOrFailureLabel.isVisible = true - successOrFailureLabel.text = "Failed" - button.isEnabled = true - } - - override fun importPerformed(ideVersion: IdeVersion, settings: Settings, context: TransferSettingsPerformContext) { - successOrFailureLabel.isVisible = true - successOrFailureLabel.text = "Success" - progressBar.isVisible = false - } - }) - - return view - } -} \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/providers/vswin/VSWinTransferSettingsProvider.kt b/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/providers/vswin/VSWinTransferSettingsProvider.kt index 2986c0eac204..4242b6ceb4b0 100644 --- a/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/providers/vswin/VSWinTransferSettingsProvider.kt +++ b/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/providers/vswin/VSWinTransferSettingsProvider.kt @@ -190,7 +190,7 @@ class VSWinTransferSettingsProvider : TransferSettingsProvider { private fun timeFn() = System.nanoTime() private fun convertTimeFn(time: Long): Duration = time.nanoseconds - override fun getRightPanel(ideV: IdeVersion, config: TransferSettingsConfiguration): TransferSettingsRightPanelChooser? { + override fun getRightPanel(ideV: IdeVersion, config: TransferSettingsConfiguration): TransferSettingsRightPanelChooser { return VSWinTransferSettingsRightPanelChooser(ideV, config) } @@ -200,7 +200,7 @@ class VSWinTransferSettingsProvider : TransferSettingsProvider { panel { row { icon(AllIcons.TransferSettings.Resharper).customize(UnscaledGaps(left = 5, right = 5)) - label("ReSharper settings are found and will be imported") + label(IdeBundle.message("transfer-settings.vs-win.resharper-settings-found")) } } } diff --git a/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/IdeRepresentationItem.kt b/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/IdeRepresentationItem.kt index c8f395385273..ffe550b7181d 100755 --- a/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/IdeRepresentationItem.kt +++ b/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/IdeRepresentationItem.kt @@ -1,33 +1,28 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.ide.customize.transferSettings.ui.representation.ideVersion.sections +import com.intellij.ide.IdeBundle import com.intellij.ide.customize.transferSettings.models.SettingsPreferences import com.intellij.ide.customize.transferSettings.models.SettingsPreferencesKind import com.intellij.ide.customize.transferSettings.ui.representation.ideVersion.TransferSettingsIdeRepresentationListener import com.intellij.openapi.observable.properties.AtomicBooleanProperty import com.intellij.openapi.ui.DialogPanel -import com.intellij.openapi.ui.popup.JBPopup import com.intellij.openapi.ui.popup.JBPopupFactory import com.intellij.openapi.util.IconLoader import com.intellij.openapi.util.NlsContexts -import com.intellij.ui.ActiveComponent import com.intellij.ui.awt.RelativePoint -import com.intellij.ui.components.panels.Wrapper import com.intellij.ui.dsl.builder.* import com.intellij.ui.dsl.gridLayout.UnscaledGaps -import com.intellij.ui.popup.AbstractPopup import com.intellij.ui.scale.JBUIScale import com.intellij.util.EventDispatcher import com.intellij.util.ui.JBUI import com.intellij.util.ui.UIUtil -import java.util.EventListener -import javax.swing.Icon -import javax.swing.JComponent -import javax.swing.JLabel import org.jetbrains.annotations.Nls import java.awt.Dimension import java.awt.Point -import java.awt.Rectangle +import javax.swing.Icon +import javax.swing.JComponent +import javax.swing.JLabel abstract class IdeRepresentationSection(private val prefs: SettingsPreferences, final override val key: SettingsPreferencesKind, @@ -41,7 +36,7 @@ abstract class IdeRepresentationSection(private val prefs: SettingsPreferences, protected open val disabledCheckboxText: String? = null private val leftGap = 20 private var morePanelFactory: ((AtomicBooleanProperty) -> JComponent)? = null - private var moreLabel: String = "More.." + private var moreLabel: @Nls String = IdeBundle.message("transfer-settings.sections.more") val isSelected: Boolean by _isSelected diff --git a/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/KeymapSection.kt b/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/KeymapSection.kt index 63a29551a735..fd724257fc59 100644 --- a/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/KeymapSection.kt +++ b/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/KeymapSection.kt @@ -1,7 +1,8 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.ide.customize.transferSettings.ui.representation.ideVersion.sections import com.intellij.icons.AllIcons +import com.intellij.ide.IdeBundle import com.intellij.ide.customize.transferSettings.models.* import com.intellij.openapi.actionSystem.KeyboardShortcut import com.intellij.openapi.keymap.KeymapUtil @@ -22,7 +23,6 @@ import com.intellij.util.ui.UIUtil import com.intellij.util.ui.components.BorderLayoutPanel import net.miginfocom.swing.MigLayout import org.jetbrains.annotations.Nls -import java.awt.Font import javax.swing.* import javax.swing.border.CompoundBorder @@ -30,23 +30,23 @@ class KeymapSection(private val ideVersion: IdeVersion) : IdeRepresentationSecti companion object { @Nls private val delim = if (SystemInfo.isMac) "" else "+" - private val delimToParse = "+" + private const val DELIM_TO_PARSE = "+" private fun getKeystrokeText(accelerator: KeyStroke?): String { if (accelerator == null) return "" return if (SystemInfo.isMac) - MacKeymapUtil.getKeyStrokeText(accelerator, delimToParse, true) + MacKeymapUtil.getKeyStrokeText(accelerator, DELIM_TO_PARSE, true) else KeymapUtil.getKeystrokeText(accelerator) } private fun init(sc: KeyboardShortcut): Pair, List?> { - return Pair(getKeystrokeText(sc.firstKeyStroke).split(delimToParse), - sc.secondKeyStroke?.let { getKeystrokeText(it).split(delimToParse) }) + return Pair(getKeystrokeText(sc.firstKeyStroke).split(DELIM_TO_PARSE), + sc.secondKeyStroke?.let { getKeystrokeText(it).split(DELIM_TO_PARSE) }) } private fun init(sc: DummyKeyboardShortcut): Pair, List?> { - return Pair(sc.firstKeyStroke.split(delimToParse), sc.secondKeyStroke?.split(delimToParse)) + return Pair(sc.firstKeyStroke.split(DELIM_TO_PARSE), sc.secondKeyStroke?.split(DELIM_TO_PARSE)) } } @@ -63,15 +63,15 @@ class KeymapSection(private val ideVersion: IdeVersion) : IdeRepresentationSecti val customShortcuts = (keymap as? PatchedKeymap)?.overrides if (!customShortcuts.isNullOrEmpty()) { - withMoreLabel("more...") { + withMoreLabel(IdeBundle.message("transfer-settings.keymap.more")) { BorderLayoutPanel().apply { border = JBUI.Borders.empty() addToTop(JPanel().apply { layout = BoxLayout(this, BoxLayout.Y_AXIS) - add(JLabel("Only custom shortcuts").apply { + add(JLabel(IdeBundle.message("transfer-settings.keymap.custom-shortcuts")).apply { border = JBUI.Borders.empty(5, 5, 0, 5) }) - add(JLabel("Some extensions from ${ideVersion.name} might have added custom shortcuts. These shortcuts are also displayed in this list").apply { + add(JLabel(IdeBundle.message("transfer-settings.keymap.extension-custom-shortcuts", ideVersion.name)).apply { border = JBUI.Borders.empty(0, 5) font = JBFont.small() foreground = JBUI.CurrentTheme.Label.disabledForeground() @@ -93,7 +93,7 @@ class KeymapSection(private val ideVersion: IdeVersion) : IdeRepresentationSecti return panel { val items = keymap.demoShortcuts.take(LIMIT) - items.forEachIndexed { idx, it -> + items.forEach { row { val dsc = it.defaultShortcut shortcutComp(dsc) @@ -125,7 +125,7 @@ class KeymapSection(private val ideVersion: IdeVersion) : IdeRepresentationSecti if (dsc is DummyKeyboardShortcut) cell(KeyboardTwoShortcuts(dsc, _isSelected, _isEnabled)).customize(UnscaledGaps.EMPTY) } - private inner class KeyboardTwoShortcuts private constructor(private val shortcut: Pair, List?>, private val isSelected: AtomicBooleanProperty, private val isEnabledPanel: AtomicBooleanProperty) : JPanel() { + private inner class KeyboardTwoShortcuts private constructor(shortcut: Pair, List?>, private val isSelected: AtomicBooleanProperty, private val isEnabledPanel: AtomicBooleanProperty) : JPanel() { init { layout = MigLayout("novisualpadding, ins 0, gap 0") parsePart(shortcut.first) diff --git a/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/PluginsSection.kt b/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/PluginsSection.kt index eff027da9389..0284c63475de 100755 --- a/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/PluginsSection.kt +++ b/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/PluginsSection.kt @@ -15,14 +15,14 @@ import com.intellij.util.ui.JBUI import com.intellij.util.ui.UIUtil import javax.swing.JComponent -class PluginsSection(private val ideVersion: IdeVersion) : IdeRepresentationSection(ideVersion.settingsCache.preferences, SettingsPreferencesKind.Plugins, AllIcons.TransferSettings.PluginsAndFeatures) { +class PluginsSection(ideVersion: IdeVersion) : IdeRepresentationSection(ideVersion.settingsCache.preferences, SettingsPreferencesKind.Plugins, AllIcons.TransferSettings.PluginsAndFeatures) { private val plugins = ideVersion.settingsCache.plugins.values.filter { !it.isHidden } override val name: String = "Plugins and Features" override fun worthShowing(): Boolean = plugins.isNotEmpty() override fun getContent(): JComponent { if (plugins.size > LIMIT) { - withMoreLabel("and ${plugins.size - LIMIT} more") { + withMoreLabel(IdeBundle.message("transfer-settings.plugins.more", plugins.size - LIMIT)) { return@withMoreLabel JBScrollPane(Wrapper(panel { for (plugin in plugins.drop(LIMIT)) { createPluginRow(plugin, this) @@ -49,6 +49,7 @@ class PluginsSection(private val ideVersion: IdeVersion) : IdeRepresentationSect } } + @Suppress("DialogTitleCapitalization") comment( when (plugin) { is BuiltInFeature -> IdeBundle.message("transfersettings.plugin.built.in") diff --git a/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/RecentProjectsSection.kt b/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/RecentProjectsSection.kt index cd986cb4fe0c..d16844e15c3f 100644 --- a/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/RecentProjectsSection.kt +++ b/platform/platform-impl/src/com/intellij/ide/customize/transferSettings/ui/representation/ideVersion/sections/RecentProjectsSection.kt @@ -1,4 +1,4 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.ide.customize.transferSettings.ui.representation.ideVersion.sections import com.intellij.icons.AllIcons @@ -6,10 +6,8 @@ import com.intellij.ide.IdeBundle import com.intellij.ide.customize.transferSettings.models.IdeVersion import com.intellij.ide.customize.transferSettings.models.RecentPathInfo import com.intellij.ide.customize.transferSettings.models.SettingsPreferencesKind -import com.intellij.openapi.util.NlsSafe import com.intellij.ui.components.JBScrollPane import com.intellij.ui.components.panels.Wrapper -import com.intellij.ui.dsl.builder.Align import com.intellij.ui.dsl.builder.panel import com.intellij.util.ui.JBUI import org.jetbrains.annotations.Nls diff --git a/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/transfer/TransferSettingsProgress.kt b/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/transfer/TransferSettingsProgress.kt index e585020c547b..133dfd24828b 100644 --- a/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/transfer/TransferSettingsProgress.kt +++ b/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/transfer/TransferSettingsProgress.kt @@ -4,11 +4,7 @@ package com.intellij.ide.startup.importSettings.transfer import com.intellij.icons.AllIcons import com.intellij.ide.customize.transferSettings.models.BaseIdeVersion import com.intellij.ide.customize.transferSettings.models.IdeVersion -import com.intellij.ide.startup.importSettings.data.DialogImportItem -import com.intellij.ide.startup.importSettings.data.IconProductSize -import com.intellij.ide.startup.importSettings.data.ImportFromProduct -import com.intellij.ide.startup.importSettings.data.ImportProgress -import com.intellij.ide.startup.importSettings.data.SettingsContributor +import com.intellij.ide.startup.importSettings.data.* import com.intellij.ide.startup.importSettings.jb.JbProductInfo import com.intellij.ide.startup.importSettings.jb.NameMappings import com.intellij.openapi.application.ModalityState @@ -63,16 +59,15 @@ class ProgressIndicatorAdapter(private val backend: TransferSettingsProgressIndi override fun cancel() { cancelled = true } override fun isCanceled() = cancelled - private val textProp = Property(null) - private val text2Prop = Property(null) + private val textProp = Property<@ProgressText String?>(null) + private val text2Prop = Property<@ProgressText String?>(null) init { textProp.compose(text2Prop, ::Pair).advise(Lifetime.Eternal) { (t1, t2) -> val text = when { t1 == null && t2 == null -> null t1 == null && t2 != null -> t2 t1 != null && t2 == null -> t1 - t1 != null && t2 != null -> "$t1 / $t2" - else -> error("Impossible") + else -> "$t1 / $t2" } backend.progressMessage.set(text) }