Skip to content

Commit ef31682

Browse files
committed
Add ali translator
1 parent e775cf0 commit ef31682

File tree

7 files changed

+167
-9
lines changed

7 files changed

+167
-9
lines changed

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ tasks {
5656

5757
dependencies {
5858
implementation("com.google.code.gson:gson:2.8.7")
59+
implementation("com.aliyun:alimt20181012:1.0.3")
5960

6061
testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0")
6162
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.0")

src/main/java/com/airsaid/localization/translate/AbstractTranslator.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,7 @@ public abstract class AbstractTranslator implements Translator, TranslatorConfig
4545

4646
@Override
4747
public String doTranslate(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull String text) throws TranslationException {
48-
List<Lang> supportedLanguages = getSupportedLanguages();
49-
if (!supportedLanguages.contains(toLang)) {
50-
throw new TranslationException(fromLang, toLang, text, toLang.getEnglishName() + " is not supported.");
51-
}
48+
checkSupportedLanguages(fromLang, toLang, text);
5249

5350
String requestUrl = getRequestUrl(fromLang, toLang, text);
5451
RequestBuilder requestBuilder = HttpRequests.post(requestUrl, CONTENT_TYPE);
@@ -123,18 +120,33 @@ public String getAppKeyDisplay() {
123120
}
124121

125122
@NotNull
126-
public abstract String getRequestUrl(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull String text);
123+
public String getRequestUrl(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull String text) {
124+
throw new UnsupportedOperationException();
125+
}
127126

128127
@NotNull
129-
public abstract List<Pair<String, String>> getRequestParams(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull String text);
128+
public List<Pair<String, String>> getRequestParams(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull String text) {
129+
throw new UnsupportedOperationException();
130+
}
130131

131132
@NotNull
132133
public String getRequestBody(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull String text) {
133134
return "";
134135
}
135136

136-
public abstract void configureRequestBuilder(@NotNull RequestBuilder requestBuilder);
137+
public void configureRequestBuilder(@NotNull RequestBuilder requestBuilder) {
138+
139+
}
137140

138141
@NotNull
139-
public abstract String parsingResult(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull String text, @NotNull String resultText);
142+
public String parsingResult(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull String text, @NotNull String resultText) {
143+
throw new UnsupportedOperationException();
144+
}
145+
146+
protected void checkSupportedLanguages(Lang fromLang, Lang toLang, String text) {
147+
List<Lang> supportedLanguages = getSupportedLanguages();
148+
if (!supportedLanguages.contains(toLang)) {
149+
throw new TranslationException(fromLang, toLang, text, toLang.getEnglishName() + " is not supported.");
150+
}
151+
}
140152
}
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
/*
2+
* Copyright 2021 Airsaid. https://github.com/airsaid
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*
16+
*/
17+
18+
package com.airsaid.localization.translate.impl.ali;
19+
20+
import com.airsaid.localization.translate.AbstractTranslator;
21+
import com.airsaid.localization.translate.TranslationException;
22+
import com.airsaid.localization.translate.lang.Lang;
23+
import com.airsaid.localization.translate.lang.Languages;
24+
import com.aliyun.alimt20181012.Client;
25+
import com.aliyun.alimt20181012.models.TranslateGeneralRequest;
26+
import com.aliyun.alimt20181012.models.TranslateGeneralResponse;
27+
import com.aliyun.alimt20181012.models.TranslateGeneralResponseBody;
28+
import com.aliyun.teaopenapi.models.Config;
29+
import com.aliyun.teautil.models.RuntimeOptions;
30+
import icons.PluginIcons;
31+
import org.jetbrains.annotations.NotNull;
32+
import org.jetbrains.annotations.Nullable;
33+
34+
import javax.swing.*;
35+
import java.util.LinkedList;
36+
import java.util.List;
37+
38+
/**
39+
* @author airsaid
40+
*/
41+
public class AliTranslator extends AbstractTranslator {
42+
private static final String KEY = "Ali";
43+
private static final String ENDPOINT = "mt.aliyuncs.com";
44+
private static final String APPLY_APP_ID_URL = "https://www.aliyun.com/product/ai/base_alimt";
45+
46+
private final Config config = new Config();
47+
private List<Lang> supportedLanguages;
48+
private Client client;
49+
50+
@Override
51+
public @NotNull String getKey() {
52+
return KEY;
53+
}
54+
55+
@Override
56+
public @NotNull String getName() {
57+
return "Ali";
58+
}
59+
60+
@Override
61+
public @Nullable Icon getIcon() {
62+
return PluginIcons.ALI_ICON;
63+
}
64+
65+
@Override
66+
public @NotNull List<Lang> getSupportedLanguages() {
67+
if (supportedLanguages == null) {
68+
supportedLanguages = new LinkedList<>();
69+
final List<Lang> languages = Languages.getLanguages();
70+
for (int i = 1; i < languages.size(); i++) {
71+
Lang lang = languages.get(i);
72+
if (lang.equals(Languages.UKRAINIAN) || lang.equals(Languages.DARI)) {
73+
continue;
74+
}
75+
if (lang.equals(Languages.CHINESE_SIMPLIFIED)) {
76+
lang = lang.setTranslationCode("zh");
77+
} else if (lang.equals(Languages.CHINESE_TRADITIONAL)) {
78+
lang = lang.setTranslationCode("zh-tw");
79+
} else if (lang.equals(Languages.INDONESIAN)) {
80+
lang = lang.setTranslationCode("id");
81+
} else if (lang.equals(Languages.CROATIAN)) {
82+
lang = lang.setTranslationCode("hbs");
83+
} else if (lang.equals(Languages.HEBREW)) {
84+
lang = lang.setTranslationCode("he");
85+
}
86+
supportedLanguages.add(lang);
87+
}
88+
}
89+
return supportedLanguages;
90+
}
91+
92+
@Override
93+
public String getAppIdDisplay() {
94+
return "AccessKey ID";
95+
}
96+
97+
@Override
98+
public String getAppKeyDisplay() {
99+
return "AccessKey Secret";
100+
}
101+
102+
@Override
103+
public @Nullable String getApplyAppIdUrl() {
104+
return APPLY_APP_ID_URL;
105+
}
106+
107+
@Override
108+
public String doTranslate(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull String text) throws TranslationException {
109+
checkSupportedLanguages(fromLang, toLang, text);
110+
111+
config.setAccessKeyId(getAppId()).setAccessKeySecret(getAppKey()).setEndpoint(ENDPOINT);
112+
if (client == null) {
113+
try {
114+
client = new Client(config);
115+
} catch (Exception e) {
116+
throw new TranslationException(fromLang, toLang, text, e);
117+
}
118+
}
119+
120+
TranslateGeneralRequest request = new TranslateGeneralRequest().setFormatType("text").setSourceLanguage(fromLang.getTranslationCode()).setTargetLanguage(toLang.getTranslationCode()).setSourceText(text).setScene("general");
121+
RuntimeOptions runtime = new RuntimeOptions();
122+
TranslateGeneralResponse response;
123+
try {
124+
response = client.translateGeneralWithOptions(request, runtime);
125+
} catch (Exception e) {
126+
throw new TranslationException(fromLang, toLang, text, e);
127+
}
128+
final TranslateGeneralResponseBody body = response.body;
129+
if (body.getCode() == 200) {
130+
return body.getData().translated;
131+
} else {
132+
throw new TranslationException(fromLang, toLang, text, body.getMessage() + "(" + body.getCode() + ")");
133+
}
134+
}
135+
}

src/main/java/com/airsaid/localization/translate/lang/Languages.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ public class Languages {
269269
}
270270

271271
public static List<Lang> getLanguages() {
272-
return Collections.unmodifiableList(new ArrayList<>(sLanguages.values()));
272+
return List.copyOf(sLanguages.values());
273273
}
274274

275275
}

src/main/java/com/airsaid/localization/translate/services/TranslatorService.java

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

2020
import com.airsaid.localization.translate.AbstractTranslator;
21+
import com.airsaid.localization.translate.impl.ali.AliTranslator;
2122
import com.airsaid.localization.translate.impl.baidu.BaiduTranslator;
2223
import com.airsaid.localization.translate.impl.google.GoogleTranslator;
2324
import com.airsaid.localization.translate.impl.googleapi.GoogleApiTranslator;
@@ -77,6 +78,9 @@ public TranslatorService() {
7778
YoudaoTranslator youdaoTranslator = new YoudaoTranslator();
7879
translators.put(youdaoTranslator.getKey(), youdaoTranslator);
7980

81+
AliTranslator aliTranslator = new AliTranslator();
82+
translators.put(aliTranslator.getKey(), aliTranslator);
83+
8084
cacheService = TranslationCacheService.getInstance();
8185

8286
translationInterceptors = new ArrayList<>();

src/main/java/icons/PluginIcons.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public interface PluginIcons {
2929
Icon BAIDU_ICON = load("/icons/icon_baidu.svg");
3030
Icon YOUDAO_ICON = load("/icons/icon_youdao.svg");
3131
Icon MICROSOFT_ICON = load("/icons/icon_microsoft.svg");
32+
Icon ALI_ICON = load("/icons/icon_ali.svg");
3233

3334
private static Icon load(String path) {
3435
return IconLoader.getIcon(path, PluginIcons.class);
Lines changed: 5 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)