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
  
// The translation module. Copyright © 2000, Roxen IS. 
// 
 
#include <module.h> 
inherit "module"; 
 
 
// ---------------- Module registration stuff ---------------- 
 
constant module_type = MODULE_TAG; 
constant module_name = "Translation module"; 
constant module_doc  = "This module provides an RXML API to the Pike localization system."; 
constant thread_safe = 1; 
constant cvs_version = "$Id: translation_mod.pike,v 1.8 2000/09/24 13:35:52 nilsson Exp $"; 
 
 
 
 
// ------------------------ The tags ------------------------- 
 
class TagTranslationRegistration { 
  inherit RXML.Tag; 
  constant name = "trans-reg"; 
  constant flags = RXML.FLAG_EMPTY_ELEMENT; 
 
  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) ]); 
 
  class Frame { 
    inherit RXML.Frame; 
 
    array do_return(RequestID id) { 
      if(args->path && args->path!="") { 
        Locale.register_project(args->project, args->path); 
      } 
      id->misc->translation_proj = args->project; 
      result = ""; 
      return 0; 
    } 
  } 
} 
 
class TagTranslate { 
  inherit RXML.Tag; 
  constant name = "translate"; 
 
  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) ]); 
   
  class Frame { 
    inherit RXML.Frame; 
     
    array do_return( RequestID id ) { 
      string proj = args->project || id->misc->translation_proj; 
      string trans = Locale.translate(proj, roxen.locale->get(), 
                                      (int)args->id || args->id, 
                                      content); 
 
      if(args->variable) { 
        RXML.user_set_var(args->variable, trans, args->scope); 
        return 0; 
      } 
 
      result = trans; 
      return 0; 
    } 
  } 
}