1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
// import String;
/* Language support for numbers and dates. Very simple,
* really. Look at one of the existing language plugins (not really
* modules, you see..)
*
* $Id: language.pike,v 1.13 1998/04/24 08:39:36 per Exp $
* This file is included by roxen.pike. Not very nice to have a
* cvs_version variable here.
*
* WARNING:
* If the environment variable 'ROXEN_LANG' is set, it is used as the default
* language.
*/
#include <roxen.h>
mapping languages = ([ ]);
void initiate_languages()
{
string lang, *langs, p;
langs = get_dir("languages");
if(!langs)
{
report_fatal("No languages available!\n"+
"This is a serious error.\n"
"Most RXML tags will not work as expected!\n");
return 0;
}
p = "Adding languages: ";
foreach(langs, lang)
{
if(lang[-1] == 'e')
{
array tmp;
string alias;
object l;
mixed err;
p += String.capitalize(lang[0..search(lang, ".")-1])+" ";
if (err = catch {
l = compile_file("languages/"+lang)();
if(tmp=l->aliases()) {
foreach(tmp, alias) {
languages[alias] = ([ "month":l->month,
"ordered":l->ordered,
"date":l->date,
"day":l->day,
"number":l->number,
"\000":l, /* Bug in Pike force this, as of
* 96-04-15. Probably fixed. */
]);
}
}
}) {
report_error(sprintf("Initialization of language %s failed:%s\n",
lang, describe_backtrace(err)));
}
}
}
report_notice(p+"\n");
}
private string nil()
{
#ifdef LANGUAGE_DEBUG
perror(sprintf("Cannot find that one in %O.\n", languages));
#endif
return "No such function in that language, or no such language.";
}
string default_language = getenv("ROXEN_LANG")||"en";
/* Return a pointer to an language-specific conversion function. */
public function language(string what, string func)
{
#ifdef LANGUAGE_DEBUG
perror("Function: " + func + " in "+ what+"\n");
#endif
if(!languages[what])
if(!languages[default_language])
if(!languages->en)
return nil;
else
return languages->en[func];
else
return languages[default_language][func];
else
return languages[what][func] || nil;
}
|