एक ब्राउज़र के साथ, मुझे कैसे पता चलेगा कि ऑपरेटिंग सिस्टम किस दशमलव विभाजक का उपयोग करता है?


82

मैं एक वेब एप्लिकेशन विकसित कर रहा हूं।

मुझे कुछ दशमलव डेटा को सही ढंग से प्रदर्शित करने की आवश्यकता है ताकि इसे एक निश्चित GUIएप्लिकेशन में कॉपी और पेस्ट किया जा सके जो मेरे नियंत्रण में नहीं है।

जीयूआई एप्लिकेशन स्थानीय संवेदनशील है और यह केवल सही दशमलव विभाजक को स्वीकार करता है जो सिस्टम में सेट है।

मैं दशमलव विभाजक से अनुमान लगा सकता हूं Accept-Languageऔर अनुमान 95% मामलों में सही होगा, लेकिन कभी-कभी यह विफल हो जाता है।

क्या सर्वर साइड पर इसे करने का कोई तरीका है (अधिमानतः, ताकि मैं आंकड़े एकत्र कर सकूं), या क्लाइंट की तरफ?

अपडेट करें:

कार्य का पूरा बिंदु यह स्वचालित रूप से कर रहा है।

वास्तव में, यह वेब एक विरासत जीयूआई का एक ऑनलाइन इंटरफ़ेस है, जो फ़ॉर्म को सही ढंग से भरने में मदद करता है।

जिस तरह के उपयोगकर्ता इसका उपयोग करते हैं, उन्हें ज्यादातर इस बात का अंदाजा नहीं होता कि दशमलव विभाजक क्या है।

Accept-Languageसमाधान कार्यान्वित किया जाता है और काम करता है, लेकिन मैं इसे बेहतर बनाना चाहते हैं।

Update2:

मुझे एक बहुत ही विशिष्ट सेटिंग को पुनर्प्राप्त करने की आवश्यकता है: दशमलव विभाजक में सेट Control Panel / Regional and Language Options / Regional Options / Customize

मैं चार प्रकार के ऑपरेटिंग सिस्टमों से निपटता हूं:

  1. एक डीएस (80%) के रूप में अल्पविराम के साथ रूसी विंडोज।
  2. डीएस (15%) के रूप में एक अवधि के साथ अंग्रेजी विंडोज।
  3. खराब लिखित अंग्रेजी अनुप्रयोगों के काम (4%) करने के लिए एक डीएस के रूप में रूसी विंडोज।
  4. अंग्रेजी विंडोज़ अल्पविराम के साथ एक डीएस के रूप में खराब लिखे गए रूसी अनुप्रयोगों को काम करने के लिए (1%)।

सभी 100% ग्राहक रूस में हैं और विरासत आवेदन रूसी शासन द्वारा जारी किए गए रूपों से संबंधित है, इसलिए एक देश के लिए पूछने से रूसी संघ का 100% उत्पादन होगा, और जियोआईपी 80% रूसी संघ और 20% अन्य (गलत) का उत्पादन करेगा जवाब।

जवाबों:


129

यहां एक साधारण जावास्क्रिप्ट फ़ंक्शन है जो इस जानकारी को वापस करेगा। फ़ायरफ़ॉक्स, IE6 और IE7 में परीक्षण किया गया। मुझे नियंत्रण कक्ष / क्षेत्रीय और भाषा विकल्प / क्षेत्रीय विकल्प / अनुकूलित के तहत सेटिंग में हर परिवर्तन के बीच अपने ब्राउज़र को बंद और पुनः आरंभ करना था। हालांकि, यह न केवल अल्पविराम और अवधि, बल्कि विषम चीजों को भी उठाता था, जैसे अक्षर "ए"।

function whatDecimalSeparator() {
    var n = 1.1;
    n = n.toLocaleString().substring(1, 2);
    return n;
}

क्या यह मदद करता है?


3
इसने मेरे लिए फ़ायरफ़ॉक्स और IE8 में काम किया, लेकिन Google Chrome में नहीं। मेरे पास ओपेरा नहीं है।
मैथ्यू टैल्बर्ट

