Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?php
2
/**
3
 * Numbers_Words
4
 *
5
 * PHP version 4
6
 *
7
 * Copyright (c) 1997-2006 The PHP Group
8
 *
9
 * This source file is subject to version 3.0 of the PHP license,
10
 * that is bundled with this package in the file LICENSE, and is
11
 * available at through the world-wide-web at
12
 * http://www.php.net/license/3_0.txt.
13
 * If you did not receive a copy of the PHP license and are unable to
14
 * obtain it through the world-wide-web, please send a note to
15
 * license@php.net so we can mail you a copy immediately.
16
 *
17
 * @category Numbers
18
 * @package  Numbers_Words
19
 * @author   Piotr Klaban <makler@man.torun.pl>
20
 * @author   Andrey Demenev <demenev@gmail.com>
21
 * @license  PHP 3.0 http://www.php.net/license/3_0.txt
22
 * @version  CVS: $Id: lang.ru.php 269612 2008-11-24 15:11:52Z clockwerx $
23
 * @link     http://pear.php.net/package/Numbers_Words
24
 */
25
 
26
/**
27
 * Class for translating numbers into Russian.
28
 *
29
 * @author Andrey Demenev
30
 * @package Numbers_Words
31
 */
32
 
33
/**
34
 * Include needed files
35
 */
36
require_once "Numbers/Words.php";
37
 
38
/**
39
 * Class for translating numbers into Russian.
40
 *
41
 * @category Numbers
42
 * @package  Numbers_Words
43
 * @author   Piotr Klaban <makler@man.torun.pl>
44
 * @author   Andrey Demenev <demenev@gmail.com>
45
 * @license  PHP 3.0 http://www.php.net/license/3_0.txt
46
 * @link     http://pear.php.net/package/Numbers_Words
47
 */
