ExOK / Celeste64

A game made by the Celeste developers in a week(ish, closer to 2)
1.59k stars 125 forks source link

Localisation? #27

Open Oblait opened 5 months ago

Oblait commented 5 months ago

Are they any plans to implement support for multiple languages/language selection?

My team would love to do an Arabic localization for this. The technical end of RTL shouldn't be a challenge as long as a Localization system is in place.

NoelFB commented 5 months ago

I'm not against localization support in the official build but it would require a few steps. I'm happy to look into some of these in the near future:

public class DialogBank
{
    public string LanguageID;
    public string LanguageLabel;
    public string Font;
    public Dictionary<string, DialogLine> Lines;
}
Oblait commented 5 months ago

Thanks, Noel! Sounds great.

I'm not against localization support in the official build

Yeah, modding in language support would be relatively simple, but I'd rather localization of all things be more accessible tbh.

While we're on the subject - I know RTL is a pain, so we're happy to provide anything you need from bespoke fonts w/ licenses, feedback, or direct help with the code. This is mainly to avoid lagging behind once it's time to actually translate, as RTL languages often gets the short end of the stick in cases like these.

We've worked on games like Obra Dinn, Tunic, and most recently VVVVVV and provided implementation consultation & support next to the localizations - so we got RTL support down to a process at this point.

That should keep hair-pulling to a minimum I think. Feel free to ping/reach out anytime.

NoelFB commented 5 months ago

I think for RTL the biggest thing is making the sprite batcher text rendering be able to handle it (https://github.com/FosterFramework/Foster/blob/main/Framework/Graphics/Batcher.cs#L1607), and to also query the font for information on whether it is RTL (unless the character advance is just negative?)

DreamPlusInfinity commented 5 months ago

Changing the xadvance for the characters to negative instead of positive, plus adjustable text alignment (I mean the left/center/right setting) could do the trick.

Even if you can't do that or don't think changing the code is possible to accomodate one language, please still give it a try (we just need access to the fonts and full text), then we can figure out a workaround just working with the Latin codebase and see what needs to be ironed out later.

DreamPlusInfinity commented 5 months ago

I'm not against localization support in the official build but it would require a few steps. I'm happy to look into some of these in the near future:

  • [ ] Dialog needs some a Dialog class, I imagine it would look something like:
  • [ ] Needs to load dialog from folders, like how other assets are loaded
  • [ ] When generating the Font for each language, it needs to know what charset to use (by querying the lines, probably?)
  • [ ] Ideally don't generate the font unless the language is actually used, since it's slow.
  • [ ] Some way to switch languages (either in-game or a just by editing the save... the in-game menu is getting kind of big though, so might need an actual options menu).

If you didn't make the game with internationalization in mind, I suggest this possible approach:

NoelFB commented 5 months ago

The basics for this are set up, and in theory should work for any LTR language. Further issues:

Oblait commented 4 months ago

Cool, we'll get to it and we should have something cooked up by next week I reckon. I have some other minor suggestions for the loc process but @DreamPlusInfinity covered almost everything, so I'll leave those to after we're done.

jasminegamedev commented 4 months ago

Related to this, I noticed 2 minor issues where the Language wasn't getting loaded correctly from the save file, and made a PR for them here: https://github.com/ExOK/Celeste64/pull/73

NoelFB commented 4 months ago

Related to this, I noticed 2 minor issues where the Language wasn't getting loaded correctly from the save file, and made a PR for them here: #73

Thanks, merged that in!