Ok, responding to myself again :D It turns out that msgcat has been part of Tcl since 8.1:
http://tcl.tk/man/tcl8.4/TclCmd/msgcat.htm
It looks like this is definitely the way to handle locales.
.hc
On Jan 5, 2009, at 7:18 PM, Hans-Christoph Steiner wrote:
Actually, I just found out that the GNU gettext utils for .po files are included in Tcl/Tk in a package called "msgcat". Here's a little bit more on the topic:
http://www.gnu.org/software/automake/manual/gettext/Tcl.html
.hc
On Jan 5, 2009, at 4:33 PM, Hans-Christoph Steiner wrote:
Hey Chun, all,
I am thinking that for adding locales to pd-devel, we should leave iemgui out of it. It is very messy code that has a lot of legacy use, so that the iemgui stuff would need to have full backwards compatibility. Instead, I think we should build a new GUI library that includes locale support. In the process we could make a locale API for people who want to write their own GUI objects and include translations. I have almost the whole framework for such a library finished, its called 'tkwidgets'.
Perhaps it makes sense to use the standard .po file format for locales, its pretty simple and would be easy to parse in Tcl. I imagine there are tools for working with .po files, so then we could use those. Then init_locale() could read the .po into a hashtable, i.e. $hashtable($key). My guess is that a big hashtable would be faster than the current say() procedure, but I could be wrong.
Or maybe a locale namespace makes more sense, it would just be lots of variable names, something like:
namespace eval ::pd_locale:: { variable file_new variable file_open variable file_save variable file_saveas ... variable edit_undo variable edit_redo variable edit_cut variable edit_copy ... variable put_object variable put_message variable put_numberbox variable put_symbolbox variable put_comment ... }
Then to use them:
$rootmenu add command -label $::pd_locale::file_new -accelerator "$accelerator+N" $rootmenu add command -label $::pd_locale::file_open -accelerator "$accelerator+O" $rootmenu add command -label $::pd_locale::file_save -accelerator "$accelerator+S"
But I suppose it might make more sense to programmatically declare the 'variable's.
.hc