We use font textures that contain only the characters that are required to show the text the game contains. So we do not have bitmaps for every Russian or Asian character. Internally, the game still uses 8-bit ASCII. This keeps memory usage down.

Languages such as English, French, Italian, German and Spanish (known in the industry as EFIGS since it is so common to support those languages) are easy because all their characters exist within the extended ASCII range (32-255). To show Russian or Asian languages that use Unicode, we insert special codes in the text that tells the font renderer to switch to a different font page. The text following the code is still in the standard ASCII range, but since we are using a different font, the images drawn on screen are of different characters.

For example, the text string for 'The Legend of Spyro: A New Beginning' in Russian is
Code:
<P1>!"#$#%&' <P0>Spyro&#58; <P1>&#40;&#41;*&#41;' %#+#,&#41;
and shows on screen as
Code:
Сказание Spyro&#58; Новое начало
The <P1> code tells the font renderer to switch to the second font texture. On this font texture, ! is С, " is к, and & is и.

To create this text with the proper codes, we have a tool that takes the translated text in a spreadsheet and converts it to 8-bit ASCII with the appropriate codes, based on the available fonts. If there are any characters in the translated text that we do not have an image for, it gives us a list of the missing characters, we add these to the font, and run the tool again.

I hope that made sense.