Minecraft is the fourth largest game worldwide by player count. With over 112 Million registered users, up to 12 Million active daily players… that’s A LOT of people, from a lot of different places playing the same game. One great thing about Minecraft is the fact you can play with people from around the world on different servers. These servers can be a simple shared world, or an advanced fork on Minecraft offering a broad range of game modes and server sided modifications. People from all around the world host servers for their friends and others to play on with them.
One issue I noticed was the lack of localization support in most plugins. As a developer I know how annoying the process of creating localization is, nobody wants to have to find a native speaker for each language to translate their strings to different languages and then add support for them in their code. If you have code that has been written with tons of strings being sent to the end-user this process can be even more difficult.
I started learning Java about 3 weeks ago when I decided I wanted to try out making my own plugin for a server I had just started. I have been playing Minecraft for 10 years now and when I was younger I was always fascinated with server mods and plugins. I would always load a ton of them onto my local servers and mess around with friends using Hamachi. Little did I know just how much really went into some of them. Over the course of my learning period so far I’ve developed and released 9 plugins and made one private, custom one for my server which includes bits and pieces that could be their own plugins.
Since there are so many players on different servers from around the world, there has to be issues all the time with people trying to communicate. If you are asking for help and nobody speaks your language, you don’t want to have to go back and forth with Google Translate just to talk to them, or even rarer, find a friend who knows that language and have them be a translator. Those solutions are annoying and tedious, or in some cases not even possible.
I saw this as a real issue. If you are expecting people to use your software, they need to know how don’t they? Some big plugins offer tutorials in English and Spanish, but that’s about the most I’ve seen available for it. I decided to work on a solution. I know I can’t have people working 24/7 translating in Real-Time what people say and what plugins send to players, that’s illogical and most likely impossible if you wanted low latency and a good user experience. Google has been training this translation service model for years now. It’s gotten to the point where it’s no longer just translating to robot speak. It can take in context and return realistic translations with the same meaning as what you originally say.
That was the solution. Google offers their translation API as a service to anybody for free for the first 20 Million characters per month. I did some math and if every message was 256 characters long, you could get away with translating just over 78,000 messages a month. That alone is a lot, and most messages are much less than 256 characters on Minecraft. Why not make a plugin that can integrate with Google and offer a translation service for players? That’s exactly what I did.
My first solution was to create a plugin that translated player chat for anybody who didn’t speak the language of the person sending said message. This honestly wasn’t very hard. Google offers a really great Java library for using their translation service. The setup is simple, API is easy to use, and all it requires is an API key from their Cloud services. I thought that the one wall people would come into being making a Google account wouldn’t be a very big issue. Initial release went smoothly, went through some changes to add better error handling and what not, until I got to a point I was happy to call it stable. At this point it had the ability to translate player’s messages to each other dynamically based on each player’s set locale, allow players to set their own locale, and allow players to change if they wanted to translate or be translated.
I didn’t feel this was enough. What if a player who doesn’t speak English wants to read the help menu and it’s all in English? I was being ignorant to the very thing I was trying to fix. Why not translate my own messages from the plugin to the players locale when they request it? That was the next step. I implemented it very quickly since it was basically the same as the chat message logic. This brought another problem to my mind. Other plugins don’t offer localization support to their users.
Being a server owner for many years, I’ve had experiences with a ton of plugins. Most don’t offer localization support for their users. Being a native English speaker this has never really effected me. Recently I started a new Minecraft server and while setting it up I ran into an issue with a plugin that had all it’s messages in German. I couldn’t tell what I was doing wrong or what it was asking me to do. I didn’t understand what each command’s description was in the help menu, so I removed it. If that developer had offered localization support for their plugin, I probably would have ended up using it.
As a plugin developer, you want as many people using your plugins as possible. That goes for any software developer, knowing people use what you put time and effort into is always a great feeling. I needed to make a solution for this so that plugin developers in the future could offer support for their users better. That’s where my second project came from.
If I was going to make something people could use in their own projects, why not also provide an extension to translate old plugins? If they have my translation plugin installed then I could handle translating everything, if they want to include it in their own plugin, they can translate their own plugin easily by just including my plugin. That’s when I decided to make my own Java library for interacting with my plugin.
That’s where we are now. EasyTranslations has been released with the optional functionality of translating other plugin’s messages. Now any server owner can simply install my plugin and have all players, from all different parts of the world, play and understand what’s going on in their server. This should be available in more contexts but being able to get people to communicate easier in a game is a great improvement from not having that option.