@ मैथ्यू - मेरे लिए क्रोम में काम करता था। @Quassnoi - मुझे नहीं लगता कि आखिरी टिप्पणी का क्या मतलब है। यदि वह कह रहा है कि फ़ंक्शन काम नहीं करता है, तो इससे क्या फर्क पड़ता है कि व्यक्ति क्या जानता है?
माचिस

ध्यान रहे! Chrome में toLocaleString केवल ठीक से काम करता है अगर सीधे किसी नंबर पर कॉल किया जाता है। मेरे सिस्टम पर: [1.1,1.2] .toLocaleString () -> "1.1,1.2" | (1.1) .toLocaleString () -> "1,1"
टार्ने क्लेमैन

1
फंक्शन लोकेल पर फेल है जो उनके DecimalSeparator(उदाहरण के लिए ,,) एक से अधिक कैरेक्टर का उपयोग करते हैं । विंडोज LOCALE_SDECIMALएक दशमलव विभाजक को तीन वर्णों तक सम्‍मिलित करने की अनुमति देता है। (यही कारण है कि यह मेरे पीसी पर विफल रहता है)। Accept-Languageउस मामले में ब्राउज़र का उपयोग करने के लिए बेहतर है । अभी भी अपने निर्दिष्ट करने की क्षमता के लिए खाते में नहीं है कौन सा DecimalSeparatorजैसे\o/
इयान बॉयड

4
@IanBoyd दशमलव विभाजक के रूप में एक से अधिक वर्णों की स्ट्रिंग वाले स्थानों के बारे में सही है, लेकिन n = /^1(.+)1$/.exec(n.toLocaleString())[1]ऐसा करेगा, और Accept-Languageहेडर का उपयोग करने की तुलना में आसान है ।
यज्ञमूर्ति

15

वर्तमान या किसी दिए गए स्थान के लिए विभाजकों को पुनः प्राप्त करना संभव है Intl.NumberFormat#formatToParts

function getDecimalSeparator(locale) {
    const numberWithDecimalSeparator = 1.1;
    return Intl.NumberFormat(locale)
        .formatToParts(numberWithDecimalSeparator)
        .find(part => part.type === 'decimal')
        .value;
}

यह केवल Intl एपीआई का समर्थन करने वाले ब्राउज़रों के लिए काम करता है । अन्यथा इसके लिए एक Intl पॉलीफिल की आवश्यकता होती है

उदाहरण:

> getDecimalSeparator()
"."
> getDecimalSeparator('fr-FR')
","

बक्शीश:

हम इसे दिए गए स्थान के दशमलव या समूह विभाजक को पुनः प्राप्त करने के लिए बढ़ा सकते हैं :

function getSeparator(locale, separatorType) {
        const numberWithGroupAndDecimalSeparator = 1000.1;
        return Intl.NumberFormat(locale)
            .formatToParts(numberWithGroupAndDecimalSeparator)
            .find(part => part.type === separatorType)
            .value;
    }

उदाहरण:

> getSeparator('en-US', 'decimal')
"."
> getSeparator('en-US', 'group')
","
> getSeparator('fr-FR', 'decimal')
","
> getSeparator('fr-FR', 'group')
" "

वर्तमान में इस तरह की जानकारी प्राप्त करने का यह सबसे उचित तरीका है। BTW IntlIE 11 में भी समर्थित है: caniuse.com/#feat=internationalization
कॉन्स्टेंटिन

3
यह IE 11 में काम नहीं करेगा क्योंकि प्रारूपटार्ट्स समर्थित नहीं है।
गजेंद्र कुमार

11

उपयोगकर्ता से पूछें, अनुमान न करें। अपने वेब एप्लिकेशन में इसके लिए एक सेटिंग रखें।

जोड़ने के लिए संपादित:

