What this tool does
Localization goes wrong in small ways. A translator drops the {0} in "You found {0} coins", a German line is twice as long as the button, a new key is added in English and forgotten in Japanese. This tool keeps every language in one table and checks every cell. Red means it will break your game, yellow means someone should look at it, and a dashed cell is still missing.
What the checks look for
Placeholders: every {name}, {0}, %s, %d, %1$s, rich text tag like <b> or [color], and \n line break in the source must also be in the translation. Length: put a number in a key's max box, such as the characters that fit on a button, and longer translations turn red. Without a limit, a line more than 60% longer than the source turns yellow. Untranslated: a line that is exactly the same as the source. Spaces: extra spaces at the start or end. Keys: empty or duplicate keys.
Pseudo localization
Before real translations come in, add the pseudo language. It turns "Start game" into "[Šţåŕţ ĝåɱé ~~~]", about 40% longer, with accents and brackets. Switch your game to it and you will see text that overflows, text that is hard-coded and never translated, and fonts that are missing accented letters.
Formats
Godot reads a CSV with a keys column and one column per locale, and makes .translation files on import. Unity can load the same CSV with the included script, or you can import it into the Localization package. Android wants res/values-ko/strings.xml and iOS wants ko.lproj/Localizable.strings, both made for every language. JSON files per language work with i18next, web games and most custom loaders.
Is my text uploaded?
No. Everything stays in your browser. Your table is saved on this device so you can close the tab and come back.