Lina Yan Ning's Portfolio

The beginnings of something great...

Localising a Godot engine game to non-Latin language – Russian

For Software & Games final project, Vanessa Prolow and I explored Godot engine game localization. I am going to talk about how to localize the game Hijinx into Russian. Since Russian is a different letter language, besides the .csv file, it also involves the import of a font that supports the language. I’ll elaborate on the details in this essay.

Right after we’ve decided to explore this new engine, we started researching and reading the tutorials to prepare for the localization.

Facts about Godot engine

  • Godot is a 2D and 3D cross-platform (Linux, MacOS, Windows, iOS, Android) free and open-source game engine.
  • Godot games are created either in C++, C#, languages or by using its own scripting language GDScript.

How to localise a Godot engine game?

Internationalisation

From the tutorials, we should be able to wrap the strings with tr()

Let’s find some strings first:

The above images are the main menu and the tip message. Before we wrap them in the code, we create our keys, the id column in the .csv file you see in the screenshot followed up.

Localization

Import Translation

We could use a .csv file to localise a godot engine game into different languages. Here is the screenshot of our strings.

strings.csv

Basically, we put all our keys under the column id, then add translations under different languages we want to support.

The file has to be saved as .csv (utf-8 delimited comma). This is the way how it works. We create a translation folder in the game folder and put the strings.csv file in here. All the files will be automatically imported to the engine. Respective translation files will be generated. Then add them to project – project settings – localization – translations:

Don’t forget to change the Label text into the keys we created in the code.

Now we have the Russian translations, we still need to import a Russian font to support the language. Download a Russian font if you don’t have one. Then move the font to the game’s fonts folder, again it will be automatically imported.

Then go to Project – Project Lettings – localisation – Remaps, where we can replace the current font with the newly imported Russian font.

One more step, go to Project – Project Settings – General – Local, change the Test into ru.

Now the menu and tips should be translated to Russian.

Struggle: Chinese and Japanese just won’t work.

We tried different Chinese and Japanese fonts, with the same way, Chinese and Japanese just won’t show in the localised game. It appears as blank. According to the sample we find on Godot’s website, Japanese should work. However, whichever way we try, it just won’t display. We wonder if it has something to do with this specific game. Anyway, if any of you knows the answer, we would love to hear about it.

Here are some links that will lead you directly to everything about Godot.

Reddit

https://www.reddit.com/r/godot/

A good place to ask questions and discuss them with other

Godot Docs

https://docs.godotengine.org/en/3.1/tutorials/i18n/internationalizing_games.html

Tutorials about internationalisation and localization, along with other Godot related documents

Gotut website

https://www.gotut.net/?s=godot

Features content focusing on the Godot 3.0 and upwards.

Adv. CAT

The Adv. Computer Assisted Technology (CAT) course this semester, on the basis of Intro to CAT, I gained a deeper understanding of the different types of productivity software, Pseudo Translation of WordPress posts, utility tools and Regex (Regular Expressions).  For the first half of the semester, we mainly focused on Training a Neural Statistical Machine Translation Engine.

1. Collecting Data

We worked with Microsoft Custom Translator and chose UN financing reports for our training, testing and tuning data. Because we could easily find large amount of paralled corpus from UN OPUS paralle corpus, which is necessary for machine training for it needs huge amount of data to learn the pattern. Secondly, the language of these reports are very controlled and repetitive. They are all written in the same template as well. These are all primary factors we need to consider when talking about machine translaiton.

2. Data cleaning

After we’ve gathered out training, testing and tuning data from OPUS, we used Youalign and TMXeditor to clean up the data, in order to achieve a better result. The tool we use is Heartsome TMXeditor. It has a feature that enables us to delete the untranslated sentences and repetitions.

Oilfant is another very useful tool that could do TMX cleaning.

3. Traning

With the cleaned-up data, our training went pretty well. As we add more cleaned sentences, we got a relatively high BLEU score.

4. QA

We carried out 2 rounds of QA, one in the middle and the other after all the training is done. The machine did a pretty good job at accuracy and fluency. We used LISA metric for evaluation.

Based on the results, please click the link to see our original proposal and the updated after we have finished our 14 rounds of training. And the presentation of Lessons Learned.

Original Proposal

https://drive.google.com/open?id=1KbYhhz7NKuwi9m04dvqTR6rwp0O1mTq3oyaR4tgfc3g

