Skip to content

Commit 414e30b

Browse files
committed
Support plurals&string-array tags
1 parent 6e6abde commit 414e30b

File tree

13 files changed

+896
-479
lines changed

13 files changed

+896
-479
lines changed

src/main/java/com/airsaid/localization/action/TranslateAction.java

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
package com.airsaid.localization.action;
1919

2020
import com.airsaid.localization.config.SettingsState;
21-
import com.airsaid.localization.model.AndroidString;
22-
import com.airsaid.localization.services.AndroidStringsService;
21+
import com.airsaid.localization.model.AbstractValue;
22+
import com.airsaid.localization.services.AndroidValuesService;
2323
import com.airsaid.localization.task.TranslateTask;
2424
import com.airsaid.localization.translate.lang.Lang;
2525
import com.airsaid.localization.ui.SelectLanguagesDialog;
@@ -34,38 +34,38 @@
3434
import java.util.List;
3535

3636
/**
37-
* Translate strings.xml to other languages that can be used to localize your Android APP.
37+
* Translate android string value to other languages that can be used to localize your Android APP.
3838
*
3939
* @author airsaid
4040
*/
4141
public class TranslateAction extends AnAction implements SelectLanguagesDialog.OnClickListener {
4242

4343
private Project mProject;
44-
private PsiFile mStringsFile;
45-
private List<AndroidString> mAndroidStrings;
46-
private final AndroidStringsService mStringsService = AndroidStringsService.getInstance();
44+
private PsiFile mValueFile;
45+
private List<AbstractValue> mValues;
46+
private final AndroidValuesService mValueService = AndroidValuesService.getInstance();
4747

4848
@Override
4949
public void actionPerformed(AnActionEvent e) {
5050
mProject = e.getRequiredData(CommonDataKeys.PROJECT);
51-
mStringsFile = e.getRequiredData(CommonDataKeys.PSI_FILE);
51+
mValueFile = e.getRequiredData(CommonDataKeys.PSI_FILE);
5252

5353
SettingsState.getInstance().initSetting();
5454

55-
mStringsService.loadStringsByAsync(mStringsFile, androidStrings -> {
56-
if (!isTranslatable(androidStrings)) {
57-
NotificationUtil.notifyInfo(mProject, "The strings.xml has no text to translate.");
55+
mValueService.loadValuesByAsync(mValueFile, values -> {
56+
if (!isTranslatable(values)) {
57+
NotificationUtil.notifyInfo(mProject, "The " + mValueFile.getName() + " has no text to translate.");
5858
return;
5959
}
60-
mAndroidStrings = androidStrings;
60+
mValues = values;
6161
showSelectLanguageDialog();
6262
});
6363
}
6464

65-
// Verify that there is a text in the strings.xml file that needs to be translated.
66-
private boolean isTranslatable(@NotNull List<AndroidString> androidStrings) {
65+
// Verify that there is a text in the value file that needs to be translated.
66+
private boolean isTranslatable(@NotNull List<AbstractValue> values) {
6767
boolean isTranslatable = false;
68-
for (AndroidString androidString : androidStrings) {
68+
for (AbstractValue androidString : values) {
6969
if (androidString.isTranslatable()) {
7070
isTranslatable = true;
7171
break;
@@ -82,15 +82,15 @@ private void showSelectLanguageDialog() {
8282

8383
@Override
8484
public void update(@NotNull AnActionEvent e) {
85-
// The translation option is only show when strings.xml is selected
85+
// The translation option is only show when strings.xml/plurals.xml/arrays.xml is selected
8686
Project project = e.getData(CommonDataKeys.PROJECT);
87-
boolean isSelectStringsFile = mStringsService.isStringsFile(e.getData(CommonDataKeys.PSI_FILE));
88-
e.getPresentation().setEnabledAndVisible(project != null && isSelectStringsFile);
87+
boolean isSelectValueFile = mValueService.isValueFile(e.getData(CommonDataKeys.PSI_FILE));
88+
e.getPresentation().setEnabledAndVisible(project != null && isSelectValueFile);
8989
}
9090

9191
@Override
9292
public void onClickListener(List<Lang> selectedLanguage) {
93-
TranslateTask translationTask = new TranslateTask(mProject, "Translating...", selectedLanguage, mAndroidStrings, mStringsFile);
93+
TranslateTask translationTask = new TranslateTask(mProject, "Translating...", selectedLanguage, mValues, mValueFile);
9494
translationTask.setOnTranslateListener(new TranslateTask.OnTranslateListener() {
9595
@Override
9696
public void onTranslateSuccess() {
@@ -104,5 +104,4 @@ public void onTranslateError(Throwable e) {
104104
});
105105
translationTask.queue();
106106
}
107-
108107
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.airsaid.localization.model;
2+
3+
import java.util.Objects;
4+
5+
/**
6+
* @author airsaid
7+
*/
8+
public abstract class AbstractValue implements Cloneable {
9+
10+
private final String name;
11+
private final boolean translatable;
12+
13+
public AbstractValue(String name) {
14+
this(name, true);
15+
}
16+
17+
public AbstractValue(String name, boolean translatable) {
18+
this.name = name;
19+
this.translatable = translatable;
20+
}
21+
22+
public String getName() {
23+
return name;
24+
}
25+
26+
public boolean isTranslatable() {
27+
return translatable;
28+
}
29+
30+
@Override
31+
public int hashCode() {
32+
return Objects.hash(name);
33+
}
34+
35+
@Override
36+
public boolean equals(Object obj) {
37+
if (obj == this) {
38+
return true;
39+
}
40+
if (!(obj instanceof AbstractValue)) {
41+
return false;
42+
}
43+
AbstractValue value = (AbstractValue) obj;
44+
return name.equals(value.name); // name is unique
45+
}
46+
47+
@Override
48+
public AbstractValue clone() {
49+
try {
50+
return (AbstractValue) super.clone();
51+
} catch (CloneNotSupportedException e) {
52+
e.printStackTrace();
53+
return null;
54+
}
55+
}
56+
57+
@Override
58+
public String toString() {
59+
return "AbstractValue{" +
60+
"name='" + name + '\'' +
61+
", translatable=" + translatable +
62+
'}';
63+
}
64+
}

src/main/java/com/airsaid/localization/model/AndroidString.java

Lines changed: 0 additions & 172 deletions
This file was deleted.

0 commit comments

Comments
 (0)