From d336b31b501bf1d932634aff101e5d89e13f8a25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Sun, 25 Apr 2021 21:54:13 +0200 Subject: [PATCH] Add translation key annotation --- .../easyi18n/ui/editor/I18nKeyAnnotator.java | 54 +++++++++++++++++++ src/main/resources/META-INF/plugin.xml | 2 + 2 files changed, 56 insertions(+) create mode 100644 src/main/java/de/marhali/easyi18n/ui/editor/I18nKeyAnnotator.java diff --git a/src/main/java/de/marhali/easyi18n/ui/editor/I18nKeyAnnotator.java b/src/main/java/de/marhali/easyi18n/ui/editor/I18nKeyAnnotator.java new file mode 100644 index 0000000..4568a1d --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/ui/editor/I18nKeyAnnotator.java @@ -0,0 +1,54 @@ +package de.marhali.easyi18n.ui.editor; + +import com.intellij.ide.DataManager; +import com.intellij.lang.annotation.AnnotationHolder; +import com.intellij.lang.annotation.Annotator; +import com.intellij.lang.annotation.HighlightSeverity; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +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 { + + private Project project; + private String previewLocale; + + public I18nKeyAnnotator() { + DataManager.getInstance().getDataContextFromFocusAsync().onSuccess(data -> { + project = PlatformDataKeys.PROJECT.getData(data); + previewLocale = SettingsService.getInstance(project).getState().getPreviewLocale(); + }); + } + + @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; + } + + LocalizedNode node = DataStore.getInstance(project).getTranslations().getNode(value); + + if(node == null) { // Unknown translation. Just ignore it + return; + } + + holder.newAnnotation(HighlightSeverity.INFORMATION, + "I18n(" + previewLocale + ": " + node.getValue().get(previewLocale) + ")").create(); + } +} \ 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 348d1ac..483a1ba 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -13,5 +13,7 @@ + + \ No newline at end of file