With a browser, how do I know which decimal separator does the operating system use?

后端 未结 13 2176
不思量自难忘°
不思量自难忘° 2020-11-27 17:05

I\'m developing a web application.

I need to display some decimal data correctly so that it can be copied and pasted into a certain GUI application that

13条回答
  •  南笙
    南笙 (楼主)
    2020-11-27 17:19

    OK, I have something to show, more a proof of concept than a finished product, but because of lack of precise specifications, I leave it this way (or I will over-engineer it). I post in a separate message because it will be a bit long. I took the opportunity to try a bit more jQuery...

    The Java code: 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);
      }
    }
    

    An example of HTML page using the above applet: GetLocaleInfo.html

    
    
    
    
    
    
      

    Page to demonstrate how JavaScript can get locale information from Java

    This browser does not have Java enabled.
    Get the latest Java plug-in here (or enable Java support).

    Click on the button to format the table content to the locale rules of the user.

    Synthetic View
    NameValueCostDiscount
    Foo3.141592621.360.196
    Bar159263.14330.33
    Baz1592612.990.05
    Doh0.014159265.10.1

    Tested on Firefox 3.0, IE 6, Safari 3.1 and Opera 9.50, on Windows XP Pro SP3. It works without problem with the first two, on Safari I have a strange error after init() call:

    java.net.MalformedURLException: no protocol:
        at java.net.URL.(Unknown Source)
        at java.net.URL.(Unknown Source)
        at java.net.URL.(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)
    

    but it still works.

    I can't get it work with Opera: the applet loads correctly, as I can see the trace of init() call in the Java console, I have no errors when JavaScript calls the Java functions (except if I add and call a method getting a JSObject parameter, curiously), but the Java functions are not called (I added trace of the calls).
    I believe Liveconnect works in Opera, but I don't see yet how. I will research a bit more.
    [Update] I removed references to non-existing jar file (which doesn't stop other browsers) and I got a trace of the calls, but it doesn't update the page.
    Mmm, if I do alert(applet.GetLocaleInformation()); I got the information, so it might be a jQuery issue.

提交回复
热议问题