ea0a982000-07-17Andreas Lange // The translation module. Copyright © 2000, Roxen IS.
afcffc2000-07-09Martin Nilsson // #include <module.h> inherit "module"; // ---------------- Module registration stuff ---------------- constant module_type = MODULE_PARSER; constant module_name = "Translation module"; constant module_doc = "This module provides an RXML API to the Pike localization system.";
ea0a982000-07-17Andreas Lange constant thread_safe = 1;
9dda092000-07-21Andreas Lange constant cvs_version = "$Id: translation_mod.pike,v 1.6 2000/07/21 05:00:11 lange Exp $";
ea0a982000-07-17Andreas Lange 
afcffc2000-07-09Martin Nilsson  // ------------------------ The tags ------------------------- class TagTranslationRegistration { inherit RXML.Tag; constant name = "trans-reg";
2de57b2000-07-13Martin Nilsson  constant flags = RXML.FLAG_EMPTY_ELEMENT;
afcffc2000-07-09Martin Nilsson 
9dda092000-07-21Andreas Lange  mapping(string:RXML.Type) req_arg_types = ([ "project" : RXML.t_text(RXML.PEnt) ]); mapping(string:RXML.Type) opt_arg_types = ([ "path" : RXML.t_text(RXML.PEnt) ]);
afcffc2000-07-09Martin Nilsson  class Frame { inherit RXML.Frame; array do_return(RequestID id) {
b9a7022000-07-15Andreas Lange  if(args->path && args->path!="") {
afcffc2000-07-09Martin Nilsson #if constant(Locale.register_project)
b9a7022000-07-15Andreas Lange  Locale.register_project(args->project, args->path);
afcffc2000-07-09Martin Nilsson #else
b9a7022000-07-15Andreas Lange  RoxenLocale.register_project(args->project, args->path);
afcffc2000-07-09Martin Nilsson #endif
b9a7022000-07-15Andreas Lange  }
9dda092000-07-21Andreas Lange  id->misc->translation_proj = args->project;
afcffc2000-07-09Martin Nilsson  result = ""; return 0; } } } class TagTranslate { inherit RXML.Tag; constant name = "translate";
9dda092000-07-21Andreas Lange  mapping(string:RXML.Type) opt_arg_types = ([ "id":RXML.t_text(RXML.PEnt), "project":RXML.t_text(RXML.PEnt), "variable":RXML.t_text(RXML.PEnt), "scope":RXML.t_text(RXML.PEnt) ]);
afcffc2000-07-09Martin Nilsson  class Frame { inherit RXML.Frame;
9dda092000-07-21Andreas Lange  array do_return( RequestID id ) {
2de57b2000-07-13Martin Nilsson  string proj = args->project || id->misc->translation_proj;
ea0a982000-07-17Andreas Lange #if constant(Locale.translate)
b9a7022000-07-15Andreas Lange  string trans = Locale.translate(proj, roxen.locale->get(),
9dda092000-07-21Andreas Lange  (int)args->id || args->id,
afcffc2000-07-09Martin Nilsson  content); #else
b9a7022000-07-15Andreas Lange  string trans = RoxenLocale.translate(proj, roxen.locale->get(),
9dda092000-07-21Andreas Lange  (int)args->id || args->id,
afcffc2000-07-09Martin Nilsson  content); #endif if(args->variable) { RXML.user_set_var(args->variable, trans, args->scope); return 0; } result = trans; return 0; } } }