48
class Numbers_Words_ru extends Numbers_Words
49
{
50
 
51
    // {{{ properties
52
 
53
    /**
54
     * Locale name
55
     * @var string
56
     * @access public
57
     */
58
    var $locale = 'ru';
59
 
60
    /**
61
     * Language name in English
62
     * @var string
63
     * @access public
64
     */
65
    var $lang = 'Russian';
66
 
67
    /**
68
     * Native language name
69
     * @var string
70
     * @access public
71
     */
72
    var $lang_native = 'Ðóññêèé';
73
 
74
    /**
75
     * The word for the minus sign
76
     * @var string
77
     * @access private
78
     */
79
    var $_minus = 'ìèíóñ'; // minus sign
80
 
81
    /**
82
     * The sufixes for exponents (singular)
83
     * Names partly based on:
84
     * http://home.earthlink.net/~mrob/pub/math/largenum.html
85
     * http://mathforum.org/dr.math/faq/faq.large.numbers.html
86
     * http://www.mazes.com/AmericanNumberingSystem.html
87
     * @var array
88
     * @access private
89
     */
90
    var $_exponent = array(
91
 
92
        6 => 'ìèëëèîí',
93
        9 => 'ìèëëèàðä',
94
       12 => 'òðèëëèîí',
95
       15 => 'êâàäðèëëèîí',
96
       18 => 'êâèíòèëëèîí',
97
       21 => 'ñåêñòèëëèîí',
98
       24 => 'ñåïòèëëèîí',
99
       27 => 'îêòèëëèîí',
100
       30 => 'íîíèëëèîí',
101
       33 => 'äåöèëëèîí',
102
       36 => 'óíäåöèëëèîí',
103
       39 => 'äóîäåöèëëèîí',
104
       42 => 'òðåäåöèëëèîí',
105
       45 => 'êâàòóîðäåöèëëèîí',
106
       48 => 'êâèíäåöèëëèîí',
107
       51 => 'ñåêñäåöèëëèîí',
108
       54 => 'ñåïòåíäåöèëëèîí',
109
       57 => 'îêòîäåöèëëèîí',
110
       60 => 'íîâåìäåöèëëèîí',
111
       63 => 'âèãèíòèëëèîí',
112
       66 => 'óíâèãèíòèëëèîí',
113
       69 => 'äóîâèãèíòèëëèîí',
114
       72 => 'òðåâèãèíòèëëèîí',
115
       75 => 'êâàòóîðâèãèíòèëëèîí',
116
       78 => 'êâèíâèãèíòèëëèîí',
117
       81 => 'ñåêñâèãèíòèëëèîí',
118
       84 => 'ñåïòåíâèãèíòèëëèîí',
119
       87 => 'îêòîâèãèíòèëëèîí',
120
       90 => 'íîâåìâèãèíòèëëèîí',
121
       93 => 'òðèãèíòèëëèîí',
122
       96 => 'óíòðèãèíòèëëèîí',
123
       99 => 'äóîòðèãèíòèëëèîí',
124
       102 => 'òðåòðèãèíòèëëèîí',
125
       105 => 'êâàòîðòðèãèíòèëëèîí',
126
       108 => 'êâèíòðèãèíòèëëèîí',
127
       111 => 'ñåêñòðèãèíòèëëèîí',
128
       114 => 'ñåïòåíòðèãèíòèëëèîí',
129
       117 => 'îêòîòðèãèíòèëëèîí',
130
       120 => 'íîâåìòðèãèíòèëëèîí',
131
       123 => 'êâàäðàãèíòèëëèîí',
132
       126 => 'óíêâàäðàãèíòèëëèîí',
133
       129 => 'äóîêâàäðàãèíòèëëèîí',
134
       132 => 'òðåêâàäðàãèíòèëëèîí',
135
       135 => 'êâàòîðêâàäðàãèíòèëëèîí',
136
       138 => 'êâèíêâàäðàãèíòèëëèîí',
137
       141 => 'ñåêñêâàäðàãèíòèëëèîí',
138
       144 => 'ñåïòåíêâàäðàãèíòèëëèîí',
139
       147 => 'îêòîêâàäðàãèíòèëëèîí',
140
       150 => 'íîâåìêâàäðàãèíòèëëèîí',
141
       153 => 'êâèíêâàãèíòèëëèîí',
142
       156 => 'óíêâèíêàãèíòèëëèîí',
143
       159 => 'äóîêâèíêàãèíòèëëèîí',
144
       162 => 'òðåêâèíêàãèíòèëëèîí',
145
       165 => 'êâàòîðêâèíêàãèíòèëëèîí',
146
       168 => 'êâèíêâèíêàãèíòèëëèîí',
147
       171 => 'ñåêñêâèíêàãèíòèëëèîí',
148
       174 => 'ñåïòåíêâèíêàãèíòèëëèîí',
149
       177 => 'îêòîêâèíêàãèíòèëëèîí',
150
       180 => 'íîâåìêâèíêàãèíòèëëèîí',
151
       183 => 'ñåêñàãèíòèëëèîí',
152
       186 => 'óíñåêñàãèíòèëëèîí',
153
       189 => 'äóîñåêñàãèíòèëëèîí',
154
       192 => 'òðåñåêñàãèíòèëëèîí',
155
       195 => 'êâàòîðñåêñàãèíòèëëèîí',
156
       198 => 'êâèíñåêñàãèíòèëëèîí',
157
       201 => 'ñåêññåêñàãèíòèëëèîí',
158
       204 => 'ñåïòåíñåêñàãèíòèëëèîí',
159
       207 => 'îêòîñåêñàãèíòèëëèîí',
160
       210 => 'íîâåìñåêñàãèíòèëëèîí',
161
       213 => 'ñåïòàãèíòèëëèîí',
162
       216 => 'óíñåïòàãèíòèëëèîí',
163
       219 => 'äóîñåïòàãèíòèëëèîí',
164
       222 => 'òðåñåïòàãèíòèëëèîí',
165
       225 => 'êâàòîðñåïòàãèíòèëëèîí',
166
       228 => 'êâèíñåïòàãèíòèëëèîí',
167
       231 => 'ñåêññåïòàãèíòèëëèîí',
168
       234 => 'ñåïòåíñåïòàãèíòèëëèîí',
169
       237 => 'îêòîñåïòàãèíòèëëèîí',
170
       240 => 'íîâåìñåïòàãèíòèëëèîí',
171
       243 => 'îêòîãèíòèëëèîí',
172
       246 => 'óíîêòîãèíòèëëèîí',
173
       249 => 'äóîîêòîãèíòèëëèîí',
174
       252 => 'òðåîêòîãèíòèëëèîí',
175
       255 => 'êâàòîðîêòîãèíòèëëèîí',
176
       258 => 'êâèíîêòîãèíòèëëèîí',
177
       261 => 'ñåêñîêòîãèíòèëëèîí',
178
       264 => 'ñåïòîêòîãèíòèëëèîí',
179
       267 => 'îêòîîêòîãèíòèëëèîí',
180
       270 => 'íîâåìîêòîãèíòèëëèîí',
181
       273 => 'íîíàãèíòèëëèîí',
182
       276 => 'óííîíàãèíòèëëèîí',
183
       279 => 'äóîíîíàãèíòèëëèîí',
184
       282 => 'òðåíîíàãèíòèëëèîí',
185
       285 => 'êâàòîðíîíàãèíòèëëèîí',
186
       288 => 'êâèííîíàãèíòèëëèîí',
187
       291 => 'ñåêñíîíàãèíòèëëèîí',
188
       294 => 'ñåïòåííîíàãèíòèëëèîí',
189
       297 => 'îêòîíîíàãèíòèëëèîí',
190
       300 => 'íîâåìíîíàãèíòèëëèîí',
191
       303 => 'öåíòèëëèîí'
192
        );
193
 
194
    /**
195
     * The array containing the teens' :) names
196
     * @var array
197
     * @access private
198
     */
199
    var $_teens = array(
200
        11=>'îäèííàäöàòü',
201
        12=>'äâåíàäöàòü',
202
        13=>'òðèíàäöàòü',
203
        14=>'÷åòûðíàäöàòü',
204
        15=>'ïÿòíàäöàòü',
205
        16=>'øåñòíàäöàòü',
206
        17=>'ñåìíàäöàòü',
207
        18=>'âîñåìíàäöàòü',
208
        19=>'äåâÿòíàäöàòü'
209
        );
210
 
211
    /**
212
     * The array containing the tens' names
213
     * @var array
214
     * @access private
215
     */
216
    var $_tens = array(
217
        2=>'äâàäöàòü',
218
        3=>'òðèäöàòü',
219
        4=>'ñîðîê',
220
        5=>'ïÿòüäåñÿò',
221
        6=>'øåñòüäåñÿò',
222
        7=>'ñåìüäåñÿò',
223
        8=>'âîñåìüäåñÿò',
224
        9=>'äåâÿíîñòî'
225
        );
226
 
227
    /**
228
     * The array containing the hundreds' names
229
     * @var array
230
     * @access private
231
     */
232
    var $_hundreds = array(
233
        1=>'ñòî',
234
        2=>'äâåñòè',
235
        3=>'òðèñòà',
236
        4=>'÷åòûðåñòà',
237
        5=>'ïÿòüñîò',
238
        6=>'øåñòüñîò',
239
        7=>'ñåìüñîò',
240
        8=>'âîñåìüñîò',
241
        9=>'äåâÿòüñîò'
242
        );
243
 
244
    /**
245
     * The array containing the digits
246
     * for neutral, male and female
247
     * @var array
248
     * @access private
249
     */
250
    var $_digits = array(
251
        array('íîëü', 'îäíî', 'äâà', 'òðè', '÷åòûðå', 'ïÿòü', 'øåñòü', 'ñåìü', 'âîñåìü', 'äåâÿòü'),
252
        array('íîëü', 'îäèí', 'äâà', 'òðè', '÷åòûðå', 'ïÿòü', 'øåñòü', 'ñåìü', 'âîñåìü', 'äåâÿòü'),
253
        array('íîëü', 'îäíà', 'äâå', 'òðè', '÷åòûðå', 'ïÿòü', 'øåñòü', 'ñåìü', 'âîñåìü', 'äåâÿòü')
254
    );
255
 
256
    /**
257
     * The word separator
258
     * @var string
259
     * @access private
260
     */
261
    var $_sep = ' ';
262
 
263
    /**
264
     * The currency names (based on the below links,
265
     * informations from central bank websites and on encyclopedias)
266
     *
267
     * @var array
268
     * @link http://www.jhall.demon.co.uk/currency/by_abbrev.html World currencies
269
     * @link http://www.rusimpex.ru/Content/Reference/Refinfo/valuta.htm Foreign currencies names
270
     * @link http://www.cofe.ru/Finance/money.asp Currencies names
271
     * @access private
272
     */
273
    var $_currency_names = array(
274
      'ALL' => array(
275
                array(1, 'ëåê', 'ëåêà', 'ëåêîâ'),
276
                array(2, 'êèíäàðêà', 'êèíäàðêè', 'êèíäàðîê')
277
               ),
278
      'AUD' => array(
279
                array(1, 'àâñòðàëèéñêèé äîëëàð', 'àâñòðàëèéñêèõ äîëëàðà', 'àâñòðàëèéñêèõ äîëëàðîâ'),
280
                array(1, 'öåíò', 'öåíòà', 'öåíòîâ')
281
               ),
282
      'BGN' => array(
283
                array(1, 'ëåâ', 'ëåâà', 'ëåâîâ'),
284
                array(2, 'ñòîòèíêà', 'ñòîòèíêè', 'ñòîòèíîê')
285
               ),
286
      'BRL' => array(
287
                array(1, 'áðàçèëüñêèé ðåàë', 'áðàçèëüñêèõ ðåàëà', 'áðàçèëüñêèõ ðåàëîâ'),
288
                array(1, 'ñåíòàâî', 'ñåíòàâî', 'ñåíòàâî')
289
               ),
290
      'BYR' => array(
291
                array(1, 'áåëîðóññêèé ðóáëü', 'áåëîðóññêèõ ðóáëÿ', 'áåëîðóññêèõ ðóáëåé'),
292
                array(2, 'êîïåéêà', 'êîïåéêè', 'êîïååê')
293
               ),
294
      'CAD' => array(
295
                array(1, 'êàíàäñêèé äîëëàð', 'êàíàäñêèõ äîëëàðà', 'êàíàäñêèõ äîëëàðîâ'),
296
                array(1, 'öåíò', 'öåíòà', 'öåíòîâ')
297
               ),
298
      'CHF' => array(
299
                array(1, 'øâåéöàðñêèé ôðàíê', 'øâåéöàðñêèõ ôðàíêà', 'øâåéöàðñêèõ ôðàíêîâ'),
300
                array(1, 'ñàíòèì', 'ñàíòèìà', 'ñàíòèìîâ')
301
               ),
302
      'CYP' => array(
303
                array(1, 'êèïðñêèé ôóíò', 'êèïðñêèõ ôóíòà', 'êèïðñêèõ ôóíòîâ'),
304
                array(1, 'öåíò', 'öåíòà', 'öåíòîâ')
305
               ),
306
      'CZK' => array(
307
                array(2, '÷åøñêàÿ êðîíà', '÷åøñêèõ êðîíû', '÷åøñêèõ êðîí'),
308
                array(1, 'ãàëèðæ', 'ãàëèðæà', 'ãàëèðæåé')
309
               ),
310
      'DKK' => array(
311
                array(2, 'äàòñêàÿ êðîíà', 'äàòñêèõ êðîíû', 'äàòñêèõ êðîí'),
312
                array(1, 'ýðå', 'ýðå', 'ýðå')
313
               ),
314
      'EEK' => array(
315
                array(2, 'ýñòîíñêàÿ êðîíà', 'ýñòîíñêèõ êðîíû', 'ýñòîíñêèõ êðîí'),
316
                array(1, 'ñåíòè', 'ñåíòè', 'ñåíòè')
317
               ),
318
      'EUR' => array(
319
                array(1, 'åâðî', 'åâðî', 'åâðî'),
320
                array(1, 'åâðîöåíò', 'åâðîöåíòà', 'åâðîöåíòîâ')
321
               ),
322
      'CYP' => array(
323
                array(1, 'ôóíò ñòåðëèíãîâ', 'ôóíòà ñòåðëèíãîâ', 'ôóíòîâ ñòåðëèíãîâ'),
324
                array(1, 'ïåíñ', 'ïåíñà', 'ïåíñîâ')
325
               ),
326
      'CAD' => array(
327
                array(1, 'ãîíêîíãñêèé äîëëàð', 'ãîíêîíãñêèõ äîëëàðà', 'ãîíêîíãñêèõ äîëëàðîâ'),
328
                array(1, 'öåíò', 'öåíòà', 'öåíòîâ')
329
               ),
330
      'HRK' => array(
331
                array(2, 'õîðâàòñêàÿ êóíà', 'õîðâàòñêèõ êóíû', 'õîðâàòñêèõ êóí'),
332
                array(2, 'ëèïà', 'ëèïû', 'ëèï')
333
               ),
334
      'HUF' => array(
335
                array(1, 'âåíãåðñêèé ôîðèíò', 'âåíãåðñêèõ ôîðèíòà', 'âåíãåðñêèõ ôîðèíòîâ'),
336
                array(1, 'ôèëëåð', 'ôèëëåðà', 'ôèëëåðîâ')
337
               ),
338
      'ISK' => array(
339
                array(2, 'èñëàíäñêàÿ êðîíà', 'èñëàíäñêèõ êðîíû', 'èñëàíäñêèõ êðîí'),
340
                array(1, 'ýðå', 'ýðå', 'ýðå')
341
               ),
342
      'JPY' => array(
343
                array(2, 'èåíà', 'èåíû', 'èåí'),
344
                array(2, 'ñåíà', 'ñåíû', 'ñåí')
345
               ),
346
      'LTL' => array(
347
                array(1, 'ëèò', 'ëèòà', 'ëèòîâ'),
348
                array(1, 'öåíò', 'öåíòà', 'öåíòîâ')
349
               ),
350
      'LVL' => array(
351
                array(1, 'ëàò', 'ëàòà', 'ëàòîâ'),
352
                array(1, 'ñåíòèì', 'ñåíòèìà', 'ñåíòèìîâ')
353
               ),
354
      'MKD' => array(
355
                array(1, 'ìàêåäîíñêèé äèíàð', 'ìàêåäîíñêèõ äèíàðà', 'ìàêåäîíñêèõ äèíàðîâ'),
356
                array(1, 'äåíè', 'äåíè', 'äåíè')
357
               ),
358
      'MTL' => array(
359
                array(2, 'ìàëüòèéñêàÿ ëèðà', 'ìàëüòèéñêèõ ëèðû', 'ìàëüòèéñêèõ ëèð'),
360
                array(1, 'ñåíòèì', 'ñåíòèìà', 'ñåíòèìîâ')
361
               ),
362
      'NOK' => array(
363
                array(2, 'íîðâåæñêàÿ êðîíà', 'íîðâåæñêèõ êðîíû', 'íîðâåæñêèõ êðîí'),
364
                array(0, 'ýðå', 'ýðå', 'ýðå')
365
               ),
366
      'PLN' => array(
367
                array(1, 'çëîòûé', 'çëîòûõ', 'çëîòûõ'),
368
                array(1, 'ãðîø', 'ãðîøà', 'ãðîøåé')
369
               ),
370
      'ROL' => array(
371
                array(1, 'ðóìûíñêèé ëåé', 'ðóìûíñêèõ ëåé', 'ðóìûíñêèõ ëåé'),
372
                array(1, 'áàíè', 'áàíè', 'áàíè')
373
               ),
374
       // both RUR and RUR are used, I use RUB for shorter form
375
      'RUB' => array(
376
                array(1, 'ðóáëü', 'ðóáëÿ', 'ðóáëåé'),
377
                array(2, 'êîïåéêà', 'êîïåéêè', 'êîïååê')
378
               ),
379
      'RUR' => array(
380
                array(1, 'ðîññèéñêèé ðóáëü', 'ðîññèéñêèõ ðóáëÿ', 'ðîññèéñêèõ ðóáëåé'),
381
                array(2, 'êîïåéêà', 'êîïåéêè', 'êîïååê')
382
               ),
383
      'SEK' => array(
384
                array(2, 'øâåäñêàÿ êðîíà', 'øâåäñêèõ êðîíû', 'øâåäñêèõ êðîí'),
385
                array(1, 'ýðå', 'ýðå', 'ýðå')
386
               ),
387
      'SIT' => array(
388
                array(1, 'ñëîâåíñêèé òîëàð', 'ñëîâåíñêèõ òîëàðà', 'ñëîâåíñêèõ òîëàðîâ'),
389
                array(2, 'ñòîòèíà', 'ñòîòèíû', 'ñòîòèí')
390
               ),
391
      'SKK' => array(
392
                array(2, 'ñëîâàöêàÿ êðîíà', 'ñëîâàöêèõ êðîíû', 'ñëîâàöêèõ êðîí'),
393
                array(0, '', '', '')
394
               ),
395
      'TRL' => array(
396
                array(2, 'òóðåöêàÿ ëèðà', 'òóðåöêèõ ëèðû', 'òóðåöêèõ ëèð'),
397
                array(1, 'ïèàñòð', 'ïèàñòðà', 'ïèàñòðîâ')
398
               ),
399
      'UAH' => array(
400
                array(2, 'ãðèâíà', 'ãðèâíû', 'ãðèâåí'),
401
                array(1, 'öåíò', 'öåíòà', 'öåíòîâ')
402
               ),
403
      'USD' => array(
404
                array(1, 'äîëëàð ÑØÀ', 'äîëëàðà ÑØÀ', 'äîëëàðîâ ÑØÀ'),
405
                array(1, 'öåíò', 'öåíòà', 'öåíòîâ')
406
               ),
407
      'YUM' => array(
408
                array(1, 'þãîñëàâñêèé äèíàð', 'þãîñëàâñêèõ äèíàðà', 'þãîñëàâñêèõ äèíàðîâ'),
409
                array(1, 'ïàðà', 'ïàðà', 'ïàðà')
410
               ),
411
      'ZAR' => array(
412
                array(1, 'ðàíä', 'ðàíäà', 'ðàíäîâ'),
413
                array(1, 'öåíò', 'öåíòà', 'öåíòîâ')
414
               )
415
    );
416
 
417
    /**
418
     * The default currency name
419
     * @var string
420
     * @access public
421
     */
422
    var $def_currency = 'RUB'; // Russian rouble
423
 
424
    // }}}
425
    // {{{ toWords()
426
 
427
    /**
428
     * Converts a number to its word representation
429
     * in Russian language
430
     *
431
     * @param integer $num    An integer between -infinity and infinity inclusive :)
432
     *                        that need to be converted to words
433
     * @param integer $gender Gender of string, 0=neutral, 1=male, 2=female.
434
     *                        Optional, defaults to 1.
435
     *
436
     * @return string  The corresponding word representation
437
     *
438
     * @access private
439
     * @author Andrey Demenev <demenev@on-line.jar.ru>
440
     */
441
    function toWords($num, $gender = 1)
442
    {
443
        return $this->_toWordsWithCase($num, $dummy, $gender);
444
    }
445
 
446
    /**
447
     * Converts a number to its word representation
448
     * in Russian language and determines the case of string.
449
     *
450
     * @param integer $num    An integer between -infinity and infinity inclusive :)
451
     *                        that need to be converted to words
452
     * @param integer &$case  A variable passed by reference which is set to case
453
     *                        of the word associated with the number
454
     * @param integer $gender Gender of string, 0=neutral, 1=male, 2=female.
455
     *                        Optional, defaults to 1.
456
     *
457
     * @return string  The corresponding word representation
458
     *
459
     * @access private
460
     * @author Andrey Demenev <demenev@on-line.jar.ru>
461
     */
462
    function _toWordsWithCase($num, &$case, $gender = 1)
463
    {
464
        $ret  = '';
465
        $case = 3;
466
 
467
        $num = trim($num);
468
 
469
        $sign = "";
470
        if (substr($num, 0, 1) == '-') {
471
            $sign = $this->_minus . $this->_sep;
472
            $num  = substr($num, 1);
473
        }
474
 
475
        while (strlen($num) % 3) {
476
            $num = '0' . $num;
477
        }
478
 
479
        if ($num == 0 || $num == '') {
480
            $ret .= $this->_digits[$gender][0];
481
        } else {
482
            $power = 0;
483
 
484
            while ($power < strlen($num)) {
485
                if (!$power) {
486
                    $groupgender = $gender;
487
                } elseif ($power == 3) {
488
                    $groupgender = 2;
489
                } else {
490
                    $groupgender = 1;
491
                }
492
 
493
                $group = $this->_groupToWords(substr($num, -$power-3, 3), $groupgender, $_case);
494
                if (!$power) {
495
                    $case = $_case;
496
                }
497
 
498
                if ($power == 3) {
499
                    if ($_case == 1) {
500
                        $group .= $this->_sep . 'òûñÿ÷à';
501
                    } elseif ($_case == 2) {
502
                        $group .= $this->_sep . 'òûñÿ÷è';
503
                    } else {
504
                        $group .= $this->_sep . 'òûñÿ÷';
505
                    }
506
                } elseif ($group && $power>3 && isset($this->_exponent[$power])) {
507
                    $group .= $this->_sep . $this->_exponent[$power];
508
                    if ($_case == 2) {
509
                        $group .= 'à';
510
                    } elseif ($_case == 3) {
511
                        $group .= 'îâ';
512
                    }
513
                }
514
 
515
                if ($group) {
516
                    $ret = $group . $this->_sep . $ret;
517
                }
518
 
519
                $power += 3;
520
            }
521
        }
522
 
523
        return $sign . $ret;
524
    }
525
 
526
    // }}}
527
    // {{{ _groupToWords()
528
 
529
    /**
530
     * Converts a group of 3 digits to its word representation
531
     * in Russian language.
532
     *
533
     * @param integer $num    An integer between -infinity and infinity inclusive :)
534
     *                        that need to be converted to words
535
     * @param integer $gender Gender of string, 0=neutral, 1=male, 2=female.
536
     * @param integer &$case  A variable passed by reference which is set to case
537
     *                        of the word associated with the number
538
     *
539
     * @return string  The corresponding word representation
540
     *
541
     * @access private
542
     * @author Andrey Demenev <demenev@on-line.jar.ru>
543
     */
544
    function _groupToWords($num, $gender, &$case)
545
    {
546
        $ret  = '';
547
        $case = 3;
548
 
549
        if ((int)$num == 0) {
550
            $ret = '';
551
        } elseif ($num < 10) {
552
            $ret = $this->_digits[$gender][(int)$num];
553
            if ($num == 1) {
554
                $case = 1;
555
            } elseif ($num < 5) {
556
                $case = 2;
557
            } else {
558
                $case = 3;
559
            }
560
 
561
        } else {
562
            $num = str_pad($num, 3, '0', STR_PAD_LEFT);
563
 
564
            $hundreds = (int)$num{0};
565
            if ($hundreds) {
566
                $ret = $this->_hundreds[$hundreds];
567
                if (substr($num, 1) != '00') {
568
                    $ret .= $this->_sep;
569
                }
570
 
571
                $case = 3;
572
            }
573
 
574
            $tens = (int)$num{1};
575
            $ones = (int)$num{2};
576
            if ($tens || $ones) {
577
                if ($tens == 1 && $ones == 0) {
578
                    $ret .= 'äåñÿòü';
579
                } elseif ($tens == 1) {
580
                    $ret .= $this->_teens[$ones+10];
581
                } else {
582
                    if ($tens > 0) {
583
                        $ret .= $this->_tens[(int)$tens];
584
                    }
585
 
586
                    if ($ones > 0) {
587
                        $ret .= $this->_sep
588
                                . $this->_digits[$gender][$ones];
589
 
590
                        if ($ones == 1) {
591
                            $case = 1;
592
                        } elseif ($ones < 5) {
593
                            $case = 2;
594
                        } else {
595
                            $case = 3;
596
                        }
597
                    }
598
                }
599
            }
600
        }
601
 
602
        return $ret;
603
    }
604
    // }}}
605
    // {{{ toCurrencyWords()
606
 
607
    /**
608
     * Converts a currency value to its word representation
609
     * (with monetary units) in Russian language
610
     *
611
     * @param integer $int_curr         An international currency symbol
612
     *                                  as defined by the ISO 4217 standard (three characters)
613
     * @param integer $decimal          A money total amount without fraction part (e.g. amount of dollars)
614
     * @param integer $fraction         Fractional part of the money amount (e.g. amount of cents)
615
     *                                  Optional. Defaults to false.
616
     * @param integer $convert_fraction Convert fraction to words (left as numeric if set to false).
617
     *                                  Optional. Defaults to true.
618
     *
619
     * @return string  The corresponding word representation for the currency
620
     *
621
     * @access public
622
     * @author Andrey Demenev <demenev@on-line.jar.ru>
623
     */
624
    function toCurrencyWords($int_curr, $decimal, $fraction = false, $convert_fraction = true)
625
    {
626
        $int_curr = strtoupper($int_curr);
627
        if (!isset($this->_currency_names[$int_curr])) {
628
            $int_curr = $this->def_currency;
629
        }
630
 
631
        $curr_names = $this->_currency_names[$int_curr];
632
 
633
        $ret  = trim($this->_toWordsWithCase($decimal, $case, $curr_names[0][0]));
634
        $ret .= $this->_sep . $curr_names[0][$case];
635
 
636
        if ($fraction !== false) {
637
            if ($convert_fraction) {
638
                $ret .= $this->_sep . trim($this->_toWordsWithCase($fraction, $case, $curr_names[1][0]));
639
            } else {
640
                $ret .= $this->_sep . $fraction;
641
            }
642
 
643
            $ret .= $this->_sep . $curr_names[1][$case];
644
        }
645
        return $ret;
646
    }
647
    // }}}
648
 
649
}
650
 
651
?>