rosaenlg-n2words
Version:
Convert numbers to words, in multiple languages
286 lines (279 loc) • 11.6 kB
JavaScript
// Copyright Wael TELLAT
// SPDX-License-Identifier: MIT
import N2WordsBase from '../classes/N2WordsBase.mjs';
export default function () {
N2WordsBase.call(this);
this.negative_word = 'eksi';
this.separator_word = 'virgül';
this.ZERO = 'sıfır';
this.space_separator = '';
this.precision = 2;
this.splitnum = (value) => {
const float_digits = JSON.stringify(value * 10 ** this.precision);
if (parseInt(value) != 0) {
this.integers_to_read = [
JSON.stringify(parseInt(value)),
float_digits.slice(float_digits.length - this.precision, float_digits.length),
];
} else {
this.integers_to_read = [
'0',
'0'.repeat(this.precision - float_digits.length) +
float_digits.slice(float_digits.length - this.precision, float_digits.length),
];
}
if (this.integers_to_read[0].length % 3 > 0) {
this.total_triplets_to_read = Math.floor(this.integers_to_read[0].length / 3) + 1;
} else if (this.integers_to_read[0].length % 3 == 0) {
this.total_triplets_to_read = Math.floor(this.integers_to_read[0].length / 3);
}
this.total_digits_outside_triplets = this.integers_to_read[0].length % 3;
const okunacak = this.integers_to_read[0].split('').reverse();
this.order_of_last_zero_digit = 0;
let found = 0;
for (let i = 0; i < okunacak.length; i++) {
if (parseInt(okunacak[i]) == 0 && found == 0) {
this.order_of_last_zero_digit = i + 1;
} else {
found = 1;
}
}
};
this.CARDINAL_ONES = {
1: 'bir',
2: 'iki',
3: 'üç',
4: 'dört',
5: 'beş',
6: 'altı',
7: 'yedi',
8: 'sekiz',
9: 'dokuz',
};
this.CARDINAL_TENS = {
1: 'on',
2: 'yirmi',
3: 'otuz',
4: 'kırk',
5: 'elli',
6: 'altmış',
7: 'yetmiş',
8: 'seksen',
9: 'doksan',
};
this.HUNDREDS = {
2: 'iki',
3: 'üç',
4: 'dört',
5: 'beş',
6: 'altı',
7: 'yedi',
8: 'sekiz',
9: 'dokuz',
};
this.CARDINAL_HUNDRED = ['yüz', ''];
this.CARDINAL_TRIPLETS = {
1: 'bin',
2: 'milyon',
3: 'milyar',
4: 'trilyon',
5: 'katrilyon',
6: 'kentilyon',
};
this.integers_to_read = [];
this.total_triplets_to_read = 0;
this.total_digits_outside_triplets = 0;
this.order_of_last_zero_digit = 0;
this.toCardinal = (value) => {
if (parseInt(value) == 0) {
return 'sıfır';
}
this.splitnum(value);
let wrd = '';
if (this.order_of_last_zero_digit >= this.integers_to_read[0].length) {
return wrd;
}
if (this.total_triplets_to_read == 1) {
if (this.total_digits_outside_triplets == 2) {
if (this.order_of_last_zero_digit == 1) {
wrd += this.CARDINAL_TENS[this.integers_to_read[0][0]] || '';
return wrd;
}
if (this.order_of_last_zero_digit == 0) {
wrd += this.CARDINAL_TENS[this.integers_to_read[0][0]] || '';
wrd += this.CARDINAL_ONES[this.integers_to_read[0][1]] || '';
}
return wrd;
}
if (this.total_digits_outside_triplets == 1) {
if (this.order_of_last_zero_digit == 0) {
wrd += this.CARDINAL_ONES[this.integers_to_read[0][0]] || '';
return wrd;
}
}
if (this.total_digits_outside_triplets == 0) {
if (this.order_of_last_zero_digit == 2) {
wrd += this.HUNDREDS[this.integers_to_read[0][0]] || '';
wrd += this.CARDINAL_HUNDRED[0];
return wrd;
}
if (this.order_of_last_zero_digit == 1) {
wrd += this.HUNDREDS[this.integers_to_read[0][0]] || '';
wrd += this.CARDINAL_HUNDRED[0];
wrd += this.CARDINAL_TENS[this.integers_to_read[0][1]] || '';
return wrd;
}
if (this.order_of_last_zero_digit == 0) {
wrd += this.HUNDREDS[this.integers_to_read[0][0]] || '';
wrd += this.CARDINAL_HUNDRED[0];
wrd += this.CARDINAL_TENS[this.integers_to_read[0][1]] || '';
wrd += this.CARDINAL_ONES[this.integers_to_read[0][2]] || '';
return wrd;
}
}
}
if (this.total_triplets_to_read >= 2) {
if (this.total_digits_outside_triplets == 2) {
if (this.order_of_last_zero_digit == this.integers_to_read[0].length - 1) {
wrd += this.CARDINAL_TENS[this.integers_to_read[0][0]] || '';
wrd += this.CARDINAL_TRIPLETS[this.total_triplets_to_read - 1];
return wrd;
}
if (this.order_of_last_zero_digit == this.integers_to_read[0].length - 2) {
wrd += this.CARDINAL_TENS[this.integers_to_read[0][0]] || '';
wrd += this.CARDINAL_ONES[this.integers_to_read[0][1]] || '';
wrd += this.CARDINAL_TRIPLETS[this.total_triplets_to_read - 1];
return wrd;
}
if (this.order_of_last_zero_digit < this.integers_to_read[0].length - 2) {
wrd += this.CARDINAL_TENS[this.integers_to_read[0][0]] || '';
wrd += this.CARDINAL_ONES[this.integers_to_read[0][1]] || '';
wrd += this.CARDINAL_TRIPLETS[this.total_triplets_to_read - 1];
}
}
if (this.total_digits_outside_triplets == 1) {
if (this.order_of_last_zero_digit == this.integers_to_read[0].length - 1) {
if (!(this.total_triplets_to_read == 2 && this.integers_to_read[0][0] == '1')) {
wrd += this.CARDINAL_ONES[this.integers_to_read[0][0]] || '';
}
wrd += this.CARDINAL_TRIPLETS[this.total_triplets_to_read - 1];
return wrd;
}
if (this.order_of_last_zero_digit < this.integers_to_read[0].length - 1) {
if (!(this.total_triplets_to_read == 2 && this.integers_to_read[0][0] == '1')) {
wrd += this.CARDINAL_ONES[this.integers_to_read[0][0]] || '';
}
wrd += this.CARDINAL_TRIPLETS[this.total_triplets_to_read - 1];
}
}
if (this.total_digits_outside_triplets == 0) {
if (this.order_of_last_zero_digit == this.integers_to_read[0].length - 1) {
wrd += this.HUNDREDS[this.integers_to_read[0][0]] || '';
wrd += this.CARDINAL_HUNDRED[0];
wrd += this.CARDINAL_TRIPLETS[this.total_triplets_to_read - 1];
return wrd;
}
if (this.order_of_last_zero_digit == this.integers_to_read[0].length - 2) {
wrd += this.HUNDREDS[this.integers_to_read[0][0]] || '';
wrd += this.CARDINAL_HUNDRED[0];
wrd += this.CARDINAL_TENS[this.integers_to_read[0][1]] || '';
wrd += this.CARDINAL_TRIPLETS[this.total_triplets_to_read - 1];
return wrd;
}
if (this.order_of_last_zero_digit == this.integers_to_read[0].length - 3) {
wrd += this.HUNDREDS[this.integers_to_read[0][0]] || '';
wrd += this.CARDINAL_HUNDRED[0];
wrd += this.CARDINAL_TENS[this.integers_to_read[0][1]] || '';
wrd += this.CARDINAL_ONES[this.integers_to_read[0][2]] || '';
wrd += this.CARDINAL_TRIPLETS[this.total_triplets_to_read - 1];
return wrd;
}
if (this.order_of_last_zero_digit < this.integers_to_read[0].length - 3) {
wrd += this.HUNDREDS[this.integers_to_read[0][0]] || '';
wrd += this.CARDINAL_HUNDRED[0];
wrd += this.CARDINAL_TENS[this.integers_to_read[0][1]] || '';
if (!(this.total_triplets_to_read == 2 && this.integers_to_read[0][2] == '1')) {
wrd += this.CARDINAL_ONES[this.integers_to_read[0][2]] || '';
}
wrd += this.CARDINAL_TRIPLETS[this.total_triplets_to_read - 1];
}
}
for (let i = this.total_triplets_to_read - 1; i > 0; i--) {
const reading_triplet_order = this.total_triplets_to_read - i;
let last_read_digit_order;
if (this.total_digits_outside_triplets == 0) {
last_read_digit_order = reading_triplet_order * 3;
} else {
last_read_digit_order = (reading_triplet_order - 1) * 3 + this.total_digits_outside_triplets;
}
if (this.integers_to_read[0].slice(last_read_digit_order, last_read_digit_order + 3) != '000') {
if (this.integers_to_read[0][last_read_digit_order] != '0') {
wrd += this.HUNDREDS[this.integers_to_read[0][last_read_digit_order]] || '';
if (this.order_of_last_zero_digit == this.integers_to_read[0].length - last_read_digit_order - 1) {
if (i == 1) {
wrd += this.CARDINAL_HUNDRED[0];
return wrd;
} else if (i > 1) {
wrd += this.CARDINAL_HUNDRED[0];
wrd += this.CARDINAL_TRIPLETS[i - 1];
return wrd;
}
} else {
wrd += this.CARDINAL_HUNDRED[0];
}
}
if (this.integers_to_read[0][last_read_digit_order + 1] != '0') {
if (this.order_of_last_zero_digit == this.integers_to_read[0].length - last_read_digit_order - 2) {
if (i == 1) {
wrd += this.CARDINAL_TENS[this.integers_to_read[0][last_read_digit_order + 1]] || '';
return wrd;
} else if (i > 1) {
wrd += this.CARDINAL_TENS[this.integers_to_read[0][last_read_digit_order + 1]] || '';
wrd += this.CARDINAL_TRIPLETS[i - 1];
return wrd;
}
} else {
wrd += this.CARDINAL_TENS[this.integers_to_read[0][last_read_digit_order + 1]] || '';
}
}
if (this.integers_to_read[0][last_read_digit_order + 2] != '0') {
if (this.order_of_last_zero_digit == this.integers_to_read[0].length - last_read_digit_order - 3) {
if (i == 1) {
wrd += this.CARDINAL_ONES[this.integers_to_read[0][last_read_digit_order + 2]] || '';
return wrd;
}
if (i == 2) {
if (this.integers_to_read[0].slice(last_read_digit_order, last_read_digit_order + 2) != '00') {
wrd += this.CARDINAL_ONES[this.integers_to_read[0][last_read_digit_order + 2]] || '';
} else if (this.integers_to_read[0][last_read_digit_order + 2] != '1') {
wrd += this.CARDINAL_ONES[this.integers_to_read[0][last_read_digit_order + 2]] || '';
}
wrd += this.CARDINAL_TRIPLETS[i - 1];
return wrd;
}
if (i > 2) {
wrd += this.CARDINAL_ONES[this.integers_to_read[0][last_read_digit_order + 2]] || '';
wrd += this.CARDINAL_TRIPLETS[i - 1];
return wrd;
}
} else {
if (this.integers_to_read[0].slice(last_read_digit_order, last_read_digit_order + 2) != '00') {
wrd += this.CARDINAL_ONES[this.integers_to_read[0][last_read_digit_order + 2]] || '';
} else {
if (i == 2) {
if (this.integers_to_read[0].slice(last_read_digit_order, last_read_digit_order + 2) != '00') {
wrd += this.CARDINAL_ONES[this.integers_to_read[0][last_read_digit_order + 2]] || '';
} else if (this.integers_to_read[0][last_read_digit_order + 2] != '1') {
wrd += this.CARDINAL_ONES[this.integers_to_read[0][last_read_digit_order + 2]] || '';
}
}
}
}
}
wrd += this.CARDINAL_TRIPLETS[i - 1];
}
}
}
return wrd;
};
}