| [AD] About get_config_text and it's actual problems |
[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]
Hi.
I am not sending a bug report about the problem I had with
get_config_text, because the problem was not having updated the local
allegro.cfg file of my game, which didn't have the language variable in a
system section.
But I have found another problem with the current system, and it's that
there's no easy way to switch languages at run time. I have tried the
following example which attempted to print the same get_config_text string
in different languages, and it works, but it's unpretty:
#include <allegro.h>
void _load_config_text ();
int main (void)
{
char buf[256];
install_allegro (SYSTEM_NONE, &errno, atexit);
/* This code will successfully reload language especifications for
* english (it's not my default language, so I see a difference :-)) */
set_config_string ("system", "language", "en");
_load_config_text(); /* However this uses a private call */
allegro_message ("English message: %s\n", get_config_text ("Cancel"));
/* Now the following does the trick, setting a global public config
* file which can be modified by Allegro, but also read from */
set_config_file ("estext.cfg");
allegro_message ("Spanish message: %s\n", get_config_text ("Cancel"));
/* Finally, this does the same, but shows how detext.cfg would be
* modified, which is _bad_, especially if the allegro-user is expecting
* to save it's other variables to whatever.cfg and they end up in the
* language file. */
set_config_file ("detext.cfg");
allegro_message ("German message: %s\n", get_config_text ("Cancel"));
set_config_string ("test", "test", "test");
/* At this exit point, detext.cfg _is_ modified */
return 0;
}
END_OF_MAIN();
The example is self explanatory: unless I've overlooked some other
function, there's no easy way to change languages without completely
shutting down allegro to reinitialize it or calling a private function,
which is used by allegro _only_ in install_allegro. And calling
install_allegro several times doesn't look very good, especially because
the function may change the system_driver variable. I don't know what
consequences may have that, but doesn't look good.
The only way I found to change language was using an external .cfg file,
but then all the config variables will be written to this file, as shown
with the last set_config_string of the example.
Therefore, unless someone shows a simple way to switch languages at run
time, I would like to propose the following patch, which just makes
_load_config_text public as reload_config_texts. Thanks to this function
Allegro can update the needed internal variables without touching anything
else, and I think it looks much better than patching install_allegro.
--
Grzegorz Adam Hankiewicz gradha@xxxxxxxxxx http://gradha.infierno.org
Attachment:
language_patch.gz
Description: Binary data
| Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |