Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ML Translation #11

Merged
merged 9 commits into from
Apr 1, 2019
6 changes: 6 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,12 @@ limitations under the License.
<artifactId>google-cloud-datastore</artifactId>
<version>1.52.0</version>
</dependency>

<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-translate</artifactId>
<version>1.55.0</version>
</dependency>

<dependency>
<groupId>com.google.cloud</groupId>
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/com/google/codeu/data/Message.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,11 @@ public String getUser() {
return user;
}

public void setText(String words) {
this.text = words;
return;
}

public String getText() {
return text;
}
Expand Down
28 changes: 26 additions & 2 deletions src/main/java/com/google/codeu/servlets/MessageServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@
import javax.servlet.http.HttpServletResponse;
import org.jsoup.Jsoup;
import org.jsoup.safety.Whitelist;
import com.google.cloud.translate.Translate;
import com.google.cloud.translate.Translate.TranslateOption;
import com.google.cloud.translate.TranslateOptions;
import com.google.cloud.translate.Translation;

import com.google.cloud.language.v1.Document;
import com.google.cloud.language.v1.Document.Type;
Expand All @@ -55,6 +59,20 @@ private float getSentimentScore(String text) throws IOException {

return sentiment.getScore();
}

private void translateMessages(List<Message> messages, String targetLanguageCode) {
Translate translate = TranslateOptions.getDefaultInstance().getService();

for(Message message : messages) {
String originalText = message.getText();

Translation translation =
translate.translate(originalText, TranslateOption.targetLanguage(targetLanguageCode));
String translatedText = translation.getTranslatedText();

message.setText(translatedText);
}
}



Expand All @@ -74,13 +92,19 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro

String user = request.getParameter("user");

if (user == null || user.equals("")) {
if (user == null || user.equals("")) {
// Request is invalid, return empty array
response.getWriter().println("[]");
return;
}
}

List<Message> messages = datastore.getMessages(user);

String targetLanguageCode = request.getParameter("language");

if(targetLanguageCode != null) {
translateMessages(messages, targetLanguageCode);
}
Gson gson = new Gson();
String json = gson.toJson(messages);

Expand Down
49 changes: 48 additions & 1 deletion src/main/webapp/js/user-page-loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ function showMessageFormIfViewingSelf() {
/** Fetches messages and add them to the page. */
function fetchMessages() {
const url = '/messages?user=' + parameterUsername;
const parameterLanguage = urlParams.get('language');
let url = '/messages?user=' + parameterUsername;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is there a reason you are setting this twice?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i got rid of the redundancy

if(parameterLanguage) {
url += '&language=' + parameterLanguage;
}
fetch(url)
.then((response) => {
return response.json();
Expand All @@ -60,6 +65,7 @@ function fetchMessages() {
} else {
messagesContainer.innerHTML = '';
}

messages.forEach((message) => {
const messageDiv = buildMessageDiv(message);
messagesContainer.appendChild(messageDiv);
Expand Down Expand Up @@ -91,10 +97,51 @@ function buildMessageDiv(message) {

return messageDiv;
}
/**
* Creates an li element.
* @param {Element} childElement
* @return {Element} li element
*/
function createListItem(childElement) {
const listItemElement = document.createElement('li');
listItemElement.appendChild(childElement);
return listItemElement;
}

/**
* Creates an anchor element.
* @param {string} url
* @param {string} text
* @return {Element} Anchor element
*/
function createLink(url, text) {
const linkElement = document.createElement('a');
linkElement.appendChild(document.createTextNode(text));
linkElement.href = url;
return linkElement;
}

/** Adds list of languages for translating messages */
function buildLanguageLinks(){
const userPageUrl = '/user-page.html?user=' + parameterUsername;
const languagesListElement = document.getElementById('languages');
languagesListElement.appendChild(createListItem(createLink(
userPageUrl + '&language=en', 'English')));
languagesListElement.appendChild(createListItem(createLink(
userPageUrl + '&language=zh', 'Chinese')));
languagesListElement.appendChild(createListItem(createLink(
userPageUrl + '&language=hi', 'Hindi')));
languagesListElement.appendChild(createListItem(createLink(
userPageUrl + '&language=es', 'Spanish')));
languagesListElement.appendChild(createListItem(createLink(
userPageUrl + '&language=ar', 'Arabic')));
}

/** Fetches data and populates the UI of the page. */
function buildUI() {
setPageTitle();
buildLanguageLinks();
showMessageFormIfViewingSelf();
fetchMessages();
}
}

2 changes: 1 addition & 1 deletion src/main/webapp/user-page.html
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
</ul>
</nav>
<h1 id="page-title">User Page</h1>

<ul id="languages"></ul>
<form id="message-form" action="/messages" method="POST" class="hidden">
Enter a new message:
<br/>
Expand Down