मुझे लगता है कि 95% समय, डिफ़ॉल्ट सेटिंग का अनुमान लगाना ठीक है, ठीक है। मेरा मतलब यह था कि उपयोगकर्ता को अभी भी जो भी सॉफ़्टवेयर बनाया गया है उसका अनुमान लगाने में सक्षम होना चाहिए। मैं पहले भी कई बार निराश हो चुका हूं जब कोई सॉफ्टवेयर बहुत ज्यादा स्मार्ट होने की कोशिश करता है और उसे सही नहीं होने देता।


मजेदार, यह मेरा पहला विचार था, लेकिन मैं ओवरबोर्ड देख रहा था कि यह स्वचालित रूप से कैसे किया जाता है ...
PhiLho

1
बुरा विचार, शायद एक बैकअप के रूप में छोड़कर। अधिकांश उपयोगकर्ता संस्कृति-असंवेदनशील हैं और यह भी समझ नहीं पाएंगे कि "दशमलव विभाजक" क्या है बिना स्पष्टीकरण के (और तब कुछ ऐसा सेट करने के लिए मजबूर किया जाएगा जिसे "हर कोई जानता है")।
माइकल बोर्गवर्ड

2
@ आईआल्टो: यह लगभग एक सवाल के रूप में महान होगा "डेटाबेस आकार (अनुशंसित) या खोज क्षमताओं को अधिकतम करें?"
क्वासोई जूल

खैर, यह बहुत मुश्किल नहीं होना चाहिए। बस उपयोगकर्ता को देश का चयन करने दें और फिर उसके अनुसार desicmal विभाजक और अन्य विकल्पों का चयन करें।

7
function getDecimalSeparator() {
    //fallback  
       var decSep = ".";

        try {
            // this works in FF, Chrome, IE, Safari and Opera
            var sep = parseFloat(3/2).toLocaleString().substring(1,2);
            if (sep === '.' || sep === ',') {
                decSep = sep;
            }
        } catch(e){}

        return decSep;
    }

1
"करने के लिए"। कुछ अस्पष्ट ब्राउज़रों के मामले में ... अन्य तरीकों से यह बहुत ज्यादा समान है ...
डॉ.ब्लॉक

7

क्यों नहीं

0.1.toLocaleString().replace(/\d/g, '')


2
शायद कुछ अजीब लोकेल अग्रणी शून्य को छोड़ दें? मैं बल्कि एक वहाँ है, बस यकीन है कि होना चाहिए।
जुआंगी जोर्डन

5

मैं एक्सेलर-लैंग्वेज से दशमलव विभाजक का अनुमान लगा सकता हूं और अनुमान 95% मामलों में सही होगा, लेकिन कभी-कभी यह विफल हो जाता है।

यह IMO कार्रवाई का सबसे अच्छा कोर्स है। विफलताओं को संभालने के लिए, इसे प्रदर्शन क्षेत्र के बगल में मैन्युअल रूप से सेट करने के लिए एक लिंक जोड़ें।


यह कैसे किया जाएगा? मैं समझता हूं कि आप इस github.com/dansingerman/jQuery-Browser-Language
Lime

@William: जिस एक्सेप्ट-लैंग्वेज की ओपी से बात होती है, वह ब्राउजर द्वारा भेजा गया एक HTTP हैडर है, जो सर्वर को बताता है कि यूजर क्या पसंद करता है, आमतौर पर ब्राउजर इंस्टॉलेशन या ओएस की भाषा।
माइकल बॉर्गवर्ड

4

अन्य लोगों के उत्तर का उपयोग करते हुए मैंने निम्नलिखित दशमलव और हजार विभाजक उपयोगिता कार्यों को संकलित किया:

var decimalSeparator = function() {
    return (1.1).toLocaleString().substring(1, 2);
};
var thousandSeparator = function() {
    return (1000).toLocaleString().substring(1, 2);
};

का आनंद लें!


हां, मैंने इस विधि का उपयोग उन ब्राउज़रों के लिए पॉलीफ़िल के रूप में किया है जो समर्थन नहीं करते हैं formatToParts(सफारी और IE)।
मार्को बोनासी

1
कुछ स्थान 10000 से नीचे के हजार विभाजकों का उपयोग नहीं करते हैं। उदाहरण के लिए(1000).toLocaleString("es-PE") # "1000"
मैडकॉल

