2014-09-03 3 views
24

Se faccio:Come si converte Stringa in Numero in base alla locale (opposto di .toLocaleString)?

var number = 3500; 
alert(number.toLocaleString("hi-IN")); 

mi metterò ३,५०० in Hindi.

Ma come posso riconvertire in 3500. voglio qualcosa di simile:

var str='३,५००'; 
alert(str.toLocaleNumber("en-US")); 

Quindi, che può dare 3500.

È possibile tramite javascript, jquery o qualsiasi altra libreria gratuita?

+0

Il risultato di 3500 in formato di 'it-it' sarebbe 3.500 – reporter

+2

numeri Bene sono solo numeri, in modo non c'è il numero 'en-US'. La vera domanda è come analizzare una stringa da una diversa localizzazione. Quindi qualcosa come "parseIntFromLocale'. Ci sono molte librerie per la formattazione e l'analisi dei numeri, sono sicuro che uno deve supportare l'hindi.Non penso che ci sia qualcosa di nativo in javascript per questo. –

+0

Non si prende cura dei separatori decimali e decimali, ma dare un'occhiata a [JavaScript non può convertire numeri hindi/arabi in variabili numeriche reali] (http://stackoverflow.com/q/17024985/1048572) – Bergi

risposta

1

Sfortunatamente dovrete affrontare la localizzazione manualmente. Ispirato da this answer, ho creato una funzione che andrà a sostituire manualmente i numeri Hindi:

function parseHindi(str) { 
    return Number(str.replace(/[०१२३४५६७८९]/g, function (d) { 
     return d.charCodeAt(0) - 2406; 
    }).replace(/[०१२३४५६७८९]/g, function (d) { 
     return d.charCodeAt(0) - 2415; 
    })); 
} 

alert(parseHindi("३५००")); 

Fiddle qui: http://jsfiddle.net/yyxgxav4/

+0

Grazie mille. Ma sono in una situazione in cui devo convertire i numeri in qualsiasi lingua in inglese, dal momento che la mia applicazione deve supportare tutte le possibili culture. – user2754545

+1

Dovrai farlo uno alla volta, quindi per le lingue con caratteri non latini. Ho lavorato su molti progetti localizzati e sfortunatamente non esiste un "traduttore universale". – denisol

1

Si può provare questo fuori

function ConvertDigits(input, source, target) { 
var systems = { 
    arabic: 48, english: 48, tamil: 3046, kannada: 3302, telugu: 3174, hindi: 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 ; i < input.length; 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(""); 

}

var res = ConvertDigits ('12345678 9', 'hindi', 'inglese');

ho presa da here Se avete bisogno di una cosa jQuery quindi si prega di try this link

+0

Non penso che questo gestisca i vari modi dipendenti dalla localizzazione per eseguire separatori di migliaia o lakh/crore, che è molto più comune nei risultati di 'toLocaleString' rispetto a caratteri di cifre diverse. – hippietrail

4

Penso che si sta cercando qualcosa di simile:

https://github.com/jquery/globalize

link qui sopra vi porterà a git pagina del progetto. Questa è una libreria js fornita da Microsoft. Dovresti provarlo e provare ad usare il metodo formt di quel plugin. Se si vuole studiare questo plugin, ecco il link per lo stesso:

http://weblogs.asp.net/scottgu/jquery-globalization-plugin-from-microsoft

Spero che questo è quello che stai cercando e risolverà il problema al più presto. Se non funziona, fammi sapere.

+0

Globalize è fantastico ed è il modo migliore per farlo. Vedi [esempio di utilizzo qui] (https://stackoverflow.com/a/38822356/675721) –

1

Utilizzare Globalize library.

Installarlo

npm install globalize cldr-data --save

poi

var cldr = require("cldr-data"); 
var Globalize = require("globalize"); 

Globalize.load(cldr("supplemental/likelySubtags")); 
Globalize.load(cldr("supplemental/numberingSystems")); 
Globalize.load(cldr("supplemental/currencyData")); 

//replace 'hi' with appropriate language tag 
Globalize.load(cldr("main/hi/numbers")); 
Globalize.load(cldr("main/hi/currencies")); 

//You may replace the above locale-specific loads with the following line, 
// which will load every type of CLDR language data for every available locale 
// and may consume several hundred megs of memory! 
//Use with caution. 
//Globalize.load(cldr.all()); 

//Set the locale 
//We use the extention u-nu-native to indicate that Devanagari and 
// not Latin numerals should be used. 
// '-u' means extension 
// '-nu' means number 
// '-native' means use native script 
//Without -u-nu-native this example will not work 
//See 
// https://en.wikipedia.org/wiki/IETF_language_tag#Extension_U_.28Unicode_Locale.29 
// for more details on the U language code extension 
var hindiGlobalizer = Globalize('hi-IN-u-nu-native'); 

var parseHindiNumber = hindiGlobalizer.numberParser(); 
var formatHindiNumber = hindiGlobalizer.numberFormatter(); 
var formatRupeeCurrency = hindiGlobalizer.currencyFormatter("INR"); 

console.log(parseHindiNumber('३,५००')); //3500 
console.log(formatHindiNumber(3500)); //३,५०० 
console.log(formatRupeeCurrency(3500)); //₹३,५००.०० 

https://github.com/codebling/globalize-example

Problemi correlati