├── _config.yml
├── NumberTranslate
├── .buildpath
├── .project
└── NumberTranslate
│ ├── Initialize.cls
│ └── NumberTranslate.cls
├── LICENSE
├── README.md
└── Version
├── CosNumberTranslation_v1.0.xml
├── CosNumberTranslation_v1.1.1.xml
└── CosNumberTranslation_v1.1.xml
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-slate
--------------------------------------------------------------------------------
/NumberTranslate/.buildpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/NumberTranslate/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | NumberTranslate
4 |
5 |
6 |
7 |
8 |
9 | com.intersystems.atelier.core.validator
10 |
11 |
12 |
13 |
14 |
15 | com.intersystems.atelier.core.nature
16 |
17 |
18 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 FRANCISCO LOPEZ DE LAS HERAS
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # NumberTranslate
2 |
3 | [](https://community.intersystems.com/post/translate-number-text)
4 |
5 | Convert number to text for Cache Object Script (Intersystems)
6 | ### Overview
7 |
8 | the aim of this function is to convert numbers into text.
9 | It allows a maximum number of 15 digits.
10 | The translation is done in several languages. The allowed languages are
11 |
12 | - **es:** Spanish
13 | - **en:** English
14 | - **ca:** Catalan
15 | - **ru:** Russian
16 |
17 | The function also allows to treat the numbers of 10^9 (millards) in English-speaking countries format. See the following link [Billion Wikipedia](https://en.wikipedia.org/wiki/Billion)
18 |
19 | ### Example
20 | ```sh
21 | USER> w ##class(NumberTranslate.NumberTranslate).GetText(123,.tSc)
22 | one hundred and twenty-three
23 | USER> w ##class(NumberTranslate.NumberTranslate).GetText(123,.tSc,"es")
24 | ciento veintitres
25 | USER> w ##class(NumberTranslate.NumberTranslate).GetText(123,.tSc,"ca")
26 | cent vint-i-tres
27 | USER> w ##class(NumberTranslate.NumberTranslate).GetText(123,.tSc,"ru")
28 | Сто двадцать три
29 | USER> w ##class(NumberTranslate.NumberTranslate).GetText(1000000000,.tSc,"en",1)
30 | one billion
31 | USER> w ##class(NumberTranslate.NumberTranslate).GetText(1000000000,.tSc,"en",0)
32 | one thousand millions
33 | USER> w ##class(NumberTranslate.NumberTranslate).GetText(1000000000000,.tSc,"en",1)
34 | one trillion
35 | USER> w ##class(NumberTranslate.NumberTranslate).GetText(1000000000000,.tSc,"en",0)
36 | one billion
37 | ```
38 |
39 | In case of error, you can catch the error with the status variable
40 |
41 | ```sh
42 | USER> set text=##class(NumberTranslate.NumberTranslate).GetText(123,.tSc,"fr")
43 | USER> if ('tSc) { w $System.Status.GetErrorText(tSc) } else { w text }
44 | ERROR #420: Lang fr not exists
45 | ```
46 |
47 | ### Version history
48 | 2018-08-08 [Version 1.1.1](https://github.com/KurroLopez/CosNumberTranslate/blob/master/Version/CosNumberTranslation_v1.1.1.xml) - Fixed issue about "hundred"
49 |
50 | 2018-08-07 [Version 1.1](https://github.com/KurroLopez/CosNumberTranslate/blob/master/Version/CosNumberTranslation_v1.1.xml) - Russian translate
51 |
52 | 2018-06-29 [Version 1.0](https://github.com/KurroLopez/CosNumberTranslate/blob/master/Version/CosNumberTranslation_v1.0.xml) - Initial version
53 |
--------------------------------------------------------------------------------
/NumberTranslate/NumberTranslate/Initialize.cls:
--------------------------------------------------------------------------------
1 | /// Initialize Global with number translate
2 | Class NumberTranslate.Initialize Extends %RegisteredObject
3 | {
4 |
5 | ClassMethod Initialize()
6 | {
7 | kill ^NumberTranslate
8 |
9 | // Create the global variable with texto according to lang and number
10 | set ^NumberTranslate("Config")=1
11 | set ^NumberTranslate("Config","lang")="es;ca;en"
12 |
13 | set ^NumberTranslate("Config","lang","es","billions")="billones"
14 | set ^NumberTranslate("Config","lang","es","billion")="billón"
15 | set ^NumberTranslate("Config","lang","es","million")="millón"
16 | set ^NumberTranslate("Config","lang","es","millions")="millones"
17 | set ^NumberTranslate("Config","lang","es","trillion")="trillón"
18 | set ^NumberTranslate("Config","lang","es","trillions")="trillones"
19 | set ^NumberTranslate("Config","lang","es","thousand")="mil"
20 | set ^NumberTranslate("Config","lang","es","hundred")="cien"
21 | set ^NumberTranslate("Config","lang","es","unit")="un"
22 | set ^NumberTranslate("Config","lang","es","concat-tens")=" y "
23 | set ^NumberTranslate("Config","lang","es","concat-cents")=" "
24 |
25 | set ^NumberTranslate("Config","lang","ca","billion")="bilió"
26 | set ^NumberTranslate("Config","lang","ca","billions")="bilions"
27 | set ^NumberTranslate("Config","lang","ca","million")="milió"
28 | set ^NumberTranslate("Config","lang","ca","millions")="milions"
29 | set ^NumberTranslate("Config","lang","ca","trillion")="trilló"
30 | set ^NumberTranslate("Config","lang","ca","trillions")="trillons"
31 | set ^NumberTranslate("Config","lang","ca","thousand")="mil"
32 | set ^NumberTranslate("Config","lang","ca","hundred")="cent"
33 | set ^NumberTranslate("Config","lang","ca","unit")="un"
34 | set ^NumberTranslate("Config","lang","ca","concat-tens")="-"
35 | set ^NumberTranslate("Config","lang","ca","concat-cents")=" "
36 |
37 | set ^NumberTranslate("Config","lang","en","billion")="billion"
38 | set ^NumberTranslate("Config","lang","en","billions")="billions"
39 | set ^NumberTranslate("Config","lang","en","million")="million"
40 | set ^NumberTranslate("Config","lang","en","millions")="millions"
41 | set ^NumberTranslate("Config","lang","en","trillion")="trillion"
42 | set ^NumberTranslate("Config","lang","en","trillions")="trillions"
43 | set ^NumberTranslate("Config","lang","en","thousand")="thousand"
44 | set ^NumberTranslate("Config","lang","en","hundred")="hundred"
45 | set ^NumberTranslate("Config","lang","en","unit")="one"
46 | set ^NumberTranslate("Config","lang","en","concat-tens")="-"
47 | set ^NumberTranslate("Config","lang","en","concat-cents")=" and "
48 |
49 | set ^NumberTranslate("Current","lang")="en"
50 | set ^NumberTranslate("Current","culture")=""
51 | set ^NumberTranslate("Current","debug")=0
52 |
53 | // Number definition
54 | // units and tens (es)
55 | set ^NumberTranslate("Config","lang","es","unit",1)="uno"
56 | set ^NumberTranslate("Config","lang","es","unit",2)="dos"
57 | set ^NumberTranslate("Config","lang","es","unit",3)="tres"
58 | set ^NumberTranslate("Config","lang","es","unit",4)="cuatro"
59 | set ^NumberTranslate("Config","lang","es","unit",5)="cinco"
60 | set ^NumberTranslate("Config","lang","es","unit",6)="seis"
61 | set ^NumberTranslate("Config","lang","es","unit",7)="siete"
62 | set ^NumberTranslate("Config","lang","es","unit",8)="ocho"
63 | set ^NumberTranslate("Config","lang","es","unit",9)="nueve"
64 | set ^NumberTranslate("Config","lang","es","unit",10)="diez"
65 | set ^NumberTranslate("Config","lang","es","unit",11)="once"
66 | set ^NumberTranslate("Config","lang","es","unit",12)="doce"
67 | set ^NumberTranslate("Config","lang","es","unit",13)="trece"
68 | set ^NumberTranslate("Config","lang","es","unit",14)="catorce"
69 | set ^NumberTranslate("Config","lang","es","unit",15)="quince"
70 | set ^NumberTranslate("Config","lang","es","unit",16)="dieciseis"
71 | set ^NumberTranslate("Config","lang","es","unit",17)="diecisiete"
72 | set ^NumberTranslate("Config","lang","es","unit",18)="dieciocho"
73 | set ^NumberTranslate("Config","lang","es","unit",19)="diecinueve"
74 | set ^NumberTranslate("Config","lang","es","unit",20)="veinti"
75 | set ^NumberTranslate("Config","lang","es","unit",21)="treinta"
76 | set ^NumberTranslate("Config","lang","es","unit",22)="cuarenta"
77 | set ^NumberTranslate("Config","lang","es","unit",23)="cincuenta"
78 | set ^NumberTranslate("Config","lang","es","unit",24)="sesenta"
79 | set ^NumberTranslate("Config","lang","es","unit",25)="setenta"
80 | set ^NumberTranslate("Config","lang","es","unit",26)="ochenta"
81 | set ^NumberTranslate("Config","lang","es","unit",27)="noventa"
82 | set ^NumberTranslate("Config","lang","es","unit",29)="veinte"
83 |
84 | // units and tens (ca)
85 | set ^NumberTranslate("Config","lang","ca","unit",1)="u"
86 | set ^NumberTranslate("Config","lang","ca","unit",2)="dos"
87 | set ^NumberTranslate("Config","lang","ca","unit",3)="tres"
88 | set ^NumberTranslate("Config","lang","ca","unit",4)="quatre"
89 | set ^NumberTranslate("Config","lang","ca","unit",5)="cinc"
90 | set ^NumberTranslate("Config","lang","ca","unit",6)="sis"
91 | set ^NumberTranslate("Config","lang","ca","unit",7)="set"
92 | set ^NumberTranslate("Config","lang","ca","unit",8)="vuit"
93 | set ^NumberTranslate("Config","lang","ca","unit",9)="nou"
94 | set ^NumberTranslate("Config","lang","ca","unit",10)="deu"
95 | set ^NumberTranslate("Config","lang","ca","unit",11)="onze"
96 | set ^NumberTranslate("Config","lang","ca","unit",12)="dotze"
97 | set ^NumberTranslate("Config","lang","ca","unit",13)="tretze"
98 | set ^NumberTranslate("Config","lang","ca","unit",14)="catorze"
99 | set ^NumberTranslate("Config","lang","ca","unit",15)="quinze"
100 | set ^NumberTranslate("Config","lang","ca","unit",16)="setze"
101 | set ^NumberTranslate("Config","lang","ca","unit",17)="disset"
102 | set ^NumberTranslate("Config","lang","ca","unit",18)="divuit"
103 | set ^NumberTranslate("Config","lang","ca","unit",19)="dinou"
104 | set ^NumberTranslate("Config","lang","ca","unit",20)="vint-i"
105 | set ^NumberTranslate("Config","lang","ca","unit",21)="trenta"
106 | set ^NumberTranslate("Config","lang","ca","unit",22)="quaranta"
107 | set ^NumberTranslate("Config","lang","ca","unit",23)="cinquanta"
108 | set ^NumberTranslate("Config","lang","ca","unit",24)="seixanta"
109 | set ^NumberTranslate("Config","lang","ca","unit",25)="setanta"
110 | set ^NumberTranslate("Config","lang","ca","unit",26)="vuitanta"
111 | set ^NumberTranslate("Config","lang","ca","unit",27)="noranta"
112 | set ^NumberTranslate("Config","lang","ca","unit",29)="vint"
113 |
114 | // units and tens (en)
115 | set ^NumberTranslate("Config","lang","en","unit",1)="one"
116 | set ^NumberTranslate("Config","lang","en","unit",2)="two"
117 | set ^NumberTranslate("Config","lang","en","unit",3)="three"
118 | set ^NumberTranslate("Config","lang","en","unit",4)="four"
119 | set ^NumberTranslate("Config","lang","en","unit",5)="five"
120 | set ^NumberTranslate("Config","lang","en","unit",6)="six"
121 | set ^NumberTranslate("Config","lang","en","unit",7)="seven"
122 | set ^NumberTranslate("Config","lang","en","unit",8)="eight"
123 | set ^NumberTranslate("Config","lang","en","unit",9)="nine"
124 | set ^NumberTranslate("Config","lang","en","unit",10)="ten"
125 | set ^NumberTranslate("Config","lang","en","unit",11)="eleven"
126 | set ^NumberTranslate("Config","lang","en","unit",12)="twelve"
127 | set ^NumberTranslate("Config","lang","en","unit",13)="thirteen"
128 | set ^NumberTranslate("Config","lang","en","unit",14)="fourteen"
129 | set ^NumberTranslate("Config","lang","en","unit",15)="fiveteen"
130 | set ^NumberTranslate("Config","lang","en","unit",16)="sixteen"
131 | set ^NumberTranslate("Config","lang","en","unit",17)="seventeen"
132 | set ^NumberTranslate("Config","lang","en","unit",18)="eighteen"
133 | set ^NumberTranslate("Config","lang","en","unit",19)="nineteen"
134 | set ^NumberTranslate("Config","lang","en","unit",20)="twenty"
135 | set ^NumberTranslate("Config","lang","en","unit",21)="thirty"
136 | set ^NumberTranslate("Config","lang","en","unit",22)="forty"
137 | set ^NumberTranslate("Config","lang","en","unit",23)="fifty"
138 | set ^NumberTranslate("Config","lang","en","unit",24)="sixty"
139 | set ^NumberTranslate("Config","lang","en","unit",25)="seventy"
140 | set ^NumberTranslate("Config","lang","en","unit",26)="eighty"
141 | set ^NumberTranslate("Config","lang","en","unit",27)="ninety"
142 | set ^NumberTranslate("Config","lang","en","unit",29)="twenty"
143 |
144 | // Hundreds (es)
145 | set ^NumberTranslate("Config","lang","es","hundred",1)="ciento"
146 | set ^NumberTranslate("Config","lang","es","hundred",2)="doscientos"
147 | set ^NumberTranslate("Config","lang","es","hundred",3)="trescientos"
148 | set ^NumberTranslate("Config","lang","es","hundred",4)="cuatrocientos"
149 | set ^NumberTranslate("Config","lang","es","hundred",5)="quinientos"
150 | set ^NumberTranslate("Config","lang","es","hundred",6)="seicientos"
151 | set ^NumberTranslate("Config","lang","es","hundred",7)="setecientos"
152 | set ^NumberTranslate("Config","lang","es","hundred",8)="ochocientos"
153 | set ^NumberTranslate("Config","lang","es","hundred",9)="novecientos"
154 |
155 | // Hundreds (ca)
156 | set ^NumberTranslate("Config","lang","ca","hundred",1)="cent"
157 | set ^NumberTranslate("Config","lang","ca","hundred",2)="dos-cents"
158 | set ^NumberTranslate("Config","lang","ca","hundred",3)="tres-cents"
159 | set ^NumberTranslate("Config","lang","ca","hundred",4)="quatre-cents"
160 | set ^NumberTranslate("Config","lang","ca","hundred",5)="cinc-cents"
161 | set ^NumberTranslate("Config","lang","ca","hundred",6)="sis-cents"
162 | set ^NumberTranslate("Config","lang","ca","hundred",7)="set-cents"
163 | set ^NumberTranslate("Config","lang","ca","hundred",8)="vuit-cents"
164 | set ^NumberTranslate("Config","lang","ca","hundred",9)="nou-cents"
165 |
166 | // Hundreds (en)
167 | set ^NumberTranslate("Config","lang","en","hundred",1)="one hundred"
168 | set ^NumberTranslate("Config","lang","en","hundred",2)="two hundred"
169 | set ^NumberTranslate("Config","lang","en","hundred",3)="three hundred"
170 | set ^NumberTranslate("Config","lang","en","hundred",4)="four hundred"
171 | set ^NumberTranslate("Config","lang","en","hundred",5)="five hundred"
172 | set ^NumberTranslate("Config","lang","en","hundred",6)="six hundred"
173 | set ^NumberTranslate("Config","lang","en","hundred",7)="seven hundred"
174 | set ^NumberTranslate("Config","lang","en","hundred",8)="eight hundred"
175 | set ^NumberTranslate("Config","lang","en","hundred",9)="nine hundred"
176 | }
177 |
178 | }
179 |
--------------------------------------------------------------------------------
/NumberTranslate/NumberTranslate/NumberTranslate.cls:
--------------------------------------------------------------------------------
1 | ///
2 | ///
NumberTranslate.NumberTranslate
3 | /// NumberTranslate
4 | /// Overview
5 | /// the aim of this function is to convert numbers into text.
6 | /// It allows a maximum number of 15 digits.
7 | /// The translation is done in several languages. The allowed languages are
8 | ///
9 | /// - es: Spanish
10 | /// - en: English
11 | /// - ca: Catalan
12 | ///
13 | /// The function also allows to treat the numbers of 10^9 (millards) in English-speaking countries format. See the following link Billion Wikipedia
14 | /// Example
15 | ///
16 | /// USER> w ##class(NumberTranslate.NumberTranslate).GetText(123,.tSc)
17 | /// one hundred and twenty-three
18 | /// USER> w ##class(NumberTranslate.NumberTranslate).GetText(123,.tSc,"es")
19 | /// ciento veintitres
20 | /// USER> w ##class(NumberTranslate.NumberTranslate).GetText(123,.tSc,"ca")
21 | /// cent vint-i-tres
22 | /// USER> w ##class(NumberTranslate.NumberTranslate).GetText(1000000000,.tSc,"en",1)
23 | /// one billion
24 | /// USER> w ##class(NumberTranslate.NumberTranslate).GetText(1000000000,.tSc,"en",0)
25 | /// one thousand millions
26 | /// USER> w ##class(NumberTranslate.NumberTranslate).GetText(1000000000000,.tSc,"en",1)
27 | /// one trillion
28 | /// USER> w ##class(NumberTranslate.NumberTranslate).GetText(1000000000000,.tSc,"en",0)
29 | /// one billion
30 | ///
31 | /// In case of error, you can catch the error with the status variable
32 | ///
33 | /// USER> set text=##class(NumberTranslate.NumberTranslate).GetText(123,.tSc,"fr")
34 | /// USER> if ('tSc) { w $System.Status.GetErrorText(tSc) } else { w text }
35 | /// ERROR #420: Lang fr not exists
36 | ///
37 | ///
38 | Class NumberTranslate.NumberTranslate Extends %RegisteredObject [ Not ProcedureBlock ]
39 | {
40 |
41 | /// Internal method to get trio of digit and translate according to language
42 | Method Trio(pTrio As %String) As %String
43 | {
44 | set obj=..%New()
45 | if (^NumberTranslate("Current","debug"))
46 | {
47 | w "--------------",!
48 | w "Value trio:",?25,pTrio,!
49 | }
50 | set lcent = $EXTRACT(pTrio,1,1)
51 | set lten = $EXTRACT(pTrio,2,2)
52 | set lunit = $EXTRACT(pTrio,3,3)
53 |
54 | set lang = ^NumberTranslate("Current","lang")
55 |
56 | set figure = ""
57 |
58 | // First figure (cent)
59 | if (lcent>0)
60 | {
61 | set figure=figure_$SELECT((lcent=1)&&((lten=0)&&(lunit=0)):^NumberTranslate("Config","lang",lang,"hundred"),
62 | 1:^NumberTranslate("Config","lang",lang,"hundred",lcent))
63 | }
64 |
65 | if (lcent>0)&&((lten>0)||(lunit>0))
66 | {
67 | set figure=figure_^NumberTranslate("Config","lang",lang,"concat-cents")
68 | }
69 |
70 | // Second figure (tens)
71 | if ((lten>=3)&&(lten<=9))
72 | {
73 | set figure = figure_$SELECT(lunit=0:obj.GetDigit(lten*10)_" ",lunit>0:obj.GetDigit(lten*10)_^NumberTranslate("Config","lang",lang,"concat-tens"))
74 | } elseif (lten = 2)
75 | {
76 | set figure = figure_$SELECT(lunit=0:^NumberTranslate("Config","lang",lang,"unit",29)_" ",1:obj.GetDigit(lten*10))
77 | // Condition only for Spanish and twenty
78 | if (lang'="es")&&(lunit>0)
79 | {
80 | set figure = figure_^NumberTranslate("Config","lang",lang,"concat-tens")
81 | }
82 | } elseif (lten = 1)
83 | {
84 | set figure = figure_" "_obj.GetDigit((lten*10)+lunit)_" "
85 | }
86 |
87 | // Third figure (unit)
88 | if ((lunit>0)&&(lten'=1))
89 | {
90 | set figure = figure_obj.GetDigit(lunit)
91 | }
92 |
93 |
94 | // Remove all double spaces
95 | set figure=$Replace(figure," "," ")
96 | k obj
97 | quit figure
98 | }
99 |
100 | /// Internal method to get the text of digit
101 | Method GetDigit(pNumber As %Integer) As %String
102 | {
103 | set sCurrent = ""
104 | set lang = ^NumberTranslate("Current","lang")
105 |
106 | if (pNumber <= 20)
107 | {
108 | // From 1 to 20 is the same than position of Unit
109 | set sCurrent = ^NumberTranslate("Config","lang",lang,"unit",pNumber)
110 | }
111 | else
112 | {
113 | set lNumber = pNumber - 30
114 | set lPos = 0
115 | if (lNumber < 0)
116 | {
117 | set lNumber = lNumber * -1
118 | set lPos = (lNumber/10) + 21
119 | }
120 | else
121 | {
122 | if (lNumber = 0)
123 | {
124 | set lPos = 21
125 | }
126 | else
127 | {
128 | set lPos = (lNumber/10) + 21
129 | }
130 | }
131 | set sCurrent = ^NumberTranslate("Config","lang",lang,"unit",lPos)
132 | }
133 |
134 | quit sCurrent
135 | }
136 |
137 | /// Translate a number to text
138 | ClassMethod GetText(pNumber As %Decimal, Output pStatus As %Status, pLang As %String = "en", pEngBillion As %Boolean = 0) As %String
139 | {
140 | quit:pLang="ru" $piece(..WriteSumma(pNumber), " руб")
141 | set obj=..%New()
142 | set pStatus = $$$OK
143 | set tResult = ""
144 | // Check if code is installed
145 | if ($Get(^NumberTranslate("Config"))'=1)
146 | {
147 | do ##class(NumberTranslate.Initialize).Initialize()
148 | }
149 |
150 | //Allowed langs ^NumberTranslate("Config","lang")
151 | if ('$listfind($LISTFROMSTRING(^NumberTranslate("Config","lang"),";"),pLang))
152 | {
153 | SET pStatus = $System.Status.Error(420,"Lang",pLang)
154 | Quit tResult
155 | }
156 |
157 | set ^NumberTranslate("Current","lang")=pLang
158 | set ^NumberTranslate("Current","culture")=$CASE(pEngBillion,1:"en",0:"")
159 |
160 | set number = $System.SQL.TOCHAR(pNumber,"000000000000000")
161 | set billion=$Extract(number,0,4)
162 | set millard=$Extract(number,5,7)
163 | set million=$Extract(number,8,10)
164 | set thousand=$Extract(number,11,13)
165 | set cents=$Extract(number,14,16)
166 |
167 | if (^NumberTranslate("Current","debug"))
168 | {
169 | w "Number to process:",?25,number,!
170 | w "(EUR) Billion:",?25,billion,!
171 | w "Millard:",?25,millard,!
172 | w "Million:",?25,million,!
173 | w "Thousand:",?25,thousand,!
174 | w "Cents:",?25,cents,!
175 | }
176 |
177 | // Five blocks, watch out with billion USA and billion EUR
178 | for block=1:1:5
179 | {
180 | if (block=1) // (EUR) Billion / (ENG) Trillion
181 | {
182 | // Acording to culture, the text could be trillion or billion
183 | set textBlock=$CASE(pEngBillion,1:^NumberTranslate("Config","lang",pLang,"trillion"),0:^NumberTranslate("Config","lang",pLang,"billion"))
184 | set textBlocks=$CASE(pEngBillion,1:^NumberTranslate("Config","lang",pLang,"trillions"),0:^NumberTranslate("Config","lang",pLang,"billions"))
185 |
186 | set tResult=tResult_" "_$SELECT($Number(billion)=1:^NumberTranslate("Config","lang",pLang,"unit")_" "_textBlock,$Number(billion)>1:obj.Trio(billion)_" "_textBlocks,1:"")
187 | }
188 | if (block=2) // (EUR) Thousand million / (ENG) Billion
189 | {
190 | // Acording to culture, the text could be billion or thousand (of billion)
191 | set textBlock=$CASE(pEngBillion,1:^NumberTranslate("Config","lang",pLang,"billion"),0:^NumberTranslate("Config","lang",pLang,"thousand"))
192 | set textBlocks=$CASE(pEngBillion,1:^NumberTranslate("Config","lang",pLang,"billions"),0:^NumberTranslate("Config","lang",pLang,"thousand"))
193 |
194 | set tResult=tResult_" "_$SELECT($Number(millard)=1:^NumberTranslate("Config","lang",pLang,"unit")_" "_textBlock, $Number(millard)>1:obj.Trio(millard)_" "_textBlocks, 1:"")
195 |
196 | }
197 | if (block=3) // Million
198 | {
199 | set textBlock=^NumberTranslate("Config","lang",pLang,"million")
200 | set textBlocks=^NumberTranslate("Config","lang",pLang,"millions")
201 |
202 | set tResult=tResult_" "_$SELECT($Number(million)=1:^NumberTranslate("Config","lang",pLang,"unit")_" "_textBlock,
203 | $Number(million)>1:obj.Trio(million)_" "_textBlocks,
204 | $Number(millard)>0: $SELECT(pEngBillion=1:" ",1:" "_textBlocks),1:"")
205 | }
206 | if (block=4) // Thousand
207 | {
208 | set textBlock=^NumberTranslate("Config","lang",pLang,"thousand")
209 |
210 | set tResult=tResult_" "_$SELECT($Number(thousand)=1:textBlock, $Number(thousand)>1:obj.Trio(thousand)_" "_textBlock,1:"")
211 | }
212 | if (block=5) // Cents
213 | {
214 | set tResult=tResult_" "_obj.Trio(cents)
215 | }
216 | }
217 |
218 | k obj
219 | set tResult = $ZSTRIP($Replace(tResult," "," "),"<>"," ")
220 | Quit tResult
221 | }
222 |
223 | /// Russian Translate
224 | ClassMethod WriteSumma(summa As %Decimal = "") As %String
225 | {
226 | new SUMMA,SUMMAP,%X,%X0,%X1,R0,R1,VV,V2,V3,V
227 | set SUMMA=summa
228 | I +SUMMA'<1000000000000 S SUMMAP=SUMMA G END0 ;###
229 | I +SUMMA<0 S SUMMA=-SUMMA
230 | S %X=+$P(SUMMA,".",1),SUMMAP="",VV=0
231 | ;I %X=0 S SUMMAP="ноль рублей"
232 | I %X=0 S SUMMAP="ноль "
233 | I %X>0 D PRUBL
234 | S V2=$E(%X,$L(%X)-1),V3=$E(%X,$L(%X))
235 | I V3=1,V2'=1 S SUMMAP=SUMMAP_" рубль",VV=1
236 | I ((V3=2)!(V3=3)!(V3=4))&(V2'=1) S SUMMAP=SUMMAP_" рубля",VV=1
237 | I ((V3=1)!(V3=2)!(V3=3)!(V3=4))&(V2=1) S SUMMAP=SUMMAP_" рублей",VV=1
238 | I V3>4 S SUMMAP=SUMMAP_" рублей",VV=1
239 | I VV=0 S SUMMAP=SUMMAP_" рублей"
240 | S %X=$P(SUMMA,".",2) I %X="" S %X="00"
241 | I %X?1N S %X=%X_"0",(V1,V)="0"
242 | I %X?2N S V1=$E(%X,1,1),V=$E(%X,2,2)
243 | R1 I (V="1")&(V1'="1") S SUMMAP=SUMMAP_" "_%X_" копейка"
244 | I ((V="2")!(V="3")!(V="4"))&(V1'="1") S SUMMAP=SUMMAP_" "_%X_" копейки"
245 | I ((V'="1")&(V'="2")&(V'="3")&(V'="4"))!(V1="1") S SUMMAP=SUMMAP_" "_%X_" копеек"
246 | I $E(SUMMAP)=" " S SUMMAP=$E(SUMMAP,2,255)
247 | S SUMMAP=$TR($E(SUMMAP),"одтчпшсвн","ОДТЧПШСВН")_$E(SUMMAP,2,255)
248 | END0 K %X,%X0,%X1,R0,R1
249 | Q (SUMMAP) ;1
250 | ;-
251 | PRUBL ; Euro
252 | D PMILR,PMILE,PtYS,PEDIN
253 | Q ;Added
254 | ;-
255 | PMILR ;BILLION
256 | S %X0=%X\1000000000 Q:%X0=0 ;###
257 | D PSoT,PDES
258 |
259 | RRR3 S SUMMAP=SUMMAP_" миллиард"_$S(%X0#100=0:"ов",%X0#100>10&(%X0#100<21):"ов",%X0#10>1&(%X0#10<5):"а",%X0#10=1:"",1:"ов")_" "
260 | K R3
261 | Q ;PMILR
262 | ;-
263 | PMILE ;Millions
264 | ;S %X0=%X\1000000 Q:%X0=0 ;###
265 | S %X0=%X#1000000000\1000000 Q:%X0=0 ;###
266 | D PSoT,PDES
267 |
268 | R3 S SUMMAP=SUMMAP_" миллион"_$S(%X0#100=0:"ов",%X0#100>10&(%X0#100<21):"ов",%X0#10>1&(%X0#10<5):"а",%X0#10=1:"",1:"ов")_" "
269 | K R3
270 | Q ;PMILE
271 | ;-
272 | PtYS ;THOUSAND
273 | S %X0=%X#1000000\1000 Q:%X0=0 ;###
274 | D PSoT,PDES
275 | S %X1=$E(SUMMAP,$L(SUMMAP)-2,$L(SUMMAP))
276 | I %X1="ва " S SUMMAP=$E(SUMMAP,1,$L(SUMMAP)-3)_"ве "
277 | I %X1="ин " S SUMMAP=$E(SUMMAP,1,$L(SUMMAP)-3)_"на "
278 | QQ S SUMMAP=SUMMAP_"тысяч"_$S(%X0#100=11:"",%X0#100=12:"",%X0#100=13:"",%X0#100=14:"",%X0#10=1:"а",%X0#10>1&(%X0#10<5):"и",1:"")_" "
279 | K R4,R5,R6
280 | Q ;PtYS
281 | ;-
282 | PEDIN ;UNITS IN BREAKDOWN
283 | S %X0=%X#1000 Q:%X0=0 ;###
284 | D PSoT,PDES
285 | Q ;PtDIN
286 | ;-
287 | PSoT ;HUNDREDS
288 | S %X1=%X0\100 Q:%X1=0 ;###
289 | R7 S S1="сто"
290 | R8 S S2="двести"
291 | R9 S S3="триста"
292 | R10 S S4="четыреста"
293 | R11 S S5="пятьсот"
294 | R12 S S6="шестьсот"
295 | R13 S S7="семьсот"
296 | R14 S S8="восемьсот"
297 | R15 S S9="девятьсот"
298 | S SUMMAP=SUMMAP_$S(%X1=1:S1,%X1=2:S2,%X1=3:S3,%X1=4:S4,%X1=5:S5,%X1=6:S6,%X1=7:S7,%X1=8:S8,%X1=9:S9)_" "
299 | K S1,S2,S3,S4,S5,S6,S7,S8,S9
300 | Q ;PSoT
301 | ;-
302 | PDES ;TENS
303 | S %X1=%X0#100\10 Q:%X=0 ;###
304 | I %X1=1 D PDC Q ;###
305 | R17 S D2="двадцать"
306 | R18 S D3="тридцать"
307 | R19 S D4="сорок"
308 | R20 S D5="пятьдесят"
309 | R21 S D6="шестьдесят"
310 | R22 S D7="семьдесят"
311 | R23 S D8="восемьдесят"
312 | R24 S D9="девяносто"
313 | S SUMMAP=SUMMAP_$S(%X1=2:D2,%X1=3:D3,%X1=4:D4,%X1=5:D5,%X1=6:D6,%X1=7:D7,%X1=8:D8,%X1=9:D9,1:"")_" "
314 | K D2,D3,D4,D5,D6,D7,D8,D9
315 | D PoDIN
316 | Q ;PDES
317 | ;-
318 | PDC ;
319 | S %X1=%X0#10
320 | R25 S F0="десять"
321 | R26 S F1="одиннадцать"
322 | R27 S F2="двенадцать"
323 | R28 S F3="тринадцать"
324 | R29 S F4="четырнадцать"
325 | R30 S F5="пятнадцать"
326 | R31 S F6="шестнадцать"
327 | R32 S F7="семнадцать"
328 | R33 S F8="восемнадцать"
329 | R34 S F9="девятнадцать"
330 | S SUMMAP=SUMMAP_$S(%X1=0:F0,%X1=1:F1,%X1=2:F2,%X1=3:F3,%X1=4:F4,%X1=5:F5,%X1=6:F6,%X1=7:F7,%X1=8:F8,%X1=9:F9)
331 | K F0,F1,F2,F3,F4,F5,F6,F7,F8,F9
332 | Q ;PDC
333 | ;-
334 | PoDIN ;UNITS
335 | S %X1=%X0#10 I %X1=0 Q ;###
336 | S SUMMAP=SUMMAP_$S(%X1=1:"один",%X1=2:"два",%X1=3:"три",%X1=4:"четыре",%X1=5:"пять",%X1=6:"шесть",%X1=7:"семь",%X1=8:"восемь",%X1=9:"девять",1:"")_" "
337 | K E1,E2,E3,E4,E5,E6,E7,E8,E9
338 | Q ;PoDIN
339 | }
340 | }
--------------------------------------------------------------------------------
/Version/CosNumberTranslation_v1.0.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Initialize Global with number translate
6 | %RegisteredObject
7 | 64823,46825.955514
8 | 64812,56223.641124
9 |
10 |
11 | 1
12 |
183 |
184 |
185 |
186 |
187 |
188 |
190 | NumberTranslate.NumberTranslate
191 | NumberTranslate
192 | Overview
193 | the aim of this function is to convert numbers into text.
194 | It allows a maximum number of 15 digits.
195 | The translation is done in several languages. The allowed languages are
196 |
197 | - es: Spanish
198 | - en: English
199 | - ca: Catalan
200 |
201 | The function also allows to treat the numbers of 10^9 (millards) in English-speaking countries format. See the following link Billion Wikipedia
202 | Example
203 |
204 | USER> w ##class(NumberTranslate.NumberTranslate).GetText(123,.tSc)
205 | one hundred and twenty-three
206 | USER> w ##class(NumberTranslate.NumberTranslate).GetText(123,.tSc,"es")
207 | ciento veintitres
208 | USER> w ##class(NumberTranslate.NumberTranslate).GetText(123,.tSc,"ca")
209 | cent vint-i-tres
210 | USER> w ##class(NumberTranslate.NumberTranslate).GetText(1000000000,.tSc,"en",1)
211 | one billion
212 | USER> w ##class(NumberTranslate.NumberTranslate).GetText(1000000000,.tSc,"en",0)
213 | one thousand millions
214 | USER> w ##class(NumberTranslate.NumberTranslate).GetText(1000000000000,.tSc,"en",1)
215 | one trillion
216 | USER> w ##class(NumberTranslate.NumberTranslate).GetText(1000000000000,.tSc,"en",0)
217 | one billion
218 |
219 | In case of error, you can catch the error with the status variable
220 |
221 | USER> set text=##class(NumberTranslate.NumberTranslate).GetText(123,.tSc,"fr")
222 | USER> if ('tSc) { w $System.Status.GetErrorText(tSc) } else { w text }
223 | ERROR #420: Lang fr not exists
224 |
225 |