Updated Proposal

https://drive.google.com/drive/u/1/folders/1D-nnO6rEgMebattUMU_mB2yAQIjuq0If

Presenation of Lessons Learned

https://drive.google.com/open?id=1elKC5PCRzn3899wg055WWQuaO3Kq37g0

Text Effects in After Effect

Desktop Publishing is one of my favorite courses this semester. I really enjoy working with all the tools we’ve covered in class: Photoshop, Illustrator, InDesign, AfterEffects, PremirePro, and ebooks. I had fun learning to use these tools to localize projects. It’s also very fascinating for me to play around with them after class, to dig deeper and explore other powerful features that we didn’t cover in class. It is something that I do just because I enjoy doing it.

For my final project, I chose to use After Effects to localize a video https://www.youtube.com/watch?v=KSb_3umhkPI&t=3s (00:00 — 02:21) from YouTube. I know it could be a little bit challenging without the original Project Files, but it could be a real-life scenario too, so why not give it a try? Besides the skills I acquired from class, I also watched a lot of tutorials from YouTube, did Google Searches and sought help from the professor and other classmates. I quite enjoy the process, digging deeper and teaching myself new stuff. Learning never ends, either in school or a professional setting.

Please click the link to see the localized video.

https://www.youtube.com/watch?v=FdYvdT_BOf8&feature=youtu.be

During the process, I also learned that there are always multiple ways to solve a problem. I mainly explored and used these functions in AE while I was localizing this video.

  1. Text Motion

AE has a lot of amazing built-in text effects in the Effects and presets window. They are easy to apply and very useful to the projects. To open them, we go to Effects and presets, in the Animation presets dropdown, we will find the text folder. Drag the effect to the text you want to apply it to or drag it to the text layer. In this video, I used typewriter and fly in from the bottom (character by character).

2. Text behind the mask reveal

A lot of the texts in the video reveal behind the mask. In order to do that, I use the keyboard shortcut command + shift + N to create a mask for the text. Or right click the text layer, go to Mask and New Mask. Then go to the text layer dropdown menu, find Animate. This is something specific for text layers only, you can do Position, Scale, Skew…etc. To make text reveal behind the mask, we are animating the position. Then you find your animator and move your text wherever you want it to be. We want it to go down. So we click the stopwatch to make a keyframe, and then add another one at the end position and the text will be revealed from behind the mask.

3. Another challenging task is to figure out how to make the shape layer (the mask) show up gradually, little by little. The way I did this is by animating both the position and the scale.

4. Photoshop related technique.

When the background is not a single color, we wouldn’t be able to use the shape layer. We can use the Photoshop related technique we covered in class.

We go to Go to Composition → Save Frame As → File, you will be taken to the Render Queue. Click the “Output To” and choose the “Sources” folder. Click “Render” in the upper right. The PSD will be generated. Drag the PSD into the AE project and use it like one of the mask layers, so drag the start and end time to that it corresponds to when the text appears on the screen. Use the Ellipse shape tool to draw a mask.

5. Precompose

Besides text effects, some of the texts in this video reveal behind the mask. In order to achieve that, I select the text layer, then on the text layer, I go command + shift + N to create a mask around the mask. Then I go to the text layer dropdown and find the Animate – position. By adding keyframes to the position, (simply dragging) we can make the text reveal from behind the mask.

Another tricky question is how to make the text and the mask move at the same time. I played around parenting tool and precompose. And I decided to use precompose to make it happen. After setting up the text effect and the keyframes, select the text and the mask, right click – precompose, and these two layers will be combined into one layer. By adding keyframes to this new layer, they will be able to move at the same time.

The video clip I localized is not perfect yet, especially the transition. There are two frames where the mask does cover the original language when it transitions. It’s all about learning and improving. I’ll keep exploring other features in this tool and polishing up my skills through more practice. I can feel that the further I go, the faster and better I get at adding masks, animating the position or scale or add text effects. It’s all about practice.

Translation Management System

TMS course gives me a clearer perspective on Translation and the business. CAT tools we learned last year mainly focused on translating, while TMS takes translation to a whole new level by automating translation process, and generating streamlined workflow. I’ve gained a lot from it:

  • complete user setup, asset management, workflow creation, project creation and project completion
  • to quickly learn a completely new TMS based on the knowledge of known TMS
  • understanding of the different types and components of TMSs to select workflows and systems appropriate to different situations.

