r258: Switching to the new class_language.php phrase system
[bugdar.git] / includes / class_language.php
1 <?php
2 /*=====================================================================*\
3 || ################################################################### ||
4 || # app [#]version[#]
5 || # --------------------------------------------------------------- # ||
6 || # Copyright ©2002-[#]year[#] by Iris Studios, Inc. All Rights Reserved. # ||
7 || # This file may not be reproduced in any way without permission. # ||
8 || # --------------------------------------------------------------- # ||
9 || # User License Agreement at http://www.iris-studios.com/license/ # ||
10 || ################################################################### ||
11 \*=====================================================================*/
12
13 /**
14 * Language management class. Because this uses Simpleton we want to
15 * keep names as short as short as possible
16 */
17 class lang
18 {
19 var $language = array();
20 var $vars = array();
21
22 /**
23 * Constructor -- Initializes the language system by fetching the
24 * appropriate language
25 *
26 * @param integer Language ID
27 */
28 function lang($languageid)
29 {
30 global $bugsys;
31
32 $phrases = $bugsys->db->query("
33 (SELECT varname, phrasetext FROM " . TABLE_PREFIX . "phrase)
34 UNION ALL
35 (SELECT varname, phrasetext FROM " . TABLE_PREFIX . "locale WHERE languageid = " . intval($languageid) . ")"
36 );
37 while ($phrase = $bugsys->db->fetch_array($phrases))
38 {
39 $this->language["$phrase[varname]"] = $phrase['phrasetext'];
40 }
41 $bugsys->db->free_result($phrases);
42 }
43
44 /**
45 * Singleton initializer
46 *
47 * @param integer Language ID
48 */
49 function init($languageid = 0)
50 {
51 static $instance;
52
53 if (!$instance)
54 {
55 if (!$languageid)
56 {
57 trigger_error('No language selected', E_USER_ERROR);
58 }
59
60 $instance = new lang($languageid);
61 }
62
63 return $instance;
64 }
65
66 /**
67 * Fetches a phrase from the language array
68 *
69 * @param string Phrase name
70 * @return string The phrase text
71 */
72 function fetch_phrase($phrasename)
73 {
74 return $this->language["$phrasename"];
75 }
76
77 /**
78 * Takes a phrase name and the arguments for it and constructs it
79 *
80 * @param string Phrase name
81 * @param arguments Values for the arguments the phrase takes
82 * @return string Processed phrase
83 */
84 function p()
85 {
86 $obj =& lang::init();
87
88 $args = func_get_args();
89 $numargs = sizeof($args);
90
91 if ($numargs < 1)
92 {
93 return false;
94 }
95
96 if ($phrasetext = $obj->fetch_phrase($args[0]))
97 {
98 if ($numargs < 2)
99 {
100 $phrase = $phrasetext;
101 }
102 else
103 {
104 $args[0] = $phrasetext;
105 if (($phrase = @call_user_func_array('sprintf', $args)) === false)
106 {
107 for ($i = 1; $i < $numargs; $i++)
108 {
109 $phrase = str_replace("%{$i}\$s", $args["$i"], $args[0]);
110 }
111 }
112 }
113 return preg_replace('#%([0-9].*?)\$s#', '<strong>[ARG \\1: UNDEFINED]</strong>', $phrase);
114 }
115 else
116 {
117 return "<strong>[UNDEFINED PHRASE: $args[0]]</strong>";
118 }
119
120 return $phrase;
121 }
122 }
123
124 /*=====================================================================*\
125 || ###################################################################
126 || # $HeadURL$
127 || # $Id$
128 || ###################################################################
129 \*=====================================================================*/
130 ?>