1

मुझे लगता है कि आपको लोकेल सेटिंग देने के लिए जावास्क्रिप्ट पर निर्भर रहना होगा।
लेकिन जाहिरा तौर पर जेएस की इस जानकारी तक सीधी पहुंच नहीं है।
मुझे लगता है कि Dojo टूलकिट स्थानीय डेटाबेस को खोजने के लिए एक बाहरी डेटाबेस पर निर्भर करता है, हालांकि यह उदाहरण के लिए सेटिंग में बदलाव नहीं कर सकता है।
मेरे द्वारा देखा गया एक और वर्कअराउंड एक छोटा सा मूक जावा एप्लेट है जो सिस्टम से इस जानकारी को क्वेरी करता है, और जावा से इसे बाहर निकालने के लिए जावास्क्रिप्ट।
मैं अधिक जानकारी दे सकता हूं यदि आप नहीं जानते कि यह कैसे करना है (यदि आप इस जटिल मार्ग पर जाना चाहते हैं, तो निश्चित रूप से)।

[संपादित करें] इसलिए मैंने जावा में स्थानीयकरण समर्थन के अपने ज्ञान को अद्यतन किया ...
मूल रूप से जो मैंने सोचा था उसके विपरीत, आपके पास सीधे सीधे दशमलव विभाजक या हजार विभाजक वर्ण नहीं होंगे, जैसे आप लाइन विभाजक या पथ विभाजक के साथ करेंगे: बजाय जावा आपके द्वारा प्रदान की जाने वाली संख्या या तिथियों को प्रारूपित करने के लिए एपीआई प्रदान करता है।
किसी तरह, यह समझ में आता है: यूरोप में आप अक्सर संख्या के बाद मुद्रा प्रतीक रखते हैं, कुछ देशों (भारत!) में अंकों को अलग करने के लिए एक अधिक जटिल नियम है, आदि।

एक और बात: जावा सिस्टम से वर्तमान लोकेल को सही ढंग से ढूंढता है, लेकिन वहां से जानकारी नहीं लेता है (शायद उपरोक्त कारणों से)। इसके बजाय यह नियमों के अपने स्वयं के सेट का उपयोग करता है। इसलिए यदि आपके पास एक स्पैनिश लोकेल है जहां आपने दशमलव विभाजक को विस्मयादिबोधक चिह्न के साथ बदल दिया है, तो जावा इसका उपयोग नहीं करेगा (लेकिन शायद आपके आवेदन, वैसे भी ...)।

इसलिए मैं जावास्क्रिप्ट के लिए एक सेवा (कार्यों) को उजागर करने वाला एक एप्लेट लिख रहा हूं, जिससे वर्तमान स्थान पर संख्याओं को प्रारूपित किया जा सके। आप इसे इस तरह से उपयोग कर सकते हैं, जैसे कि जावास्क्रिप्ट का उपयोग करके ब्राउज़र पर संख्याओं को प्रारूपित करना। या आप इसे केवल कुछ नमूना संख्या के साथ फ़ीड कर सकते हैं और वहां से प्रतीकों को निकाल सकते हैं, उन्हें स्थानीय रूप से उपयोग कर सकते हैं या उन्हें सर्वर पर वापस खिला सकते हैं।

मैं अपने एप्लेट को समाप्त करता हूं और परीक्षण करता हूं और इसे जल्द ही पोस्ट करता हूं।


@PhiLho: जानकर अच्छा लगेगा। यह व्हाट्सएप एक तरह का हेल्प सिस्टम है, इसलिए कोई भी बदसूरत हैक करेगा, जब तक यह IE, फ़ायरफ़ॉक्स और ओपेरा पर चलता है, तब तक इसे सुरुचिपूर्ण होने की आवश्यकता नहीं है।
क्वासोई जूल

1

