r/gamedev 5h ago

Just finished localization of 15 languages and here's what I learned

Hey! For context, I'm part of an indie dev studio Rocket Adrift, and we put out our side-scroller narrative game Psychroma in June of last year.

We released on PC and Linux through Steam, and only in English. To be honest, we had very little expectations on having any other languages for release or after. But a unique opportunity arose the week before our launch that we couldn't ignore.

We applied for free localization through a volunteer-run initiative. The initiative would initially deliver 21 languages all for free, and the goal was to start in the month of June. Psychroma ended up being picked among several different projects in a vote. Suddenly we were going from 1 language to 21!

In our 6 years of developing games, we had never gone through the process of localization before. We only had an educated guess on the scope of that process, but we were completely new to it otherwise. Well, we were in for a shock.

The overall process took over 6 months for 15 languages. The amount of work varied from part-time to full-time for the entire team, as we handed off tasks to keep things doable. But it was incredibly difficult to implement, took a ton of communication with the translators, and required all of us to make a lot of concessions about QA.

Part of the reason we struggled with it is we had not done the set up required to implement localized strings, particularly for the UI. We were using Unity Dialogue Manager, as well as Corgi Engine for our movement, camera and UI systems. Historically, both these plugins did not play well together during development, and required some custom scripts to function properly. This problem only exacerbated the localization process. It basically ended up becoming a one-person job to manually change over every single UI text string for every language.

Another contributing factor was organization. Since we had no internal formal process for delivering localized files, and testing or flagging issues, communication with the translation teams struggled. Tasks would be marked as complete when they weren't, testers were unclear on what build version they were testing on, and user errors slowed down progress.

We also learned during the process that the translation teams were made up of hobbyists and non-professionals, who were volunteering their time when they could to the project. To their credit, almost all of them came through with exceptional patience, skill, and hard work. At the end of the process, they were incredibly proud of their contributions, as they should be.

The major issue here is that them being volunteers created an imbalance of expectations for the quality of the translations versus the our teams' ability to deliver our work. Our budget had already been strained from the release of Psychroma, and we didn't have a lot of time to dedicate to localization, as we desperately needed to seek funding for the studio.

As a result, there were many elements lost, including several translation teams that had dropped off over the months. We tried our best to accommodate requests from the teams, a large one being font support for Thai and Greek languages (It turns out these alphabets have very particular issues around legibility and are very difficult to find support for in the pixel aesthetic we used). However, we were not able to find the cleanest solution to these issues, which contributed to a feeling of letting down the translators on our end.

Part of the reason we decided to pursue this opportunity was that it would theoretically open up our game to more Steam regions and markets, and therefore lead to higher sales. However in practice, this only ended up accounting for 5% -10% of players compared to our top-selling English-speaking market. We quickly realized after release why most studios, even AAA, don't prioritize most non-English speaking markets. It is an unfortunate reality that for the most under-served countries, English is the expected default for videogames. Therefore, these markets are always going to account for a low percentage of players and continue to not be prioritized.

Realizing the reality of the market made it really difficult for us to justify spending as much time and energy on the localization as the translation team expected. On the one hand, we were bleeding funds we didn't have for an update that wasn't guaranteed sales. On the other, we made a commitment to see this project through with this localization initiative, in whose cause we believed in strongly. We were in an uncomfortable bind.

All that being said, we are incredibly thankful for the efforts of everyone on the translation teams and we believe in their ability to further their cause.

At the end of the day, the fact that we were able to get more than 15 languages in was a feat that we never thought possible for our small, 3-person team. We are supremely proud of the results. However I think in the future, we would approach localization differently, and try to set the project up earlier for it, to save us from suffering the same pains again.

I hope this post helps future game devs consider the pros and cons of the localization process, and help weigh whether its a worthwhile endeavor for their projects. Understandably, not every situation will be the same as ours, and most studios have to set a side a budget for localization. But before signing up for a service, think carefully about how many languages you want, which ones would be most beneficial, and how much time/energy you will be able to put into implementation.

Thanks for your time!

14 Upvotes

1

u/AshenBluesz 3h ago

How much did it end up costing you for localization then, even with the free volunteer resources you think?

1

u/JORAX79 1h ago

Nice write up. For those particularly short on time, this is a common issue and the most important takeaway IMO:

> Part of the reason we struggled with it is we had not done the set up required to implement localized strings, particularly for the UI. 

If you are going to localize, you absolutely need a way to use a string table/string IDs rather than having hardcoded strings in your native language. Bonus points for including context somewhere for the localizers ("A mob in our game means a hostile creature, not a member of organized crime" - that sort of thing).