Skip to content

Commit 9cf091c

Browse files
AndreyPavlenkoAirsaid
authored andcommitted
Add option to skip non-translatable strings
1 parent 2d9e35a commit 9cf091c

5 files changed

Lines changed: 71 additions & 5 deletions

File tree

src/main/java/com/airsaid/localization/config/SettingsComponent.form

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@
141141
</component>
142142
</children>
143143
</grid>
144-
<grid id="cad41" layout-manager="GridLayoutManager" row-count="1" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
144+
<grid id="cad41" layout-manager="GridLayoutManager" row-count="2" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
145145
<margin top="0" left="0" bottom="0" right="0"/>
146146
<constraints>
147147
<grid row="2" column="0" row-span="1" col-span="2" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
@@ -182,6 +182,14 @@
182182
<grid row="0" column="2" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
183183
</constraints>
184184
</hspacer>
185+
<component id="29b24" class="javax.swing.JCheckBox" binding="skipNonTranslatableCheckBox" default-binding="true">
186+
<constraints>
187+
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
188+
</constraints>
189+
<properties>
190+
<text value="Skip non-translatable"/>
191+
</properties>
192+
</component>
185193
</children>
186194
</grid>
187195
<vspacer id="1a75f">

src/main/java/com/airsaid/localization/config/SettingsComponent.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public class SettingsComponent {
5858
private JBCheckBox enableCacheCheckBox;
5959
private ComboBox<String> maxCacheSizeComboBox;
6060
private ComboBox<String> translationIntervalComboBox;
61+
private JCheckBox skipNonTranslatableCheckBox;
6162

6263
public SettingsComponent() {
6364
initTranslatorComponents();
@@ -206,4 +207,12 @@ public int getTranslationInterval() {
206207
public void setTranslationInterval(int intervalTime) {
207208
translationIntervalComboBox.setSelectedItem(String.valueOf(intervalTime));
208209
}
210+
211+
public boolean isSkipNonTranslatable() {
212+
return skipNonTranslatableCheckBox.isSelected();
213+
}
214+
215+
public void setSkipNonTranslatable(boolean isSkipNonTranslatable) {
216+
skipNonTranslatableCheckBox.setSelected(isSkipNonTranslatable);
217+
}
209218
}

src/main/java/com/airsaid/localization/config/SettingsConfigurable.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package com.airsaid.localization.config;
1919

2020
import com.airsaid.localization.constant.Constants;
21+
import com.airsaid.localization.services.AndroidValuesService;
2122
import com.airsaid.localization.translate.AbstractTranslator;
2223
import com.airsaid.localization.translate.services.TranslatorService;
2324
import com.intellij.openapi.diagnostic.Logger;
@@ -63,6 +64,7 @@ private void initComponents() {
6364
settingsComponent.setEnableCache(settingsState.isEnableCache());
6465
settingsComponent.setMaxCacheSize(settingsState.getMaxCacheSize());
6566
settingsComponent.setTranslationInterval(settingsState.getTranslationInterval());
67+
settingsComponent.setSkipNonTranslatable(settingsState.isSkipNonTranslatable());
6668
}
6769

6870
@Override
@@ -75,6 +77,7 @@ public boolean isModified() {
7577
isChanged |= settingsState.isEnableCache() == settingsComponent.isEnableCache();
7678
isChanged |= settingsState.getMaxCacheSize() == settingsComponent.getMaxCacheSize();
7779
isChanged |= settingsState.getTranslationInterval() == settingsComponent.getTranslationInterval();
80+
isChanged |= settingsState.isSkipNonTranslatable() == settingsComponent.isSkipNonTranslatable();
7881
LOG.info("isModified: " + isChanged);
7982
return isChanged;
8083
}
@@ -103,12 +106,15 @@ public void apply() throws ConfigurationException {
103106
settingsState.setEnableCache(settingsComponent.isEnableCache());
104107
settingsState.setMaxCacheSize(settingsComponent.getMaxCacheSize());
105108
settingsState.setTranslationInterval(settingsComponent.getTranslationInterval());
109+
settingsState.setSkipNonTranslatable(settingsComponent.isSkipNonTranslatable());
106110

107111
TranslatorService translatorService = TranslatorService.getInstance();
108112
translatorService.setSelectedTranslator(selectedTranslator);
109113
translatorService.setEnableCache(settingsComponent.isEnableCache());
110114
translatorService.setMaxCacheSize(settingsComponent.getMaxCacheSize());
111115
translatorService.setTranslationInterval(settingsComponent.getTranslationInterval());
116+
117+
AndroidValuesService.getInstance().setSkipNonTranslatable(settingsComponent.isSkipNonTranslatable());
112118
}
113119

114120
@Override
@@ -122,6 +128,7 @@ public void reset() {
122128
settingsComponent.setEnableCache(settingsState.isEnableCache());
123129
settingsComponent.setMaxCacheSize(settingsState.getMaxCacheSize());
124130
settingsComponent.setTranslationInterval(settingsState.getTranslationInterval());
131+
settingsComponent.setSkipNonTranslatable(settingsState.isSkipNonTranslatable());
125132
}
126133

127134
@Override

src/main/java/com/airsaid/localization/config/SettingsState.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
package com.airsaid.localization.config;
1919

20+
import com.airsaid.localization.services.AndroidValuesService;
2021
import com.airsaid.localization.translate.AbstractTranslator;
2122
import com.airsaid.localization.translate.services.TranslatorService;
2223
import com.airsaid.localization.utils.SecureStorage;
@@ -71,6 +72,8 @@ public void initSetting() {
7172
translatorService.setMaxCacheSize(getMaxCacheSize());
7273
translatorService.setTranslationInterval(getTranslationInterval());
7374
}
75+
76+
AndroidValuesService.getInstance().setSkipNonTranslatable(isSkipNonTranslatable());
7477
}
7578

7679
public AbstractTranslator getSelectedTranslator() {
@@ -129,6 +132,14 @@ public void setTranslationInterval(int intervalTime) {
129132
state.translationInterval = intervalTime;
130133
}
131134

135+
public boolean isSkipNonTranslatable() {
136+
return state.isSkipNonTranslatable;
137+
}
138+
139+
public void setSkipNonTranslatable(boolean isSkipNonTranslatable) {
140+
state.isSkipNonTranslatable = isSkipNonTranslatable;
141+
}
142+
132143
@Override
133144
public @Nullable SettingsState.State getState() {
134145
return state;
@@ -145,5 +156,6 @@ static class State {
145156
public boolean isEnableCache = true;
146157
public int maxCacheSize = 500;
147158
public int translationInterval = 2; // 2 second
159+
public boolean isSkipNonTranslatable;
148160
}
149161
}

src/main/java/com/airsaid/localization/services/AndroidValuesService.java

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import java.nio.charset.StandardCharsets;
4343
import java.util.ArrayList;
4444
import java.util.Arrays;
45+
import java.util.Collections;
4546
import java.util.List;
4647
import java.util.regex.Pattern;
4748

@@ -57,6 +58,8 @@ public final class AndroidValuesService {
5758

5859
private static final Pattern STRINGS_FILE_NAME_PATTERN = Pattern.compile(".+\\.xml");
5960

61+
private boolean isSkipNonTranslatable;
62+
6063
/**
6164
* Returns the {@link AndroidValuesService} object instance.
6265
*
@@ -96,18 +99,45 @@ public List<PsiElement> loadValues(@NotNull PsiFile valueFile) {
9699
});
97100
}
98101

102+
public boolean isSkipNonTranslatable() {
103+
return isSkipNonTranslatable;
104+
}
105+
106+
public void setSkipNonTranslatable(boolean isSkipNonTranslatable) {
107+
this.isSkipNonTranslatable = isSkipNonTranslatable;
108+
}
109+
99110
private List<PsiElement> parseValuesXml(@NotNull PsiFile valueFile) {
100-
final List<PsiElement> values = new ArrayList<>();
101111
final XmlFile xmlFile = (XmlFile) valueFile;
102112

103113
final XmlDocument document = xmlFile.getDocument();
104-
if (document == null) return values;
114+
if (document == null) return Collections.emptyList();
105115

106116
final XmlTag rootTag = document.getRootTag();
107-
if (rootTag == null) return values;
117+
if (rootTag == null) return Collections.emptyList();
108118

109119
PsiElement[] subTags = rootTag.getChildren();
110-
values.addAll(Arrays.asList(subTags));
120+
121+
if (!isSkipNonTranslatable()) {
122+
return Arrays.asList(subTags);
123+
}
124+
125+
List<PsiElement> values = new ArrayList<>(subTags.length);
126+
boolean skipNext = false;
127+
128+
for (PsiElement e : subTags) {
129+
if (skipNext) {
130+
skipNext = false;
131+
if (!(e instanceof XmlTag)) {
132+
continue;
133+
}
134+
}
135+
if ((e instanceof XmlTag) && !isTranslatable((XmlTag) e)) {
136+
skipNext = true;
137+
} else {
138+
values.add(e);
139+
}
140+
}
111141

112142
return values;
113143
}

0 commit comments

Comments
 (0)