ठीक है, मेरे पास दिखाने के लिए कुछ है, एक तैयार उत्पाद की तुलना में अवधारणा का अधिक प्रमाण है, लेकिन सटीक विशिष्टताओं की कमी के कारण, मैं इसे इस तरह छोड़ देता हूं (या मैं इसे खत्म कर दूंगा)। मैं एक अलग संदेश में पोस्ट करता हूं क्योंकि यह थोड़ा लंबा होगा। मैं थोड़ा और अधिक jQuery का प्रयास करने का अवसर लिया ...

जावा कोड: GetLocaleInfo.java

import java.applet.*;
import java.util.Locale;
import java.text.*;

public class GetLocaleInfo extends Applet
{
  Locale loc;
  NumberFormat nf;
  NumberFormat cnf;
  NumberFormat pnf;

  // For running as plain application
  public static void main(String args[])
  {
    final Applet applet = new GetLocaleInfo();
    applet.init();
    applet.start();
  }

  public void init() // Applet is loaded
  {
    // Use current locale
    loc = Locale.getDefault();
    nf = NumberFormat.getInstance();
    cnf = NumberFormat.getCurrencyInstance();
    pnf = NumberFormat.getPercentInstance();
  }

  public void start() // Applet should start
  {
    // Following output goes to Java console
    System.out.println(GetLocaleInformation());
    System.out.println(nf.format(0.1));
    System.out.println(cnf.format(1.0));
    System.out.println(pnf.format(0.01));
  }

  public String GetLocaleInformation()
  {
    return String.format("Locale for %s: country=%s (%s / %s), lang=%s (%s / %s), variant=%s (%s)",
        loc.getDisplayName(),
        loc.getDisplayCountry(),
        loc.getCountry(),
        loc.getISO3Country(),

        loc.getDisplayLanguage(),
        loc.getLanguage(),
        loc.getISO3Language(),

        loc.getDisplayVariant(),
        loc.getVariant()
    );
  }

  public String FormatNumber(String number)
  {
    double value = 0;
    try
    {
      value = Double.parseDouble(number);
    }
    catch (NumberFormatException nfe)
    {
      return "!";
    }
    return nf.format(value);
  }

  public String FormatCurrency(String number)
  {
    double value = 0;
    try
    {
      value = Double.parseDouble(number);
    }
    catch (NumberFormatException nfe)
    {
      return "!";
    }
    return cnf.format(value);
  }

  public String FormatPercent(String number)
  {
    double value = 0;
    try
    {
      value = Double.parseDouble(number);
    }
    catch (NumberFormatException nfe)
    {
      return "!";
    }
    return pnf.format(value);
  }
}

उपरोक्त एप्लेट का उपयोग करके HTML पेज का एक उदाहरण: GetLocaleInfo.html

<!-- Header skipped for brevity -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js"></script>
<script type="text/javascript">
var applet;
$(document).ready(function()
{
  applet = document.getElementById('LocaleInfo');
  $('#Results').text(applet.GetLocaleInformation());
});
</script>
<script type="text/javascript">
function DoFormatting()
{
  $('table.toFormat').each(function()
  {
    var table = $(this);
    $('td', table).each(function(cellId)
    {
      var val = $(this);
      if (val.is('.number'))
      {
        val.text(applet.FormatNumber(val.text()));
      }
      else if (val.is('.currency'))
      {
        val.text(applet.FormatCurrency(val.text()));
      }
      else if (val.is('.percent'))
      {
        val.text(applet.FormatPercent(val.text()));
      }
    });
  });
}
</script>
</head>
<body>
  <div id="Container">
    <p>Page to demonstrate how JavaScript can get locale information from Java</p>
    <div id="AppletContainer">
      <object classid="java:GetLocaleInfo.class"
          type="application/x-java-applet" codetype="application/java"
          name="LocaleInfo" id="LocaleInfo" width="0" height="0">
        <param name="code" value="GetLocaleInfo"/>
        <param name="mayscript" value="true"/>
        <param name="scriptable" value="true"/>
        <p><!-- Displayed if object isn't supported -->
          <strong>This browser does not have Java enabled.</strong>
          <br>
          <a href="http://java.sun.com/products/plugin/downloads/index.html" title="Download Java plug-in">
          Get the latest Java plug-in here
          </a> (or enable Java support).
        </p>
      </object>
    </div><!-- AppletContainer -->
    <p>
    Click on the button to format the table content to the locale rules of the user.
    </p>
    <input type="button" name="DoFormatting" id="DoFormatting" value="Format the table" onclick="javascript:DoFormatting()"/>
    <div id="Results">
    </div><!-- Results -->
