Skip to content

Commit 137a0bb

Browse files
davidnguyen11yamadapc
authored andcommitted
Add support for external language object #35
Adds support for `options.lang` to be an external i18n configuration object instead of just a key into the built-in language configurations. - - - Original PR text: **Problem:** + I install js-written-number from npm and everything is inside node_modules. And I want to pass our language into libs. I create file and put it all to node_modules. But everytime I re-install I have to put back lang file to node_modules/js-written-number. **Solution:** + I suggest to pass another property to object "writtenNumber.defaults" called langObj. Let user can pass object follow structure of lang file from document.
1 parent 96eac7b commit 137a0bb

File tree

3 files changed

+66
-5
lines changed

3 files changed

+66
-5
lines changed

README.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ writtenNumber(1234); // => 'one thousand two hundred and thirty-four'
3232
## Options
3333
- `noAnd` - Defaults to `false`. Determines whether to use a separator. The
3434
separator is internationalized.
35-
- `lang` - Defaults to `'en'`. Determines which language to use.
35+
- `lang` - Could be `string` or `object`. Defaults to `'en'`. Determines which
36+
language to use. An i18n configuration object may be passed to support
37+
external language definitions.
3638

3739
## Internationalization
3840
Currently supported languages are:
@@ -41,6 +43,7 @@ Currently supported languages are:
4143
- Spanish `lang = "es"`
4244
- French `lang = "fr"`
4345
- Esperanto `lang = "eo"`
46+
- Vietnamese `lang = "vi"`
4447

4548
### Spanish Example
4649
```javascript
@@ -72,6 +75,12 @@ var writtenNumber = require('written-number');
7275
writtenNumber(1234, { lang: 'eo' }); // => 'mil ducent tridek kvar'
7376
```
7477

78+
### Vietnamese Example
79+
```javascript
80+
var writtenNumber = require('written-number');
81+
writtenNumber(1234, { lang: 'vi' }); // => 'một ngàn hai trăm và ba mươi bốn'
82+
```
83+
7584
## Options
7685
Property | Value
7786
-------------- | -------------

lib/i18n/vi.json

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
{
2+
"useLongScale": false,
3+
"baseSeparator": " ",
4+
"unitSeparator": "",
5+
"base": {
6+
"0": "không",
7+
"1": "một",
8+
"2": "hai",
9+
"3": "ba",
10+
"4": "bốn",
11+
"5": "năm",
12+
"6": "sáu",
13+
"7": "bảy",
14+
"8": "tám",
15+
"9": "chín",
16+
"10": "mười",
17+
"15": "mười lăm",
18+
"20": "hai mươi",
19+
"21": "hai mươi mốt",
20+
"25": "hai mươi lăm",
21+
"30": "ba mươi",
22+
"31": "ba mươi mốt",
23+
"40": "bốn mươi",
24+
"41": "bốn mươi mốt",
25+
"45": "bốn mươi lăm",
26+
"50": "năm mươi",
27+
"51": "năm mươi mốt",
28+
"55": "năm mươi lăm",
29+
"60": "sáu mươi",
30+
"61": "sáu mươi mốt",
31+
"65": "sáu mươi lăm",
32+
"70": "bảy mươi",
33+
"71": "bảy mươi mốt",
34+
"75": "bảy mươi lăm",
35+
"80": "tám mươi",
36+
"81": "tám mươi mốt",
37+
"85": "tám mươi lăm",
38+
"90": "chín mươi",
39+
"91": "chín mươi mốt",
40+
"95": "chín mươi lăm"
41+
},
42+
"units" : [
43+
"trăm",
44+
"ngàn",
45+
"triệu",
46+
"tỷ",
47+
"nghìn tỷ"
48+
],
49+
"unitExceptions": []
50+
}

lib/index.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
exports = module.exports = writtenNumber;
33
var util = require('./util');
44

5-
var languages = ['en', 'es', 'pt', 'fr', 'eo', 'it'];
5+
var languages = ['en', 'es', 'pt', 'fr', 'eo', 'it', 'vi'];
66
var i18n = {
77
en: require('./i18n/en.json'),
88
es: require('./i18n/es.json'),
99
pt: require('./i18n/pt.json'),
1010
fr: require('./i18n/fr.json'),
1111
eo: require('./i18n/eo.json'),
12-
it: require('./i18n/it.json')
12+
it: require('./i18n/it.json'),
13+
vi: require('./i18n/vi.json'),
1314
};
1415
exports.i18n = i18n;
1516

@@ -38,12 +39,13 @@ writtenNumber.defaults = {
3839

3940
function writtenNumber(n, options) {
4041
options = options || {};
41-
if(options.lang) options.lang = options.lang.toLowerCase();
4242
options = util.defaults(options, writtenNumber.defaults);
4343

4444
n = Math.round(+n);
4545

46-
var language = i18n[options.lang];
46+
var language = typeof options.lang === 'string'
47+
? i18n[options.lang]
48+
: options.lang;
4749
var scale = language.useLongScale ? longScale : shortScale;
4850
var unit;
4951

0 commit comments

Comments
 (0)