From 8859c81e5e0af386420a4af4e69e5ff1f86f5770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Mon, 19 Jul 2021 14:34:03 +0200 Subject: [PATCH 01/19] update runtime and verification build versions --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 795629b..e5503d5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,10 +8,10 @@ pluginSinceBuild = 202 pluginUntilBuild = 211.* # Plugin Verifier integration -> https://github.com/JetBrains/gradle-intellij-plugin#plugin-verifier-dsl # See https://jb.gg/intellij-platform-builds-list for available build versions -pluginVerifierIdeVersions = 2020.2.4, 2020.3.2, 2021.1 +pluginVerifierIdeVersions = 2020.2.4, 2020.3.4, 2021.1.1 platformType = IC -platformVersion = 2021.1 +platformVersion = 2021.1.3 platformDownloadSources = true # Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html # Example: platformPlugins = com.intellij.java, com.jetbrains.php:203.4449.22 From 6685d6233fc9bd4bbd9f5cb17c96e6ffd317bc7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Mon, 19 Jul 2021 14:36:22 +0200 Subject: [PATCH 02/19] migrate build script and update dependencies --- CHANGELOG.md | 8 +++++-- build.gradle.kts | 54 +++++++++++++++++++++--------------------------- 2 files changed, 29 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5cbaef..c92ef34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,13 +3,17 @@ # easy-i18n Changelog ## [Unreleased] +### Changed +- Update dependencies +- Migrate gradle build script + ## [1.3.0] ### Added - Scroll to created / edited translation inside Tree-/Table-View - Support for working with multiple projects at once ### Changed -- Updated dependencies +- Update dependencies - Load translations even if ui tool window is not opened ### Fixed @@ -28,7 +32,7 @@ - Support for IntelliJ 2021.1 ### Changed -- Updated dependencies +- Update dependencies ### Fixed - Exception during i18n key completion / annotation diff --git a/build.gradle.kts b/build.gradle.kts index 70290e9..e817fcc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,4 @@ import io.gitlab.arturbosch.detekt.Detekt -import org.jetbrains.changelog.closure import org.jetbrains.changelog.markdownToHTML import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -11,7 +10,7 @@ plugins { // Kotlin support id("org.jetbrains.kotlin.jvm") version "1.5.10" // gradle-intellij-plugin - read more: https://github.com/JetBrains/gradle-intellij-plugin - id("org.jetbrains.intellij") version "0.7.3" + id("org.jetbrains.intellij") version "1.0" // gradle-changelog-plugin - read more: https://github.com/JetBrains/gradle-changelog-plugin id("org.jetbrains.changelog") version "1.1.2" // detekt linter - read more: https://detekt.github.io/detekt/gradle.html @@ -26,7 +25,6 @@ version = properties("pluginVersion") // Configure project's dependencies repositories { mavenCentral() - jcenter() } dependencies { detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.17.1") @@ -35,14 +33,14 @@ dependencies { // Configure gradle-intellij-plugin plugin. // Read more: https://github.com/JetBrains/gradle-intellij-plugin intellij { - pluginName = properties("pluginName") - version = properties("platformVersion") - type = properties("platformType") - downloadSources = properties("platformDownloadSources").toBoolean() - updateSinceUntilBuild = true + pluginName.set(properties("pluginName")) + version.set(properties("platformVersion")) + type.set(properties("platformType")) + downloadSources.set(properties("platformDownloadSources").toBoolean()) + updateSinceUntilBuild.set(true) // Plugin Dependencies. Uses `platformPlugins` property from the gradle.properties file. - setPlugins(*properties("platformPlugins").split(',').map(String::trim).filter(String::isNotEmpty).toTypedArray()) + plugins.set(properties("platformPlugins").split(',').map(String::trim).filter(String::isNotEmpty)) } // Configure gradle-changelog-plugin plugin. @@ -80,43 +78,37 @@ tasks { } patchPluginXml { - version(properties("pluginVersion")) - sinceBuild(properties("pluginSinceBuild")) - untilBuild(properties("pluginUntilBuild")) + version.set(properties("pluginVersion")) + sinceBuild.set(properties("pluginSinceBuild")) + untilBuild.set(properties("pluginUntilBuild")) // Extract the section from README.md and provide for the plugin's manifest - pluginDescription( - closure { - File("./README.md").readText().lines().run { - val start = "" - val end = "" + pluginDescription.set( + File(projectDir, "README.md").readText().lines().run { + val start = "" + val end = "" - if (!containsAll(listOf(start, end))) { - throw GradleException("Plugin description section not found in README.md:\n$start ... $end") - } - subList(indexOf(start) + 1, indexOf(end)) - }.joinToString("\n").run { markdownToHTML(this) } - } + if (!containsAll(listOf(start, end))) { + throw GradleException("Plugin description section not found in README.md:\n$start ... $end") + } + subList(indexOf(start) + 1, indexOf(end)) + }.joinToString("\n").run { markdownToHTML(this) } ) // Get the latest available change notes from the changelog file - changeNotes( - closure { - changelog.getLatest().toHTML() - } - ) + changeNotes.set(provider { changelog.getLatest().toHTML() }) } runPluginVerifier { - ideVersions(properties("pluginVerifierIdeVersions")) + ideVersions.set(properties("pluginVerifierIdeVersions").split(',').map(String::trim).filter(String::isNotEmpty)) } publishPlugin { dependsOn("patchChangelog") - token(System.getenv("PUBLISH_TOKEN")) + token.set(System.getenv("PUBLISH_TOKEN")) // pluginVersion is based on the SemVer (https://semver.org) and supports pre-release labels, like 2.1.7-alpha.3 // Specify pre-release label to publish the plugin in a custom Release Channel automatically. Read more: // https://plugins.jetbrains.com/docs/intellij/deployment.html#specifying-a-release-channel - channels(properties("pluginVersion").split('-').getOrElse(1) { "default" }.split('.').first()) + channels.set(listOf(properties("pluginVersion").split('-').getOrElse(1) { "default" }.split('.').first())) } } From 510134440f70c327b71b3d8da50f8591e425859b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Mon, 19 Jul 2021 14:42:15 +0200 Subject: [PATCH 03/19] declare dependency on com.intellij.modules.platform --- src/main/resources/META-INF/plugin.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 483a1ba..a299058 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -5,6 +5,7 @@ + com.intellij.modules.platform com.intellij.modules.lang From adea81704bca62cd055187edf711708e63fecc75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Mon, 19 Jul 2021 14:59:11 +0200 Subject: [PATCH 04/19] define optional dependency on kotlin plugin --- gradle.properties | 2 +- src/main/resources/META-INF/plugin.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index e5503d5..5fae5f1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,7 +15,7 @@ platformVersion = 2021.1.3 platformDownloadSources = true # Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html # Example: platformPlugins = com.intellij.java, com.jetbrains.php:203.4449.22 -platformPlugins = +platformPlugins = org.jetbrains.kotlin # Opt-out flag for bundling Kotlin standard library. # See https://kotlinlang.org/docs/reference/using-gradle.html#dependency-on-the-standard-library for details. diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index a299058..d8180e3 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -7,6 +7,7 @@ com.intellij.modules.platform com.intellij.modules.lang + org.jetbrains.kotlin From 0618b4686f41c170bc03df57f81ed1c37eb7626c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Mon, 19 Jul 2021 15:00:59 +0200 Subject: [PATCH 05/19] move ui packages into root folder --- .../easyi18n/TranslatorToolWindowFactory.java | 6 +++--- .../easyi18n/{ui => }/action/AddAction.java | 4 ++-- .../easyi18n/{ui => }/action/ReloadAction.java | 2 +- .../easyi18n/{ui => }/action/SearchAction.java | 2 +- .../easyi18n/{ui => }/action/SettingsAction.java | 4 ++-- .../action/treeview/CollapseTreeViewAction.java | 2 +- .../action/treeview/ExpandTreeViewAction.java | 2 +- .../easyi18n/{ui => }/dialog/AddDialog.java | 2 +- .../easyi18n/{ui => }/dialog/EditDialog.java | 4 ++-- .../easyi18n/{ui => }/dialog/SettingsDialog.java | 2 +- .../dialog/descriptor/DeleteActionDescriptor.java | 2 +- .../editor/I18nCompletionContributor.java | 2 +- .../{ui => }/editor/I18nCompletionProvider.java | 2 +- .../{ui => }/editor/I18nKeyAnnotator.java | 2 +- .../{ui => }/listener/DeleteKeyListener.java | 2 +- .../{ui => }/listener/PopupClickListener.java | 2 +- .../easyi18n/{ui => }/renderer/TableRenderer.java | 2 +- .../easyi18n/{ui => }/renderer/TreeRenderer.java | 5 +---- .../marhali/easyi18n/service/WindowManager.java | 4 ++-- .../marhali/easyi18n/{ui => }/tabs/TableView.form | 2 +- .../marhali/easyi18n/{ui => }/tabs/TableView.java | 10 +++++----- .../marhali/easyi18n/{ui => }/tabs/TreeView.form | 2 +- .../marhali/easyi18n/{ui => }/tabs/TreeView.java | 15 +++++++-------- src/main/resources/META-INF/plugin.xml | 4 ++-- 24 files changed, 41 insertions(+), 45 deletions(-) rename src/main/java/de/marhali/easyi18n/{ui => }/action/AddAction.java (94%) rename src/main/java/de/marhali/easyi18n/{ui => }/action/ReloadAction.java (94%) rename src/main/java/de/marhali/easyi18n/{ui => }/action/SearchAction.java (98%) rename src/main/java/de/marhali/easyi18n/{ui => }/action/SettingsAction.java (87%) rename src/main/java/de/marhali/easyi18n/{ui => }/action/treeview/CollapseTreeViewAction.java (94%) rename src/main/java/de/marhali/easyi18n/{ui => }/action/treeview/ExpandTreeViewAction.java (94%) rename src/main/java/de/marhali/easyi18n/{ui => }/dialog/AddDialog.java (98%) rename src/main/java/de/marhali/easyi18n/{ui => }/dialog/EditDialog.java (96%) rename src/main/java/de/marhali/easyi18n/{ui => }/dialog/SettingsDialog.java (98%) rename src/main/java/de/marhali/easyi18n/{ui => }/dialog/descriptor/DeleteActionDescriptor.java (95%) rename src/main/java/de/marhali/easyi18n/{ui => }/editor/I18nCompletionContributor.java (93%) rename src/main/java/de/marhali/easyi18n/{ui => }/editor/I18nCompletionProvider.java (98%) rename src/main/java/de/marhali/easyi18n/{ui => }/editor/I18nKeyAnnotator.java (97%) rename src/main/java/de/marhali/easyi18n/{ui => }/listener/DeleteKeyListener.java (93%) rename src/main/java/de/marhali/easyi18n/{ui => }/listener/PopupClickListener.java (95%) rename src/main/java/de/marhali/easyi18n/{ui => }/renderer/TableRenderer.java (96%) rename src/main/java/de/marhali/easyi18n/{ui => }/renderer/TreeRenderer.java (86%) rename src/main/java/de/marhali/easyi18n/{ui => }/tabs/TableView.form (93%) rename src/main/java/de/marhali/easyi18n/{ui => }/tabs/TableView.java (92%) rename src/main/java/de/marhali/easyi18n/{ui => }/tabs/TreeView.form (94%) rename src/main/java/de/marhali/easyi18n/{ui => }/tabs/TreeView.java (90%) diff --git a/src/main/java/de/marhali/easyi18n/TranslatorToolWindowFactory.java b/src/main/java/de/marhali/easyi18n/TranslatorToolWindowFactory.java index 281419f..161d4b4 100644 --- a/src/main/java/de/marhali/easyi18n/TranslatorToolWindowFactory.java +++ b/src/main/java/de/marhali/easyi18n/TranslatorToolWindowFactory.java @@ -9,9 +9,9 @@ import com.intellij.ui.content.ContentFactory; import de.marhali.easyi18n.service.DataStore; import de.marhali.easyi18n.service.WindowManager; -import de.marhali.easyi18n.ui.action.*; -import de.marhali.easyi18n.ui.tabs.TableView; -import de.marhali.easyi18n.ui.tabs.TreeView; +import de.marhali.easyi18n.action.*; +import de.marhali.easyi18n.tabs.TableView; +import de.marhali.easyi18n.tabs.TreeView; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/de/marhali/easyi18n/ui/action/AddAction.java b/src/main/java/de/marhali/easyi18n/action/AddAction.java similarity index 94% rename from src/main/java/de/marhali/easyi18n/ui/action/AddAction.java rename to src/main/java/de/marhali/easyi18n/action/AddAction.java index 317b971..20f9dba 100644 --- a/src/main/java/de/marhali/easyi18n/ui/action/AddAction.java +++ b/src/main/java/de/marhali/easyi18n/action/AddAction.java @@ -1,11 +1,11 @@ -package de.marhali.easyi18n.ui.action; +package de.marhali.easyi18n.action; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import de.marhali.easyi18n.service.WindowManager; -import de.marhali.easyi18n.ui.dialog.AddDialog; +import de.marhali.easyi18n.dialog.AddDialog; import de.marhali.easyi18n.util.TreeUtil; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/de/marhali/easyi18n/ui/action/ReloadAction.java b/src/main/java/de/marhali/easyi18n/action/ReloadAction.java similarity index 94% rename from src/main/java/de/marhali/easyi18n/ui/action/ReloadAction.java rename to src/main/java/de/marhali/easyi18n/action/ReloadAction.java index ed7ac40..5930963 100644 --- a/src/main/java/de/marhali/easyi18n/ui/action/ReloadAction.java +++ b/src/main/java/de/marhali/easyi18n/action/ReloadAction.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.action; +package de.marhali.easyi18n.action; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnAction; diff --git a/src/main/java/de/marhali/easyi18n/ui/action/SearchAction.java b/src/main/java/de/marhali/easyi18n/action/SearchAction.java similarity index 98% rename from src/main/java/de/marhali/easyi18n/ui/action/SearchAction.java rename to src/main/java/de/marhali/easyi18n/action/SearchAction.java index 123a615..42b16c7 100644 --- a/src/main/java/de/marhali/easyi18n/ui/action/SearchAction.java +++ b/src/main/java/de/marhali/easyi18n/action/SearchAction.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.action; +package de.marhali.easyi18n.action; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; diff --git a/src/main/java/de/marhali/easyi18n/ui/action/SettingsAction.java b/src/main/java/de/marhali/easyi18n/action/SettingsAction.java similarity index 87% rename from src/main/java/de/marhali/easyi18n/ui/action/SettingsAction.java rename to src/main/java/de/marhali/easyi18n/action/SettingsAction.java index 6bd209d..42feefa 100644 --- a/src/main/java/de/marhali/easyi18n/ui/action/SettingsAction.java +++ b/src/main/java/de/marhali/easyi18n/action/SettingsAction.java @@ -1,9 +1,9 @@ -package de.marhali.easyi18n.ui.action; +package de.marhali.easyi18n.action; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; -import de.marhali.easyi18n.ui.dialog.SettingsDialog; +import de.marhali.easyi18n.dialog.SettingsDialog; import org.jetbrains.annotations.NotNull; import java.util.ResourceBundle; diff --git a/src/main/java/de/marhali/easyi18n/ui/action/treeview/CollapseTreeViewAction.java b/src/main/java/de/marhali/easyi18n/action/treeview/CollapseTreeViewAction.java similarity index 94% rename from src/main/java/de/marhali/easyi18n/ui/action/treeview/CollapseTreeViewAction.java rename to src/main/java/de/marhali/easyi18n/action/treeview/CollapseTreeViewAction.java index 0d33a4e..a8390c3 100644 --- a/src/main/java/de/marhali/easyi18n/ui/action/treeview/CollapseTreeViewAction.java +++ b/src/main/java/de/marhali/easyi18n/action/treeview/CollapseTreeViewAction.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.action.treeview; +package de.marhali.easyi18n.action.treeview; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnAction; diff --git a/src/main/java/de/marhali/easyi18n/ui/action/treeview/ExpandTreeViewAction.java b/src/main/java/de/marhali/easyi18n/action/treeview/ExpandTreeViewAction.java similarity index 94% rename from src/main/java/de/marhali/easyi18n/ui/action/treeview/ExpandTreeViewAction.java rename to src/main/java/de/marhali/easyi18n/action/treeview/ExpandTreeViewAction.java index 915e7b4..0e07c9e 100644 --- a/src/main/java/de/marhali/easyi18n/ui/action/treeview/ExpandTreeViewAction.java +++ b/src/main/java/de/marhali/easyi18n/action/treeview/ExpandTreeViewAction.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.action.treeview; +package de.marhali.easyi18n.action.treeview; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnAction; diff --git a/src/main/java/de/marhali/easyi18n/ui/dialog/AddDialog.java b/src/main/java/de/marhali/easyi18n/dialog/AddDialog.java similarity index 98% rename from src/main/java/de/marhali/easyi18n/ui/dialog/AddDialog.java rename to src/main/java/de/marhali/easyi18n/dialog/AddDialog.java index 12527f9..8a50820 100644 --- a/src/main/java/de/marhali/easyi18n/ui/dialog/AddDialog.java +++ b/src/main/java/de/marhali/easyi18n/dialog/AddDialog.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.dialog; +package de.marhali.easyi18n.dialog; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogBuilder; diff --git a/src/main/java/de/marhali/easyi18n/ui/dialog/EditDialog.java b/src/main/java/de/marhali/easyi18n/dialog/EditDialog.java similarity index 96% rename from src/main/java/de/marhali/easyi18n/ui/dialog/EditDialog.java rename to src/main/java/de/marhali/easyi18n/dialog/EditDialog.java index 00884eb..09f3e21 100644 --- a/src/main/java/de/marhali/easyi18n/ui/dialog/EditDialog.java +++ b/src/main/java/de/marhali/easyi18n/dialog/EditDialog.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.dialog; +package de.marhali.easyi18n.dialog; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogBuilder; @@ -10,7 +10,7 @@ import de.marhali.easyi18n.service.DataStore; import de.marhali.easyi18n.model.KeyedTranslation; import de.marhali.easyi18n.model.TranslationDelete; import de.marhali.easyi18n.model.TranslationUpdate; -import de.marhali.easyi18n.ui.dialog.descriptor.DeleteActionDescriptor; +import de.marhali.easyi18n.dialog.descriptor.DeleteActionDescriptor; import javax.swing.*; import javax.swing.border.EtchedBorder; diff --git a/src/main/java/de/marhali/easyi18n/ui/dialog/SettingsDialog.java b/src/main/java/de/marhali/easyi18n/dialog/SettingsDialog.java similarity index 98% rename from src/main/java/de/marhali/easyi18n/ui/dialog/SettingsDialog.java rename to src/main/java/de/marhali/easyi18n/dialog/SettingsDialog.java index eeafe30..2d1f9e4 100644 --- a/src/main/java/de/marhali/easyi18n/ui/dialog/SettingsDialog.java +++ b/src/main/java/de/marhali/easyi18n/dialog/SettingsDialog.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.dialog; +package de.marhali.easyi18n.dialog; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.project.Project; diff --git a/src/main/java/de/marhali/easyi18n/ui/dialog/descriptor/DeleteActionDescriptor.java b/src/main/java/de/marhali/easyi18n/dialog/descriptor/DeleteActionDescriptor.java similarity index 95% rename from src/main/java/de/marhali/easyi18n/ui/dialog/descriptor/DeleteActionDescriptor.java rename to src/main/java/de/marhali/easyi18n/dialog/descriptor/DeleteActionDescriptor.java index a1cd61e..3460601 100644 --- a/src/main/java/de/marhali/easyi18n/ui/dialog/descriptor/DeleteActionDescriptor.java +++ b/src/main/java/de/marhali/easyi18n/dialog/descriptor/DeleteActionDescriptor.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.dialog.descriptor; +package de.marhali.easyi18n.dialog.descriptor; import com.intellij.openapi.ui.DialogBuilder; import com.intellij.openapi.ui.DialogWrapper; diff --git a/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionContributor.java b/src/main/java/de/marhali/easyi18n/editor/I18nCompletionContributor.java similarity index 93% rename from src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionContributor.java rename to src/main/java/de/marhali/easyi18n/editor/I18nCompletionContributor.java index fce0ae2..b47fa62 100644 --- a/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionContributor.java +++ b/src/main/java/de/marhali/easyi18n/editor/I18nCompletionContributor.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.editor; +package de.marhali.easyi18n.editor; import com.intellij.codeInsight.completion.CompletionContributor; import com.intellij.codeInsight.completion.CompletionType; diff --git a/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionProvider.java b/src/main/java/de/marhali/easyi18n/editor/I18nCompletionProvider.java similarity index 98% rename from src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionProvider.java rename to src/main/java/de/marhali/easyi18n/editor/I18nCompletionProvider.java index bc77b00..0afcf5c 100644 --- a/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionProvider.java +++ b/src/main/java/de/marhali/easyi18n/editor/I18nCompletionProvider.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.editor; +package de.marhali.easyi18n.editor; import com.intellij.codeInsight.completion.CompletionParameters; import com.intellij.codeInsight.completion.CompletionProvider; diff --git a/src/main/java/de/marhali/easyi18n/ui/editor/I18nKeyAnnotator.java b/src/main/java/de/marhali/easyi18n/editor/I18nKeyAnnotator.java similarity index 97% rename from src/main/java/de/marhali/easyi18n/ui/editor/I18nKeyAnnotator.java rename to src/main/java/de/marhali/easyi18n/editor/I18nKeyAnnotator.java index 481288e..a79504e 100644 --- a/src/main/java/de/marhali/easyi18n/ui/editor/I18nKeyAnnotator.java +++ b/src/main/java/de/marhali/easyi18n/editor/I18nKeyAnnotator.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.editor; +package de.marhali.easyi18n.editor; import com.intellij.lang.annotation.AnnotationHolder; import com.intellij.lang.annotation.Annotator; diff --git a/src/main/java/de/marhali/easyi18n/ui/listener/DeleteKeyListener.java b/src/main/java/de/marhali/easyi18n/listener/DeleteKeyListener.java similarity index 93% rename from src/main/java/de/marhali/easyi18n/ui/listener/DeleteKeyListener.java rename to src/main/java/de/marhali/easyi18n/listener/DeleteKeyListener.java index 283976d..2c45b1f 100644 --- a/src/main/java/de/marhali/easyi18n/ui/listener/DeleteKeyListener.java +++ b/src/main/java/de/marhali/easyi18n/listener/DeleteKeyListener.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.listener; +package de.marhali.easyi18n.listener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; diff --git a/src/main/java/de/marhali/easyi18n/ui/listener/PopupClickListener.java b/src/main/java/de/marhali/easyi18n/listener/PopupClickListener.java similarity index 95% rename from src/main/java/de/marhali/easyi18n/ui/listener/PopupClickListener.java rename to src/main/java/de/marhali/easyi18n/listener/PopupClickListener.java index 4d2845f..585b39d 100644 --- a/src/main/java/de/marhali/easyi18n/ui/listener/PopupClickListener.java +++ b/src/main/java/de/marhali/easyi18n/listener/PopupClickListener.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.listener; +package de.marhali.easyi18n.listener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; diff --git a/src/main/java/de/marhali/easyi18n/ui/renderer/TableRenderer.java b/src/main/java/de/marhali/easyi18n/renderer/TableRenderer.java similarity index 96% rename from src/main/java/de/marhali/easyi18n/ui/renderer/TableRenderer.java rename to src/main/java/de/marhali/easyi18n/renderer/TableRenderer.java index 18aeab4..cebe4c9 100644 --- a/src/main/java/de/marhali/easyi18n/ui/renderer/TableRenderer.java +++ b/src/main/java/de/marhali/easyi18n/renderer/TableRenderer.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.renderer; +package de.marhali.easyi18n.renderer; import com.intellij.ui.JBColor; diff --git a/src/main/java/de/marhali/easyi18n/ui/renderer/TreeRenderer.java b/src/main/java/de/marhali/easyi18n/renderer/TreeRenderer.java similarity index 86% rename from src/main/java/de/marhali/easyi18n/ui/renderer/TreeRenderer.java rename to src/main/java/de/marhali/easyi18n/renderer/TreeRenderer.java index b8ae3c5..f643dd7 100644 --- a/src/main/java/de/marhali/easyi18n/ui/renderer/TreeRenderer.java +++ b/src/main/java/de/marhali/easyi18n/renderer/TreeRenderer.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.renderer; +package de.marhali.easyi18n.renderer; import com.intellij.ide.util.treeView.NodeRenderer; import com.intellij.navigation.ItemPresentation; @@ -7,9 +7,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import javax.swing.tree.DefaultTreeCellRenderer; -import javax.swing.tree.TreeCellRenderer; -import java.awt.*; /** * Similar to {@link NodeRenderer} but will will override {@link #getPresentation(Object)} to diff --git a/src/main/java/de/marhali/easyi18n/service/WindowManager.java b/src/main/java/de/marhali/easyi18n/service/WindowManager.java index cf4d632..c92883e 100644 --- a/src/main/java/de/marhali/easyi18n/service/WindowManager.java +++ b/src/main/java/de/marhali/easyi18n/service/WindowManager.java @@ -2,8 +2,8 @@ package de.marhali.easyi18n.service; import com.intellij.openapi.wm.ToolWindow; -import de.marhali.easyi18n.ui.tabs.TableView; -import de.marhali.easyi18n.ui.tabs.TreeView; +import de.marhali.easyi18n.tabs.TableView; +import de.marhali.easyi18n.tabs.TreeView; public class WindowManager { diff --git a/src/main/java/de/marhali/easyi18n/ui/tabs/TableView.form b/src/main/java/de/marhali/easyi18n/tabs/TableView.form similarity index 93% rename from src/main/java/de/marhali/easyi18n/ui/tabs/TableView.form rename to src/main/java/de/marhali/easyi18n/tabs/TableView.form index e88ccbb..51d35af 100644 --- a/src/main/java/de/marhali/easyi18n/ui/tabs/TableView.form +++ b/src/main/java/de/marhali/easyi18n/tabs/TableView.form @@ -1,5 +1,5 @@ -
+ diff --git a/src/main/java/de/marhali/easyi18n/ui/tabs/TableView.java b/src/main/java/de/marhali/easyi18n/tabs/TableView.java similarity index 92% rename from src/main/java/de/marhali/easyi18n/ui/tabs/TableView.java rename to src/main/java/de/marhali/easyi18n/tabs/TableView.java index 5e81cc1..4b7dc31 100644 --- a/src/main/java/de/marhali/easyi18n/ui/tabs/TableView.java +++ b/src/main/java/de/marhali/easyi18n/tabs/TableView.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.tabs; +package de.marhali.easyi18n.tabs; import com.intellij.openapi.project.Project; import com.intellij.ui.components.JBScrollPane; @@ -11,10 +11,10 @@ import de.marhali.easyi18n.model.Translations; import de.marhali.easyi18n.model.KeyedTranslation; import de.marhali.easyi18n.model.TranslationDelete; import de.marhali.easyi18n.model.table.TableModelTranslator; -import de.marhali.easyi18n.ui.dialog.EditDialog; -import de.marhali.easyi18n.ui.listener.DeleteKeyListener; -import de.marhali.easyi18n.ui.listener.PopupClickListener; -import de.marhali.easyi18n.ui.renderer.TableRenderer; +import de.marhali.easyi18n.dialog.EditDialog; +import de.marhali.easyi18n.listener.DeleteKeyListener; +import de.marhali.easyi18n.listener.PopupClickListener; +import de.marhali.easyi18n.renderer.TableRenderer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/de/marhali/easyi18n/ui/tabs/TreeView.form b/src/main/java/de/marhali/easyi18n/tabs/TreeView.form similarity index 94% rename from src/main/java/de/marhali/easyi18n/ui/tabs/TreeView.form rename to src/main/java/de/marhali/easyi18n/tabs/TreeView.form index de99827..053a09b 100644 --- a/src/main/java/de/marhali/easyi18n/ui/tabs/TreeView.form +++ b/src/main/java/de/marhali/easyi18n/tabs/TreeView.form @@ -1,5 +1,5 @@ - + diff --git a/src/main/java/de/marhali/easyi18n/ui/tabs/TreeView.java b/src/main/java/de/marhali/easyi18n/tabs/TreeView.java similarity index 90% rename from src/main/java/de/marhali/easyi18n/ui/tabs/TreeView.java rename to src/main/java/de/marhali/easyi18n/tabs/TreeView.java index a4b77cd..069f975 100644 --- a/src/main/java/de/marhali/easyi18n/ui/tabs/TreeView.java +++ b/src/main/java/de/marhali/easyi18n/tabs/TreeView.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.ui.tabs; +package de.marhali.easyi18n.tabs; import com.intellij.ide.projectView.PresentationData; import com.intellij.openapi.actionSystem.ActionManager; @@ -14,13 +14,12 @@ import de.marhali.easyi18n.model.Translations; import de.marhali.easyi18n.model.KeyedTranslation; import de.marhali.easyi18n.model.TranslationDelete; import de.marhali.easyi18n.model.tree.TreeModelTranslator; -import de.marhali.easyi18n.ui.action.treeview.CollapseTreeViewAction; -import de.marhali.easyi18n.ui.action.treeview.ExpandTreeViewAction; -import de.marhali.easyi18n.ui.dialog.EditDialog; -import de.marhali.easyi18n.ui.listener.DeleteKeyListener; -import de.marhali.easyi18n.ui.listener.PopupClickListener; -import de.marhali.easyi18n.ui.renderer.TreeRenderer; -import de.marhali.easyi18n.util.TranslationsUtil; +import de.marhali.easyi18n.action.treeview.CollapseTreeViewAction; +import de.marhali.easyi18n.action.treeview.ExpandTreeViewAction; +import de.marhali.easyi18n.dialog.EditDialog; +import de.marhali.easyi18n.listener.DeleteKeyListener; +import de.marhali.easyi18n.listener.PopupClickListener; +import de.marhali.easyi18n.renderer.TreeRenderer; import de.marhali.easyi18n.util.TreeUtil; import org.jetbrains.annotations.NotNull; diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index d8180e3..d1d2292 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -14,8 +14,8 @@ + implementationClass="de.marhali.easyi18n.editor.I18nCompletionContributor" /> - + \ No newline at end of file From 72beddda6e7adabb5db7f801d3dbfc49eaa05992 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Mon, 19 Jul 2021 15:40:15 +0200 Subject: [PATCH 06/19] add kotlin specific key annotator --- .../easyi18n/editor/kotlin/KeyAnnotator.java | 38 +++++++++++++++++++ .../editor/kotlin/KotlinKeyAnnotator.java | 30 +++++++++++++++ .../META-INF/de.marhali.easyi18n-kotlin.xml | 5 +++ 3 files changed, 73 insertions(+) create mode 100644 src/main/java/de/marhali/easyi18n/editor/kotlin/KeyAnnotator.java create mode 100644 src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyAnnotator.java create mode 100644 src/main/resources/META-INF/de.marhali.easyi18n-kotlin.xml diff --git a/src/main/java/de/marhali/easyi18n/editor/kotlin/KeyAnnotator.java b/src/main/java/de/marhali/easyi18n/editor/kotlin/KeyAnnotator.java new file mode 100644 index 0000000..a80bf06 --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/editor/kotlin/KeyAnnotator.java @@ -0,0 +1,38 @@ +package de.marhali.easyi18n.editor.kotlin; + +import com.intellij.lang.annotation.AnnotationHolder; +import com.intellij.lang.annotation.HighlightSeverity; +import com.intellij.openapi.project.Project; + +import de.marhali.easyi18n.model.LocalizedNode; +import de.marhali.easyi18n.service.DataStore; +import de.marhali.easyi18n.service.SettingsService; + +import org.jetbrains.annotations.NotNull; + +/** + * + * @author marhali + */ +public class KeyAnnotator { + + /** + * Adds annotations for i18n keys with content preview for preferred locale. + * @param key I18n key extracted by psi element + * @param project Project instance + * @param holder Annotation holder + */ + protected void annotate(@NotNull String key, @NotNull Project project, @NotNull AnnotationHolder holder) { + String previewLocale = SettingsService.getInstance(project).getState().getPreviewLocale(); + LocalizedNode node = DataStore.getInstance(project).getTranslations().getNode(key); + + if(node == null) { // Unknown translation. Just ignore it + return; + } + + String tooltip = node.isLeaf() ? "I18n(" + previewLocale + ": " + node.getValue().get(previewLocale) + ")" + : "I18n ([])"; + + holder.newAnnotation(HighlightSeverity.INFORMATION, tooltip).create(); + } +} \ No newline at end of file diff --git a/src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyAnnotator.java b/src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyAnnotator.java new file mode 100644 index 0000000..6dc68b9 --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyAnnotator.java @@ -0,0 +1,30 @@ +package de.marhali.easyi18n.editor.kotlin; + +import com.intellij.lang.annotation.AnnotationHolder; +import com.intellij.lang.annotation.Annotator; +import com.intellij.psi.PsiElement; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.psi.KtLiteralStringTemplateEntry; + +/** + * Kotlin specific translation key annotator + * @author marhali + */ +public class KotlinKeyAnnotator extends KeyAnnotator implements Annotator { + + @Override + public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) { + if(!(element instanceof KtLiteralStringTemplateEntry)) { + return; + } + + String value = element.getText(); + + if(value == null) { + return; + } + + annotate(value, element.getProject(), holder); + } +} \ No newline at end of file diff --git a/src/main/resources/META-INF/de.marhali.easyi18n-kotlin.xml b/src/main/resources/META-INF/de.marhali.easyi18n-kotlin.xml new file mode 100644 index 0000000..83163b9 --- /dev/null +++ b/src/main/resources/META-INF/de.marhali.easyi18n-kotlin.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file From 151b324564399c0a53d26fbbb04d0f86424c37e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Mon, 19 Jul 2021 15:42:42 +0200 Subject: [PATCH 07/19] use new unified method to create annotations --- .../easyi18n/editor/I18nKeyAnnotator.java | 49 ------------------- .../editor/{kotlin => }/KeyAnnotator.java | 2 +- .../editor/generic/GenericKeyAnnotator.java | 33 +++++++++++++ .../editor/kotlin/KotlinKeyAnnotator.java | 1 + src/main/resources/META-INF/plugin.xml | 2 +- 5 files changed, 36 insertions(+), 51 deletions(-) delete mode 100644 src/main/java/de/marhali/easyi18n/editor/I18nKeyAnnotator.java rename src/main/java/de/marhali/easyi18n/editor/{kotlin => }/KeyAnnotator.java (96%) create mode 100644 src/main/java/de/marhali/easyi18n/editor/generic/GenericKeyAnnotator.java diff --git a/src/main/java/de/marhali/easyi18n/editor/I18nKeyAnnotator.java b/src/main/java/de/marhali/easyi18n/editor/I18nKeyAnnotator.java deleted file mode 100644 index a79504e..0000000 --- a/src/main/java/de/marhali/easyi18n/editor/I18nKeyAnnotator.java +++ /dev/null @@ -1,49 +0,0 @@ -package de.marhali.easyi18n.editor; - -import com.intellij.lang.annotation.AnnotationHolder; -import com.intellij.lang.annotation.Annotator; -import com.intellij.lang.annotation.HighlightSeverity; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiLiteralValue; - -import de.marhali.easyi18n.model.LocalizedNode; -import de.marhali.easyi18n.service.DataStore; -import de.marhali.easyi18n.service.SettingsService; - -import org.jetbrains.annotations.NotNull; - -/** - * Translation key annotator. - * @author marhali - */ -public class I18nKeyAnnotator implements Annotator { - - @Override - public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) { - if(!(element instanceof PsiLiteralValue)) { - return; - } - - PsiLiteralValue literalValue = (PsiLiteralValue) element; - String value = literalValue.getValue() instanceof String ? (String) literalValue.getValue() : null; - - if(value == null) { - return; - } - - Project project = element.getProject(); - String previewLocale = SettingsService.getInstance(project).getState().getPreviewLocale(); - - LocalizedNode node = DataStore.getInstance(project).getTranslations().getNode(value); - - if(node == null) { // Unknown translation. Just ignore it - return; - } - - String tooltip = node.isLeaf() ? "I18n(" + previewLocale + ": " + node.getValue().get(previewLocale) + ")" - : "I18n ([])"; - - holder.newAnnotation(HighlightSeverity.INFORMATION, tooltip).create(); - } -} \ No newline at end of file diff --git a/src/main/java/de/marhali/easyi18n/editor/kotlin/KeyAnnotator.java b/src/main/java/de/marhali/easyi18n/editor/KeyAnnotator.java similarity index 96% rename from src/main/java/de/marhali/easyi18n/editor/kotlin/KeyAnnotator.java rename to src/main/java/de/marhali/easyi18n/editor/KeyAnnotator.java index a80bf06..b6b33bd 100644 --- a/src/main/java/de/marhali/easyi18n/editor/kotlin/KeyAnnotator.java +++ b/src/main/java/de/marhali/easyi18n/editor/KeyAnnotator.java @@ -1,4 +1,4 @@ -package de.marhali.easyi18n.editor.kotlin; +package de.marhali.easyi18n.editor; import com.intellij.lang.annotation.AnnotationHolder; import com.intellij.lang.annotation.HighlightSeverity; diff --git a/src/main/java/de/marhali/easyi18n/editor/generic/GenericKeyAnnotator.java b/src/main/java/de/marhali/easyi18n/editor/generic/GenericKeyAnnotator.java new file mode 100644 index 0000000..2d2f441 --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/editor/generic/GenericKeyAnnotator.java @@ -0,0 +1,33 @@ +package de.marhali.easyi18n.editor.generic; + +import com.intellij.lang.annotation.AnnotationHolder; +import com.intellij.lang.annotation.Annotator; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiLiteralValue; + +import de.marhali.easyi18n.editor.KeyAnnotator; + +import org.jetbrains.annotations.NotNull; + +/** + * Translation key annotator. + * @author marhali + */ +public class GenericKeyAnnotator extends KeyAnnotator implements Annotator { + + @Override + public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) { + if(!(element instanceof PsiLiteralValue)) { + return; + } + + PsiLiteralValue literalValue = (PsiLiteralValue) element; + String value = literalValue.getValue() instanceof String ? (String) literalValue.getValue() : null; + + if(value == null) { + return; + } + + annotate(value, element.getProject(), holder); + } +} \ No newline at end of file diff --git a/src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyAnnotator.java b/src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyAnnotator.java index 6dc68b9..4e9cfe3 100644 --- a/src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyAnnotator.java +++ b/src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyAnnotator.java @@ -4,6 +4,7 @@ import com.intellij.lang.annotation.AnnotationHolder; import com.intellij.lang.annotation.Annotator; import com.intellij.psi.PsiElement; +import de.marhali.easyi18n.editor.KeyAnnotator; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.psi.KtLiteralStringTemplateEntry; diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index d1d2292..8222d13 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -16,6 +16,6 @@ - + \ No newline at end of file From 6c0a0c21ceb6370e3a4a3711a9d89f321c1e8f7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Mon, 19 Jul 2021 15:45:45 +0200 Subject: [PATCH 08/19] add documentation --- src/main/java/de/marhali/easyi18n/editor/KeyAnnotator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/marhali/easyi18n/editor/KeyAnnotator.java b/src/main/java/de/marhali/easyi18n/editor/KeyAnnotator.java index b6b33bd..38db8fb 100644 --- a/src/main/java/de/marhali/easyi18n/editor/KeyAnnotator.java +++ b/src/main/java/de/marhali/easyi18n/editor/KeyAnnotator.java @@ -11,7 +11,7 @@ import de.marhali.easyi18n.service.SettingsService; import org.jetbrains.annotations.NotNull; /** - * + * Superclass for managing key annotations. * @author marhali */ public class KeyAnnotator { From 6f4f6aa92ae7c3d6d7e48ebe7c35f8840a3510cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Mon, 19 Jul 2021 15:59:45 +0200 Subject: [PATCH 09/19] add kotlin support for key completion and modularize completion providers --- .../editor/I18nCompletionContributor.java | 18 ----------------- ...ovider.java => KeyCompletionProvider.java} | 6 ++++-- .../editor/generic/GenericKeyAnnotator.java | 2 +- .../GenericKeyCompletionContributor.java | 19 ++++++++++++++++++ .../KotlinKeyCompletionContributor.java | 20 +++++++++++++++++++ .../META-INF/de.marhali.easyi18n-kotlin.xml | 3 +++ src/main/resources/META-INF/plugin.xml | 2 +- 7 files changed, 48 insertions(+), 22 deletions(-) delete mode 100644 src/main/java/de/marhali/easyi18n/editor/I18nCompletionContributor.java rename src/main/java/de/marhali/easyi18n/editor/{I18nCompletionProvider.java => KeyCompletionProvider.java} (92%) create mode 100644 src/main/java/de/marhali/easyi18n/editor/generic/GenericKeyCompletionContributor.java create mode 100644 src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyCompletionContributor.java diff --git a/src/main/java/de/marhali/easyi18n/editor/I18nCompletionContributor.java b/src/main/java/de/marhali/easyi18n/editor/I18nCompletionContributor.java deleted file mode 100644 index b47fa62..0000000 --- a/src/main/java/de/marhali/easyi18n/editor/I18nCompletionContributor.java +++ /dev/null @@ -1,18 +0,0 @@ -package de.marhali.easyi18n.editor; - -import com.intellij.codeInsight.completion.CompletionContributor; -import com.intellij.codeInsight.completion.CompletionType; -import com.intellij.patterns.*; -import com.intellij.psi.PsiLiteralValue; - -/** - * Show i18n key completion for literal values. - * @author marhali - */ -public class I18nCompletionContributor extends CompletionContributor { - - public I18nCompletionContributor() { - extend(CompletionType.BASIC, PlatformPatterns.psiElement().inside(PsiLiteralValue.class), - new I18nCompletionProvider()); - } -} \ No newline at end of file diff --git a/src/main/java/de/marhali/easyi18n/editor/I18nCompletionProvider.java b/src/main/java/de/marhali/easyi18n/editor/KeyCompletionProvider.java similarity index 92% rename from src/main/java/de/marhali/easyi18n/editor/I18nCompletionProvider.java rename to src/main/java/de/marhali/easyi18n/editor/KeyCompletionProvider.java index 0afcf5c..6cb8766 100644 --- a/src/main/java/de/marhali/easyi18n/editor/I18nCompletionProvider.java +++ b/src/main/java/de/marhali/easyi18n/editor/KeyCompletionProvider.java @@ -20,10 +20,12 @@ import java.util.List; * I18n translation key completion provider. * @author marhali */ -public class I18nCompletionProvider extends CompletionProvider { +public class KeyCompletionProvider extends CompletionProvider { @Override - protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull ProcessingContext context, @NotNull CompletionResultSet result) { + protected void addCompletions(@NotNull CompletionParameters parameters, + @NotNull ProcessingContext context, @NotNull CompletionResultSet result) { + Project project = parameters.getOriginalFile().getProject(); String previewLocale = SettingsService.getInstance(project).getState().getPreviewLocale(); diff --git a/src/main/java/de/marhali/easyi18n/editor/generic/GenericKeyAnnotator.java b/src/main/java/de/marhali/easyi18n/editor/generic/GenericKeyAnnotator.java index 2d2f441..8de8149 100644 --- a/src/main/java/de/marhali/easyi18n/editor/generic/GenericKeyAnnotator.java +++ b/src/main/java/de/marhali/easyi18n/editor/generic/GenericKeyAnnotator.java @@ -10,7 +10,7 @@ import de.marhali.easyi18n.editor.KeyAnnotator; import org.jetbrains.annotations.NotNull; /** - * Translation key annotator. + * Translation key annotator for generic languages which support {@link PsiLiteralValue}. * @author marhali */ public class GenericKeyAnnotator extends KeyAnnotator implements Annotator { diff --git a/src/main/java/de/marhali/easyi18n/editor/generic/GenericKeyCompletionContributor.java b/src/main/java/de/marhali/easyi18n/editor/generic/GenericKeyCompletionContributor.java new file mode 100644 index 0000000..e84b7ec --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/editor/generic/GenericKeyCompletionContributor.java @@ -0,0 +1,19 @@ +package de.marhali.easyi18n.editor.generic; + +import com.intellij.codeInsight.completion.CompletionContributor; +import com.intellij.codeInsight.completion.CompletionType; +import com.intellij.patterns.*; +import com.intellij.psi.PsiLiteralValue; +import de.marhali.easyi18n.editor.KeyCompletionProvider; + +/** + * Translation key completion for generic languages which support {@link PsiLiteralValue}. + * @author marhali + */ +public class GenericKeyCompletionContributor extends CompletionContributor { + + public GenericKeyCompletionContributor() { + extend(CompletionType.BASIC, PlatformPatterns.psiElement().inside(PsiLiteralValue.class), + new KeyCompletionProvider()); + } +} \ No newline at end of file diff --git a/src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyCompletionContributor.java b/src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyCompletionContributor.java new file mode 100644 index 0000000..30a6a57 --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyCompletionContributor.java @@ -0,0 +1,20 @@ +package de.marhali.easyi18n.editor.kotlin; + +import com.intellij.codeInsight.completion.CompletionContributor; +import com.intellij.codeInsight.completion.CompletionType; +import com.intellij.patterns.PlatformPatterns; + +import de.marhali.easyi18n.editor.KeyCompletionProvider; +import org.jetbrains.kotlin.psi.KtLiteralStringTemplateEntry; + +/** + * Kotlin specific translation key completion contributor. + * @author marhali + */ +public class KotlinKeyCompletionContributor extends CompletionContributor { + + public KotlinKeyCompletionContributor() { + extend(CompletionType.BASIC, PlatformPatterns.psiElement().inside(KtLiteralStringTemplateEntry.class), + new KeyCompletionProvider()); + } +} diff --git a/src/main/resources/META-INF/de.marhali.easyi18n-kotlin.xml b/src/main/resources/META-INF/de.marhali.easyi18n-kotlin.xml index 83163b9..441c647 100644 --- a/src/main/resources/META-INF/de.marhali.easyi18n-kotlin.xml +++ b/src/main/resources/META-INF/de.marhali.easyi18n-kotlin.xml @@ -1,5 +1,8 @@ + + \ No newline at end of file diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 8222d13..a452e0e 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -14,7 +14,7 @@ + implementationClass="de.marhali.easyi18n.editor.generic.GenericKeyCompletionContributor" /> From 9cf49e90484dab458d9d9aedf77a115eecc50e3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Mon, 19 Jul 2021 16:00:49 +0200 Subject: [PATCH 10/19] update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c92ef34..9b021ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ # easy-i18n Changelog ## [Unreleased] +### Added +- Kotlin support for key completion and annotation + ### Changed - Update dependencies - Migrate gradle build script From 17370fe3596a3393c0424616b0cdf9be948e1b80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Mon, 19 Jul 2021 20:03:46 +0200 Subject: [PATCH 11/19] add settings option to opt-out code assistance service --- .../de/marhali/easyi18n/dialog/SettingsDialog.java | 13 +++++++++++-- .../de/marhali/easyi18n/editor/KeyAnnotator.java | 5 +++++ .../easyi18n/editor/KeyCompletionProvider.java | 6 ++++++ .../de/marhali/easyi18n/model/SettingsState.java | 10 ++++++++++ src/main/resources/messages.properties | 3 ++- 5 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/marhali/easyi18n/dialog/SettingsDialog.java b/src/main/java/de/marhali/easyi18n/dialog/SettingsDialog.java index 2d1f9e4..fc1eb92 100644 --- a/src/main/java/de/marhali/easyi18n/dialog/SettingsDialog.java +++ b/src/main/java/de/marhali/easyi18n/dialog/SettingsDialog.java @@ -5,6 +5,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogBuilder; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.TextFieldWithBrowseButton; +import com.intellij.ui.components.JBCheckBox; import com.intellij.ui.components.JBLabel; import com.intellij.ui.components.JBTextField; @@ -26,6 +27,7 @@ public class SettingsDialog { private TextFieldWithBrowseButton pathText; private JBTextField filePatternText; private JBTextField previewText; + private JBCheckBox codeAssistanceCheckbox; public SettingsDialog(Project project) { this.project = project; @@ -35,18 +37,20 @@ public class SettingsDialog { String localesPath = SettingsService.getInstance(project).getState().getLocalesPath(); String filePattern = SettingsService.getInstance(project).getState().getFilePattern(); String previewLocale = SettingsService.getInstance(project).getState().getPreviewLocale(); + boolean codeAssistance = SettingsService.getInstance(project).getState().isCodeAssistance(); - if(prepare(localesPath, filePattern, previewLocale).show() == DialogWrapper.OK_EXIT_CODE) { // Save changes + if(prepare(localesPath, filePattern, previewLocale, codeAssistance).show() == DialogWrapper.OK_EXIT_CODE) { // Save changes SettingsService.getInstance(project).getState().setLocalesPath(pathText.getText()); SettingsService.getInstance(project).getState().setFilePattern(filePatternText.getText()); SettingsService.getInstance(project).getState().setPreviewLocale(previewText.getText()); + SettingsService.getInstance(project).getState().setCodeAssistance(codeAssistanceCheckbox.isSelected()); // Reload instance DataStore.getInstance(project).reloadFromDisk(); } } - private DialogBuilder prepare(String localesPath, String filePattern, String previewLocale) { + private DialogBuilder prepare(String localesPath, String filePattern, String previewLocale, boolean codeAssistance) { JPanel rootPanel = new JPanel(new GridLayout(0, 1, 2, 2)); JBLabel pathLabel = new JBLabel(ResourceBundle.getBundle("messages").getString("settings.path.text")); @@ -73,6 +77,11 @@ public class SettingsDialog { rootPanel.add(previewLabel); rootPanel.add(previewText); + codeAssistanceCheckbox = new JBCheckBox(ResourceBundle.getBundle("messages").getString("settings.editor.assistance")); + codeAssistanceCheckbox.setSelected(codeAssistance); + + rootPanel.add(codeAssistanceCheckbox); + DialogBuilder builder = new DialogBuilder(); builder.setTitle(ResourceBundle.getBundle("messages").getString("action.settings")); builder.removeAllActions(); diff --git a/src/main/java/de/marhali/easyi18n/editor/KeyAnnotator.java b/src/main/java/de/marhali/easyi18n/editor/KeyAnnotator.java index 38db8fb..3395133 100644 --- a/src/main/java/de/marhali/easyi18n/editor/KeyAnnotator.java +++ b/src/main/java/de/marhali/easyi18n/editor/KeyAnnotator.java @@ -23,6 +23,11 @@ public class KeyAnnotator { * @param holder Annotation holder */ protected void annotate(@NotNull String key, @NotNull Project project, @NotNull AnnotationHolder holder) { + // Do not annotate keys if service is disabled + if(!SettingsService.getInstance(project).getState().isCodeAssistance()) { + return; + } + String previewLocale = SettingsService.getInstance(project).getState().getPreviewLocale(); LocalizedNode node = DataStore.getInstance(project).getTranslations().getNode(key); diff --git a/src/main/java/de/marhali/easyi18n/editor/KeyCompletionProvider.java b/src/main/java/de/marhali/easyi18n/editor/KeyCompletionProvider.java index 6cb8766..27633aa 100644 --- a/src/main/java/de/marhali/easyi18n/editor/KeyCompletionProvider.java +++ b/src/main/java/de/marhali/easyi18n/editor/KeyCompletionProvider.java @@ -27,6 +27,12 @@ public class KeyCompletionProvider extends CompletionProvider Date: Mon, 19 Jul 2021 20:03:53 +0200 Subject: [PATCH 12/19] add settings option to opt-out code assistance service --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b021ec..78892cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ## [Unreleased] ### Added +- Settings option to opt-out code assistance inside editor - Kotlin support for key completion and annotation ### Changed From dff48382c2f935b5ec2fdd1f2313d873ec82910b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Tue, 20 Jul 2021 10:42:27 +0200 Subject: [PATCH 13/19] add basic support for json array values --- CHANGELOG.md | 1 + .../marhali/easyi18n/util/JsonArrayUtil.java | 51 +++++++++++++++++++ .../de/marhali/easyi18n/util/JsonUtil.java | 15 ++++-- 3 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 src/main/java/de/marhali/easyi18n/util/JsonArrayUtil.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 78892cf..cc341df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ## [Unreleased] ### Added +- Basic support for json array values - Settings option to opt-out code assistance inside editor - Kotlin support for key completion and annotation diff --git a/src/main/java/de/marhali/easyi18n/util/JsonArrayUtil.java b/src/main/java/de/marhali/easyi18n/util/JsonArrayUtil.java new file mode 100644 index 0000000..c1a73e0 --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/util/JsonArrayUtil.java @@ -0,0 +1,51 @@ +package de.marhali.easyi18n.util; + +import com.google.gson.JsonArray; +import org.apache.commons.lang.StringEscapeUtils; + +import java.util.regex.Pattern; + +/** + * Utility methods to read and write json arrays. + * @author marhali + */ +public class JsonArrayUtil { + + public static String ARRAY_PREFIX = "!arr["; + public static String ARRAY_SUFFIX = "]"; + public static char ARRAY_DELIMITER = ';'; + + public static String read(JsonArray array) { + StringBuilder builder = new StringBuilder(ARRAY_PREFIX); + + for(int i = 0; i < array.size(); i++) { + if(i > 0) { + builder.append(ARRAY_DELIMITER); + } + + String value = array.get(i).getAsString().replace(";", "\\;"); + builder.append(StringUtil.escapeControls(value, true)); + } + + builder.append(ARRAY_SUFFIX); + return builder.toString(); + } + + public static JsonArray write(String concat) { + concat = concat.substring(ARRAY_PREFIX.length(), concat.length() - ARRAY_SUFFIX.length()); + String regex = "(? messages = leafNode.getValue(); - String value = StringUtil.escapeControls(entry.getValue().getAsString(), true); + + String value = entry.getValue().isJsonArray() + ? JsonArrayUtil.read(entry.getValue().getAsJsonArray()) + : StringUtil.escapeControls(entry.getValue().getAsString(), true); + messages.put(locale, value); leafNode.setValue(messages); } From 7ecba11199d64f30e32008e6bb4d20e143e45239 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Tue, 20 Jul 2021 10:43:44 +0200 Subject: [PATCH 14/19] improve syntax --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc341df..293147f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ ### Added - Basic support for json array values - Settings option to opt-out code assistance inside editor -- Kotlin support for key completion and annotation +- Support key completion and annotation for Kotlin language ### Changed - Update dependencies From 1be0679f18f7be2be4b0c80e656a03647d398bf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Tue, 20 Jul 2021 11:31:10 +0200 Subject: [PATCH 15/19] add example locale files for the different configuration options --- CHANGELOG.md | 1 + README.md | 2 ++ example/json/locale-de.json | 26 +++++++++++++++++++ example/json/locale-en.json | 26 +++++++++++++++++++ .../modularized-json/locale-de/account.json | 5 ++++ example/modularized-json/locale-de/auth.json | 10 +++++++ example/modularized-json/locale-de/user.json | 10 +++++++ .../modularized-json/locale-en/account.json | 5 ++++ example/modularized-json/locale-en/auth.json | 10 +++++++ example/modularized-json/locale-en/user.json | 10 +++++++ example/resource-bundle/locale_de.properties | 6 +++++ example/resource-bundle/locale_en.properties | 6 +++++ 12 files changed, 117 insertions(+) create mode 100644 example/json/locale-de.json create mode 100644 example/json/locale-en.json create mode 100644 example/modularized-json/locale-de/account.json create mode 100644 example/modularized-json/locale-de/auth.json create mode 100644 example/modularized-json/locale-de/user.json create mode 100644 example/modularized-json/locale-en/account.json create mode 100644 example/modularized-json/locale-en/auth.json create mode 100644 example/modularized-json/locale-en/user.json create mode 100644 example/resource-bundle/locale_de.properties create mode 100644 example/resource-bundle/locale_en.properties diff --git a/CHANGELOG.md b/CHANGELOG.md index 293147f..01c3716 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - Basic support for json array values - Settings option to opt-out code assistance inside editor - Support key completion and annotation for Kotlin language +- Example locale files for all configuration options ### Changed - Update dependencies diff --git a/README.md b/README.md index 61966d5..953ea10 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,8 @@ Most common use case is for translating Webapps or simple Java Applications. Tra - Select the created directory (optional: define the preferred locale to view) and press Ok - Translations can now be created / edited or deleted +Examples for the configuration can be found in the [/example](https://github.com/marhali/easy-i18n/tree/main/example) folder. + --- Plugin based on the [IntelliJ Platform Plugin Template][template]. diff --git a/example/json/locale-de.json b/example/json/locale-de.json new file mode 100644 index 0000000..d5507f9 --- /dev/null +++ b/example/json/locale-de.json @@ -0,0 +1,26 @@ +{ + "alpha": { + "first": "Beispiel Übersetzung", + "second": "Andere Übersetzung" + }, + "beta": { + "title": "Ein Titel", + "nested": { + "title": "Ein verschachtelter Titel" + } + }, + "gamma": { + "title": "Gamma Titel", + "array": { + "simple": [ + "Erstes Element", + "Zweites Element" + ], + "escaped": [ + "Erstes;Element", + "Zweites Element", + "Drittes;Element" + ] + } + } +} \ No newline at end of file diff --git a/example/json/locale-en.json b/example/json/locale-en.json new file mode 100644 index 0000000..b680645 --- /dev/null +++ b/example/json/locale-en.json @@ -0,0 +1,26 @@ +{ + "alpha": { + "first": "example translation", + "second": "another translation" + }, + "beta": { + "title": "some title", + "nested": { + "title": "some nested title" + } + }, + "gamma": { + "title": "gamma title", + "array": { + "simple": [ + "first element", + "second element" + ], + "escaped": [ + "first;element", + "second element", + "third;element" + ] + } + } +} \ No newline at end of file diff --git a/example/modularized-json/locale-de/account.json b/example/modularized-json/locale-de/account.json new file mode 100644 index 0000000..bcec282 --- /dev/null +++ b/example/modularized-json/locale-de/account.json @@ -0,0 +1,5 @@ +{ + "subscription": "Abonnement", + "support": "Unterstützung", + "delete": "Löschen" +} \ No newline at end of file diff --git a/example/modularized-json/locale-de/auth.json b/example/modularized-json/locale-de/auth.json new file mode 100644 index 0000000..e9476c0 --- /dev/null +++ b/example/modularized-json/locale-de/auth.json @@ -0,0 +1,10 @@ +{ + "title": [ + "Ein", + "array", + "Titel" + ], + "login": "Einloggen", + "logout": "Ausloggen", + "register": "Registrieren" +} \ No newline at end of file diff --git a/example/modularized-json/locale-de/user.json b/example/modularized-json/locale-de/user.json new file mode 100644 index 0000000..46bde56 --- /dev/null +++ b/example/modularized-json/locale-de/user.json @@ -0,0 +1,10 @@ +{ + "username": "Benutzername", + "email": "Email-Adresse", + "address": { + "zip": "Postleitzahl", + "city": "Ort", + "street": "Straße", + "number": "Hausnummer" + } +} \ No newline at end of file diff --git a/example/modularized-json/locale-en/account.json b/example/modularized-json/locale-en/account.json new file mode 100644 index 0000000..8f23bb1 --- /dev/null +++ b/example/modularized-json/locale-en/account.json @@ -0,0 +1,5 @@ +{ + "subscription": "Subscription", + "support": "Support", + "delete": "Delete" +} \ No newline at end of file diff --git a/example/modularized-json/locale-en/auth.json b/example/modularized-json/locale-en/auth.json new file mode 100644 index 0000000..5e7ff0d --- /dev/null +++ b/example/modularized-json/locale-en/auth.json @@ -0,0 +1,10 @@ +{ + "title": [ + "Some", + "array", + "title" + ], + "login": "Login", + "logout": "Logout", + "register": "Register" +} \ No newline at end of file diff --git a/example/modularized-json/locale-en/user.json b/example/modularized-json/locale-en/user.json new file mode 100644 index 0000000..6f2f670 --- /dev/null +++ b/example/modularized-json/locale-en/user.json @@ -0,0 +1,10 @@ +{ + "username": "Username", + "email": "Email Address", + "address": { + "zip": "ZIP code", + "city": "City", + "street": "Street", + "number": "House number" + } +} \ No newline at end of file diff --git a/example/resource-bundle/locale_de.properties b/example/resource-bundle/locale_de.properties new file mode 100644 index 0000000..f7c80e7 --- /dev/null +++ b/example/resource-bundle/locale_de.properties @@ -0,0 +1,6 @@ +account.subscription=Abonnement +auth.login=Einloggen +auth.logout=Ausloggen +auth.register=Registrieren +user.email=Email-Adresse +user.username=Benutzername \ No newline at end of file diff --git a/example/resource-bundle/locale_en.properties b/example/resource-bundle/locale_en.properties new file mode 100644 index 0000000..ca60875 --- /dev/null +++ b/example/resource-bundle/locale_en.properties @@ -0,0 +1,6 @@ +account.subscription=Subscription +auth.login=Login +auth.logout=Logout +auth.register=Register +user.email=Email Address +user.username=Username \ No newline at end of file From 79c4842aa8b5e137e227f3c94b8a6a29b709470a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Tue, 20 Jul 2021 11:34:39 +0200 Subject: [PATCH 16/19] increase plugin version to prepare upcoming release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 5fae5f1..67ea370 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ pluginGroup = de.marhali.easyi18n pluginName = easy-i18n -pluginVersion = 1.3.0 +pluginVersion = 1.4.0 pluginSinceBuild = 202 pluginUntilBuild = 211.* # Plugin Verifier integration -> https://github.com/JetBrains/gradle-intellij-plugin#plugin-verifier-dsl From e6ba30810f172168003468fec432ecabf503c4c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Tue, 20 Jul 2021 11:38:32 +0200 Subject: [PATCH 17/19] praise download numbers --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 01c3716..3eaa8ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ # easy-i18n Changelog ## [Unreleased] +THANKS FOR OVER 1000 DOWNLOADS SO FAR! + ### Added - Basic support for json array values - Settings option to opt-out code assistance inside editor From 8dac53d1ae03c156fce8b03b569205e1450033ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Tue, 20 Jul 2021 11:42:37 +0200 Subject: [PATCH 18/19] move praise to own secton to fix displaying issues --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3eaa8ff..4b2c8fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ # easy-i18n Changelog ## [Unreleased] -THANKS FOR OVER 1000 DOWNLOADS SO FAR! +### THANKS FOR OVER 1000 DOWNLOADS SO FAR! ### Added - Basic support for json array values From b57b4575176e2c27f27fef5e753299b0b052c2ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Tue, 20 Jul 2021 15:47:37 +0200 Subject: [PATCH 19/19] add donation links to support development --- CHANGELOG.md | 1 + README.md | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b2c8fe..d087cee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - Settings option to opt-out code assistance inside editor - Support key completion and annotation for Kotlin language - Example locale files for all configuration options +- Donation links on GitHub to support development ### Changed - Update dependencies diff --git a/README.md b/README.md index 953ea10..5dd8911 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ ![Build](https://github.com/marhali/easy-i18n/workflows/Build/badge.svg) [![Version](https://img.shields.io/jetbrains/plugin/v/16316.svg)](https://plugins.jetbrains.com/plugin/16316) [![Downloads](https://img.shields.io/jetbrains/plugin/d/16316.svg)](https://plugins.jetbrains.com/plugin/16316) +[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://paypal.me/marhalide) This is an easy plugin to manage internationalization for JSON or Resource-Bundle(Properties) based locale files. @@ -50,6 +51,9 @@ Most common use case is for translating Webapps or simple Java Applications. Tra Examples for the configuration can be found in the [/example](https://github.com/marhali/easy-i18n/tree/main/example) folder. +## Donation +If the project helps you to reduce development time, you can give me a [cup of coffee](https://paypal.me/marhalide) :) + --- Plugin based on the [IntelliJ Platform Plugin Template][template].