<table class="toFormat">
<caption>Synthetic View</caption>
<thead><tr>
<th>Name</th><th>Value</th><th>Cost</th><th>Discount</th>
</tr></thead>
<tbody>
<tr><td>Foo</td><td class="number">3.1415926</td><td class="currency">21.36</td><td class="percent">0.196</td></tr>
<tr><td>Bar</td><td class="number">159263.14</td><td class="currency">33</td><td class="percent">0.33</td></tr>
<tr><td>Baz</td><td class="number">15926</td><td class="currency">12.99</td><td class="percent">0.05</td></tr>
<tr><td>Doh</td><td class="number">0.01415926</td><td class="currency">5.1</td><td class="percent">0.1</td></tr>
</tbody>
</table>
  </div><!-- Container -->
</body>
</html>

विंडोज XP प्रो SP3 पर फ़ायरफ़ॉक्स 3.0, IE 6, सफारी 3.1 और ओपेरा 9.50 पर परीक्षण किया गया। यह पहले दो के साथ समस्या के बिना काम करता है, सफारी पर आईआईटी () कॉल के बाद एक अजीब त्रुटि है:

java.net.MalformedURLException: no protocol:
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at sun.plugin.liveconnect.SecureInvocation.checkLiveConnectCaller(Unknown Source)
    at sun.plugin.liveconnect.SecureInvocation.access$000(Unknown Source)
    at sun.plugin.liveconnect.SecureInvocation$2.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.plugin.liveconnect.SecureInvocation.CallMethod(Unknown Source)

लेकिन यह अभी भी काम करता है।

मैं इसे ओपेरा के साथ काम नहीं कर सकता: एप्लेट सही ढंग से लोड होता है, जैसा कि मैं जावा कंसोल में इनिट () कॉल का निशान देख सकता हूं, जब जावा जावा फ़ंक्शन को कॉल करता है तो मुझे कोई त्रुटि नहीं है (सिवाय अगर मैं एक विधि जोड़ता हूं और कॉल करता हूं) एक JSObject पैरामीटर प्राप्त करना, उत्सुकता से), लेकिन जावा फ़ंक्शंस को नहीं कहा जाता है (मैंने कॉल्स का पता लगाया)।
मेरा मानना ​​है कि लाइवकनेक्ट ओपेरा में काम करता है, लेकिन मैं अभी तक नहीं देखता कि कैसे। मैं थोड़ा और शोध करूंगा।
[अपडेट] मैंने गैर-मौजूदा जार फ़ाइल (जो अन्य ब्राउज़र को बंद नहीं करता है) के संदर्भ हटा दिए और मुझे कॉल का पता चला, लेकिन यह पृष्ठ को अपडेट नहीं करता है।
मम्म, अगर मैं करूँ तो alert(applet.GetLocaleInformation());मुझे जानकारी मिल गई है, इसलिए यह एक jQuery मुद्दा हो सकता है।


@PhiLho: यह काम करता है, लेकिन फिर भी विंडोज से विभाजक को सही ढंग से नहीं पढ़ता है। जब यह निम्नलिखित देखता है: Locale for русский (Россия): country=Россия (RU / RUS), lang=русский (ru / rus), variant= ()यह इस तथ्य के बावजूद कि मैंने इसे विंडोज सेटिंग्स में एक अवधि के साथ ओवरराइड किया है, तो अल्पविराम का उपयोग करता है।
क्वासोइ

कृपया, इस प्रणाली की सीमाओं के बारे में मेरे पहले संदेश का मेरा अपडेट पढ़ें। मुझे नहीं पता कि हम वेब ब्राउज़र से बेहतर कर सकते हैं, सिवाय कुछ देशी कोड का उपयोग करके।
18

1

