Discussion: How To Send Back Language Dependent Error Mesages
fml needs to send back language dependent error messages.
How we should implement it ?
(Below, just a discussion not implemation in fact.)
&fml4; Case
In the case of &fml4;, &fml4; calls language dependent message
converter like this:
Mesg(*e, KEYWORD, DEFAULT MESSAGE, ARGUMENT);
Mesg() searches the specified keyword in files under
/usr/local/fml/messages/Japanese/ directory. Each file contains
messages with keywords to be substituted properly.
For example, the keyword not_found matches not_found entry in
/usr/local/fml/messages/Japanese/kern file.
What &fmldevel; Should Do ?
"One file has one keyword" and "one file for one category, so one file
contains plural entries". Hmm, which is better? I don't determine it.
X/Open Portability Guide Issue 4 Version 2 (``XPG4.2'')
If you use XPG (X/Open standard),
catgets(catd, set_id, msg_id, char *s);
function converts the message specified by LOCALE_XXX.
"s" is the default message.
For example, the usage is as follows:
printf(catgets(catd, 30, 4, "%s: Internal match error.\n"), progname);
This function uses set 30 and entry 4 in the local definition file such
as /usr/pkg/share/nls/ja_JP.EUC/PROGNAME.cat.
&fmldevel;: Design (Temporary ?)
One problem is whether we should use locale or not ?
In considering CUI e.g. makefml, it is better to use locale.
For example, prepare
/usr/local/lib/fml/$fml_version/messages/ja_JP.EUC/kern
1: %s not found
2: %s (error number = %d)
.
Instead, one file for one message may be useful.
Especially it is easy we can customize only one message.
To try the latter case, we can prepare a lot of classes such as
FML::Message::ja::KEYWORD
For example, there are 200 or 300 files such as
FML::Message::ja::not_found
.
This methods has the following problems:
separete files but in contrast more customizable.
locale friendly? may be no.
Consider an example. In the latter case,
the message module will be like this?
sub not_found
{
my .. = @_;
return <<"_EOF_"
$sender is ... something ...
_EOF_
}
Hmm, is it good ???