久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

JavaScript 中的區域感知數字轉換

Locale aware number conversion in JavaScript(JavaScript 中的區域感知數字轉換)
本文介紹了JavaScript 中的區域感知數字轉換的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

是否有 JQuery 插件 可用于促進 NUMBER 本地化?也就是說,插件應該將數字翻譯成它們的本地字形.

<上一頁>阿拉伯語 |???? |1234印度語(泰盧固語/印地語) |?????/????? |12345

PS:我的要求是數字轉換,而不是格式化.

解決方案

您可以使用像這樣的簡單函數來翻譯來自阿拉伯數字:

function translateNumerals(input, target) {變種系統 = {梵文:2406,泰米爾文:3046,卡納達文:3302,泰盧固語:3174,馬拉地語:2406,馬拉雅拉姆語:3430,oriya: 2918, gurmukhi: 2662, nagari: 2534, 古吉拉特語: 2790},zero = 48,//阿拉伯零的字符代碼九 = 57,//阿拉伯九的字符代碼offset = (systems[target.toLowerCase()] || zero) - 零,輸出 = input.toString().split(""),我, l = 輸出.長度, cc;對于 (i = 0; i < l; i++) {cc = 輸出[i].charCodeAt(0);如果 (cc >= 零 && cc <= 九) {輸出[i] = String.fromCharCode(cc + offset);}}返回 output.join("");}

然后這樣稱呼它

translateNumerals(12345, "Telugu")//"?????"translateNumerals(12345, "梵文")//"?????"translateNumerals("foo", "Devanagari")//"foo"

阿拉伯數字的翻譯同樣簡單.它只需要多一點管道.

上述函數知道任何目標系統中零的 charCode,并進行一些簡單的數學運算,將阿拉伯數字逐個字符轉換為該系統.

反向函數需要檢查輸入的每個字符.如果它落在任何源系統的 charCode 范圍(即相應的零 + 9 的 charCode),它就知道所需的偏移量.減去偏移量將使您進入阿拉伯語范圍.這很簡單,我會留給你.

<小時>

編輯#1:既然你提到了jQuery,上面可以做成這樣的插件:

jQuery.fn.extend({textTranslateNumerals: (function () {var translateNumerals = 函數(輸入,目標){//上面的函數};返回函數(目標){//對于每個選定的元素...返回 this.each(function () {//...查看每個子節點并$(this).contents().each(function () {//...翻譯文本節點,遞歸成元素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) {變種系統 = {阿拉伯語:48,梵文:2406,泰米爾語:3046,卡納達語:3302,泰盧固語:3174,馬拉地語:2406,馬拉雅拉姆語:3430,奧里亞語:2918,古爾穆基語:2662,納加里語:2534,古吉拉特語:2790,},輸出 = [],偏移量 = 0,零 = 0,九 = 0,字符 = 0;源 = source.toLowerCase();目標 = target.toLowerCase();if ( !(系統中的源 && 系統中的目標)||輸入 == 空||typeof 輸入 == "未定義" ||typeof 輸入 == "對象" ) {返回輸入;}輸入 = input.toString();偏移量 = 系統 [目標] - 系統 [源];零 = 系統 [來源];九 = 系統[來源] + 9;for (var i=0, l=input.length; i

示例輸出

translateNumerals("0123456789", "arabic", "malayalam")//"??????????"translateNumerals("??????????", "馬拉雅拉姆語", "阿拉伯語")//"0123456789"translateNumerals("??????????", "malayalam", "kannada")//"??????????"translateNumerals("??????????", "kannada", "nagari")//"??????????"translateNumerals("??????????", "kannada", "gujarati")//"??????????"translateNumerals("USD 13.56", "arabic", "nagari")//"USD ??.??"

Is there a JQuery Plugin available that facilitates NUMBER LOCALIZATION ? That is , the plugin should translate numerals into their local glyphs.

Arabic               |     ????      |   1234

Indic (Telugu/Hindi) |  ?????/?????   |  12345

PS : My requirement is number CONVERSION , not formatting .

解決方案

You could use a simple function like this one for the translation from Arabic numerals:

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("");
}

And call it like this

translateNumerals(12345, "Telugu")      // "?????"
translateNumerals(12345, "Devanagari")  // "?????"
translateNumerals("foo", "Devanagari")  // "foo"

The translation to Arabic numerals is equally simple. It requires just a little more plumbing.

The above function knows the charCode of the Zero in any target system and does some simple math to do a character-by-character conversion from Arabic numerals to that system.

A reverse function would need to check each character of the input. If it falls the charCode range of any source system (i.e. the charCode of the respective Zero + 9) it knows the required offset. Subtracting the offset will get you into the Arabic range. This is pretty trivial and I'll leave it to you.


EDIT #1: Since you mentioned jQuery, the above could be made into a plugin like this:

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);
                    }
                });
            });
        };
    })()
});


EDIT #2: FWIW, here is a function that can convert from any source system into any target system:

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("");
}

Sample outputs

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 中的區域感知數字轉換的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

How to fix BrowserWindow is not a constructor error when creating child window in Electron renderer process(在 Electron 渲染器進程中創建子窗口時如何修復 BrowserWindow 不是構造函數錯誤) - IT屋-程序員軟件開發技術
mainWindow.loadURL(quot;https://localhost:3000/quot;) show white screen on Electron app(mainWindow.loadURL(https://localhost:3000/) 在 Electron 應用程序上顯示白屏)
Electron webContents executeJavaScript : Cannot execute script on second on loadURL(Electron webContents executeJavaScript:無法在第二個 loadURL 上執行腳本)
how to use electron browser window inside components in angular-cli?(如何在angular-cli的組件內使用電子瀏覽器窗口?)
ElectronJS - sharing redux store between windows?(ElectronJS - 在 Windows 之間共享 redux 存儲?)
How to access camera/webcamera inside electron app?(如何在電子應用程序中訪問相機/網絡攝像頭?)
主站蜘蛛池模板: 成年人精品视频 | 精品一区二区不卡 | 国产精品久久久久久久久久久久 | 少妇精品久久久久久久久久 | 一级欧美一级日韩片 | 国产精品美女久久久久久久网站 | 成人午夜网 | 毛片免费在线 | 中文字幕亚洲在线 | a国产一区二区免费入口 | 少妇无套高潮一二三区 | 伊人电影院av | 国产一级一级毛片 | 成人在线视频免费观看 | 国产 91 视频 | 在线国产一区二区三区 | 欧美精品乱码99久久影院 | 国产精品久久久久久久久久久久久久 | 精品中文字幕一区二区 | 国产精品一级在线观看 | 欧美精品一区二区三区在线播放 | 五月婷婷在线播放 | 久久久久国产一级毛片高清网站 | 精品国产精品三级精品av网址 | 亚洲天堂男人的天堂 | 在线看日韩 | 亚洲精品久久久一区二区三区 | 成人在线免费观看视频 | 欧美激情在线精品一区二区三区 | 欧美激情精品久久久久久 | 天天爽夜夜爽精品视频婷婷 | 亚洲视频中文字幕 | 日韩成人高清在线 | 综合精品| 国产福利网站 | 国产精品福利一区二区三区 | 男女下面一进一出网站 | 国产中文 | 国产美女免费视频 | 日本国产高清 | 97av视频|