यहां तक ​​कि अगर आपको पता था कि यह "GUI एप्लिकेशन" किस लोकेल के तहत चल रहा है, तब भी आपको यह पता लगाना होगा कि यह वर्तमान लोकल कैसे हो रहा है , और यह दशमलव विभाजक को कैसे निर्धारित कर रहा है।

मुझे नहीं पता कि यह मैक पर कैसे किया जाता है, लेकिन विंडोज अनुप्रयोगों पर नियंत्रण कक्ष के माध्यम से उपयोगकर्ता की वरीयताओं को पूछताछ करने के लिए माना जाता है। यह बहुत संभव है कि यह रहस्य ऐपेटोन उन सेटिंग्स को अनदेखा कर रहा है, और इसके बजाय अपने स्वयं के आंतरिक सेटअप का उपयोग कर रहा है।

या शायद वे वर्तमान लोकेल ले रहे हैं, और बाकी का उल्लेख कर रहे हैं, बजाय बताया जा रहा है।

फिर भी, अंग्रेजी में, संख्याओं को 3 अंकों के समूहों में दिया जाता है, जिसमें अल्पविराम समूहों को अलग करता है। अर्थात:

5,197,359,078

जब तक कि संख्या एक पूर्णांक नहीं थी जिसमें एक फ़ोन नंबर होता है :

519-735-9078

जब तक कि संख्या एक पूर्णांक नहीं थी जिसमें खाता संख्या शामिल है :

5197359078

जिस स्थिति में, आप हार्ड-कोडित ओवरराइड लॉजिक पर वापस आ जाते हैं।

संपादित करें: हटाए गए मुद्रा उदाहरण, चूंकि मुद्रा के अपने स्वरूपण नियम हैं।


0

अन्य उत्तरों के समान, लेकिन स्थिर के रूप में संकुचित :

const decimal=.1.toLocaleString().substr(1,1);      //returns "." in Canada

इसके अलावा, हजारों विभाजक पाने के लिए :

const thousands=1234..toLocaleString().substr(1,1);   //returns "," in Canada

बस अपने जेएस के शीर्ष पर कोड रखें और फिर प्रतीक को वापस करने के लिए आवश्यक कॉल करें।


उदाहरण के लिए (जहां मैं रहता हूं), से अल्पविराम हटाने के लिए "1,234,567":

console.log( "1,234,567".replaceAll(thousands,"") ); //prints "1234567" to console.  

-1

"क्या सर्वर साइड पर इसे करने का कोई तरीका है (अधिमानतः, ताकि मैं आंकड़े एकत्र कर सकूं), या क्लाइंट साइड पर?"

नहीं, तुम नहीं कर सकते। वह GUI कुछ उपयोगकर्ता या मशीन विशिष्ट सेटिंग्स को देख रहा है। सबसे पहले, आप शायद यह नहीं जानते कि यह यूआई क्या सेटिंग्स देख रहा है। दूसरा, एक वेबप्लिकेशन के साथ आप शायद इन सेटिंग्स (क्लाइंटसाइड -> जेवाक्रिप्टिप) की जांच नहीं कर पाएंगे।


@ आरडब्ल्यूसी: मुझे पता है कि जीयूआई ऐप कहां है: विंडोज क्षेत्रीय सेटिंग्स।
क्वासोइनी

-4

एक अन्य संभावित समाधान: आप की तरह कुछ इस्तेमाल कर सकते हैं GeoIP (PHP में उदाहरण) उपयोगकर्ता के स्थान निर्धारित करने के लिए और इन जानकारी के आधार पर निर्णय लेते हैं।


1
हालांकि उपयोगकर्ता को इसे ओवरराइड करने की अनुमति देना आवश्यक होगा। मेरा एक दोस्त इंग्लैंड के दक्षिण में काम करता है; वह कंपनी है जो स्पेन में एक प्रॉक्सी सर्वर के माध्यम से सभी इंटरनेट एक्सेस के लिए काम करती है, इसलिए जियोआईपी हमेशा उसे अपने वास्तविक स्थान से कई सौ मील की दूरी पर दिखाती है।
NickFitz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.