We’ve accomplished to group projects throughout the course. One is TMS comparision and the other is to select a TMS or business management tool for a client based on their specific needs.

TMS comparison: https://docs.google.com/presentation/d/1B32R92nc2zqcBN-v1NfK7ZSVPKJ4JL_XeUkEK-eSrzo/edit?usp=sharing

Final group project:

https://docs.google.com/presentation/d/1pwwXDPA5_cefhBwRJzpndiZ8aL55eTXVT0mKt7dDrM8/edit#slide=id.p5

Translation Crowdsourcing

Social localization and Translation Crowdsourcing have opened up a new perspective for me towards translation. Before I take the course, I know there are volunteers helping translate some websites such as Ted Talk Open Translation Project, fan base volunteer to translate their favorite movies’ subtitles. What I don’t know is the concise definition of Translation Crowdsourcing or Community Translation and all the technology and management behind these projects.

Besides machine translation that most of us are familiar with, thanks to google translation. There are professional language service providers, which are human translation. Crowdsourcing translation plays a vital role in the business too. Translators Without Borders have translated over 50 million words for non-profit organizations. Facebook has gained success in Community Translation. The key point is to know when to use which. I’ll focus on crowdsourcing today.

Crowdsourcing is harnessing the wisdom, energy, talents of the “crowd” in a streamlined or semi-automated manner for a common purpose or goal. But why would volunteer translators want to join the project, to contribute their time and effort? How could the organizations ensure the quality of the crowdsourcing translated work? I am really glad that we get to explore all these and come up with our own best practices to improve the quality and quantity in Translation Crowdsourcing. Our group have helped CodeAcademy,  to start their crowdsourcing project.

Please see the general practices to ensure quantity in translation crowdsourcing. https://drive.google.com/file/d/1mtvsUih67rVUe9pIf6ngVqJhn6hoZtmR/view?usp=sharing

https://drive.google.com/file/d/13-whZYzjciAeOrrRpipLF8kF_UmM92y1/view?usp=sharing

We also made specific strategies for our client CodeAcademy accodrding to their speific needs. Please see the link for the Quality, Quantity infographic and our presentation.

Quantity https://drive.google.com/file/d/1gVPwXu5q20sRLlt1kusTIITHwVHcFKA2/view?usp=sharing

Quality https://drive.google.com/file/d/1LmwwbVSwy-TRFsQXGJ_o0hAfUF4Q2aDB/view?usp=sharing

Presentation https://www.youtube.com/watch?v=OkzL6pvaDTw&feature=youtu.be&fbclid=IwAR2TEcH8R96YQfzDHh5MdPMaNCJwgQuSJHG3rLvKqJMnPkoR_bRy4XJTukU

L10N Project Management

By taking Localization Project Management, I get to experience the whole production process, not only from a linguist’s perspective but also learn to work as a project manager, work with my team, from the first day we get the job till we deliver the completed project to the client.

I’ve learned the concepts involved with managing translation and localization projects, as well as the practical skills through the simulation project throughout the whole semester.

The client our team chooses is The Metropolitan Museum of Art. Wiki page and Trello board are the two main tools that we use to make sure that our team are always on the same page and work efficiently.

We had problems. We made mistakes. We ran into roadblocks. But in hindsight, the benefit of the whole process is tenfold. I’m glad we get to have a post-mortem meeting as a whole class and a group as well, which is a great opportunity for us to reflect and extract the lessons learned and make sure that we can apply and validate them in our future projects.

For example, in the planning period, we would spend more time as a team to understand the project better before we split up the task in logical chunks and assign them to each team member. Also, before we start work on it, we would try to foresee what could go wrong and what would work. These preventative measures could help us improve efficiency during the execution. Execution is the challenging part. Since we are novices to time tracking at the beginning of the project, we either forget to track our time or mislabel the category. Thinking back, we should have agreed to have a consistent system of labeling in terms of our activities on Toptracker. This would have prevented the headache of having to correct labelling and avoided ambiguities working our billable time when wrapping up the project. We also suffered from the problem of trusting each other too much that we would at times hesitate to hold a member accountable for not finishing the task they were assigned. In the future, we could have a more robust and transparent system of accountability and have someone acting as the “checker” each week to carry out the task of checking that all the work has been done for a particular week by a set time. This would prevent any last-minute scrambling that may fall on one person. Another thing we definitely want to improve is that we would meet more on the regular basis as a team to share insights and identify mistakes and successes, which would make the whole project move much more smoothly in general.
Communication is the most important throughout the whole process. For our future projects, we would make sure that we have built a more direct communication channel or even multiple channels to make sure that each one of us can be reached directly and efficiently for a specific problem. Team members should gather more too. There should be no restrictions in group meeting. Everyone is at ease

