我在将西班牙语翻译成英语时遇到问题。但是,当我将英语翻译成西班牙语时,它就起作用了。这是我的代码
I am facing problem while translating spanish into english. But when i translate english into spansih it works. Here is my code
我正在尝试创建一个 java 将西班牙语翻译成英语的应用程序。我在将西班牙语翻译成英语时遇到问题。但是,当我将英语翻译成西班牙语时,它就起作用了。这是我的代码。这是我的代码。你能告诉我我的错误吗?此代码现在可以正常工作,但是当我将 fromLang 的值从 en 更改为 toLang 时,它不起作用。
import java.io.BufferedReader;
import java.io.OutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
public class GuiApp1 {
private static final String CLIENT_ID = "FREE_TRIAL_ACCOUNT";
private static final String CLIENT_SECRET = "PUBLIC_SECRET";
private static final String ENDPOINT = "http://api.whatsmate.net/v1/translation/translate";
public static void main(String[] args) throws Exception {
GuiApp1 g = new GuiApp1();
JFrame f=new JFrame();//creating instance of JFrame
f.setAlwaysOnTop( true );
JButton b=new JButton("Translate");//creating instance of JButton
b.setBounds(90,150,100, 40);//x axis, y axis, width, height
f.add(b);//adding button in JFrame
JTextArea t1,t2;
t1=new JTextArea(2,2);
String spanish;
t1.setBounds(50,100, 200,30);
t2=new JTextArea(2,2);
t2.setBounds(50,200, 200,30);
f.add(t1); f.add(t2);
f.setPreferredSize(new Dimension(200, 900));
f.setLayout(null);//using no layout managers
f.setVisible(true);//making the frame visible
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
String text = t1.getText();
text = text.trim();
text = text.toLowerCase();
System.out.println(text);
String fromLang = "en";
String toLang = "es";
//String text = "Cuál es su nombre";
try{
translate(fromLang, toLang, text);
}catch(Exception e){
System.out.println(e);
}
}
});
}
/**
* Sends out a WhatsApp message via WhatsMate WA Gateway.
*/
public static void translate(String fromLang, String toLang, String text) throws Exception {
// TODO: Should have used a 3rd party library to make a JSON string from an object
String jsonPayload = new StringBuilder()
.append("{")
.append("\"fromLang\":\"")
.append(fromLang)
.append("\",")
.append("\"toLang\":\"")
.append(toLang)
.append("\",")
.append("\"text\":\"")
.append(text)
.append("\"")
.append("}")
.toString();
URL url = new URL(ENDPOINT);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("X-WM-CLIENT-ID", CLIENT_ID);
conn.setRequestProperty("X-WM-CLIENT-SECRET", CLIENT_SECRET);
conn.setRequestProperty("Content-Type", "application/json");
OutputStream os = conn.getOutputStream();
os.write(jsonPayload.getBytes());
os.flush();
os.close();
int statusCode = conn.getResponseCode();
System.out.println("Status Code: " + statusCode);
BufferedReader br = new BufferedReader(new InputStreamReader(
(statusCode == 200) ? conn.getInputStream() : conn.getErrorStream()
));
String output;
while ((output = br.readLine()) != null) {
System.out.println(output);
}
conn.disconnect();
}
}
也许您现在已经超过了免费试用的10使用限制。
无论如何,代码确实有效。它将从英语翻译成西班牙语或西班牙语翻译成英语。您需要做的就是确保您有办法 select 您想要选择哪个翻译方向。目前你没有这个并且正在通过默认的 en 翻译成 es。如果将 fromLang 变量内容更改为 "es"
并将 toLang 变量内容更改为 en
并输入西班牙语 word 到 JTextArea t1 然后点击 Translate 按钮你会将翻译接收到 Console Window(而不是 JTextArea,t2)。接收到的字符串应放入 JTextArea,t2。为了将 returned 字符串放入 JTextArea t2 中,您需要使用 tranlate() 方法 return String 类型,然后在方法底部的 while 循环中,而不是将 returned 数据发送到控制台,执行如下操作:
public static String translate(String fromLang, String toLang, String text) throws Exception {
// ... Most method code here ...
String output;
StringBuilder sb = new StringBuilder();
while ((output = br.readLine()) != null) {
sb.append(output).append(System.lineSeparator());
System.out.println(output); // Optional - For testing
}
conn.disconnect();
return sb.toString();
}
现在,在调用 translate() 方法的地方,改为这样做:
try {
String translation = translate(fromLang, toLang, text);
t2.setText(translation);
}
catch (Exception e) {
System.out.println(e);
}
现在 returned 翻译将放置在 t2 JTextArea 中。我已进行上述修改并将其应用到您提供的以下代码中:
import java.io.BufferedReader;
import java.io.OutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.Border;
public class Translator {
private static final String CLIENT_ID = "FREE_TRIAL_ACCOUNT";
private static final String CLIENT_SECRET = "PUBLIC_SECRET";
private static final String ENDPOINT = "http://api.whatsmate.net/v1/translation/translate";
@SuppressWarnings("Convert2Lambda")
public static void main(String[] args) throws Exception {
Translator g = new Translator();
JFrame f = new JFrame();//creating instance of JFrame
f.setTitle("Translator");
f.setAlwaysOnTop(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setPreferredSize(new Dimension(295, 300));
f.setLayout(null); //using no layout manager (*** BAD IDEA!! ***)
String[] transDirection = {"English To Spanish", "Spanish To English"};
JComboBox<String> jc = new JComboBox<>(transDirection);
jc.setSelectedIndex(0);
jc.setBounds(60, 30, 160, 25);
f.add(jc);
JButton b = new JButton("Translate");//creating instance of JButton
b.setBounds(90, 140, 100, 30);//x axis, y axis, width, height
f.add(b);//adding button in JFrame
Border border = BorderFactory.createLineBorder(Color.decode("#33acff"));
JTextArea t1 = new JTextArea(2, 2);
t1.setBounds(40, 80, 200, 50);
t1.setBorder(border);
t1.setLineWrap(true);
t1.setWrapStyleWord(true);
JScrollPane sp1 = new JScrollPane(t1);
sp1.setBounds(40, 80, 200, 50);
// ---------------------
JTextArea t2 = new JTextArea(2, 2);
t2.setBounds(40, 180, 200, 50);
t2.setBorder(border);
t2.setLineWrap(true);
t2.setWrapStyleWord(true);
JScrollPane sp2 = new JScrollPane(t2);
sp2.setBounds(40, 180, 200, 50);
f.add(sp1, BorderLayout.CENTER);
f.add(sp2, BorderLayout.CENTER);
f.pack();
f.setVisible(true);//making the frame visible
f.setLocationRelativeTo(null); // Must be after setVisible().
t1.requestFocus(); // Set focus on t1 when started
// Button Action Listener...
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
String text = t1.getText().trim();
//Make sure there is text to translate...
if (text.equals("")) {
JOptionPane.showMessageDialog(f, "There is no text supplied to translate!",
"Translation Error!", JOptionPane.WARNING_MESSAGE);
return; // Get out of this event.
}
// Get selected language translation direction...
String fromLang = "";
String toLang = "";
switch (jc.getSelectedItem().toString().toLowerCase()) {
case "english to spanish":
fromLang = "en";
toLang = "es";
break;
case "spanish to english":
fromLang = "es";
toLang = "en";
break;
default:
fromLang = "en";
toLang = "es";
}
try {
String translation = translate(fromLang, toLang, text);
t2.setText(translation);
}
catch (Exception e) {
System.out.println(e);
}
}
});
}
/**
* Sends out a WhatsApp message via WhatsMate WA Gateway.<br><br>
* @param fromLang
* @param toLang
* @param text
* @return
* @throws java.lang.Exception
*/
public static String translate(String fromLang, String toLang, String text) throws Exception {
// TODO: Should have used a 3rd party library to make a JSON string from an object
String jsonPayload = new StringBuilder()
.append("{")
.append("\"fromLang\":\"")
.append(fromLang)
.append("\",")
.append("\"toLang\":\"")
.append(toLang)
.append("\",")
.append("\"text\":\"")
.append(text)
.append("\"")
.append("}")
.toString();
URL url = new URL(ENDPOINT);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("X-WM-CLIENT-ID", CLIENT_ID);
conn.setRequestProperty("X-WM-CLIENT-SECRET", CLIENT_SECRET);
conn.setRequestProperty("Content-Type", "application/json");
// 'Try With Resources' used here to auto-close stream.
try (OutputStream os = conn.getOutputStream()) {
os.write(jsonPayload.getBytes());
os.flush();
}
int statusCode = conn.getResponseCode();
System.out.println("Status Code: " + statusCode);
BufferedReader br = new BufferedReader(new InputStreamReader(
(statusCode == 200) ? conn.getInputStream() : conn.getErrorStream()
));
String output;
StringBuilder sb = new StringBuilder();
while ((output = br.readLine()) != null) {
sb.append(output).append(System.lineSeparator());
System.out.println(output);
}
conn.disconnect();
return sb.toString();
}
}
旁注:您在创建表单时选择不使用布局管理器(空)。这实际上是一个坏主意,here's why(一定要阅读评论)。
我正在尝试创建一个 java 将西班牙语翻译成英语的应用程序。我在将西班牙语翻译成英语时遇到问题。但是,当我将英语翻译成西班牙语时,它就起作用了。这是我的代码。这是我的代码。你能告诉我我的错误吗?此代码现在可以正常工作,但是当我将 fromLang 的值从 en 更改为 toLang 时,它不起作用。
import java.io.BufferedReader;
import java.io.OutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
public class GuiApp1 {
private static final String CLIENT_ID = "FREE_TRIAL_ACCOUNT";
private static final String CLIENT_SECRET = "PUBLIC_SECRET";
private static final String ENDPOINT = "http://api.whatsmate.net/v1/translation/translate";
public static void main(String[] args) throws Exception {
GuiApp1 g = new GuiApp1();
JFrame f=new JFrame();//creating instance of JFrame
f.setAlwaysOnTop( true );
JButton b=new JButton("Translate");//creating instance of JButton
b.setBounds(90,150,100, 40);//x axis, y axis, width, height
f.add(b);//adding button in JFrame
JTextArea t1,t2;
t1=new JTextArea(2,2);
String spanish;
t1.setBounds(50,100, 200,30);
t2=new JTextArea(2,2);
t2.setBounds(50,200, 200,30);
f.add(t1); f.add(t2);
f.setPreferredSize(new Dimension(200, 900));
f.setLayout(null);//using no layout managers
f.setVisible(true);//making the frame visible
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
String text = t1.getText();
text = text.trim();
text = text.toLowerCase();
System.out.println(text);
String fromLang = "en";
String toLang = "es";
//String text = "Cuál es su nombre";
try{
translate(fromLang, toLang, text);
}catch(Exception e){
System.out.println(e);
}
}
});
}
/**
* Sends out a WhatsApp message via WhatsMate WA Gateway.
*/
public static void translate(String fromLang, String toLang, String text) throws Exception {
// TODO: Should have used a 3rd party library to make a JSON string from an object
String jsonPayload = new StringBuilder()
.append("{")
.append("\"fromLang\":\"")
.append(fromLang)
.append("\",")
.append("\"toLang\":\"")
.append(toLang)
.append("\",")
.append("\"text\":\"")
.append(text)
.append("\"")
.append("}")
.toString();
URL url = new URL(ENDPOINT);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("X-WM-CLIENT-ID", CLIENT_ID);
conn.setRequestProperty("X-WM-CLIENT-SECRET", CLIENT_SECRET);
conn.setRequestProperty("Content-Type", "application/json");
OutputStream os = conn.getOutputStream();
os.write(jsonPayload.getBytes());
os.flush();
os.close();
int statusCode = conn.getResponseCode();
System.out.println("Status Code: " + statusCode);
BufferedReader br = new BufferedReader(new InputStreamReader(
(statusCode == 200) ? conn.getInputStream() : conn.getErrorStream()
));
String output;
while ((output = br.readLine()) != null) {
System.out.println(output);
}
conn.disconnect();
}
}
也许您现在已经超过了免费试用的10使用限制。
无论如何,代码确实有效。它将从英语翻译成西班牙语或西班牙语翻译成英语。您需要做的就是确保您有办法 select 您想要选择哪个翻译方向。目前你没有这个并且正在通过默认的 en 翻译成 es。如果将 fromLang 变量内容更改为 "es"
并将 toLang 变量内容更改为 en
并输入西班牙语 word 到 JTextArea t1 然后点击 Translate 按钮你会将翻译接收到 Console Window(而不是 JTextArea,t2)。接收到的字符串应放入 JTextArea,t2。为了将 returned 字符串放入 JTextArea t2 中,您需要使用 tranlate() 方法 return String 类型,然后在方法底部的 while 循环中,而不是将 returned 数据发送到控制台,执行如下操作:
public static String translate(String fromLang, String toLang, String text) throws Exception {
// ... Most method code here ...
String output;
StringBuilder sb = new StringBuilder();
while ((output = br.readLine()) != null) {
sb.append(output).append(System.lineSeparator());
System.out.println(output); // Optional - For testing
}
conn.disconnect();
return sb.toString();
}
现在,在调用 translate() 方法的地方,改为这样做:
try {
String translation = translate(fromLang, toLang, text);
t2.setText(translation);
}
catch (Exception e) {
System.out.println(e);
}
现在 returned 翻译将放置在 t2 JTextArea 中。我已进行上述修改并将其应用到您提供的以下代码中:
import java.io.BufferedReader;
import java.io.OutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.Border;
public class Translator {
private static final String CLIENT_ID = "FREE_TRIAL_ACCOUNT";
private static final String CLIENT_SECRET = "PUBLIC_SECRET";
private static final String ENDPOINT = "http://api.whatsmate.net/v1/translation/translate";
@SuppressWarnings("Convert2Lambda")
public static void main(String[] args) throws Exception {
Translator g = new Translator();
JFrame f = new JFrame();//creating instance of JFrame
f.setTitle("Translator");
f.setAlwaysOnTop(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setPreferredSize(new Dimension(295, 300));
f.setLayout(null); //using no layout manager (*** BAD IDEA!! ***)
String[] transDirection = {"English To Spanish", "Spanish To English"};
JComboBox<String> jc = new JComboBox<>(transDirection);
jc.setSelectedIndex(0);
jc.setBounds(60, 30, 160, 25);
f.add(jc);
JButton b = new JButton("Translate");//creating instance of JButton
b.setBounds(90, 140, 100, 30);//x axis, y axis, width, height
f.add(b);//adding button in JFrame
Border border = BorderFactory.createLineBorder(Color.decode("#33acff"));
JTextArea t1 = new JTextArea(2, 2);
t1.setBounds(40, 80, 200, 50);
t1.setBorder(border);
t1.setLineWrap(true);
t1.setWrapStyleWord(true);
JScrollPane sp1 = new JScrollPane(t1);
sp1.setBounds(40, 80, 200, 50);
// ---------------------
JTextArea t2 = new JTextArea(2, 2);
t2.setBounds(40, 180, 200, 50);
t2.setBorder(border);
t2.setLineWrap(true);
t2.setWrapStyleWord(true);
JScrollPane sp2 = new JScrollPane(t2);
sp2.setBounds(40, 180, 200, 50);
f.add(sp1, BorderLayout.CENTER);
f.add(sp2, BorderLayout.CENTER);
f.pack();
f.setVisible(true);//making the frame visible
f.setLocationRelativeTo(null); // Must be after setVisible().
t1.requestFocus(); // Set focus on t1 when started
// Button Action Listener...
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
String text = t1.getText().trim();
//Make sure there is text to translate...
if (text.equals("")) {
JOptionPane.showMessageDialog(f, "There is no text supplied to translate!",
"Translation Error!", JOptionPane.WARNING_MESSAGE);
return; // Get out of this event.
}
// Get selected language translation direction...
String fromLang = "";
String toLang = "";
switch (jc.getSelectedItem().toString().toLowerCase()) {
case "english to spanish":
fromLang = "en";
toLang = "es";
break;
case "spanish to english":
fromLang = "es";
toLang = "en";
break;
default:
fromLang = "en";
toLang = "es";
}
try {
String translation = translate(fromLang, toLang, text);
t2.setText(translation);
}
catch (Exception e) {
System.out.println(e);
}
}
});
}
/**
* Sends out a WhatsApp message via WhatsMate WA Gateway.<br><br>
* @param fromLang
* @param toLang
* @param text
* @return
* @throws java.lang.Exception
*/
public static String translate(String fromLang, String toLang, String text) throws Exception {
// TODO: Should have used a 3rd party library to make a JSON string from an object
String jsonPayload = new StringBuilder()
.append("{")
.append("\"fromLang\":\"")
.append(fromLang)
.append("\",")
.append("\"toLang\":\"")
.append(toLang)
.append("\",")
.append("\"text\":\"")
.append(text)
.append("\"")
.append("}")
.toString();
URL url = new URL(ENDPOINT);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("X-WM-CLIENT-ID", CLIENT_ID);
conn.setRequestProperty("X-WM-CLIENT-SECRET", CLIENT_SECRET);
conn.setRequestProperty("Content-Type", "application/json");
// 'Try With Resources' used here to auto-close stream.
try (OutputStream os = conn.getOutputStream()) {
os.write(jsonPayload.getBytes());
os.flush();
}
int statusCode = conn.getResponseCode();
System.out.println("Status Code: " + statusCode);
BufferedReader br = new BufferedReader(new InputStreamReader(
(statusCode == 200) ? conn.getInputStream() : conn.getErrorStream()
));
String output;
StringBuilder sb = new StringBuilder();
while ((output = br.readLine()) != null) {
sb.append(output).append(System.lineSeparator());
System.out.println(output);
}
conn.disconnect();
return sb.toString();
}
}
旁注:您在创建表单时选择不使用布局管理器(空)。这实际上是一个坏主意,here's why(一定要阅读评论)。