Search code examples
game-enginegameplay3d

How to load multiple languages for gameplay3d?


How to load multiple languages for gameplay3d? I want to join other countries to support the text.


Solution

  • Without knowing much about this engine, it seems that you can create your own ASCII fonts, and thus render those easily.

    What you could do is create a simple multi-language system yourself with each language having a gameplay::Font object of its own.

    See here for some more information on how to use this object: https://github.com/blackberry/GamePlay/wiki/Text-and-Fonts

    of the gameplay3d forum if you haven't already tried it: http://www.gameplay3d.org/forums/

    A basic multi-language system could be something like the following pseudo-code:

    class LanguageManager
    {
        private Language _currentLanguage = Language.enUS;
        private gameplay::Font[] _fonts;
        private gameplay::Font _currentFont;
    
        public void SetCurrentLanguage(Language l)
        {
            this._currentLanguage = l;
            this._currentFont = this.GetFontFromCurrentLanguage();
        }
    
        public void RenderString(string key, int x, int y, etc....)
        {
            string s = this.GetTextFromKey(key);
    
            this._currentFont.drawText(.....);
        }
    
        private GetFontFromCurrentLanguage()
        {
            etc...
        }
    
        private GetTextFromKey(string key)
        {
            // get the text from a the resource file
        }
    }
    

    You can store all of the language translations in a simple file with the following format and get the value from the above LanguageManager.GetTextFromKey method:

    GameText.txt
    [language]
    key value
    
    for instance
    [enUS]
    options Options
    exit Exit
    
    [zhCN]
    options 选择
    exit 离开