Webstie Localization

Looking back, Website Localization has taken me on a journey of localization which is a new and exciting field for me to explore. I’ve learned basic computer languages HTML, CSS, and JavaScript, as well as other localization tools such as WordPress, Polylang, WPML, Drupal 8 and Proxy. They were pretty overwhelming to me at the very beginning, but now I can see that our professor, Max is helping us pave the road, as I can see when we get to WPML, Drupal and Proxy, the localization process is becoming both more efficient and easier.

There were a lot of roadblocks. I made a lot of mistakes and there were quite a few times that I doubt that if I can handle it. I’m glad that I didn’t give it up. As now I can say that I am a linguist who knows how to use the tools above to localize a website. I definitely need a lot more practice though, but now after the whole semester’s course and the immediate help that I always get from both the professor and classmate, I have a lot more confidence and motivation to keep going on.

As for our final project, our team, composed of (Alex)Mengyun Guo, Shitong Kang and Me(Lina), Alex as the localization engineer, me as the translator and Shitong as the tester. we decided to localize 3D Hartwig Chess Set from Github developed by Julian Garnier. It’s a web-based JavaScript game and we would like to explore more about JavaScript and try to apply what we’ve learned in class to this project.
Here is our completed project

3D Hartwig Chess Set

I am the translator of this project. Our target language is Mandarin Chinese. Before we initiate it, we ran an analysis of the game. After we downloaded the game zip we examined all the files.

Firstly, I played the game and located all the texts or Strings that need to be translated. I make sure I clicked into each tab to find all the possible strings. Then I looked into the HTML file to pinpoint each text and note down the location, which could facilitate the wrapping process.

Most of the texts are pretty visible and easy to be found. Some of them in the js files and since the code is not that organized, it did take me a while to find all the texts.

After I located all the texts, I started the translation. Translating these texts I need to take the context, which in here is a game into consideration. There are also some hyperlinks, and slangs that need to be translated properly into Mandarin.

This is a minor game, so I put the translation into the table for the localization engineer to refer to.

I did the translation manually, as this is not a huge project. But I also tried the way we did in class, use Find and Replace to hide the non-translatable text, and save it as RTF. So I can use the CAT tool that I prefer to translate. I do wanna make sure that I know how to deal with heavy workload efficiently in the future.

After the translation is done, together with Alex’s wrapped strings, we managed to localize this game into Mandarin Chinese. Shitong tested the game in different themes, so far the only problem we can’t seem to tackle is if we go straight to ‘play’ without choosing a theme, ‘White’ or ‘Black’ is not translated. However, everything is fully translated if we pick a theme before we go into the game. We’ll keep working on it as that’s the fun part of learning.

The whole process is challenging and demanding but thanks to our team member’s hard work and help, it’s fulfilling to see our completed project. Most importantly, I feel that it is in the process of actually using these skills and knowledge that we get to understand them better.

Intro to CAT

Computer Assistant Translation Tools is relatively new to me since I focused my language skills on education before I start MIIS. This course had opened up a new perspective for me to look at the translation, especially as a linguistic. Through hands-on practice, I’ve learned to use the basic features of SDL Trados to create translation memory, reuse previous translation memory, manage terminology, perform quality assurance, and edit translations according to best practices. Most importantly, since we have spent quite a few amounts of time on Trados, I am amazed at how fast I could learn to use other translation Environmental tools, like MemoQ,  or whatever they are, I could quickly figure out within a few hours. We also had a simulation project and worked as a team through the whole production process. It is in this action that we get to put what we have learned into practice and gain the real-life experience.

Our client is Financial Times. We definitely learned a lot through the whole production process, here is our Presentation on lessons learned.

We offered client-facing Quote based on Trados Analysis. 
We’ve also had our deliverables and proposal. 

I personally benefited a lot from the class and I am looking forward to digging up more about CAT tools in the upcoming semester.