gpt4 book ai didi

javascript - JavaScript 中的区域设置感知数字转换

转载 作者:数据小太阳 更新时间:2023-10-29 04:04:45 27 4
gpt4 key购买 nike

是否有可用的JQuery 插件来促进NUMBER LOCALIZATION?也就是说,插件应该将数字转换成它们的本地字形。

Arabic               |     ٤٣٢١      |   1234Indic (Telugu/Hindi) |  ౧౨౩౪౫/१२३४५   |  12345

PS:我的要求是数字转换,而不是格式化。

最佳答案

您可以使用像这样的简单函数来翻译阿拉伯数字:

function translateNumerals(input, target) {
var systems = {
devanagari: 2406, tamil: 3046, kannada: 3302,
telugu: 3174, marathi: 2406, malayalam: 3430,
oriya: 2918, gurmukhi: 2662, nagari: 2534, gujarati: 2790
},
zero = 48, // char code for Arabic zero
nine = 57, // char code for Arabic nine
offset = (systems[target.toLowerCase()] || zero) - zero,
output = input.toString().split(""),
i, l = output.length, cc;

for (i = 0; i < l; i++) {
cc = output[i].charCodeAt(0);
if (cc >= zero && cc <= nine) {
output[i] = String.fromCharCode(cc + offset);
}
}
return output.join("");
}

然后这样调用它

translateNumerals(12345, "Telugu")      // "౧౨౩౪౫"
translateNumerals(12345, "Devanagari") // "१२३४५"
translateNumerals("foo", "Devanagari") // "foo"

阿拉伯数字的翻译同样简单。它只需要多一点管道。

上述函数知道任何目标系统中零的 charCode,并进行一些简单的数学运算以逐个字符地从阿拉伯数字转换为该系统。

反向函数需要检查输入的每个字符。如果它落在任何源系统的 charCode 范围(即相应零 + 9 的 charCode),它就知道所需的偏移量。减去偏移量将使您进入阿拉伯语范围。这是非常微不足道的,我会留给你。


编辑#1:既然你提到了 jQuery,上面的内容可以做成这样的插件:

jQuery.fn.extend({
textTranslateNumerals: (function () {
var translateNumerals = function (input, target) {
// the above function
};
return function (target) {
// for each selected element...
return this.each(function () {
// ...look at each child node and
$(this).contents().each(function () {
// ...translate text nodes, recurse into elements
if (this.nodeType === this.TEXT_NODE) {
$(this).text(translateNumerals($(this).text(), target));
} else if (this.nodeType === this.ELEMENT_NODE) {
$(this).textTranslateNumerals(target);
}
});
});
};
})()
});

编辑 #2: FWIW,这是一个可以从任何源系统转换为任何目标系统的函数:

function translateNumerals(input, source, target) {
var systems = {
arabic: 48,
devanagari: 2406, tamil: 3046, kannada: 3302, telugu: 3174, marathi: 2406,
malayalam: 3430, oriya: 2918, gurmukhi: 2662, nagari: 2534, gujarati: 2790,
},
output = [], offset = 0, zero = 0, nine = 0, char = 0;

source = source.toLowerCase();
target = target.toLowerCase();

if ( !(source in systems && target in systems)
|| input == null
|| typeof input == "undefined" || typeof input == "object" ) {
return input;
}

input = input.toString();
offset = systems[target] - systems[source];
zero = systems[source];
nine = systems[source] + 9;

for (var i=0, l=input.length; i<l; i++) {
var char = input.charCodeAt(i);

if (char >= zero && char <= nine) {
output.push( String.fromCharCode(char + offset) );
} else {
output.push( input[i] );
}
}
return output.join("");
}

示例输出

translateNumerals("0123456789", "arabic", "malayalam")  // "൦൧൨൩൪൫൬൭൮൯"
translateNumerals("൦൧൨൩൪൫൬൭൮൯", "malayalam", "arabic") // "0123456789"
translateNumerals("൦൧൨൩൪൫൬൭൮൯", "malayalam", "kannada") // "೦೧೨೩೪೫೬೭೮೯"
translateNumerals("೦೧೨೩೪೫೬೭೮೯", "kannada", "nagari") // "০১২৩৪৫৬৭৮৯"
translateNumerals("೦೧೨೩೪೫೬೭೮೯", "kannada", "gujarati") // "૦૧૨૩૪૫૬૭૮૯"
translateNumerals("USD 13.56", "arabic", "nagari") // "USD ১৩.৫৬"

关于javascript - JavaScript 中的区域设置感知数字转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8091373/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com