Skip to content

Commit 13e2997

Browse files
committed
Fix translation error when source text is in chinese #33
1 parent c9412f4 commit 13e2997

File tree

5 files changed

+38
-37
lines changed

5 files changed

+38
-37
lines changed

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828

2929
import javax.swing.*;
3030
import java.io.IOException;
31+
import java.io.UnsupportedEncodingException;
32+
import java.net.URLEncoder;
33+
import java.nio.charset.StandardCharsets;
3134
import java.util.List;
3235
import java.util.stream.Collectors;
3336

@@ -55,14 +58,20 @@ public String doTranslate(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull
5558
return requestBuilder.connect(request -> {
5659
String requestParams = getRequestParams(fromLang, toLang, text)
5760
.stream()
58-
.map(pair -> pair.first.concat("=").concat(pair.second))
61+
.map(pair -> {
62+
try {
63+
return pair.first.concat("=").concat(URLEncoder.encode(pair.second, StandardCharsets.UTF_8.name()));
64+
} catch (UnsupportedEncodingException e) {
65+
throw new TranslationException(fromLang, toLang, text, e);
66+
}
67+
})
5968
.collect(Collectors.joining("&"));
6069
if (!requestParams.isEmpty()) {
6170
request.write(requestParams);
6271
}
6372
String requestBody = getRequestBody(fromLang, toLang, text);
6473
if (!requestBody.isEmpty()) {
65-
request.write(requestBody);
74+
request.write(URLEncoder.encode(requestBody, StandardCharsets.UTF_8.name()));
6675
}
6776
String resultText = request.readString();
6877
return parsingResult(fromLang, toLang, text, resultText);

src/main/java/com/airsaid/localization/translate/impl/baidu/BaiduTranslator.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,9 @@
2323
import com.airsaid.localization.translate.lang.Languages;
2424
import com.airsaid.localization.translate.util.GsonUtil;
2525
import com.airsaid.localization.translate.util.MD5;
26-
import com.airsaid.localization.translate.util.UrlBuilder;
2726
import com.intellij.openapi.util.Pair;
2827
import com.intellij.util.io.RequestBuilder;
2928
import icons.PluginIcons;
30-
import org.apache.commons.lang.StringEscapeUtils;
3129
import org.jetbrains.annotations.NotNull;
3230
import org.jetbrains.annotations.Nullable;
3331

@@ -102,23 +100,22 @@ public class BaiduTranslator extends AbstractTranslator {
102100

103101
@Override
104102
public @NotNull String getRequestUrl(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull String text) {
105-
String salt = String.valueOf(System.currentTimeMillis());
106-
String appId = getAppId();
107-
String securityKey = getAppKey();
108-
String sign = MD5.md5(appId + text + salt + securityKey);
109-
return new UrlBuilder(TRANSLATE_URL)
110-
.addQueryParameter("from", fromLang.getCode())
111-
.addQueryParameter("to", toLang.getCode())
112-
.addQueryParameters("appid", appId)
113-
.addQueryParameters("salt", salt)
114-
.addQueryParameters("sign", sign)
115-
.build();
103+
return TRANSLATE_URL;
116104
}
117105

118106
@Override
119107
public @NotNull List<Pair<String, String>> getRequestParams(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull String text) {
108+
String salt = String.valueOf(System.currentTimeMillis());
109+
String appId = getAppId();
110+
String securityKey = getAppKey();
111+
String sign = MD5.md5(appId + text + salt + securityKey);
120112
List<Pair<String, String>> params = new ArrayList<>();
121-
params.add(Pair.create("q", StringEscapeUtils.escapeJava(text)));
113+
params.add(Pair.create("from", fromLang.getCode()));
114+
params.add(Pair.create("to", toLang.getCode()));
115+
params.add(Pair.create("appid", appId));
116+
params.add(Pair.create("salt", salt));
117+
params.add(Pair.create("sign", sign));
118+
params.add(Pair.create("q", text));
122119
return params;
123120
}
124121

src/main/java/com/airsaid/localization/translate/impl/google/GoogleTranslator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import com.intellij.openapi.util.Pair;
2727
import com.intellij.util.io.RequestBuilder;
2828
import icons.PluginIcons;
29-
import org.apache.commons.lang.StringEscapeUtils;
3029
import org.jetbrains.annotations.NotNull;
3130

3231
import javax.swing.*;
@@ -106,7 +105,7 @@ public List<Lang> getSupportedLanguages() {
106105
@Override
107106
public @NotNull List<Pair<String, String>> getRequestParams(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull String text) {
108107
List<Pair<String, String>> params = new ArrayList<>();
109-
params.add(Pair.create("q", StringEscapeUtils.escapeJava(text)));
108+
params.add(Pair.create("q", text));
110109
return params;
111110
}
112111

src/main/java/com/airsaid/localization/translate/impl/microsoft/MicrosoftTranslator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import com.intellij.openapi.util.Pair;
2727
import com.intellij.util.io.RequestBuilder;
2828
import icons.PluginIcons;
29-
import org.apache.commons.lang.StringEscapeUtils;
3029
import org.jetbrains.annotations.NotNull;
3130
import org.jetbrains.annotations.Nullable;
3231

@@ -182,7 +181,7 @@ public boolean isNeedAppId() {
182181
@Override
183182
@NotNull
184183
public String getRequestBody(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull String text) {
185-
return "[{\"Text\": \"" + StringEscapeUtils.escapeJava(text) + "\"}]";
184+
return "[{\"Text\": \"" + text + "\"}]";
186185
}
187186

188187
@Override

src/main/java/com/airsaid/localization/translate/impl/youdao/YoudaoTranslator.java

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,9 @@
2222
import com.airsaid.localization.translate.lang.Lang;
2323
import com.airsaid.localization.translate.lang.Languages;
2424
import com.airsaid.localization.translate.util.GsonUtil;
25-
import com.airsaid.localization.translate.util.UrlBuilder;
2625
import com.intellij.openapi.util.Pair;
2726
import com.intellij.util.io.RequestBuilder;
2827
import icons.PluginIcons;
29-
import org.apache.commons.lang.StringEscapeUtils;
3028
import org.jetbrains.annotations.NotNull;
3129
import org.jetbrains.annotations.Nullable;
3230

@@ -169,20 +167,7 @@ public String getApplyAppIdUrl() {
169167

170168
@Override
171169
public @NotNull String getRequestUrl(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull String text) {
172-
String salt = String.valueOf(System.currentTimeMillis());
173-
String curTime = String.valueOf(System.currentTimeMillis() / 1000);
174-
String appId = getAppId();
175-
String appKey = getAppKey();
176-
String sign = getDigest(appId + truncate(text) + salt + curTime + appKey);
177-
return new UrlBuilder(TRANSLATE_URL)
178-
.addQueryParameter("from", fromLang.getCode())
179-
.addQueryParameter("to", toLang.getCode())
180-
.addQueryParameter("signType", "v3")
181-
.addQueryParameter("curtime", curTime)
182-
.addQueryParameter("appKey", appId)
183-
.addQueryParameter("salt", salt)
184-
.addQueryParameter("sign", sign)
185-
.build();
170+
return TRANSLATE_URL;
186171
}
187172

188173
private String truncate(String q) {
@@ -212,8 +197,20 @@ private String getDigest(String string) {
212197

213198
@Override
214199
public @NotNull List<Pair<String, String>> getRequestParams(@NotNull Lang fromLang, @NotNull Lang toLang, @NotNull String text) {
200+
String salt = String.valueOf(System.currentTimeMillis());
201+
String curTime = String.valueOf(System.currentTimeMillis() / 1000);
202+
String appId = getAppId();
203+
String appKey = getAppKey();
204+
String sign = getDigest(appId + truncate(text) + salt + curTime + appKey);
215205
List<Pair<String, String>> params = new ArrayList<>();
216-
params.add(Pair.create("q", StringEscapeUtils.escapeJava(text)));
206+
params.add(Pair.create("from", fromLang.getCode()));
207+
params.add(Pair.create("to", toLang.getCode()));
208+
params.add(Pair.create("signType", "v3"));
209+
params.add(Pair.create("curtime", curTime));
210+
params.add(Pair.create("appKey", appId));
211+
params.add(Pair.create("salt", salt));
212+
params.add(Pair.create("sign", sign));
213+
params.add(Pair.create("q", text));
217214
return params;
218215
}
219216

0 commit comments

Comments
 (0)