Skip to content

Commit eafb500

Browse files
committed
translation annotator check global translation file before fallback to yaml parser #195
1 parent b518e25 commit eafb500

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/fr/adrienbrault/idea/symfony2plugin/translation/PhpTranslationAnnotator.java

+16
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import fr.adrienbrault.idea.symfony2plugin.TwigHelper;
2424
import fr.adrienbrault.idea.symfony2plugin.templating.util.TwigUtil;
2525
import fr.adrienbrault.idea.symfony2plugin.translation.dict.TranslationUtil;
26+
import fr.adrienbrault.idea.symfony2plugin.translation.parser.TranslationStringMap;
2627
import fr.adrienbrault.idea.symfony2plugin.util.IdeHelper;
2728
import fr.adrienbrault.idea.symfony2plugin.util.ParameterBag;
2829
import fr.adrienbrault.idea.symfony2plugin.util.PsiElementUtils;
@@ -98,6 +99,21 @@ public void annotate(@NotNull final PsiElement psiElement, @NotNull AnnotationHo
9899

99100
private void annotateTranslationKey(StringLiteralExpression psiElement, String domainName, @NotNull AnnotationHolder holder) {
100101

102+
103+
String keyName = psiElement.getContents();
104+
105+
// should not annotate "foo$bar"
106+
// @TODO: regular expression to only notice translation keys and not possible text values
107+
if(keyName.contains("$")) {
108+
return;
109+
}
110+
111+
// dont annotate non goto available keys
112+
if(TranslationUtil.hasTranslationKey(psiElement.getProject(), keyName, domainName)) {
113+
return;
114+
}
115+
116+
// search for possible domain targets and provide translation key creation fix
101117
if(psiElement.getContents().length() > 0 && TranslationUtil.getTranslationPsiElements(psiElement.getProject(), psiElement.getContents(), domainName).length == 0) {
102118

103119
Annotation annotationHolder = holder.createWarningAnnotation(psiElement, "Missing Translation");

src/fr/adrienbrault/idea/symfony2plugin/translation/dict/TranslationUtil.java

+11
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
import com.intellij.psi.PsiElement;
66
import com.intellij.psi.PsiFile;
77
import com.intellij.psi.util.PsiTreeUtil;
8+
import fr.adrienbrault.idea.symfony2plugin.translation.TranslationIndex;
89
import fr.adrienbrault.idea.symfony2plugin.translation.parser.DomainMappings;
10+
import fr.adrienbrault.idea.symfony2plugin.translation.parser.TranslationStringMap;
911
import fr.adrienbrault.idea.symfony2plugin.util.PsiElementUtils;
1012
import fr.adrienbrault.idea.symfony2plugin.util.service.ServiceXmlParserFactory;
1113
import fr.adrienbrault.idea.symfony2plugin.util.yaml.YamlKeyFinder;
@@ -62,4 +64,13 @@ public static PsiElement[] getTranslationPsiElements(Project project, String tra
6264
return psiFoundElements.toArray(new PsiElement[psiFoundElements.size()]);
6365
}
6466

67+
public static boolean hasTranslationKey(Project project, String keyName, String domainName) {
68+
69+
if(TranslationIndex.getInstance(project).getTranslationMap().getDomainList().contains(domainName)) {
70+
return false;
71+
}
72+
73+
return TranslationIndex.getInstance(project).getTranslationMap().getDomainMap(domainName).contains(keyName);
74+
}
75+
6576
}

0 commit comments

Comments
 (0)