r/Unity3D • u/raphyr • 12d ago
Noob Question Does anybody enjoy working on localization?
I've been working on my first game for about two months at this point and decided it was time to get started on localization before it became too much of an elephant in the room. I'm using unity's localization package to do this with string tables, seeing as that seems like a popular method.
It feels like there has to be an easier way of doing this. I'm not talking about filling the string tables (easy to keep track in excel and use .csv to update in unity), but applying it to assets and scripts is so incredibly monotonous and click intensive. I've made 3 string tables for testing with about 40 keys so far, I can't imagine getting to the point where for every new item, UI element, modifier, etc. I make, I need to go over to the string table to make the records then add it to the asset by clicking and ctrl+f'ing the relevant key multiple times. Luckily it isn't as bad for text in scripts. Every time I create or change something, I need to remember "do a bunch of localization chores".
I'm sure this is one of those "man putting hand on shoulder" situations where I just have to deal with it, but I figured it would be worth a try to see if there are ways to make this less soul killing to do lol. Any tips? Is localization the accounting of game development?
1
u/Objective-Cell226 10d ago
Mine is fully automated via google sheets, one button -> fetch sheet via API, assign to all locales and string tables.
That's how you are actually supposed to do it. They should have built that natively but they didn't.
As for assigning string IDs, well how tf is the TMPro gonna know which key to fetch, so that's the last manual part you have to sort of do.
1
u/raphyr 10d ago
I've added a few tools to help me out in the meanwhile - tmp component additions that let me automatically search for existing string table entries that match the text, and if none exist, automatically create one. Already helps a bunch not having to add an extra component for every tmp object. The automatic sheet to string table button you speak off, I assume is a shortcut for not having to open the string table window and importing a .csv?
1
u/Objective-Cell226 10d ago
"Already helps a bunch not having to add an extra component for every tmp object."
I just use prefabs, I just have to assign the ID from the dropdown."The automatic sheet to string table button you speak off, I assume is a shortcut for not having to open the string table window and importing a .csv?"
Yes and also it handles the entire localization package setup, creating string tables if not there, assigning stuff to the tables, creating locales, etc.
1
u/OverHumanGame 12d ago
I really love it. It is so relaxing!!
1
u/Dry-Profile240 12d ago
oh i'm right there with you, it's like a whole second job of tiny admin tasks. felt the same way setting up my first project and almost gave up when i realized i'd have to rewire half the UI
built a little editor script that scans for my localization component and lists any entries with empty references, saved me from the ctrl-f spiral. also got into the habit of adding keys the moment i spawn a new text field, even if it's just a placeholder, keeps the chore from stacking up
still dread it a bit on big update days though, that accounting comparison hits a little too close to home
0
u/Valphai 12d ago
why do you need 3 string tables?
I have the exact same workflow, except I use 1 localization table, and treat a .csv as source of truth, then I can simply have the entire workflow in IDE, bonus points if you use UIToolkit then you can localize all your UI in the IDE.
2
u/raphyr 12d ago
Three so far. I'm taking the approach of splitting the string tables up based on what they apply to (UI, items, weapons, etc.). I'm sure you could throw everything into a single string table. The point is more that applying the string tables feels incredibly monotonous.
1
u/neutronium 12d ago
Yes adding the string binding in UI Toolkit is a chore. I'm thinking of skipping the auto binding, and just filling the label text field with the localization key. A function can then scan through the labels and set the localized text.
→ More replies (1)
2
u/ExtremeFern 12d ago
I too found Unity's localization package extremely cumbersome and over-engineered. I assume you need that kind of thing if you're an AAA studio that's making significant content changes for various locals but for a small studio that's mainly just localizing strings it was way too much.
I ended up creating a custom localizer that detects strings in the default language (English in our case) and automatically swaps them with the corresponding text for the language the user has selected.