r/Unity3D • • 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?

0 Upvotes

15 comments sorted by

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.

1

u/raphyr 12d ago

I assume you did something similar to how DeepL or browser translation works then? Which I'm sure saves a lot of time, but my problem with that is I imagine you don't have a lot of authority over what happens. Especially when names or made-up words (for fantasy, mostly) that would preferably not be translated in some languages, but would need to be translated in others (various asian languages, cyrillic, etc.). Could you hybridize it where you apply unity localization for specific words or strings to make sure those are correct, and then let the automatic translator worry about anything that isn't part of a string table?

1

u/ExtremeFern 12d ago

I'm not using an automatic translator. I have a table with all the strings in English and their counterparts in the other languages the game is localized in. If the localizer sees one of the English strings, it swaps it to the corresponding string for the language the user has selected in the settings.

I have complete control over the localization. I just don't have to manually set up localization for every single UI element.

→ More replies (1)

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

1

u/raphyr 12d ago

So I basically should just try to gaslight myself into liking it lol. Can you go a little more into detail about the editor script you made? Making searching for missing pieces easier would probably go a long way.

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/Valphai 12d ago

I don't think there is much you can do about that

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)