Developer Workflow

September 2026

Software Development

What Building a Game Localization Handoff Tool Taught Me About Context

What Building a Game Localization Handoff Tool Taught Me About Context

HK Lab Studio

CSV import validation showing duplicate and invalid customer records

Working on developer tools has made me realise that the part that looks simplest at the beginning often becomes the part that changes the whole direction of the product. With the Game Localization Handoff Builder, I initially thought a lot about files: importing the strings, recognising the format, keeping the information organised and eventually getting everything back out again in something another person could use. Those things obviously mattered, but while I was building the workflow I started to see that the file itself was not really the difficult part.The difficult part was everything the file did not explain.

A localization file can contain every line of text in a game and still leave somebody with very little idea of what those lines actually mean. A string might say Open, Use, Charge or Back, and when you have been working on the game yourself those words feel completely obvious. You know the screen, the item, the character and the action behind them because you have been looking at the project for weeks or months. The person receiving the localization files does not have any of that knowledge.That difference became one of the main things I started thinking about while developing the tool.

I realised the strings were only one part of the handoff

My first instinct with a localization tool was naturally to concentrate on the strings themselves. The builder needed to import CSV, XLSX and JSON files, identify the information inside them and give the developer somewhere to work with that content.Once I had that part working, the limitation became more obvious. Seeing a key next to a piece of source text tells you what needs to be translated, but it does not necessarily tell you what the text means inside the game.Something like `inventory_open` already gives more information than a random identifier, but there are still questions. Is it a button? Is it a command? Is it referring to opening an inventory or opening an item inside the inventory? If the word appears next to an image, that image may answer the question immediately. If it belongs to a character, knowing who is speaking may completely change how the sentence should sound.That was the point where the builder started becoming less about moving strings between files and more about keeping the useful information around those strings together.

I added fields for things such as context, speaker, screen or location, translator notes and character limits because those were the kinds of details that made the handoff easier to understand. The goal was not to create an enormous form that somebody had to fill in for every line. It was to give a developer somewhere to record the information that would otherwise disappear once the strings left the project.That distinction ended up being important to the way I thought about the tool.

Screenshots made much more sense once I stopped treating them as decoration

Screenshots were another feature that seemed fairly straightforward when I started thinking about them. Attach an image to a string and the translator has a reference.In practice, the reason they mattered was more interesting than that.

When I looked at the workflow from the other side, I started thinking about what I would want if somebody handed me a list of text from software I had never seen. A short label such as Equip probably does not need a paragraph explaining it, but seeing the actual inventory screen immediately tells me what part of the interface I am dealing with and how much room that word has.The same becomes even more important with game-specific objects, character dialogue or text that only makes sense alongside something visual.That changed the way I looked at screenshots inside the builder. They were not there to make the handoff look more complete. They were there because sometimes an image communicates context faster than another note ever could.

Current localization platforms use the same idea by attaching screenshots and contextual information directly to individual strings, which reassured me that I was solving a real workflow problem rather than adding a feature simply because it looked useful.

The glossary started to feel less optional as the project grew

The glossary was another part of the builder that made more sense to me once I thought beyond a handful of test strings.Games create their own vocabulary very quickly. There can be character names, locations, currencies, weapons, abilities, factions and invented terms that mean something very specific inside that project.When there are only a few strings, keeping those terms consistent does not feel particularly difficult. Once the project becomes larger, or the same terminology starts appearing in menus, descriptions and dialogue, relying on memory becomes a much weaker system.That reminded me of something I have seen in other parts of development as well. The moment I start depending on myself to remember the same decision everywhere is usually the moment I need to record that decision somewhere instead.

The glossary in the builder came from that same thinking. It gives those terms a place to live alongside the handoff instead of leaving them scattered through notes or relying on somebody to recognise that two similar-looking words are supposed to mean the same thing.Professional localization workflows make heavy use of the same kind of terminology management because translators need a consistent reference for names and project-specific terms.

Validation ended up meaning something different here

I had already been thinking a lot about validation while working with data-import tools. A file can open successfully and still contain information that is incomplete, duplicated or simply not useful to the application.Localization gave me a different version of that problem.A localization file can be perfectly valid from a technical point of view while still being a poor handoff. The keys might all be present and the file might export without an error, but important strings may have no context, a screenshot may be missing where it would actually help, or a project may contain terminology that has never been explained.That is why I wanted the builder to check more than whether a file could be read.The validation stage became a way of looking at the completeness of the handoff itself. Some issues can block a clean package while others are better treated as warnings, because not every string needs the same amount of information.I found that much more useful than trying to force every project through one rigid checklist.

It also changed the connection in my head between this tool and the CSV import work I had been doing. Both involve structured information, but the definition of good data is different. With a normal import, I might be checking whether an email address is malformed or whether a required value is missing. With localization, the information can be technically correct and still leave another person guessing.That was a useful distinction for me.

I wanted the final package to make sense without the builder

One of the things I try to think about when I package a product is what happens after my own software is no longer on the screen.With the localization builder, that meant the finished handoff could not depend on somebody opening the tool just to understand what they had received.

The export therefore became an important part of the development rather than simply a final download button. The package brings together the localization data, glossary information, screenshots and supporting project information so that what leaves the builder still makes sense as a handoff on its own.I also wanted projects to be saved and reopened because preparing this kind of information is unlikely to happen in one perfect session. Strings change, screenshots get added, context improves and new terminology appears as development continues.

That is closer to how I work on my own projects anyway. I rarely finish something complicated in one straight line. I come back to it, change something, test it again and usually notice something the second time that I did not notice the first.The tool needed to accept that instead of pretending localization preparation was a single export step.

Testing the builder exposed the same thing the feature design had

By the time I reached release testing, the builder supported several different source formats, saved projects, screenshots, glossary information and the final handoff export. That also meant there were more ways for bad input or an incomplete project to expose a weakness.

I tested CSV, XLSX and JSON imports, including cases that should work and cases the tool should reject. The final release checks also included saving and reopening projects, inspecting the exported package and making sure the files inside it were actually the ones the handoff was supposed to contain.

That testing reinforced the main lesson I had already taken from building the product.The difficult part was never simply getting text into the application.The useful part was making sure the information remained understandable as it moved from the developer, through the tool and eventually to somebody who did not have all of the knowledge sitting in the developer's head.

I now think of localization handoff as a communication problem

Building this tool changed the way I look at localization files.I used to see the file itself as the handoff. Now I think the file is only the container. The actual handoff is the combination of the strings, the context, the visual references, the terminology and the small decisions that help another person understand what the developer intended.That does not mean every indie developer needs an elaborate localization system. For a small game, a spreadsheet and a few well-organised references may be completely enough.

What matters is whether the person receiving the work can understand it without constantly having to reconstruct the game from isolated pieces of text.That is the problem I ended up building HK Game Localization Handoff Builder around. The Tool Lab version uses a sample project to demonstrate the flow from importing strings through context, screenshots, validation and the final handoff, while the full product carries that workflow into a reusable project that can be saved and exported.For me, the useful lesson from building it was not really about translation. It was about how much information developers carry in their heads without noticing it.

The moment somebody else has to work with the project, that invisible context suddenly matters.

DEVELOPMENT DECISION

Treat localization as a handoff of context, not simply a handoff of strings.

WHAT I TOOK FROM THIS STAGE

A technically correct localization file can still leave another person guessing. The better handoff is the one that carries enough of the developer's understanding with it that the strings still make sense when they leave the project.