Mercurial > hg > icedtea9-forest > jdk
changeset 2870:21562f873588
Merge
author | lana |
---|---|
date | Thu, 16 Sep 2010 11:17:32 -0700 |
parents | 252af007f819 (current diff) bf89c7fc48fd (diff) |
children | 61f1bbd49a5e |
files | src/share/classes/com/sun/media/sound/MidiDeviceReceiver.java test/java/util/Locale/data/deflocale.exe test/java/util/Locale/data/deflocale.jds3 test/java/util/Locale/data/deflocale.rhel4 test/java/util/Locale/data/deflocale.winvista test/java/util/Locale/data/deflocale.winxp |
diffstat | 142 files changed, 25951 insertions(+), 8344 deletions(-) [+] |
line wrap: on
line diff
--- a/make/java/java/FILES_java.gmk Thu Sep 16 11:16:02 2010 -0700 +++ b/make/java/java/FILES_java.gmk Thu Sep 16 11:17:32 2010 -0700 @@ -183,10 +183,22 @@ java/util/MissingFormatWidthException.java \ java/util/UnknownFormatConversionException.java \ java/util/UnknownFormatFlagsException.java \ + java/util/IllformedLocaleException.java \ java/util/FormatterClosedException.java \ java/util/ListResourceBundle.java \ sun/util/EmptyListResourceBundle.java \ java/util/Locale.java \ + sun/util/locale/AsciiUtil.java \ + sun/util/locale/BaseLocale.java \ + sun/util/locale/Extension.java \ + sun/util/locale/InternalLocaleBuilder.java \ + sun/util/locale/LanguageTag.java \ + sun/util/locale/LocaleExtensions.java \ + sun/util/locale/LocaleObjectCache.java \ + sun/util/locale/LocaleSyntaxException.java \ + sun/util/locale/ParseStatus.java \ + sun/util/locale/StringTokenIterator.java \ + sun/util/locale/UnicodeLocaleExtension.java \ java/util/LocaleISOData.java \ sun/util/LocaleServiceProviderPool.java \ sun/util/LocaleDataMetaInfo.java \
--- a/make/java/text/base/FILES_java.gmk Thu Sep 16 11:16:02 2010 -0700 +++ b/make/java/text/base/FILES_java.gmk Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ # -# Copyright (c) 1996, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ java/text/AttributedString.java \ java/text/BreakDictionary.java \ java/text/BreakIterator.java \ + java/text/CalendarBuilder.java \ java/text/CharacterIterator.java \ java/text/CharacterIteratorFieldDelegate.java \ java/text/ChoiceFormat.java \
--- a/src/share/classes/com/sun/java/swing/SwingUtilities3.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/java/swing/SwingUtilities3.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,13 +31,14 @@ import java.util.Map; import java.util.WeakHashMap; import java.util.concurrent.Callable; +import java.applet.Applet; import java.awt.AWTEvent; import java.awt.EventQueue; import java.awt.Component; import java.awt.Container; +import java.awt.Window; import javax.swing.JComponent; import javax.swing.RepaintManager; -import javax.swing.SwingUtilities; /** * A collection of utility methods for Swing. @@ -91,7 +92,7 @@ */ public static void setVsyncRequested(Container rootContainer, boolean isRequested) { - assert SwingUtilities.getRoot(rootContainer) == rootContainer; + assert (rootContainer instanceof Applet) || (rootContainer instanceof Window); if (isRequested) { vsyncedMap.put(rootContainer, Boolean.TRUE); } else { @@ -106,7 +107,7 @@ * @return {@code true} if vsync painting is requested for {@code rootContainer} */ public static boolean isVsyncRequested(Container rootContainer) { - assert SwingUtilities.getRoot(rootContainer) == rootContainer; + assert (rootContainer instanceof Applet) || (rootContainer instanceof Window); return Boolean.TRUE == vsyncedMap.get(rootContainer); }
--- a/src/share/classes/com/sun/java/swing/plaf/gtk/GTKPainter.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/java/swing/plaf/gtk/GTKPainter.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -399,7 +399,7 @@ } String detail = "arrow"; - if (name == "ScrollBar.button") { + if ((name == "ScrollBar.button") || (name == "TabbedPane.button")) { if (arrowType == ArrowType.UP || arrowType == ArrowType.DOWN) { detail = "vscrollbar"; } else { @@ -409,7 +409,7 @@ name == "Spinner.previousButton") { detail = "spinbutton"; } else if (name != "ComboBox.arrowButton") { - assert false; + assert false : "unexpected name: " + name; } int gtkState = GTKLookAndFeel.synthStateToGTKState( @@ -436,7 +436,7 @@ String name = button.getName(); String detail = "button"; int direction = SwingConstants.CENTER; - if (name == "ScrollBar.button") { + if ((name == "ScrollBar.button") || (name == "TabbedPane.button")) { Integer prop = (Integer) button.getClientProperty("__arrow_direction__"); direction = (prop != null) ? @@ -457,7 +457,7 @@ } else if (name == "Spinner.nextButton") { detail = "spinbutton_up"; } else if (name != "ComboBox.arrowButton") { - assert false; + assert false : "unexpected name: " + name; } int state = context.getComponentState();
--- a/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java Thu Sep 16 11:17:32 2010 -0700 @@ -150,11 +150,6 @@ * case for it to be a problem the values would have to be different. * It also seems unlikely to arise except when a user explicitly * deletes the X resource database entry. - * 3) Because of rounding errors sizes may differ very slightly - * between JDK and GTK. To fix that would at the very least require - * Swing to specify floating pt font sizes. - * Eg "10 pts" for GTK at 96 dpi to get the same size at Java 2D's - * 72 dpi you'd need to specify exactly 13.33. * There also some other issues to be aware of for the future: * GTK specifies the Xft.dpi value as server-wide which when used * on systems with 2 distinct X screens with different physical DPI @@ -197,11 +192,16 @@ String fcFamilyLC = family.toLowerCase(); if (FontUtilities.mapFcName(fcFamilyLC) != null) { /* family is a Fc/Pango logical font which we need to expand. */ - return FontUtilities.getFontConfigFUIR(fcFamilyLC, style, size); + Font font = FontUtilities.getFontConfigFUIR(fcFamilyLC, style, size); + font = font.deriveFont(style, (float)dsize); + return new FontUIResource(font); } else { /* It's a physical font which we will create with a fallback */ - Font font = new FontUIResource(family, style, size); - return FontUtilities.getCompositeFontUIResource(font); + Font font = new Font(family, style, size); + /* a roundabout way to set the font size in floating points */ + font = font.deriveFont(style, (float)dsize); + FontUIResource fuir = new FontUIResource(font); + return FontUtilities.getCompositeFontUIResource(fuir); } }
--- a/src/share/classes/com/sun/java/swing/plaf/motif/MotifBorders.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/java/swing/plaf/motif/MotifBorders.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,8 +40,6 @@ import java.awt.Point; import java.awt.Rectangle; -import java.io.Serializable; - /** * Factory object that can vend Icons appropriate for the basic L & F. * <p> @@ -99,7 +97,7 @@ } public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) { - if (((JComponent)c).hasFocus()) { + if (c.hasFocus()) { g.setColor(focus); g.drawRect(x, y, w-1, h-1); } else { @@ -233,6 +231,9 @@ } public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + if (!(c instanceof JMenuBar)) { + return; + } JMenuBar menuBar = (JMenuBar)c; if (menuBar.isBorderPainted() == true) { // this draws the MenuBar border @@ -658,6 +659,9 @@ * @param height the height of the painted border */ public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + if (!(c instanceof JPopupMenu)) { + return; + } Font origFont = g.getFont(); Color origColor = g.getColor(); @@ -701,6 +705,9 @@ * @param insets the object to be reinitialized */ public Insets getBorderInsets(Component c, Insets insets) { + if (!(c instanceof JPopupMenu)) { + return insets; + } FontMetrics fm; int descent = 0; int ascent = 16;
--- a/src/share/classes/com/sun/java/swing/plaf/windows/WindowsBorders.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/java/swing/plaf/windows/WindowsBorders.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,12 +32,8 @@ import java.awt.Component; import java.awt.Insets; -import java.awt.Dimension; -import java.awt.Image; -import java.awt.Rectangle; import java.awt.Color; import java.awt.Graphics; -import java.io.Serializable; import static com.sun.java.swing.plaf.windows.TMSchema.*; import static com.sun.java.swing.plaf.windows.XPStyle.Skin; @@ -159,6 +155,9 @@ public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + if (!(c instanceof JToolBar)) { + return; + } g.translate(x, y); XPStyle xp = XPStyle.getXP(); @@ -190,33 +189,33 @@ } else { - if (!vertical) { - if (c.getComponentOrientation().isLeftToRight()) { + if (!vertical) { + if (c.getComponentOrientation().isLeftToRight()) { + g.setColor(shadow); + g.drawLine(4, 3, 4, height - 4); + g.drawLine(4, height - 4, 2, height - 4); + + g.setColor(highlight); + g.drawLine(2, 3, 3, 3); + g.drawLine(2, 3, 2, height - 5); + } else { + g.setColor(shadow); + g.drawLine(width - 3, 3, width - 3, height - 4); + g.drawLine(width - 4, height - 4, width - 4, height - 4); + + g.setColor(highlight); + g.drawLine(width - 5, 3, width - 4, 3); + g.drawLine(width - 5, 3, width - 5, height - 5); + } + } else { // Vertical g.setColor(shadow); - g.drawLine(4, 3, 4, height - 4); - g.drawLine(4, height - 4, 2, height - 4); + g.drawLine(3, 4, width - 4, 4); + g.drawLine(width - 4, 2, width - 4, 4); g.setColor(highlight); - g.drawLine(2, 3, 3, 3); - g.drawLine(2, 3, 2, height - 5); - } else { - g.setColor(shadow); - g.drawLine(width - 3, 3, width - 3, height - 4); - g.drawLine(width - 4, height - 4, width - 4, height - 4); - - g.setColor(highlight); - g.drawLine(width - 5, 3, width - 4, 3); - g.drawLine(width - 5, 3, width - 5, height - 5); + g.drawLine(3, 2, width - 4, 2); + g.drawLine(3, 2, 3, 3); } - } else { // Vertical - g.setColor(shadow); - g.drawLine(3, 4, width - 4, 4); - g.drawLine(width - 4, 2, width - 4, 4); - - g.setColor(highlight); - g.drawLine(3, 2, width - 4, 2); - g.drawLine(3, 2, 3, 3); - } } } @@ -225,6 +224,9 @@ public Insets getBorderInsets(Component c, Insets insets) { insets.set(1,1,1,1); + if (!(c instanceof JToolBar)) { + return insets; + } if (((JToolBar)c).isFloatable()) { int gripInset = (XPStyle.getXP() != null) ? 12 : 9; if (((JToolBar)c).getOrientation() == HORIZONTAL) {
--- a/src/share/classes/com/sun/media/sound/AbstractMidiDevice.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/media/sound/AbstractMidiDevice.java Thu Sep 16 11:17:32 2010 -0700 @@ -474,7 +474,7 @@ This is necessary for Receivers retrieved via MidiSystem.getReceiver() (which opens the device implicitely). */ - protected abstract class AbstractReceiver implements Receiver { + protected abstract class AbstractReceiver implements MidiDeviceReceiver { private boolean open = true; @@ -508,6 +508,10 @@ AbstractMidiDevice.this.closeInternal(this); } + public MidiDevice getMidiDevice() { + return AbstractMidiDevice.this; + } + protected boolean isOpen() { return open; } @@ -529,7 +533,7 @@ * Also, it has some optimizations regarding sending to the Receivers, * for known Receivers, and managing itself in the TransmitterList. */ - protected class BasicTransmitter implements Transmitter { + protected class BasicTransmitter implements MidiDeviceTransmitter { private Receiver receiver = null; TransmitterList tlist = null; @@ -568,6 +572,9 @@ } } + public MidiDevice getMidiDevice() { + return AbstractMidiDevice.this; + } } // class BasicTransmitter
--- a/src/share/classes/com/sun/media/sound/AudioFloatConverter.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/media/sound/AudioFloatConverter.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,8 +40,6 @@ */ public abstract class AudioFloatConverter { - public static final Encoding PCM_FLOAT = new Encoding("PCM_FLOAT"); - /*************************************************************************** * * LSB Filter, used filter least significant byte in samples arrays. @@ -982,7 +980,7 @@ format.getSampleSizeInBits() + 7) / 8) - 4); } } - } else if (format.getEncoding().equals(PCM_FLOAT)) { + } else if (format.getEncoding().equals(Encoding.PCM_FLOAT)) { if (format.getSampleSizeInBits() == 32) { if (format.isBigEndian()) conv = new AudioFloatConversion32B();
--- a/src/share/classes/com/sun/media/sound/AudioFloatFormatConverter.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/media/sound/AudioFloatFormatConverter.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -175,7 +175,6 @@ for (int c = 0; c < targetChannels; c++) { for (int i = 0, ix = off + c; i < len2; i++, ix += cs) { b[ix] = conversion_buffer[i]; - ; } } } else if (targetChannels == 1) { @@ -186,7 +185,6 @@ for (int c = 1; c < sourceChannels; c++) { for (int i = c, ix = off; i < len2; i += cs, ix++) { b[ix] += conversion_buffer[i]; - ; } } float vol = 1f / ((float) sourceChannels); @@ -390,6 +388,7 @@ return -1; if (len < 0) return 0; + int offlen = off + len; int remain = len / nrofchannels; int destPos = 0; int in_end = ibuffer_len; @@ -423,7 +422,7 @@ for (int c = 0; c < nrofchannels; c++) { int ix = 0; float[] buff = cbuffer[c]; - for (int i = c; i < b.length; i += nrofchannels) { + for (int i = c + off; i < offlen; i += nrofchannels) { b[i] = buff[ix++]; } } @@ -447,7 +446,7 @@ } public long skip(long len) throws IOException { - if (len > 0) + if (len < 0) return 0; if (skipbuffer == null) skipbuffer = new float[1024 * targetFormat.getFrameSize()]; @@ -470,7 +469,7 @@ } private Encoding[] formats = { Encoding.PCM_SIGNED, Encoding.PCM_UNSIGNED, - AudioFloatConverter.PCM_FLOAT }; + Encoding.PCM_FLOAT }; public AudioInputStream getAudioInputStream(Encoding targetEncoding, AudioInputStream sourceStream) { @@ -482,7 +481,7 @@ float samplerate = format.getSampleRate(); int bits = format.getSampleSizeInBits(); boolean bigendian = format.isBigEndian(); - if (targetEncoding.equals(AudioFloatConverter.PCM_FLOAT)) + if (targetEncoding.equals(Encoding.PCM_FLOAT)) bits = 32; AudioFormat targetFormat = new AudioFormat(encoding, samplerate, bits, channels, channels * bits / 8, samplerate, bigendian); @@ -521,19 +520,19 @@ public Encoding[] getSourceEncodings() { return new Encoding[] { Encoding.PCM_SIGNED, Encoding.PCM_UNSIGNED, - AudioFloatConverter.PCM_FLOAT }; + Encoding.PCM_FLOAT }; } public Encoding[] getTargetEncodings() { return new Encoding[] { Encoding.PCM_SIGNED, Encoding.PCM_UNSIGNED, - AudioFloatConverter.PCM_FLOAT }; + Encoding.PCM_FLOAT }; } public Encoding[] getTargetEncodings(AudioFormat sourceFormat) { if (AudioFloatConverter.getConverter(sourceFormat) == null) return new Encoding[0]; return new Encoding[] { Encoding.PCM_SIGNED, Encoding.PCM_UNSIGNED, - AudioFloatConverter.PCM_FLOAT }; + Encoding.PCM_FLOAT }; } public AudioFormat[] getTargetFormats(Encoding targetEncoding, @@ -572,17 +571,17 @@ } } - if (targetEncoding.equals(AudioFloatConverter.PCM_FLOAT)) { - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + if (targetEncoding.equals(Encoding.PCM_FLOAT)) { + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 32, channels, channels * 4, AudioSystem.NOT_SPECIFIED, false)); - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 32, channels, channels * 4, AudioSystem.NOT_SPECIFIED, true)); - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 64, channels, channels * 8, AudioSystem.NOT_SPECIFIED, false)); - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 64, channels, channels * 8, AudioSystem.NOT_SPECIFIED, true)); }
--- a/src/share/classes/com/sun/media/sound/AudioSynthesizerPropertyInfo.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/media/sound/AudioSynthesizerPropertyInfo.java Thu Sep 16 11:17:32 2010 -0700 @@ -42,11 +42,14 @@ */ public AudioSynthesizerPropertyInfo(String name, Object value) { this.name = name; - this.value = value; if (value instanceof Class) valueClass = (Class)value; - else if (value != null) - valueClass = value.getClass(); + else + { + this.value = value; + if (value != null) + valueClass = value.getClass(); + } } /** * The name of the property.
--- a/src/share/classes/com/sun/media/sound/DLSSoundbank.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/media/sound/DLSSoundbank.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -781,7 +781,7 @@ } if (sampleformat == 3) { audioformat = new AudioFormat( - AudioFloatConverter.PCM_FLOAT, samplerate, bits, + Encoding.PCM_FLOAT, samplerate, bits, channels, framesize, samplerate, false); } @@ -965,7 +965,7 @@ sampleformat = 1; else if (audioformat.getEncoding().equals(Encoding.PCM_SIGNED)) sampleformat = 1; - else if (audioformat.getEncoding().equals(AudioFloatConverter.PCM_FLOAT)) + else if (audioformat.getEncoding().equals(Encoding.PCM_FLOAT)) sampleformat = 3; fmt_chunk.writeUnsignedShort(sampleformat);
--- a/src/share/classes/com/sun/media/sound/MidiDeviceReceiver.java Thu Sep 16 11:16:02 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.sun.media.sound; - -import javax.sound.midi.MidiDevice; -import javax.sound.midi.Receiver; - -/** - * A Receiver with reference to it's MidiDevice object. - * - * @author Karl Helgason - */ -public interface MidiDeviceReceiver extends Receiver { - - /** Obtains the MidiDevice object associated with this Receiver. - */ - public MidiDevice getMidiDevice(); - -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/com/sun/media/sound/MidiDeviceReceiverEnvelope.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.sun.media.sound; + +import javax.sound.midi.*; + + +/** + * Helper class which allows to convert {@code Receiver} + * to {@code MidiDeviceReceiver}. + * + * @author Alex Menkov + */ +public class MidiDeviceReceiverEnvelope implements MidiDeviceReceiver { + + private final MidiDevice device; + private final Receiver receiver; + + /** + * Creates a new {@code MidiDeviceReceiverEnvelope} object which + * envelops the specified {@code Receiver} + * and is owned by the specified {@code MidiDevice}. + * + * @param device the owner {@code MidiDevice} + * @param receiver the {@code Receiver} to be enveloped + */ + public MidiDeviceReceiverEnvelope(MidiDevice device, Receiver receiver) { + if (device == null || receiver == null) { + throw new NullPointerException(); + } + this.device = device; + this.receiver = receiver; + } + + // Receiver implementation + public void close() { + receiver.close(); + } + + public void send(MidiMessage message, long timeStamp) { + receiver.send(message, timeStamp); + } + + // MidiDeviceReceiver implementation + public MidiDevice getMidiDevice() { + return device; + } + + /** + * Obtains the receiver enveloped + * by this {@code MidiDeviceReceiverEnvelope} object. + * + * @return the enveloped receiver + */ + public Receiver getReceiver() { + return receiver; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/com/sun/media/sound/MidiDeviceTransmitterEnvelope.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.sun.media.sound; + +import javax.sound.midi.*; + + +/** + * Helper class which allows to convert {@code Transmitter} + * to {@code MidiDeviceTransmitter}. + * + * @author Alex Menkov + */ +public class MidiDeviceTransmitterEnvelope implements MidiDeviceTransmitter { + + private final MidiDevice device; + private final Transmitter transmitter; + + /** + * Creates a new {@code MidiDeviceTransmitterEnvelope} object which + * envelops the specified {@code Transmitter} + * and is owned by the specified {@code MidiDevice}. + * + * @param device the owner {@code MidiDevice} + * @param transmitter the {@code Transmitter} to be enveloped + */ + public MidiDeviceTransmitterEnvelope(MidiDevice device, Transmitter transmitter) { + if (device == null || transmitter == null) { + throw new NullPointerException(); + } + this.device = device; + this.transmitter = transmitter; + } + + // Transmitter implementation + public void setReceiver(Receiver receiver) { + transmitter.setReceiver(receiver); + } + + public Receiver getReceiver() { + return transmitter.getReceiver(); + } + + public void close() { + transmitter.close(); + } + + + // MidiDeviceReceiver implementation + public MidiDevice getMidiDevice() { + return device; + } + + /** + * Obtains the transmitter enveloped + * by this {@code MidiDeviceTransmitterEnvelope} object. + * + * @return the enveloped transmitter + */ + public Transmitter getTransmitter() { + return transmitter; + } +}
--- a/src/share/classes/com/sun/media/sound/ModelByteBufferWavetable.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/media/sound/ModelByteBufferWavetable.java Thu Sep 16 11:17:32 2010 -0700 @@ -205,7 +205,8 @@ } if (buffer.array() == null) { return AudioFloatInputStream.getInputStream(new AudioInputStream( - buffer.getInputStream(), format, buffer.capacity())); + buffer.getInputStream(), format, + buffer.capacity() / format.getFrameSize())); } if (buffer8 != null) { if (format.getEncoding().equals(Encoding.PCM_SIGNED)
--- a/src/share/classes/com/sun/media/sound/ModelInstrument.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/media/sound/ModelInstrument.java Thu Sep 16 11:17:32 2010 -0700 @@ -56,7 +56,7 @@ public ModelDirector getDirector(ModelPerformer[] performers, MidiChannel channel, ModelDirectedPlayer player) { - return new ModelStandardDirector(performers, player); + return new ModelStandardIndexedDirector(performers, player); } public ModelPerformer[] getPerformers() {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/com/sun/media/sound/ModelStandardIndexedDirector.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.sun.media.sound; + +/** + * A standard indexed director who chooses performers + * by there keyfrom,keyto,velfrom,velto properties. + * + * @author Karl Helgason + */ +public class ModelStandardIndexedDirector implements ModelDirector { + + ModelPerformer[] performers; + ModelDirectedPlayer player; + boolean noteOnUsed = false; + boolean noteOffUsed = false; + + // Variables needed for index + byte[][] trantables; + int[] counters; + int[][] mat; + + public ModelStandardIndexedDirector(ModelPerformer[] performers, + ModelDirectedPlayer player) { + this.performers = performers; + this.player = player; + for (int i = 0; i < performers.length; i++) { + ModelPerformer p = performers[i]; + if (p.isReleaseTriggered()) { + noteOffUsed = true; + } else { + noteOnUsed = true; + } + } + buildindex(); + } + + private int[] lookupIndex(int x, int y) { + if ((x >= 0) && (x < 128) && (y >= 0) && (y < 128)) { + int xt = trantables[0][x]; + int yt = trantables[1][y]; + if (xt != -1 && yt != -1) { + return mat[xt + yt * counters[0]]; + } + } + return null; + } + + private int restrict(int value) { + if(value < 0) return 0; + if(value > 127) return 127; + return value; + } + + private void buildindex() { + trantables = new byte[2][129]; + counters = new int[trantables.length]; + for (ModelPerformer performer : performers) { + int keyFrom = performer.getKeyFrom(); + int keyTo = performer.getKeyTo(); + int velFrom = performer.getVelFrom(); + int velTo = performer.getVelTo(); + if (keyFrom > keyTo) continue; + if (velFrom > velTo) continue; + keyFrom = restrict(keyFrom); + keyTo = restrict(keyTo); + velFrom = restrict(velFrom); + velTo = restrict(velTo); + trantables[0][keyFrom] = 1; + trantables[0][keyTo + 1] = 1; + trantables[1][velFrom] = 1; + trantables[1][velTo + 1] = 1; + } + for (int d = 0; d < trantables.length; d++) { + byte[] trantable = trantables[d]; + int transize = trantable.length; + for (int i = transize - 1; i >= 0; i--) { + if (trantable[i] == 1) { + trantable[i] = -1; + break; + } + trantable[i] = -1; + } + int counter = -1; + for (int i = 0; i < transize; i++) { + if (trantable[i] != 0) { + counter++; + if (trantable[i] == -1) + break; + } + trantable[i] = (byte) counter; + } + counters[d] = counter; + } + mat = new int[counters[0] * counters[1]][]; + int ix = 0; + for (ModelPerformer performer : performers) { + int keyFrom = performer.getKeyFrom(); + int keyTo = performer.getKeyTo(); + int velFrom = performer.getVelFrom(); + int velTo = performer.getVelTo(); + if (keyFrom > keyTo) continue; + if (velFrom > velTo) continue; + keyFrom = restrict(keyFrom); + keyTo = restrict(keyTo); + velFrom = restrict(velFrom); + velTo = restrict(velTo); + int x_from = trantables[0][keyFrom]; + int x_to = trantables[0][keyTo + 1]; + int y_from = trantables[1][velFrom]; + int y_to = trantables[1][velTo + 1]; + if (x_to == -1) + x_to = counters[0]; + if (y_to == -1) + y_to = counters[1]; + for (int y = y_from; y < y_to; y++) { + int i = x_from + y * counters[0]; + for (int x = x_from; x < x_to; x++) { + int[] mprev = mat[i]; + if (mprev == null) { + mat[i] = new int[] { ix }; + } else { + int[] mnew = new int[mprev.length + 1]; + mnew[mnew.length - 1] = ix; + for (int k = 0; k < mprev.length; k++) + mnew[k] = mprev[k]; + mat[i] = mnew; + } + i++; + } + } + ix++; + } + } + + public void close() { + } + + public void noteOff(int noteNumber, int velocity) { + if (!noteOffUsed) + return; + int[] plist = lookupIndex(noteNumber, velocity); + if(plist == null) return; + for (int i : plist) { + ModelPerformer p = performers[i]; + if (p.isReleaseTriggered()) { + player.play(i, null); + } + } + } + + public void noteOn(int noteNumber, int velocity) { + if (!noteOnUsed) + return; + int[] plist = lookupIndex(noteNumber, velocity); + if(plist == null) return; + for (int i : plist) { + ModelPerformer p = performers[i]; + if (!p.isReleaseTriggered()) { + player.play(i, null); + } + } + } +}
--- a/src/share/classes/com/sun/media/sound/SoftChannel.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/media/sound/SoftChannel.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -116,7 +116,7 @@ protected int tuning_program = 0; protected SoftInstrument current_instrument = null; protected ModelChannelMixer current_mixer = null; - private ModelDirector current_director = null; + protected ModelDirector current_director = null; // Controller Destination Settings protected int cds_control_number = -1; @@ -1264,13 +1264,16 @@ } public void programChange(int bank, int program) { - bank = restrict7Bit(bank); + bank = restrict14Bit(bank); program = restrict7Bit(program); synchronized (control_mutex) { mainmixer.activity(); - this.bank = bank; - this.program = program; - current_instrument = null; + if(this.bank != bank || this.program != program) + { + this.bank = bank; + this.program = program; + current_instrument = null; + } } }
--- a/src/share/classes/com/sun/media/sound/SoftMixingMixer.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/media/sound/SoftMixingMixer.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -118,16 +118,16 @@ AudioSystem.NOT_SPECIFIED, bits, channels, channels * bits / 8, AudioSystem.NOT_SPECIFIED, true)); } - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 32, channels, channels * 4, AudioSystem.NOT_SPECIFIED, false)); - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 32, channels, channels * 4, AudioSystem.NOT_SPECIFIED, true)); - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 64, channels, channels * 8, AudioSystem.NOT_SPECIFIED, false)); - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 64, channels, channels * 8, AudioSystem.NOT_SPECIFIED, true)); }
--- a/src/share/classes/com/sun/media/sound/SoftReceiver.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/media/sound/SoftReceiver.java Thu Sep 16 11:17:32 2010 -0700 @@ -27,6 +27,7 @@ import java.util.TreeMap; import javax.sound.midi.MidiDevice; +import javax.sound.midi.MidiDeviceReceiver; import javax.sound.midi.MidiMessage; import javax.sound.midi.ShortMessage;
--- a/src/share/classes/com/sun/media/sound/SoftSynthesizer.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/media/sound/SoftSynthesizer.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,16 +25,25 @@ package com.sun.media.sound; +import java.io.BufferedInputStream; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.lang.ref.WeakReference; -import java.security.AccessControlException; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Properties; +import java.util.StringTokenizer; +import java.util.prefs.BackingStoreException; +import java.util.prefs.Preferences; import javax.sound.midi.Instrument; import javax.sound.midi.MidiChannel; @@ -182,6 +191,7 @@ // 1: DLS Voice Allocation protected int voice_allocation_mode = 0; + protected boolean load_default_soundbank = false; protected boolean reverb_light = true; protected boolean reverb_on = true; protected boolean chorus_on = true; @@ -226,8 +236,6 @@ = new HashMap<String, SoftTuning>(); private Map<String, SoftInstrument> inslist = new HashMap<String, SoftInstrument>(); - private Map<String, ModelInstrument> availlist - = new HashMap<String, ModelInstrument>(); private Map<String, ModelInstrument> loadedlist = new HashMap<String, ModelInstrument>(); @@ -275,10 +283,12 @@ synchronized (control_mutex) { if (channels != null) for (SoftChannel c : channels) + { c.current_instrument = null; + c.current_director = null; + } for (Instrument instrument : instruments) { String pat = patchToString(instrument.getPatch()); - availlist.remove(pat); SoftInstrument softins = new SoftInstrument((ModelInstrument) instrument); inslist.put(pat, softins); @@ -341,6 +351,7 @@ number_of_midi_channels = (Integer)items[10].value; jitter_correction = (Boolean)items[11].value; reverb_light = (Boolean)items[12].value; + load_default_soundbank = (Boolean)items[13].value; } private String patchToString(Patch patch) { @@ -578,7 +589,9 @@ c.current_instrument = null; inslist.remove(pat); loadedlist.remove(pat); - availlist.remove(pat); + for (int i = 0; i < channels.length; i++) { + channels[i].allSoundOff(); + } } } @@ -600,7 +613,7 @@ return false; synchronized (control_mutex) { - if (!loadedlist.containsValue(to) && !availlist.containsValue(to)) + if (!loadedlist.containsValue(to)) throw new IllegalArgumentException("Instrument to is not loaded."); unloadInstrument(from); ModelMappedInstrument mfrom = new ModelMappedInstrument( @@ -609,118 +622,155 @@ } } - public synchronized Soundbank getDefaultSoundbank() { - if (defaultSoundBank == null) { - try { - File javahome = new File(System.getProperties().getProperty( - "java.home")); - File libaudio = new File(new File(javahome, "lib"), "audio"); + public Soundbank getDefaultSoundbank() { + synchronized (SoftSynthesizer.class) { + if (defaultSoundBank != null) + return defaultSoundBank; + + List<PrivilegedAction<InputStream>> actions = + new ArrayList<PrivilegedAction<InputStream>>(); - if (libaudio.exists()) { - File foundfile = null; - File[] files = libaudio.listFiles(); - if (files != null) { - for (int i = 0; i < files.length; i++) { - File file = files[i]; - if (file.isFile()) { - String lname = file.getName().toLowerCase(); - if (lname.endsWith(".sf2") || - lname.endsWith(".dls")) { - if (foundfile == null || (file.length() > - foundfile.length())) { - foundfile = file; + actions.add(new PrivilegedAction<InputStream>() { + public InputStream run() { + File javahome = new File(System.getProperties() + .getProperty("java.home")); + File libaudio = new File(new File(javahome, "lib"), "audio"); + if (libaudio.exists()) { + File foundfile = null; + File[] files = libaudio.listFiles(); + if (files != null) { + for (int i = 0; i < files.length; i++) { + File file = files[i]; + if (file.isFile()) { + String lname = file.getName().toLowerCase(); + if (lname.endsWith(".sf2") + || lname.endsWith(".dls")) { + if (foundfile == null + || (file.length() > foundfile + .length())) { + foundfile = file; + } } } } } + if (foundfile != null) { + try { + return new FileInputStream(foundfile); + } catch (IOException e) { + } + } } - if (foundfile != null) { - try { - Soundbank sbk = MidiSystem.getSoundbank(foundfile); - defaultSoundBank = sbk; - return defaultSoundBank; - } catch (Exception e) { - //e.printStackTrace(); + return null; + } + }); + + actions.add(new PrivilegedAction<InputStream>() { + public InputStream run() { + if (System.getProperties().getProperty("os.name") + .startsWith("Windows")) { + File gm_dls = new File(System.getenv("SystemRoot") + + "\\system32\\drivers\\gm.dls"); + if (gm_dls.exists()) { + try { + return new FileInputStream(gm_dls); + } catch (IOException e) { + } } } + return null; } + }); - if (System.getProperties().getProperty("os.name") - .startsWith("Windows")) { - File gm_dls = new File(System.getenv("SystemRoot") - + "\\system32\\drivers\\gm.dls"); - if (gm_dls.exists()) { + actions.add(new PrivilegedAction<InputStream>() { + public InputStream run() { + /* + * Try to load saved generated soundbank + */ + File userhome = new File(System.getProperty("user.home"), + ".gervill"); + File emg_soundbank_file = new File(userhome, + "soundbank-emg.sf2"); + if (emg_soundbank_file.exists()) { try { - Soundbank sbk = MidiSystem.getSoundbank(gm_dls); - defaultSoundBank = sbk; - return defaultSoundBank; - } catch (Exception e) { - //e.printStackTrace(); + return new FileInputStream(emg_soundbank_file); + } catch (IOException e) { } } + return null; } - } catch (AccessControlException e) { - } catch (Exception e) { - //e.printStackTrace(); - } - - File userhome = null; - File emg_soundbank_file = null; + }); - /* - * Try to load saved generated soundbank - */ - try { - userhome = new File(System.getProperty("user.home"), - ".gervill"); - emg_soundbank_file = new File(userhome, "soundbank-emg.sf2"); - Soundbank sbk = MidiSystem.getSoundbank(emg_soundbank_file); - defaultSoundBank = sbk; - return defaultSoundBank; - } catch (AccessControlException e) { - } catch (Exception e) { - //e.printStackTrace(); + for (PrivilegedAction<InputStream> action : actions) { + try { + InputStream is = AccessController.doPrivileged(action); + if(is == null) continue; + Soundbank sbk; + try { + sbk = MidiSystem.getSoundbank(new BufferedInputStream(is)); + } finally { + is.close(); + } + if (sbk != null) { + defaultSoundBank = sbk; + return defaultSoundBank; + } + } catch (Exception e) { + } } try { - /* - * Generate emergency soundbank + * Generate emergency soundbank */ defaultSoundBank = EmergencySoundbank.createSoundbank(); - - /* - * Save generated soundbank to disk for faster future use. - */ - if(defaultSoundBank != null) - { - if(!userhome.exists()) userhome.mkdirs(); - if(!emg_soundbank_file.exists()) - ((SF2Soundbank)defaultSoundBank).save(emg_soundbank_file); - } } catch (Exception e) { - //e.printStackTrace(); } + if (defaultSoundBank != null) { + /* + * Save generated soundbank to disk for faster future use. + */ + OutputStream out = AccessController + .doPrivileged(new PrivilegedAction<OutputStream>() { + public OutputStream run() { + try { + File userhome = new File(System + .getProperty("user.home"), + ".gervill"); + if (!userhome.exists()) + userhome.mkdirs(); + File emg_soundbank_file = new File( + userhome, "soundbank-emg.sf2"); + if (emg_soundbank_file.exists()) + return null; + return new FileOutputStream( + emg_soundbank_file); + } catch (IOException e) { + } catch (SecurityException e) { + } + return null; + } + }); + if (out != null) { + try { + ((SF2Soundbank) defaultSoundBank).save(out); + out.close(); + } catch (IOException e) { + } + } + } } return defaultSoundBank; } public Instrument[] getAvailableInstruments() { - if (!isOpen()) { - Soundbank defsbk = getDefaultSoundbank(); - if (defsbk == null) - return new Instrument[0]; - return defsbk.getInstruments(); - } - - synchronized (control_mutex) { - ModelInstrument[] inslist_array = - new ModelInstrument[availlist.values().size()]; - availlist.values().toArray(inslist_array); - Arrays.sort(inslist_array, new ModelInstrumentComparator()); - return inslist_array; - } + Soundbank defsbk = getDefaultSoundbank(); + if (defsbk == null) + return new Instrument[0]; + Instrument[] inslist_array = defsbk.getInstruments(); + Arrays.sort(inslist_array, new ModelInstrumentComparator()); + return inslist_array; } public Instrument[] getLoadedInstruments() { @@ -794,6 +844,31 @@ return info; } + private Properties getStoredProperties() { + return AccessController + .doPrivileged(new PrivilegedAction<Properties>() { + public Properties run() { + Properties p = new Properties(); + String notePath = "/com/sun/media/sound/softsynthesizer"; + try { + Preferences prefroot = Preferences.userRoot(); + if (prefroot.nodeExists(notePath)) { + Preferences prefs = prefroot.node(notePath); + String[] prefs_keys = prefs.keys(); + for (String prefs_key : prefs_keys) { + String val = prefs.get(prefs_key, null); + if (val != null) + p.setProperty(prefs_key, val); + } + } + } catch (BackingStoreException e) { + } catch (SecurityException e) { + } + return p; + } + }); + } + public AudioSynthesizerPropertyInfo[] getPropertyInfo(Map<String, Object> info) { List<AudioSynthesizerPropertyInfo> list = new ArrayList<AudioSynthesizerPropertyInfo>(); @@ -861,17 +936,92 @@ item.description = "Turn light reverb mode on or off"; list.add(item); + item = new AudioSynthesizerPropertyInfo("load default soundbank", o?load_default_soundbank:true); + item.description = "Enabled/disable loading default soundbank"; + list.add(item); + AudioSynthesizerPropertyInfo[] items; items = list.toArray(new AudioSynthesizerPropertyInfo[list.size()]); - if (info != null) - for (AudioSynthesizerPropertyInfo item2: items) { - Object v = info.get(item2.name); + Properties storedProperties = getStoredProperties(); + + for (AudioSynthesizerPropertyInfo item2 : items) { + Object v = (info == null) ? null : info.get(item2.name); + v = (v != null) ? v : storedProperties.getProperty(item2.name); + if (v != null) { Class c = (item2.valueClass); - if (v != null) - if (c.isInstance(v)) - item2.value = v; + if (c.isInstance(v)) + item2.value = v; + else if (v instanceof String) { + String s = (String) v; + if (c == Boolean.class) { + if (s.equalsIgnoreCase("true")) + item2.value = Boolean.TRUE; + if (s.equalsIgnoreCase("false")) + item2.value = Boolean.FALSE; + } else if (c == AudioFormat.class) { + int channels = 2; + boolean signed = true; + boolean bigendian = false; + int bits = 16; + float sampleRate = 44100f; + try { + StringTokenizer st = new StringTokenizer(s, ", "); + String prevToken = ""; + while (st.hasMoreTokens()) { + String token = st.nextToken().toLowerCase(); + if (token.equals("mono")) + channels = 1; + if (token.startsWith("channel")) + channels = Integer.parseInt(prevToken); + if (token.contains("unsigned")) + signed = false; + if (token.equals("big-endian")) + bigendian = true; + if (token.equals("bit")) + bits = Integer.parseInt(prevToken); + if (token.equals("hz")) + sampleRate = Float.parseFloat(prevToken); + prevToken = token; + } + item2.value = new AudioFormat(sampleRate, bits, + channels, signed, bigendian); + } catch (NumberFormatException e) { + } + + } else + try { + if (c == Byte.class) + item2.value = Byte.valueOf(s); + else if (c == Short.class) + item2.value = Short.valueOf(s); + else if (c == Integer.class) + item2.value = Integer.valueOf(s); + else if (c == Long.class) + item2.value = Long.valueOf(s); + else if (c == Float.class) + item2.value = Float.valueOf(s); + else if (c == Double.class) + item2.value = Double.valueOf(s); + } catch (NumberFormatException e) { + } + } else if (v instanceof Number) { + Number n = (Number) v; + if (c == Byte.class) + item2.value = Byte.valueOf(n.byteValue()); + if (c == Short.class) + item2.value = Short.valueOf(n.shortValue()); + if (c == Integer.class) + item2.value = Integer.valueOf(n.intValue()); + if (c == Long.class) + item2.value = Long.valueOf(n.longValue()); + if (c == Float.class) + item2.value = Float.valueOf(n.floatValue()); + if (c == Double.class) + item2.value = Double.valueOf(n.doubleValue()); + } } + } return items; } @@ -1007,11 +1157,12 @@ if (targetFormat != null) setFormat(targetFormat); - Soundbank defbank = getDefaultSoundbank(); - if (defbank != null) { - loadAllInstruments(defbank); - availlist.putAll(loadedlist); - loadedlist.clear(); + if (load_default_soundbank) + { + Soundbank defbank = getDefaultSoundbank(); + if (defbank != null) { + loadAllInstruments(defbank); + } } voices = new SoftVoice[maxpoly]; @@ -1117,7 +1268,6 @@ } inslist.clear(); - availlist.clear(); loadedlist.clear(); tunings.clear();
--- a/src/share/classes/com/sun/media/sound/SoftVoice.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/media/sound/SoftVoice.java Thu Sep 16 11:17:32 2010 -0700 @@ -279,9 +279,12 @@ } protected void updateTuning(SoftTuning newtuning) { + tuning = newtuning; tunedKey = tuning.getTuning(note) / 100.0; if (!portamento) { co_noteon_keynumber[0] = tunedKey * (1.0 / 128.0); + if(performer == null) + return; int[] c = performer.midi_connections[4]; if (c == null) return; @@ -433,6 +436,8 @@ } protected void setPolyPressure(int pressure) { + if(performer == null) + return; int[] c = performer.midi_connections[2]; if (c == null) return; @@ -441,6 +446,8 @@ } protected void setChannelPressure(int pressure) { + if(performer == null) + return; int[] c = performer.midi_connections[1]; if (c == null) return; @@ -449,6 +456,8 @@ } protected void controlChange(int controller, int value) { + if(performer == null) + return; int[] c = performer.midi_ctrl_connections[controller]; if (c == null) return; @@ -457,6 +466,8 @@ } protected void nrpnChange(int controller, int value) { + if(performer == null) + return; int[] c = performer.midi_nrpn_connections.get(controller); if (c == null) return; @@ -465,6 +476,8 @@ } protected void rpnChange(int controller, int value) { + if(performer == null) + return; int[] c = performer.midi_rpn_connections.get(controller); if (c == null) return; @@ -473,6 +486,8 @@ } protected void setPitchBend(int bend) { + if(performer == null) + return; int[] c = performer.midi_connections[0]; if (c == null) return; @@ -499,6 +514,8 @@ co_noteon_on[0] = -1; + if(performer == null) + return; int[] c = performer.midi_connections[3]; if (c == null) return; @@ -527,6 +544,8 @@ co_noteon_on[0] = 0; + if(performer == null) + return; int[] c = performer.midi_connections[3]; if (c == null) return; @@ -543,6 +562,8 @@ sustain = true; co_noteon_on[0] = 1; + if(performer == null) + return; int[] c = performer.midi_connections[3]; if (c == null) return; @@ -555,6 +576,11 @@ active = false; stopping = false; audiostarted = false; + instrument = null; + performer = null; + connections = null; + extendedConnectionBlocks = null; + channelmixer = null; if (osc_stream != null) try { osc_stream.close();
--- a/src/share/classes/com/sun/media/sound/WaveExtensibleFileReader.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/media/sound/WaveExtensibleFileReader.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -271,7 +271,7 @@ bits, channels, framesize, samplerate, false, p); } } else if (subFormat.equals(SUBTYPE_IEEE_FLOAT)) { - audioformat = new AudioFormat(AudioFloatConverter.PCM_FLOAT, + audioformat = new AudioFormat(Encoding.PCM_FLOAT, samplerate, bits, channels, framesize, samplerate, false, p); } else throw new UnsupportedAudioFileException();
--- a/src/share/classes/com/sun/media/sound/WaveFloatFileReader.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/media/sound/WaveFloatFileReader.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,6 +33,7 @@ import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioFormat.Encoding; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.UnsupportedAudioFileException; @@ -102,7 +103,7 @@ throw new UnsupportedAudioFileException(); AudioFormat audioformat = new AudioFormat( - AudioFloatConverter.PCM_FLOAT, samplerate, bits, channels, + Encoding.PCM_FLOAT, samplerate, bits, channels, framesize, samplerate, false); AudioFileFormat fileformat = new AudioFileFormat( AudioFileFormat.Type.WAVE, audioformat,
--- a/src/share/classes/com/sun/media/sound/WaveFloatFileWriter.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/com/sun/media/sound/WaveFloatFileWriter.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,6 +30,7 @@ import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioFormat.Encoding; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.AudioFileFormat.Type; @@ -48,8 +49,7 @@ public Type[] getAudioFileTypes(AudioInputStream stream) { - if (!stream.getFormat().getEncoding().equals( - AudioFloatConverter.PCM_FLOAT)) + if (!stream.getFormat().getEncoding().equals(Encoding.PCM_FLOAT)) return new Type[0]; return new Type[] { Type.WAVE }; } @@ -58,8 +58,7 @@ if (!Type.WAVE.equals(type)) throw new IllegalArgumentException("File type " + type + " not supported."); - if (!stream.getFormat().getEncoding().equals( - AudioFloatConverter.PCM_FLOAT)) + if (!stream.getFormat().getEncoding().equals(Encoding.PCM_FLOAT)) throw new IllegalArgumentException("File format " + stream.getFormat() + " not supported."); }
--- a/src/share/classes/java/lang/Character.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/lang/Character.java Thu Sep 16 11:17:32 2010 -0700 @@ -595,7 +595,6 @@ /** * Constructs a new <code>Subset</code> instance. * - * @exception NullPointerException if name is <code>null</code> * @param name The name of this subset * @exception NullPointerException if name is <code>null</code> */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/java/text/CalendarBuilder.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package java.text; + +import java.util.Calendar; +import static java.util.GregorianCalendar.*; + +/** + * {@code CalendarBuilder} keeps field-value pairs for setting + * the calendar fields of the given {@code Calendar}. It has the + * {@link Calendar#FIELD_COUNT FIELD_COUNT}-th field for the week year + * support. Also {@code ISO_DAY_OF_WEEK} is used to specify + * {@code DAY_OF_WEEK} in the ISO day of week numbering. + * + * <p>{@code CalendarBuilder} retains the semantic of the pseudo + * timestamp for fields. {@code CalendarBuilder} uses a single + * int array combining fields[] and stamp[] of {@code Calendar}. + * + * @author Masayoshi Okutsu + */ +class CalendarBuilder { + /* + * Pseudo time stamp constants used in java.util.Calendar + */ + private static final int UNSET = 0; + private static final int COMPUTED = 1; + private static final int MINIMUM_USER_STAMP = 2; + + private static final int MAX_FIELD = FIELD_COUNT + 1; + + public static final int WEEK_YEAR = FIELD_COUNT; + public static final int ISO_DAY_OF_WEEK = 1000; // pseudo field index + + // stamp[] (lower half) and field[] (upper half) combined + private final int[] field; + private int nextStamp; + private int maxFieldIndex; + + CalendarBuilder() { + field = new int[MAX_FIELD * 2]; + nextStamp = MINIMUM_USER_STAMP; + maxFieldIndex = -1; + } + + CalendarBuilder set(int index, int value) { + if (index == ISO_DAY_OF_WEEK) { + index = DAY_OF_WEEK; + value = toCalendarDayOfWeek(value); + } + field[index] = nextStamp++; + field[MAX_FIELD + index] = value; + if (index > maxFieldIndex && index < FIELD_COUNT) { + maxFieldIndex = index; + } + return this; + } + + CalendarBuilder addYear(int value) { + field[MAX_FIELD + YEAR] += value; + field[MAX_FIELD + WEEK_YEAR] += value; + return this; + } + + boolean isSet(int index) { + if (index == ISO_DAY_OF_WEEK) { + index = DAY_OF_WEEK; + } + return field[index] > UNSET; + } + + Calendar establish(Calendar cal) { + boolean weekDate = isSet(WEEK_YEAR) + && field[WEEK_YEAR] > field[YEAR]; + if (weekDate && !cal.isWeekDateSupported()) { + // Use YEAR instead + if (!isSet(YEAR)) { + set(YEAR, field[MAX_FIELD + WEEK_YEAR]); + } + weekDate = false; + } + + cal.clear(); + // Set the fields from the min stamp to the max stamp so that + // the field resolution works in the Calendar. + for (int stamp = MINIMUM_USER_STAMP; stamp < nextStamp; stamp++) { + for (int index = 0; index <= maxFieldIndex; index++) { + if (field[index] == stamp) { + cal.set(index, field[MAX_FIELD + index]); + break; + } + } + } + + if (weekDate) { + int weekOfYear = isSet(WEEK_OF_YEAR) ? field[MAX_FIELD + WEEK_OF_YEAR] : 1; + int dayOfWeek = isSet(DAY_OF_WEEK) ? + field[MAX_FIELD + DAY_OF_WEEK] : cal.getFirstDayOfWeek(); + if (!isValidDayOfWeek(dayOfWeek) && cal.isLenient()) { + if (dayOfWeek >= 8) { + dayOfWeek--; + weekOfYear += dayOfWeek / 7; + dayOfWeek = (dayOfWeek % 7) + 1; + } else { + while (dayOfWeek <= 0) { + dayOfWeek += 7; + weekOfYear--; + } + } + dayOfWeek = toCalendarDayOfWeek(dayOfWeek); + } + cal.setWeekDate(field[MAX_FIELD + WEEK_YEAR], weekOfYear, dayOfWeek); + } + return cal; + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("CalendarBuilder:["); + for (int i = 0; i < field.length; i++) { + if (isSet(i)) { + sb.append(i).append('=').append(field[MAX_FIELD + i]).append(','); + } + } + int lastIndex = sb.length() - 1; + if (sb.charAt(lastIndex) == ',') { + sb.setLength(lastIndex); + } + sb.append(']'); + return sb.toString(); + } + + static int toISODayOfWeek(int calendarDayOfWeek) { + return calendarDayOfWeek == SUNDAY ? 7 : calendarDayOfWeek - 1; + } + + static int toCalendarDayOfWeek(int isoDayOfWeek) { + if (!isValidDayOfWeek(isoDayOfWeek)) { + // adjust later for lenient mode + return isoDayOfWeek; + } + return isoDayOfWeek == 7 ? SUNDAY : isoDayOfWeek + 1; + } + + static boolean isValidDayOfWeek(int dayOfWeek) { + return dayOfWeek > 0 && dayOfWeek <= 7; + } +}
--- a/src/share/classes/java/text/DateFormat.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/text/DateFormat.java Thu Sep 16 11:17:32 2010 -0700 @@ -443,7 +443,7 @@ */ public final static DateFormat getTimeInstance() { - return get(DEFAULT, 0, 1, Locale.getDefault()); + return get(DEFAULT, 0, 1, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -455,7 +455,7 @@ */ public final static DateFormat getTimeInstance(int style) { - return get(style, 0, 1, Locale.getDefault()); + return get(style, 0, 1, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -479,7 +479,7 @@ */ public final static DateFormat getDateInstance() { - return get(0, DEFAULT, 2, Locale.getDefault()); + return get(0, DEFAULT, 2, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -491,7 +491,7 @@ */ public final static DateFormat getDateInstance(int style) { - return get(0, style, 2, Locale.getDefault()); + return get(0, style, 2, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -515,7 +515,7 @@ */ public final static DateFormat getDateTimeInstance() { - return get(DEFAULT, DEFAULT, 3, Locale.getDefault()); + return get(DEFAULT, DEFAULT, 3, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -530,7 +530,7 @@ public final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle) { - return get(timeStyle, dateStyle, 3, Locale.getDefault()); + return get(timeStyle, dateStyle, 3, Locale.getDefault(Locale.Category.FORMAT)); } /**
--- a/src/share/classes/java/text/DateFormatSymbols.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/text/DateFormatSymbols.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -118,7 +118,7 @@ */ public DateFormatSymbols() { - initializeData(Locale.getDefault()); + initializeData(Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -226,7 +226,30 @@ * Unlocalized date-time pattern characters. For example: 'y', 'd', etc. * All locales use the same these unlocalized pattern characters. */ - static final String patternChars = "GyMdkHmsSEDFwWahKzZ"; + static final String patternChars = "GyMdkHmsSEDFwWahKzZYuX"; + + static final int PATTERN_ERA = 0; // G + static final int PATTERN_YEAR = 1; // y + static final int PATTERN_MONTH = 2; // M + static final int PATTERN_DAY_OF_MONTH = 3; // d + static final int PATTERN_HOUR_OF_DAY1 = 4; // k + static final int PATTERN_HOUR_OF_DAY0 = 5; // H + static final int PATTERN_MINUTE = 6; // m + static final int PATTERN_SECOND = 7; // s + static final int PATTERN_MILLISECOND = 8; // S + static final int PATTERN_DAY_OF_WEEK = 9; // E + static final int PATTERN_DAY_OF_YEAR = 10; // D + static final int PATTERN_DAY_OF_WEEK_IN_MONTH = 11; // F + static final int PATTERN_WEEK_OF_YEAR = 12; // w + static final int PATTERN_WEEK_OF_MONTH = 13; // W + static final int PATTERN_AM_PM = 14; // a + static final int PATTERN_HOUR1 = 15; // h + static final int PATTERN_HOUR0 = 16; // K + static final int PATTERN_ZONE_NAME = 17; // z + static final int PATTERN_ZONE_VALUE = 18; // Z + static final int PATTERN_WEEK_YEAR = 19; // Y + static final int PATTERN_ISO_DAY_OF_WEEK = 20; // u + static final int PATTERN_ISO_ZONE = 21; // X /** * Localized date-time pattern characters. For example, a locale may @@ -282,7 +305,7 @@ * @since 1.6 */ public static final DateFormatSymbols getInstance() { - return getInstance(Locale.getDefault()); + return getInstance(Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -505,7 +528,7 @@ * @return the localized date-time pattern characters. */ public String getLocalPatternChars() { - return new String(localPatternChars); + return localPatternChars; } /** @@ -514,7 +537,8 @@ * pattern characters. */ public void setLocalPatternChars(String newLocalPatternChars) { - localPatternChars = new String(newLocalPatternChars); + // Call toString() to throw an NPE in case the argument is null + localPatternChars = newLocalPatternChars.toString(); } /** @@ -699,7 +723,7 @@ } else { dst.zoneStrings = null; } - dst.localPatternChars = new String (src.localPatternChars); + dst.localPatternChars = src.localPatternChars; } /**
--- a/src/share/classes/java/text/DecimalFormat.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/text/DecimalFormat.java Thu Sep 16 11:17:32 2010 -0700 @@ -392,7 +392,7 @@ * @see java.text.NumberFormat#getPercentInstance */ public DecimalFormat() { - Locale def = Locale.getDefault(); + Locale def = Locale.getDefault(Locale.Category.FORMAT); // try to get the pattern from the cache String pattern = (String) cachedLocaleData.get(def); if (pattern == null) { /* cache miss */ @@ -430,7 +430,7 @@ */ public DecimalFormat(String pattern) { // Always applyPattern after the symbols are set - this.symbols = new DecimalFormatSymbols(Locale.getDefault()); + this.symbols = new DecimalFormatSymbols(Locale.getDefault(Locale.Category.FORMAT)); applyPattern(pattern, false); }
--- a/src/share/classes/java/text/DecimalFormatSymbols.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/text/DecimalFormatSymbols.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,10 +43,10 @@ import java.io.Serializable; import java.text.spi.DecimalFormatSymbolsProvider; import java.util.Currency; -import java.util.Hashtable; import java.util.Locale; import java.util.ResourceBundle; -import java.util.spi.LocaleServiceProvider; +import java.util.concurrent.ConcurrentHashMap; + import sun.util.LocaleServiceProviderPool; import sun.util.resources.LocaleData; @@ -76,7 +76,7 @@ * {@link #getInstance(Locale) getInstance} method. */ public DecimalFormatSymbols() { - initialize( Locale.getDefault() ); + initialize( Locale.getDefault(Locale.Category.FORMAT) ); } /** @@ -125,7 +125,7 @@ * @since 1.6 */ public static final DecimalFormatSymbols getInstance() { - return getInstance(Locale.getDefault()); + return getInstance(Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -527,10 +527,17 @@ // get resource bundle data - try the cache first boolean needCacheUpdate = false; - Object[] data = (Object[]) cachedLocaleData.get(locale); + Object[] data = cachedLocaleData.get(locale); if (data == null) { /* cache miss */ + // When numbering system is thai (Locale's extension contains u-nu-thai), + // we read the data from th_TH_TH. + Locale lookupLocale = locale; + String numberType = locale.getUnicodeLocaleType("nu"); + if (numberType != null && numberType.equals("thai")) { + lookupLocale = new Locale("th", "TH", "TH"); + } data = new Object[3]; - ResourceBundle rb = LocaleData.getNumberFormatData(locale); + ResourceBundle rb = LocaleData.getNumberFormatData(lookupLocale); data[0] = rb.getStringArray("NumberElements"); needCacheUpdate = true; } @@ -586,7 +593,7 @@ monetarySeparator = decimalSeparator; if (needCacheUpdate) { - cachedLocaleData.put(locale, data); + cachedLocaleData.putIfAbsent(locale, data); } } @@ -806,7 +813,7 @@ * cache to hold the NumberElements and the Currency * of a Locale. */ - private static final Hashtable cachedLocaleData = new Hashtable(3); + private static final ConcurrentHashMap<Locale, Object[]> cachedLocaleData = new ConcurrentHashMap<Locale, Object[]>(3); /** * Obtains a DecimalFormatSymbols instance from a DecimalFormatSymbolsProvider
--- a/src/share/classes/java/text/MessageFormat.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/text/MessageFormat.java Thu Sep 16 11:17:32 2010 -0700 @@ -363,7 +363,7 @@ * @exception IllegalArgumentException if the pattern is invalid */ public MessageFormat(String pattern) { - this.locale = Locale.getDefault(); + this.locale = Locale.getDefault(Locale.Category.FORMAT); applyPattern(pattern); }
--- a/src/share/classes/java/text/NumberFormat.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/text/NumberFormat.java Thu Sep 16 11:17:32 2010 -0700 @@ -381,7 +381,7 @@ * {@link #getNumberInstance() getNumberInstance()}. */ public final static NumberFormat getInstance() { - return getInstance(Locale.getDefault(), NUMBERSTYLE); + return getInstance(Locale.getDefault(Locale.Category.FORMAT), NUMBERSTYLE); } /** @@ -397,7 +397,7 @@ * Returns a general-purpose number format for the current default locale. */ public final static NumberFormat getNumberInstance() { - return getInstance(Locale.getDefault(), NUMBERSTYLE); + return getInstance(Locale.getDefault(Locale.Category.FORMAT), NUMBERSTYLE); } /** @@ -420,7 +420,7 @@ * @since 1.4 */ public final static NumberFormat getIntegerInstance() { - return getInstance(Locale.getDefault(), INTEGERSTYLE); + return getInstance(Locale.getDefault(Locale.Category.FORMAT), INTEGERSTYLE); } /** @@ -443,7 +443,7 @@ * Returns a currency format for the current default locale. */ public final static NumberFormat getCurrencyInstance() { - return getInstance(Locale.getDefault(), CURRENCYSTYLE); + return getInstance(Locale.getDefault(Locale.Category.FORMAT), CURRENCYSTYLE); } /** @@ -457,7 +457,7 @@ * Returns a percentage format for the current default locale. */ public final static NumberFormat getPercentInstance() { - return getInstance(Locale.getDefault(), PERCENTSTYLE); + return getInstance(Locale.getDefault(Locale.Category.FORMAT), PERCENTSTYLE); } /** @@ -471,7 +471,7 @@ * Returns a scientific format for the current default locale. */ /*public*/ final static NumberFormat getScientificInstance() { - return getInstance(Locale.getDefault(), SCIENTIFICSTYLE); + return getInstance(Locale.getDefault(Locale.Category.FORMAT), SCIENTIFICSTYLE); } /**
--- a/src/share/classes/java/text/SimpleDateFormat.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/text/SimpleDateFormat.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -55,6 +55,8 @@ import sun.util.calendar.ZoneInfoFile; import sun.util.resources.LocaleData; +import static java.text.DateFormatSymbols.*; + /** * <code>SimpleDateFormat</code> is a concrete class for formatting and * parsing dates in a locale-sensitive manner. It allows for formatting @@ -108,40 +110,50 @@ * <td><a href="#year">Year</a> * <td><code>1996</code>; <code>96</code> * <tr> + * <td><code>Y</code> + * <td>Week year + * <td><a href="#year">Year</a> + * <td><code>2009</code>; <code>09</code> + * <tr bgcolor="#eeeeff"> * <td><code>M</code> * <td>Month in year * <td><a href="#month">Month</a> * <td><code>July</code>; <code>Jul</code>; <code>07</code> - * <tr bgcolor="#eeeeff"> + * <tr> * <td><code>w</code> * <td>Week in year * <td><a href="#number">Number</a> * <td><code>27</code> - * <tr> + * <tr bgcolor="#eeeeff"> * <td><code>W</code> * <td>Week in month * <td><a href="#number">Number</a> * <td><code>2</code> - * <tr bgcolor="#eeeeff"> + * <tr> * <td><code>D</code> * <td>Day in year * <td><a href="#number">Number</a> * <td><code>189</code> - * <tr> + * <tr bgcolor="#eeeeff"> * <td><code>d</code> * <td>Day in month * <td><a href="#number">Number</a> * <td><code>10</code> - * <tr bgcolor="#eeeeff"> + * <tr> * <td><code>F</code> * <td>Day of week in month * <td><a href="#number">Number</a> * <td><code>2</code> - * <tr> + * <tr bgcolor="#eeeeff"> * <td><code>E</code> - * <td>Day in week + * <td>Day name in week * <td><a href="#text">Text</a> * <td><code>Tuesday</code>; <code>Tue</code> + * <tr> + * <td><code>u</code> + * <td>Day number of week (1 = Monday, ..., 7 = Sunday) + * <td><a href="#number">Number</a> + * <td><code>1</code> * <tr bgcolor="#eeeeff"> * <td><code>a</code> * <td>Am/pm marker @@ -192,6 +204,11 @@ * <td>Time zone * <td><a href="#rfc822timezone">RFC 822 time zone</a> * <td><code>-0800</code> + * <tr bgcolor="#eeeeff"> + * <td><code>X</code> + * <td>Time zone + * <td><a href="#iso8601timezone">ISO 8601 time zone</a> + * <td><code>-08</code>; <code>-0800</code>; <code>-08:00</code> * </table> * </blockquote> * Pattern letters are usually repeated, as their number determines the @@ -202,12 +219,12 @@ * the full form is used; otherwise a short or abbreviated form * is used if available. * For parsing, both forms are accepted, independent of the number - * of pattern letters. + * of pattern letters.<br><br></li> * <li><strong><a name="number">Number:</a></strong> * For formatting, the number of pattern letters is the minimum * number of digits, and shorter numbers are zero-padded to this amount. * For parsing, the number of pattern letters is ignored unless - * it's needed to separate two adjacent fields. + * it's needed to separate two adjacent fields.<br><br></li> * <li><strong><a name="year">Year:</a></strong> * If the formatter's {@link #getCalendar() Calendar} is the Gregorian * calendar, the following rules are applied.<br> @@ -239,11 +256,20 @@ * letters is 4 or more, a calendar specific {@linkplain * Calendar#LONG long form} is used. Otherwise, a calendar * specific {@linkplain Calendar#SHORT short or abbreviated form} - * is used. + * is used.<br> + * <br> + * If week year {@code 'Y'} is specified and the {@linkplain + * #getCalendar() calendar} doesn't support any <a + * href="../util/GregorianCalendar.html#week_year"> week + * years</a>, the calendar year ({@code 'y'}) is used instead. The + * support of week years can be tested with a call to {@link + * DateFormat#getCalendar() getCalendar()}.{@link + * java.util.Calendar#isWeekDateSupported() + * isWeekDateSupported()}.<br><br></li> * <li><strong><a name="month">Month:</a></strong> * If the number of pattern letters is 3 or more, the month is * interpreted as <a href="#text">text</a>; otherwise, - * it is interpreted as a <a href="#number">number</a>. + * it is interpreted as a <a href="#number">number</a>.<br><br></li> * <li><strong><a name="timezone">General time zone:</a></strong> * Time zones are interpreted as <a href="#text">text</a> if they have * names. For time zones representing a GMT offset value, the @@ -264,9 +290,10 @@ * 00 and 59. The format is locale independent and digits must be taken * from the Basic Latin block of the Unicode standard. * <p>For parsing, <a href="#rfc822timezone">RFC 822 time zones</a> are also - * accepted. + * accepted.<br><br></li> * <li><strong><a name="rfc822timezone">RFC 822 time zone:</a></strong> * For formatting, the RFC 822 4-digit time zone format is used: + * * <pre> * <i>RFC822TimeZone:</i> * <i>Sign</i> <i>TwoDigitHours</i> <i>Minutes</i> @@ -274,8 +301,41 @@ * <i>Digit Digit</i></pre> * <i>TwoDigitHours</i> must be between 00 and 23. Other definitions * are as for <a href="#timezone">general time zones</a>. + * * <p>For parsing, <a href="#timezone">general time zones</a> are also * accepted. + * <li><strong><a name="iso8601timezone">ISO 8601 Time zone:</a></strong> + * The number of pattern letters designates the format for both formatting + * and parsing as follows: + * <pre> + * <i>ISO8601TimeZone:</i> + * <i>OneLetterISO8601TimeZone</i> + * <i>TwoLetterISO8601TimeZone</i> + * <i>ThreeLetterISO8601TimeZone</i> + * <i>OneLetterISO8601TimeZone:</i> + * <i>Sign</i> <i>TwoDigitHours</i> + * {@code Z} + * <i>TwoLetterISO8601TimeZone:</i> + * <i>Sign</i> <i>TwoDigitHours</i> <i>Minutes</i> + * {@code Z} + * <i>ThreeLetterISO8601TimeZone:</i> + * <i>Sign</i> <i>TwoDigitHours</i> {@code :} <i>Minutes</i> + * {@code Z}</pre> + * Other definitions are as for <a href="#timezone">general time zones</a> or + * <a href="#rfc822timezone">RFC 822 time zones</a>. + * + * <p>For formatting, if the offset value from GMT is 0, {@code "Z"} is + * produced. If the number of pattern letters is 1, any fraction of an hour + * is ignored. For example, if the pattern is {@code "X"} and the time zone is + * {@code "GMT+05:30"}, {@code "+05"} is produced. + * + * <p>For parsing, {@code "Z"} is parsed as the UTC time zone designator. + * <a href="#timezone">General time zones</a> are <em>not</em> accepted. + * + * <p>If the number of pattern letters is 4 or more, {@link + * IllegalArgumentException} is thrown when constructing a {@code + * SimpleDateFormat} or {@linkplain #applyPattern(String) applying a + * pattern}. * </ul> * <code>SimpleDateFormat</code> also supports <em>localized date and time * pattern</em> strings. In these strings, the pattern letters described above @@ -321,6 +381,12 @@ * <tr> * <td><code>"yyyy-MM-dd'T'HH:mm:ss.SSSZ"</code> * <td><code>2001-07-04T12:08:56.235-0700</code> + * <tr bgcolor="#eeeeff"> + * <td><code>"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"</code> + * <td><code>2001-07-04T12:08:56.235-07:00</code> + * <tr> + * <td><code>"YYYY-'W'ww-u"</code> + * <td><code>2001-W27-3</code> * </table> * </blockquote> * @@ -474,7 +540,7 @@ * class. */ public SimpleDateFormat() { - this(SHORT, SHORT, Locale.getDefault()); + this(SHORT, SHORT, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -490,7 +556,7 @@ */ public SimpleDateFormat(String pattern) { - this(pattern, Locale.getDefault()); + this(pattern, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -535,7 +601,7 @@ this.pattern = pattern; this.formatData = (DateFormatSymbols) formatSymbols.clone(); - this.locale = Locale.getDefault(); + this.locale = Locale.getDefault(Locale.Category.FORMAT); initializeCalendar(this.locale); initialize(this.locale); useDateFormatSymbols = true; @@ -815,6 +881,9 @@ * Encodes the given tag and length and puts encoded char(s) into buffer. */ private static final void encode(int tag, int length, StringBuilder buffer) { + if (tag == PATTERN_ISO_ZONE && length >= 4) { + throw new IllegalArgumentException("invalid ISO 8601 format: length=" + length); + } if (length < 255) { buffer.append((char)(tag << 8 | length)); } else { @@ -877,7 +946,7 @@ * @param pos the formatting position. On input: an alignment field, * if desired. On output: the offsets of the alignment field. * @return the formatted date-time string. - * @exception NullPointerException if the given date is null + * @exception NullPointerException if the given {@code date} is {@code null}. */ public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos) @@ -968,6 +1037,10 @@ Calendar.DAY_OF_YEAR, Calendar.DAY_OF_WEEK_IN_MONTH, Calendar.WEEK_OF_YEAR, Calendar.WEEK_OF_MONTH, Calendar.AM_PM, Calendar.HOUR, Calendar.HOUR, Calendar.ZONE_OFFSET, + Calendar.ZONE_OFFSET, + // Pseudo Calendar fields + CalendarBuilder.WEEK_YEAR, + CalendarBuilder.ISO_DAY_OF_WEEK, Calendar.ZONE_OFFSET }; @@ -982,6 +1055,8 @@ DateFormat.WEEK_OF_MONTH_FIELD, DateFormat.AM_PM_FIELD, DateFormat.HOUR1_FIELD, DateFormat.HOUR0_FIELD, DateFormat.TIMEZONE_FIELD, DateFormat.TIMEZONE_FIELD, + DateFormat.YEAR_FIELD, DateFormat.DAY_OF_WEEK_FIELD, + DateFormat.TIMEZONE_FIELD }; // Maps from DecimalFormatSymbols index to Field constant @@ -993,6 +1068,8 @@ Field.WEEK_OF_YEAR, Field.WEEK_OF_MONTH, Field.AM_PM, Field.HOUR1, Field.HOUR0, Field.TIME_ZONE, Field.TIME_ZONE, + Field.YEAR, Field.DAY_OF_WEEK, + Field.TIME_ZONE }; /** @@ -1007,9 +1084,24 @@ int beginOffset = buffer.length(); int field = PATTERN_INDEX_TO_CALENDAR_FIELD[patternCharIndex]; - int value = calendar.get(field); + int value; + if (field == CalendarBuilder.WEEK_YEAR) { + if (calendar.isWeekDateSupported()) { + value = calendar.getWeekYear(); + } else { + // use calendar year 'y' instead + patternCharIndex = PATTERN_YEAR; + field = PATTERN_INDEX_TO_CALENDAR_FIELD[patternCharIndex]; + value = calendar.get(field); + } + } else if (field == CalendarBuilder.ISO_DAY_OF_WEEK) { + value = CalendarBuilder.toISODayOfWeek(calendar.get(Calendar.DAY_OF_WEEK)); + } else { + value = calendar.get(field); + } + int style = (count >= 4) ? Calendar.LONG : Calendar.SHORT; - if (!useDateFormatSymbols) { + if (!useDateFormatSymbols && field != CalendarBuilder.ISO_DAY_OF_WEEK) { current = calendar.getDisplayName(field, style, locale); } @@ -1018,7 +1110,7 @@ // zeroPaddingNumber() must be fixed. switch (patternCharIndex) { - case 0: // 'G' - ERA + case PATTERN_ERA: // 'G' if (useDateFormatSymbols) { String[] eras = formatData.getEras(); if (value < eras.length) @@ -1028,7 +1120,8 @@ current = ""; break; - case 1: // 'y' - YEAR + case PATTERN_WEEK_YEAR: // 'Y' + case PATTERN_YEAR: // 'y' if (calendar instanceof GregorianCalendar) { if (count != 2) zeroPaddingNumber(value, count, maxIntCount, buffer); @@ -1042,7 +1135,7 @@ } break; - case 2: // 'M' - MONTH + case PATTERN_MONTH: // 'M' if (useDateFormatSymbols) { String[] months; if (count >= 4) { @@ -1062,7 +1155,7 @@ } break; - case 4: // 'k' - HOUR_OF_DAY: 1-based. eg, 23:59 + 1 hour =>> 24:59 + case PATTERN_HOUR_OF_DAY1: // 'k' 1-based. eg, 23:59 + 1 hour =>> 24:59 if (current == null) { if (value == 0) zeroPaddingNumber(calendar.getMaximum(Calendar.HOUR_OF_DAY)+1, @@ -1072,7 +1165,7 @@ } break; - case 9: // 'E' - DAY_OF_WEEK + case PATTERN_DAY_OF_WEEK: // 'E' if (useDateFormatSymbols) { String[] weekdays; if (count >= 4) { @@ -1085,14 +1178,14 @@ } break; - case 14: // 'a' - AM_PM + case PATTERN_AM_PM: // 'a' if (useDateFormatSymbols) { String[] ampm = formatData.getAmPmStrings(); current = ampm[value]; } break; - case 15: // 'h' - HOUR:1-based. eg, 11PM + 1 hour =>> 12 AM + case PATTERN_HOUR1: // 'h' 1-based. eg, 11PM + 1 hour =>> 12 AM if (current == null) { if (value == 0) zeroPaddingNumber(calendar.getLeastMaximum(Calendar.HOUR)+1, @@ -1102,7 +1195,7 @@ } break; - case 17: // 'z' - ZONE_OFFSET + case PATTERN_ZONE_NAME: // 'z' if (current == null) { if (formatData.locale == null || formatData.isZoneStringsSet) { int zoneIndex = @@ -1129,7 +1222,7 @@ } break; - case 18: // 'Z' - ZONE_OFFSET ("-/+hhmm" form) + case PATTERN_ZONE_VALUE: // 'Z' ("-/+hhmm" form) value = (calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET)) / 60000; @@ -1144,17 +1237,46 @@ CalendarUtils.sprintf0d(buffer, num, width); break; + case PATTERN_ISO_ZONE: // 'X' + value = calendar.get(Calendar.ZONE_OFFSET) + + calendar.get(Calendar.DST_OFFSET); + + if (value == 0) { + buffer.append('Z'); + break; + } + + value /= 60000; + if (value >= 0) { + buffer.append('+'); + } else { + buffer.append('-'); + value = -value; + } + + CalendarUtils.sprintf0d(buffer, value / 60, 2); + if (count == 1) { + break; + } + + if (count == 3) { + buffer.append(':'); + } + CalendarUtils.sprintf0d(buffer, value % 60, 2); + break; + default: - // case 3: // 'd' - DATE - // case 5: // 'H' - HOUR_OF_DAY:0-based. eg, 23:59 + 1 hour =>> 00:59 - // case 6: // 'm' - MINUTE - // case 7: // 's' - SECOND - // case 8: // 'S' - MILLISECOND - // case 10: // 'D' - DAY_OF_YEAR - // case 11: // 'F' - DAY_OF_WEEK_IN_MONTH - // case 12: // 'w' - WEEK_OF_YEAR - // case 13: // 'W' - WEEK_OF_MONTH - // case 16: // 'K' - HOUR: 0-based. eg, 11PM + 1 hour =>> 0 AM + // case PATTERN_DAY_OF_MONTH: // 'd' + // case PATTERN_HOUR_OF_DAY0: // 'H' 0-based. eg, 23:59 + 1 hour =>> 00:59 + // case PATTERN_MINUTE: // 'm' + // case PATTERN_SECOND: // 's' + // case PATTERN_MILLISECOND: // 'S' + // case PATTERN_DAY_OF_YEAR: // 'D' + // case PATTERN_DAY_OF_WEEK_IN_MONTH: // 'F' + // case PATTERN_WEEK_OF_YEAR: // 'w' + // case PATTERN_WEEK_OF_MONTH: // 'W' + // case PATTERN_HOUR0: // 'K' eg, 11PM + 1 hour =>> 0 AM + // case PATTERN_ISO_DAY_OF_WEEK: // 'u' pseudo field, Monday = 1, ..., Sunday = 7 if (current == null) { zeroPaddingNumber(value, count, maxIntCount, buffer); } @@ -1264,10 +1386,9 @@ int oldStart = start; int textLength = text.length(); - calendar.clear(); // Clears all the time fields - boolean[] ambiguousYear = {false}; + CalendarBuilder calb = new CalendarBuilder(); for (int i = 0; i < compiledPattern.length; ) { int tag = compiledPattern[i] >>> 8; @@ -1340,7 +1461,7 @@ } start = subParse(text, start, tag, count, obeyCount, ambiguousYear, pos, - useFollowingMinusSignAsDelimiter); + useFollowingMinusSignAsDelimiter, calb); if (start < 0) { pos.index = oldStart; return null; @@ -1354,46 +1475,16 @@ pos.index = start; - // This part is a problem: When we call parsedDate.after, we compute the time. - // Take the date April 3 2004 at 2:30 am. When this is first set up, the year - // will be wrong if we're parsing a 2-digit year pattern. It will be 1904. - // April 3 1904 is a Sunday (unlike 2004) so it is the DST onset day. 2:30 am - // is therefore an "impossible" time, since the time goes from 1:59 to 3:00 am - // on that day. It is therefore parsed out to fields as 3:30 am. Then we - // add 100 years, and get April 3 2004 at 3:30 am. Note that April 3 2004 is - // a Saturday, so it can have a 2:30 am -- and it should. [LIU] - /* - Date parsedDate = calendar.getTime(); - if( ambiguousYear[0] && !parsedDate.after(defaultCenturyStart) ) { - calendar.add(Calendar.YEAR, 100); - parsedDate = calendar.getTime(); - } - */ - // Because of the above condition, save off the fields in case we need to readjust. - // The procedure we use here is not particularly efficient, but there is no other - // way to do this given the API restrictions present in Calendar. We minimize - // inefficiency by only performing this computation when it might apply, that is, - // when the two-digit year is equal to the start year, and thus might fall at the - // front or the back of the default century. This only works because we adjust - // the year correctly to start with in other cases -- see subParse(). Date parsedDate; try { - if (ambiguousYear[0]) // If this is true then the two-digit year == the default start year - { - // We need a copy of the fields, and we need to avoid triggering a call to - // complete(), which will recalculate the fields. Since we can't access - // the fields[] array in Calendar, we clone the entire object. This will - // stop working if Calendar.clone() is ever rewritten to call complete(). - Calendar savedCalendar = (Calendar)calendar.clone(); - parsedDate = calendar.getTime(); - if (parsedDate.before(defaultCenturyStart)) - { - // We can't use add here because that does a complete() first. - savedCalendar.set(Calendar.YEAR, defaultCenturyStartYear + 100); - parsedDate = savedCalendar.getTime(); + parsedDate = calb.establish(calendar).getTime(); + // If the year value is ambiguous, + // then the two-digit year == the default start year + if (ambiguousYear[0]) { + if (parsedDate.before(defaultCenturyStart)) { + parsedDate = calb.addYear(100).establish(calendar).getTime(); } } - else parsedDate = calendar.getTime(); } // An IllegalArgumentException will be thrown by Calendar.getTime() // if any fields are out of range, e.g., MONTH == 17. @@ -1415,7 +1506,7 @@ * @return the new start position if matching succeeded; a negative number * indicating matching failure, otherwise. */ - private int matchString(String text, int start, int field, String[] data) + private int matchString(String text, int start, int field, String[] data, CalendarBuilder calb) { int i = 0; int count = data.length; @@ -1441,7 +1532,7 @@ } if (bestMatch >= 0) { - calendar.set(field, bestMatch); + calb.set(field, bestMatch); return start + bestMatchLength; } return -start; @@ -1452,7 +1543,8 @@ * String[]). This method takes a Map<String, Integer> instead of * String[]. */ - private int matchString(String text, int start, int field, Map<String,Integer> data) { + private int matchString(String text, int start, int field, + Map<String,Integer> data, CalendarBuilder calb) { if (data != null) { String bestMatch = null; @@ -1466,7 +1558,7 @@ } if (bestMatch != null) { - calendar.set(field, data.get(bestMatch)); + calb.set(field, data.get(bestMatch)); return start + bestMatch.length(); } } @@ -1486,11 +1578,22 @@ return -1; } + private boolean matchDSTString(String text, int start, int zoneIndex, int standardIndex, + String[][] zoneStrings) { + int index = standardIndex + 2; + String zoneName = zoneStrings[zoneIndex][index]; + if (text.regionMatches(true, start, + zoneName, 0, zoneName.length())) { + return true; + } + return false; + } + /** * find time zone 'text' matched zoneStrings and set to internal * calendar. */ - private int subParseZoneString(String text, int start) { + private int subParseZoneString(String text, int start, CalendarBuilder calb) { boolean useSameName = false; // true if standard and daylight time use the same abbreviation. TimeZone currentTimeZone = getTimeZone(); @@ -1524,6 +1627,7 @@ } } } + if (tz == null) { int len = zoneStrings.length; for (int i = 0; i < len; i++) { @@ -1549,8 +1653,8 @@ // determine the local time. (6645292) int dstAmount = (nameIndex >= 3) ? tz.getDSTSavings() : 0; if (!(useSameName || (nameIndex >= 3 && dstAmount == 0))) { - calendar.set(Calendar.ZONE_OFFSET, tz.getRawOffset()); - calendar.set(Calendar.DST_OFFSET, dstAmount); + calb.set(Calendar.ZONE_OFFSET, tz.getRawOffset()) + .set(Calendar.DST_OFFSET, dstAmount); } return (start + zoneNames[nameIndex].length()); } @@ -1577,11 +1681,15 @@ private int subParse(String text, int start, int patternCharIndex, int count, boolean obeyCount, boolean[] ambiguousYear, ParsePosition origPos, - boolean useFollowingMinusSignAsDelimiter) { + boolean useFollowingMinusSignAsDelimiter, CalendarBuilder calb) { Number number = null; int value = 0; ParsePosition pos = new ParsePosition(0); pos.index = start; + if (patternCharIndex == PATTERN_WEEK_YEAR && !calendar.isWeekDateSupported()) { + // use calendar year 'y' instead + patternCharIndex = PATTERN_YEAR; + } int field = PATTERN_INDEX_TO_CALENDAR_FIELD[patternCharIndex]; // If there are any spaces here, skip over them. If we hit the end @@ -1602,10 +1710,11 @@ // a number value. We handle further, more generic cases below. We need // to handle some of them here because some fields require extra processing on // the parsed value. - if (patternCharIndex == 4 /* HOUR_OF_DAY1_FIELD */ || - patternCharIndex == 15 /* HOUR1_FIELD */ || - (patternCharIndex == 2 /* MONTH_FIELD */ && count <= 2) || - patternCharIndex == 1 /* YEAR_FIELD */) { + if (patternCharIndex == PATTERN_HOUR_OF_DAY1 || + patternCharIndex == PATTERN_HOUR1 || + (patternCharIndex == PATTERN_MONTH && count <= 2) || + patternCharIndex == PATTERN_YEAR || + patternCharIndex == PATTERN_WEEK_YEAR) { // It would be good to unify this with the obeyCount logic below, // but that's going to be difficult. if (obeyCount) { @@ -1617,7 +1726,7 @@ number = numberFormat.parse(text, pos); } if (number == null) { - if (patternCharIndex != 1 || calendar instanceof GregorianCalendar) { + if (patternCharIndex != PATTERN_YEAR || calendar instanceof GregorianCalendar) { break parsing; } } else { @@ -1638,33 +1747,34 @@ int index; switch (patternCharIndex) { - case 0: // 'G' - ERA + case PATTERN_ERA: // 'G' if (useDateFormatSymbols) { - if ((index = matchString(text, start, Calendar.ERA, formatData.getEras())) > 0) { + if ((index = matchString(text, start, Calendar.ERA, formatData.getEras(), calb)) > 0) { return index; } } else { Map<String, Integer> map = calendar.getDisplayNames(field, Calendar.ALL_STYLES, locale); - if ((index = matchString(text, start, field, map)) > 0) { + if ((index = matchString(text, start, field, map, calb)) > 0) { return index; } } break parsing; - case 1: // 'y' - YEAR + case PATTERN_WEEK_YEAR: // 'Y' + case PATTERN_YEAR: // 'y' if (!(calendar instanceof GregorianCalendar)) { // calendar might have text representations for year values, // such as "\u5143" in JapaneseImperialCalendar. int style = (count >= 4) ? Calendar.LONG : Calendar.SHORT; Map<String, Integer> map = calendar.getDisplayNames(field, style, locale); if (map != null) { - if ((index = matchString(text, start, field, map)) > 0) { + if ((index = matchString(text, start, field, map, calb)) > 0) { return index; } } - calendar.set(field, value); + calb.set(field, value); return pos.index; } @@ -1676,8 +1786,7 @@ // is treated literally: "2250", "-1", "1", "002". if (count <= 2 && (pos.index - start) == 2 && Character.isDigit(text.charAt(start)) - && Character.isDigit(text.charAt(start+1))) - { + && Character.isDigit(text.charAt(start+1))) { // Assume for example that the defaultCenturyStart is 6/18/1903. // This means that two-digit years will be forced into the range // 6/18/1903 to 6/17/2003. As a result, years 00, 01, and 02 @@ -1691,16 +1800,16 @@ value += (defaultCenturyStartYear/100)*100 + (value < ambiguousTwoDigitYear ? 100 : 0); } - calendar.set(Calendar.YEAR, value); + calb.set(field, value); return pos.index; - case 2: // 'M' - MONTH + case PATTERN_MONTH: // 'M' if (count <= 2) // i.e., M or MM. { // Don't want to parse the month if it is a string // while pattern uses numeric style: M or MM. // [We computed 'value' above.] - calendar.set(Calendar.MONTH, value - 1); + calb.set(Calendar.MONTH, value - 1); return pos.index; } @@ -1710,50 +1819,50 @@ // Try count == 4 first: int newStart = 0; if ((newStart = matchString(text, start, Calendar.MONTH, - formatData.getMonths())) > 0) { + formatData.getMonths(), calb)) > 0) { return newStart; } // count == 4 failed, now try count == 3 if ((index = matchString(text, start, Calendar.MONTH, - formatData.getShortMonths())) > 0) { + formatData.getShortMonths(), calb)) > 0) { return index; } } else { Map<String, Integer> map = calendar.getDisplayNames(field, Calendar.ALL_STYLES, locale); - if ((index = matchString(text, start, field, map)) > 0) { + if ((index = matchString(text, start, field, map, calb)) > 0) { return index; } } break parsing; - case 4: // 'k' - HOUR_OF_DAY: 1-based. eg, 23:59 + 1 hour =>> 24:59 + case PATTERN_HOUR_OF_DAY1: // 'k' 1-based. eg, 23:59 + 1 hour =>> 24:59 // [We computed 'value' above.] if (value == calendar.getMaximum(Calendar.HOUR_OF_DAY)+1) value = 0; - calendar.set(Calendar.HOUR_OF_DAY, value); + calb.set(Calendar.HOUR_OF_DAY, value); return pos.index; - case 9: - { // 'E' - DAY_OF_WEEK + case PATTERN_DAY_OF_WEEK: // 'E' + { if (useDateFormatSymbols) { // Want to be able to parse both short and long forms. // Try count == 4 (DDDD) first: int newStart = 0; if ((newStart=matchString(text, start, Calendar.DAY_OF_WEEK, - formatData.getWeekdays())) > 0) { + formatData.getWeekdays(), calb)) > 0) { return newStart; } // DDDD failed, now try DDD if ((index = matchString(text, start, Calendar.DAY_OF_WEEK, - formatData.getShortWeekdays())) > 0) { + formatData.getShortWeekdays(), calb)) > 0) { return index; } } else { int[] styles = { Calendar.LONG, Calendar.SHORT }; for (int style : styles) { Map<String,Integer> map = calendar.getDisplayNames(field, style, locale); - if ((index = matchString(text, start, field, map)) > 0) { + if ((index = matchString(text, start, field, map, calb)) > 0) { return index; } } @@ -1761,27 +1870,28 @@ } break parsing; - case 14: // 'a' - AM_PM + case PATTERN_AM_PM: // 'a' if (useDateFormatSymbols) { - if ((index = matchString(text, start, Calendar.AM_PM, formatData.getAmPmStrings())) > 0) { + if ((index = matchString(text, start, Calendar.AM_PM, + formatData.getAmPmStrings(), calb)) > 0) { return index; } } else { Map<String,Integer> map = calendar.getDisplayNames(field, Calendar.ALL_STYLES, locale); - if ((index = matchString(text, start, field, map)) > 0) { + if ((index = matchString(text, start, field, map, calb)) > 0) { return index; } } break parsing; - case 15: // 'h' - HOUR:1-based. eg, 11PM + 1 hour =>> 12 AM + case PATTERN_HOUR1: // 'h' 1-based. eg, 11PM + 1 hour =>> 12 AM // [We computed 'value' above.] if (value == calendar.getLeastMaximum(Calendar.HOUR)+1) value = 0; - calendar.set(Calendar.HOUR, value); + calb.set(Calendar.HOUR, value); return pos.index; - case 17: // 'z' - ZONE_OFFSET - case 18: // 'Z' - ZONE_OFFSET + case PATTERN_ZONE_NAME: // 'z' + case PATTERN_ZONE_VALUE: // 'Z' // First try to parse generic forms such as GMT-07:00. Do this first // in case localized TimeZoneNames contains the string "GMT" // for a zone; in that case, we don't want to match the first three @@ -1797,7 +1907,7 @@ if ((text.length() - start) >= GMT.length() && text.regionMatches(true, start, GMT, 0, GMT.length())) { int num; - calendar.set(Calendar.DST_OFFSET, 0); + calb.set(Calendar.DST_OFFSET, 0); pos.index = start + GMT.length(); try { // try-catch for "GMT" only time zone string @@ -1810,8 +1920,8 @@ } catch(StringIndexOutOfBoundsException e) {} - if (sign == 0) { /* "GMT" without offset */ - calendar.set(Calendar.ZONE_OFFSET, 0); + if (sign == 0) { /* "GMT" without offset */ + calb.set(Calendar.ZONE_OFFSET, 0); return pos.index; } @@ -1875,7 +1985,7 @@ sign = -1; } else { // Try parsing the text as a time zone name (abbr). - int i = subParseZoneString(text, pos.index); + int i = subParseZoneString(text, pos.index, calb); if (i != 0) { return i; } @@ -1933,24 +2043,112 @@ // arrive here if the form GMT+/-... or an RFC 822 form was seen. if (sign != 0) { offset *= MILLIS_PER_MINUTE * sign; - calendar.set(Calendar.ZONE_OFFSET, offset); - calendar.set(Calendar.DST_OFFSET, 0); + calb.set(Calendar.ZONE_OFFSET, offset).set(Calendar.DST_OFFSET, 0); + return ++pos.index; + } + } + break parsing; + + case PATTERN_ISO_ZONE: // 'X' + { + int sign = 0; + int offset = 0; + + iso8601: { + try { + char c = text.charAt(pos.index); + if (c == 'Z') { + calb.set(Calendar.ZONE_OFFSET, 0).set(Calendar.DST_OFFSET, 0); + return ++pos.index; + } + + // parse text as "+/-hh[[:]mm]" based on count + if (c == '+') { + sign = 1; + } else if (c == '-') { + sign = -1; + } + // Look for hh. + int hours = 0; + c = text.charAt(++pos.index); + if (c < '0' || c > '9') { /* must be from '0' to '9'. */ + break parsing; + } + hours = c - '0'; + c = text.charAt(++pos.index); + if (c < '0' || c > '9') { /* must be from '0' to '9'. */ + break parsing; + } + hours *= 10; + hours += c - '0'; + if (hours > 23) { + break parsing; + } + + if (count == 1) { // "X" + offset = hours * 60; + break iso8601; + } + + c = text.charAt(++pos.index); + // Skip ':' if "XXX" + if (c == ':') { + if (count == 2) { + break parsing; + } + c = text.charAt(++pos.index); + } else { + if (count == 3) { + // missing ':' + break parsing; + } + } + + // Look for mm. + int minutes = 0; + if (c < '0' || c > '9') { /* must be from '0' to '9'. */ + break parsing; + } + minutes = c - '0'; + c = text.charAt(++pos.index); + if (c < '0' || c > '9') { /* must be from '0' to '9'. */ + break parsing; + } + minutes *= 10; + minutes += c - '0'; + + if (minutes > 59) { + break parsing; + } + + offset = hours * 60 + minutes; + } catch (StringIndexOutOfBoundsException e) { + break parsing; + } + } + + // Do the final processing for both of the above cases. We only + // arrive here if the form GMT+/-... or an RFC 822 form was seen. + if (sign != 0) { + offset *= MILLIS_PER_MINUTE * sign; + calb.set(Calendar.ZONE_OFFSET, offset).set(Calendar.DST_OFFSET, 0); return ++pos.index; } } break parsing; default: - // case 3: // 'd' - DATE - // case 5: // 'H' - HOUR_OF_DAY:0-based. eg, 23:59 + 1 hour =>> 00:59 - // case 6: // 'm' - MINUTE - // case 7: // 's' - SECOND - // case 8: // 'S' - MILLISECOND - // case 10: // 'D' - DAY_OF_YEAR - // case 11: // 'F' - DAY_OF_WEEK_IN_MONTH - // case 12: // 'w' - WEEK_OF_YEAR - // case 13: // 'W' - WEEK_OF_MONTH - // case 16: // 'K' - HOUR: 0-based. eg, 11PM + 1 hour =>> 0 AM + // case PATTERN_DAY_OF_MONTH: // 'd' + // case PATTERN_HOUR_OF_DAY0: // 'H' 0-based. eg, 23:59 + 1 hour =>> 00:59 + // case PATTERN_MINUTE: // 'm' + // case PATTERN_SECOND: // 's' + // case PATTERN_MILLISECOND: // 'S' + // case PATTERN_DAY_OF_YEAR: // 'D' + // case PATTERN_DAY_OF_WEEK_IN_MONTH: // 'F' + // case PATTERN_WEEK_OF_YEAR: // 'w' + // case PATTERN_WEEK_OF_MONTH: // 'W' + // case PATTERN_HOUR0: // 'K' 0-based. eg, 11PM + 1 hour =>> 0 AM + // case PATTERN_ISO_DAY_OF_WEEK: // 'u' (pseudo field); // Handle "generic" fields if (obeyCount) { @@ -1973,7 +2171,7 @@ pos.index--; } - calendar.set(field, value); + calb.set(field, value); return pos.index; } break parsing; @@ -2020,11 +2218,18 @@ inQuote = true; else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { int ci = from.indexOf(c); - if (ci == -1) + if (ci >= 0) { + // patternChars is longer than localPatternChars due + // to serialization compatibility. The pattern letters + // unsupported by localPatternChars pass through. + if (ci < to.length()) { + c = to.charAt(ci); + } + } else { throw new IllegalArgumentException("Illegal pattern " + " character '" + c + "'"); - c = to.charAt(ci); + } } } result.append(c); @@ -2061,7 +2266,7 @@ * @exception NullPointerException if the given pattern is null * @exception IllegalArgumentException if the given pattern is invalid */ - public void applyPattern (String pattern) + public void applyPattern(String pattern) { compiledPattern = compile(pattern); this.pattern = pattern;
--- a/src/share/classes/java/util/Calendar.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/util/Calendar.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -119,7 +119,7 @@ * calculating its time or calendar field values if any out-of-range field * value has been set. * - * <h4>First Week</h4> + * <h4><a name="first_week">First Week</a></h4> * * <code>Calendar</code> defines a locale-specific seven day week using two * parameters: the first day of the week and the minimal days in first week @@ -933,7 +933,7 @@ */ protected Calendar() { - this(TimeZone.getDefaultRef(), Locale.getDefault()); + this(TimeZone.getDefaultRef(), Locale.getDefault(Locale.Category.FORMAT)); sharedZone = true; } @@ -962,7 +962,7 @@ */ public static Calendar getInstance() { - Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault()); + Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault(Locale.Category.FORMAT)); cal.sharedZone = true; return cal; } @@ -977,7 +977,7 @@ */ public static Calendar getInstance(TimeZone zone) { - return createCalendar(zone, Locale.getDefault()); + return createCalendar(zone, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -1013,19 +1013,30 @@ private static Calendar createCalendar(TimeZone zone, Locale aLocale) { - // If the specified locale is a Thai locale, returns a BuddhistCalendar - // instance. - if ("th".equals(aLocale.getLanguage()) - && ("TH".equals(aLocale.getCountry()))) { - return new sun.util.BuddhistCalendar(zone, aLocale); - } else if ("JP".equals(aLocale.getVariant()) - && "JP".equals(aLocale.getCountry()) - && "ja".equals(aLocale.getLanguage())) { - return new JapaneseImperialCalendar(zone, aLocale); + Calendar cal = null; + + String caltype = aLocale.getUnicodeLocaleType("ca"); + if (caltype == null) { + // Calendar type is not specified. + // If the specified locale is a Thai locale, + // returns a BuddhistCalendar instance. + if ("th".equals(aLocale.getLanguage()) + && ("TH".equals(aLocale.getCountry()))) { + cal = new BuddhistCalendar(zone, aLocale); + } else { + cal = new GregorianCalendar(zone, aLocale); + } + } else if (caltype.equals("japanese")) { + cal = new JapaneseImperialCalendar(zone, aLocale); + } else if (caltype.equals("buddhist")) { + cal = new BuddhistCalendar(zone, aLocale); + } else { + // Unsupported calendar type. + // Use Gregorian calendar as a fallback. + cal = new GregorianCalendar(zone, aLocale); } - // else create the default calendar - return new GregorianCalendar(zone, aLocale); + return cal; } /** @@ -2196,6 +2207,101 @@ } /** + * Returns whether this {@code Calendar} supports week dates. + * + * <p>The default implementation of this method returns {@code false}. + * + * @return {@code true} if this {@code Calendar} supports week dates; + * {@code false} otherwise. + * @see #getWeekYear() + * @see #setWeekDate(int,int,int) + * @see #getWeeksInWeekYear() + * @since 1.7 + */ + public boolean isWeekDateSupported() { + return false; + } + + /** + * Returns the week year represented by this {@code Calendar}. The + * week year is in sync with the week cycle. The {@linkplain + * #getFirstDayOfWeek() first day of the first week} is the first + * day of the week year. + * + * <p>The default implementation of this method throws an + * {@link UnsupportedOperationException}. + * + * @return the week year of this {@code Calendar} + * @exception UnsupportedOperationException + * if any week year numbering isn't supported + * in this {@code Calendar}. + * @see #isWeekDateSupported() + * @see #getFirstDayOfWeek() + * @see #getMinimalDaysInFirstWeek() + * @since 1.7 + */ + public int getWeekYear() { + throw new UnsupportedOperationException(); + } + + /** + * Sets the date of this {@code Calendar} with the the given date + * specifiers - week year, week of year, and day of week. + * + * <p>Unlike the {@code set} method, all of the calendar fields + * and {@code time} values are calculated upon return. + * + * <p>If {@code weekOfYear} is out of the valid week-of-year range + * in {@code weekYear}, the {@code weekYear} and {@code + * weekOfYear} values are adjusted in lenient mode, or an {@code + * IllegalArgumentException} is thrown in non-lenient mode. + * + * <p>The default implementation of this method throws an + * {@code UnsupportedOperationException}. + * + * @param weekYear the week year + * @param weekOfYear the week number based on {@code weekYear} + * @param dayOfWeek the day of week value: one of the constants + * for the {@link #DAY_OF_WEEK} field: {@link + * #SUNDAY}, ..., {@link #SATURDAY}. + * @exception IllegalArgumentException + * if any of the given date specifiers is invalid + * or any of the calendar fields are inconsistent + * with the given date specifiers in non-lenient mode + * @exception UnsupportedOperationException + * if any week year numbering isn't supported in this + * {@code Calendar}. + * @see #isWeekDateSupported() + * @see #getFirstDayOfWeek() + * @see #getMinimalDaysInFirstWeek() + * @since 1.7 + */ + public void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek) { + throw new UnsupportedOperationException(); + } + + /** + * Returns the number of weeks in the week year represented by this + * {@code Calendar}. + * + * <p>The default implementation of this method throws an + * {@code UnsupportedOperationException}. + * + * @return the number of weeks in the week year. + * @exception UnsupportedOperationException + * if any week year numbering isn't supported in this + * {@code Calendar}. + * @see #WEEK_OF_YEAR + * @see #isWeekDateSupported() + * @see #getWeekYear() + * @see #getActualMaximum(int) + * @since 1.7 + */ + public int getWeeksInWeekYear() { + throw new UnsupportedOperationException(); + } + + /** * Returns the minimum value for the given calendar field of this * <code>Calendar</code> instance. The minimum value is defined as * the smallest value returned by the {@link #get(int) get} method
--- a/src/share/classes/java/util/Currency.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/util/Currency.java Thu Sep 16 11:17:32 2010 -0700 @@ -452,7 +452,7 @@ * @return the symbol of this currency for the default locale */ public String getSymbol() { - return getSymbol(Locale.getDefault()); + return getSymbol(Locale.getDefault(Locale.Category.DISPLAY)); } /** @@ -528,7 +528,7 @@ * @since 1.7 */ public String getDisplayName() { - return getDisplayName(Locale.getDefault()); + return getDisplayName(Locale.getDefault(Locale.Category.DISPLAY)); } /**
--- a/src/share/classes/java/util/Formatter.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/util/Formatter.java Thu Sep 16 11:17:32 2010 -0700 @@ -1866,7 +1866,7 @@ * virtual machine. */ public Formatter() { - init(new StringBuilder(), Locale.getDefault()); + init(new StringBuilder(), Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -1882,7 +1882,7 @@ public Formatter(Appendable a) { if (a == null) a = new StringBuilder(); - init(a, Locale.getDefault()); + init(a, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -1949,7 +1949,7 @@ */ public Formatter(String fileName) throws FileNotFoundException { init(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName))), - Locale.getDefault()); + Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -1985,7 +1985,7 @@ public Formatter(String fileName, String csn) throws FileNotFoundException, UnsupportedEncodingException { - this(fileName, csn, Locale.getDefault()); + this(fileName, csn, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -2057,7 +2057,7 @@ */ public Formatter(File file) throws FileNotFoundException { init(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))), - Locale.getDefault()); + Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -2093,7 +2093,7 @@ public Formatter(File file, String csn) throws FileNotFoundException, UnsupportedEncodingException { - this(file, csn, Locale.getDefault()); + this(file, csn, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -2152,7 +2152,7 @@ public Formatter(PrintStream ps) { if (ps == null) throw new NullPointerException(); - init((Appendable)ps, Locale.getDefault()); + init((Appendable)ps, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -2171,7 +2171,7 @@ */ public Formatter(OutputStream os) { init(new BufferedWriter(new OutputStreamWriter(os)), - Locale.getDefault()); + Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -2195,7 +2195,7 @@ public Formatter(OutputStream os, String csn) throws UnsupportedEncodingException { - this(os, csn, Locale.getDefault()); + this(os, csn, Locale.getDefault(Locale.Category.FORMAT)); } /**
--- a/src/share/classes/java/util/GregorianCalendar.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/util/GregorianCalendar.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -88,23 +88,49 @@ * adjustment may be made if desired for dates that are prior to the Gregorian * changeover and which fall between January 1 and March 24. * - * <p>Values calculated for the <code>WEEK_OF_YEAR</code> field range from 1 to - * 53. Week 1 for a year is the earliest seven day period starting on - * <code>getFirstDayOfWeek()</code> that contains at least - * <code>getMinimalDaysInFirstWeek()</code> days from that year. It thus - * depends on the values of <code>getMinimalDaysInFirstWeek()</code>, - * <code>getFirstDayOfWeek()</code>, and the day of the week of January 1. - * Weeks between week 1 of one year and week 1 of the following year are - * numbered sequentially from 2 to 52 or 53 (as needed). - - * <p>For example, January 1, 1998 was a Thursday. If - * <code>getFirstDayOfWeek()</code> is <code>MONDAY</code> and - * <code>getMinimalDaysInFirstWeek()</code> is 4 (these are the values - * reflecting ISO 8601 and many national standards), then week 1 of 1998 starts - * on December 29, 1997, and ends on January 4, 1998. If, however, - * <code>getFirstDayOfWeek()</code> is <code>SUNDAY</code>, then week 1 of 1998 - * starts on January 4, 1998, and ends on January 10, 1998; the first three days - * of 1998 then are part of week 53 of 1997. + * <h4><a name="week_and_year">Week Of Year and Week Year</a></h4> + * + * <p>Values calculated for the {@link Calendar#WEEK_OF_YEAR + * WEEK_OF_YEAR} field range from 1 to 53. The first week of a + * calendar year is the earliest seven day period starting on {@link + * Calendar#getFirstDayOfWeek() getFirstDayOfWeek()} that contains at + * least {@link Calendar#getMinimalDaysInFirstWeek() + * getMinimalDaysInFirstWeek()} days from that year. It thus depends + * on the values of {@code getMinimalDaysInFirstWeek()}, {@code + * getFirstDayOfWeek()}, and the day of the week of January 1. Weeks + * between week 1 of one year and week 1 of the following year + * (exclusive) are numbered sequentially from 2 to 52 or 53 (except + * for year(s) involved in the Julian-Gregorian transition). + * + * <p>The {@code getFirstDayOfWeek()} and {@code + * getMinimalDaysInFirstWeek()} values are initialized using + * locale-dependent resources when constructing a {@code + * GregorianCalendar}. <a name="iso8601_compatible_setting">The week + * determination is compatible</a> with the ISO 8601 standard when {@code + * getFirstDayOfWeek()} is {@code MONDAY} and {@code + * getMinimalDaysInFirstWeek()} is 4, which values are used in locales + * where the standard is preferred. These values can explicitly be set by + * calling {@link Calendar#setFirstDayOfWeek(int) setFirstDayOfWeek()} and + * {@link Calendar#setMinimalDaysInFirstWeek(int) + * setMinimalDaysInFirstWeek()}. + * + * <p>A <a name="week_year"><em>week year</em></a> is in sync with a + * {@code WEEK_OF_YEAR} cycle. All weeks between the first and last + * weeks (inclusive) have the same <em>week year</em> value. + * Therefore, the first and last days of a week year may have + * different calendar year values. + * + * <p>For example, January 1, 1998 is a Thursday. If {@code + * getFirstDayOfWeek()} is {@code MONDAY} and {@code + * getMinimalDaysInFirstWeek()} is 4 (ISO 8601 standard compatible + * setting), then week 1 of 1998 starts on December 29, 1997, and ends + * on January 4, 1998. The week year is 1998 for the last three days + * of calendar year 1997. If, however, {@code getFirstDayOfWeek()} is + * {@code SUNDAY}, then week 1 of 1998 starts on January 4, 1998, and + * ends on January 10, 1998; the first three days of 1998 then are + * part of week 53 of 1997 and their week year is 1997. + * + * <h4>Week Of Month</h4> * * <p>Values calculated for the <code>WEEK_OF_MONTH</code> field range from 0 * to 6. Week 1 of a month (the days with <code>WEEK_OF_MONTH = @@ -124,7 +150,9 @@ * <code>getMinimalDaysInFirstWeek()</code> is changed to 3, then January 1 * through January 3 have a <code>WEEK_OF_MONTH</code> of 1. * - * <p>The <code>clear</code> methods set calendar field(s) + * <h4>Default Fields Values</h4> + * + * <p>The <code>clear</code> method sets calendar field(s) * undefined. <code>GregorianCalendar</code> uses the following * default value for each calendar field if its value is undefined. * @@ -555,7 +583,7 @@ * in the default time zone with the default locale. */ public GregorianCalendar() { - this(TimeZone.getDefaultRef(), Locale.getDefault()); + this(TimeZone.getDefaultRef(), Locale.getDefault(Locale.Category.FORMAT)); setZoneShared(true); } @@ -566,7 +594,7 @@ * @param zone the given time zone. */ public GregorianCalendar(TimeZone zone) { - this(zone, Locale.getDefault()); + this(zone, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -1625,6 +1653,13 @@ * is 29 because 2004 is a leap year, and if the date of this * instance is February 1, 2005, it's 28. * + * <p>This method calculates the maximum value of {@link + * Calendar#WEEK_OF_YEAR WEEK_OF_YEAR} based on the {@link + * Calendar#YEAR YEAR} (calendar year) value, not the <a + * href="#week_year">week year</a>. Call {@link + * #getWeeksInWeekYear()} to get the maximum value of {@code + * WEEK_OF_YEAR} in the week year of this {@code GregorianCalendar}. + * * @param field the calendar field * @return the maximum of the given field for the time value of * this <code>GregorianCalendar</code> @@ -1742,8 +1777,13 @@ if (gc == this) { gc = (GregorianCalendar) gc.clone(); } - gc.set(DAY_OF_YEAR, getActualMaximum(DAY_OF_YEAR)); + int maxDayOfYear = getActualMaximum(DAY_OF_YEAR); + gc.set(DAY_OF_YEAR, maxDayOfYear); value = gc.get(WEEK_OF_YEAR); + if (internalGet(YEAR) != gc.getWeekYear()) { + gc.set(DAY_OF_YEAR, maxDayOfYear - 7); + value = gc.get(WEEK_OF_YEAR); + } } break; @@ -1934,46 +1974,241 @@ } } -////////////////////// -// Proposed public API -////////////////////// + /** + * Returns {@code true} indicating this {@code GregorianCalendar} + * supports week dates. + * + * @return {@code true} (always) + * @see #getWeekYear() + * @see #setWeekDate(int,int,int) + * @see #getWeeksInWeekYear() + * @since 1.7 + */ + @Override + public final boolean isWeekDateSupported() { + return true; + } /** - * Returns the year that corresponds to the <code>WEEK_OF_YEAR</code> field. - * This may be one year before or after the Gregorian or Julian year stored - * in the <code>YEAR</code> field. For example, January 1, 1999 is considered - * Friday of week 53 of 1998 (if minimal days in first week is - * 2 or less, and the first day of the week is Sunday). Given - * these same settings, the ISO year of January 1, 1999 is - * 1998. + * Returns the <a href="#week_year">week year</a> represented by this + * {@code GregorianCalendar}. The dates in the weeks between 1 and the + * maximum week number of the week year have the same week year value + * that may be one year before or after the {@link Calendar#YEAR YEAR} + * (calendar year) value. * - * <p>This method calls {@link Calendar#complete} before - * calculating the week-based year. + * <p>This method calls {@link Calendar#complete()} before + * calculating the week year. * - * @return the year corresponding to the <code>WEEK_OF_YEAR</code> field, which - * may be one year before or after the <code>YEAR</code> field. - * @see #YEAR - * @see #WEEK_OF_YEAR + * @return the week year represented by this {@code GregorianCalendar}. + * If the {@link Calendar#ERA ERA} value is {@link #BC}, the year is + * represented by 0 or a negative number: BC 1 is 0, BC 2 + * is -1, BC 3 is -2, and so on. + * @throws IllegalArgumentException + * if any of the calendar fields is invalid in non-lenient mode. + * @see #isWeekDateSupported() + * @see #getWeeksInWeekYear() + * @see Calendar#getFirstDayOfWeek() + * @see Calendar#getMinimalDaysInFirstWeek() + * @since 1.7 */ - /* - public int getWeekBasedYear() { - complete(); - // TODO: Below doesn't work for gregorian cutover... - int weekOfYear = internalGet(WEEK_OF_YEAR); - int year = internalGet(YEAR); - if (internalGet(MONTH) == Calendar.JANUARY) { - if (weekOfYear >= 52) { + @Override + public int getWeekYear() { + int year = get(YEAR); // implicitly calls complete() + if (internalGetEra() == BCE) { + year = 1 - year; + } + + // Fast path for the Gregorian calendar years that are never + // affected by the Julian-Gregorian transition + if (year > gregorianCutoverYear + 1) { + int weekOfYear = internalGet(WEEK_OF_YEAR); + if (internalGet(MONTH) == JANUARY) { + if (weekOfYear >= 52) { + --year; + } + } else { + if (weekOfYear == 1) { + ++year; + } + } + return year; + } + + // General (slow) path + int dayOfYear = internalGet(DAY_OF_YEAR); + int maxDayOfYear = getActualMaximum(DAY_OF_YEAR); + int minimalDays = getMinimalDaysInFirstWeek(); + + // Quickly check the possibility of year adjustments before + // cloning this GregorianCalendar. + if (dayOfYear > minimalDays && dayOfYear < (maxDayOfYear - 6)) { + return year; + } + + // Create a clone to work on the calculation + GregorianCalendar cal = (GregorianCalendar) clone(); + cal.setLenient(true); + // Use GMT so that intermediate date calculations won't + // affect the time of day fields. + cal.setTimeZone(TimeZone.getTimeZone("GMT")); + // Go to the first day of the year, which is usually January 1. + cal.set(DAY_OF_YEAR, 1); + cal.complete(); + + // Get the first day of the first day-of-week in the year. + int delta = getFirstDayOfWeek() - cal.get(DAY_OF_WEEK); + if (delta != 0) { + if (delta < 0) { + delta += 7; + } + cal.add(DAY_OF_YEAR, delta); + } + int minDayOfYear = cal.get(DAY_OF_YEAR); + if (dayOfYear < minDayOfYear) { + if (minDayOfYear <= minimalDays) { --year; } } else { - if (weekOfYear == 1) { - ++year; + cal.set(YEAR, year + 1); + cal.set(DAY_OF_YEAR, 1); + cal.complete(); + int del = getFirstDayOfWeek() - cal.get(DAY_OF_WEEK); + if (del != 0) { + if (del < 0) { + del += 7; + } + cal.add(DAY_OF_YEAR, del); + } + minDayOfYear = cal.get(DAY_OF_YEAR) - 1; + if (minDayOfYear == 0) { + minDayOfYear = 7; + } + if (minDayOfYear >= minimalDays) { + int days = maxDayOfYear - dayOfYear + 1; + if (days <= (7 - minDayOfYear)) { + ++year; + } } } return year; } - */ + + /** + * Sets this {@code GregorianCalendar} to the date given by the + * date specifiers - <a href="#week_year">{@code weekYear}</a>, + * {@code weekOfYear}, and {@code dayOfWeek}. {@code weekOfYear} + * follows the <a href="#week_and_year">{@code WEEK_OF_YEAR} + * numbering</a>. The {@code dayOfWeek} value must be one of the + * {@link Calendar#DAY_OF_WEEK DAY_OF_WEEK} values: {@link + * Calendar#SUNDAY SUNDAY} to {@link Calendar#SATURDAY SATURDAY}. + * + * <p>Note that the numeric day-of-week representation differs from + * the ISO 8601 standard, and that the {@code weekOfYear} + * numbering is compatible with the standard when {@code + * getFirstDayOfWeek()} is {@code MONDAY} and {@code + * getMinimalDaysInFirstWeek()} is 4. + * + * <p>Unlike the {@code set} method, all of the calendar fields + * and the instant of time value are calculated upon return. + * + * <p>If {@code weekOfYear} is out of the valid week-of-year + * range in {@code weekYear}, the {@code weekYear} + * and {@code weekOfYear} values are adjusted in lenient + * mode, or an {@code IllegalArgumentException} is thrown in + * non-lenient mode. + * + * @param weekYear the week year + * @param weekOfYear the week number based on {@code weekYear} + * @param dayOfWeek the day of week value: one of the constants + * for the {@link #DAY_OF_WEEK DAY_OF_WEEK} field: + * {@link Calendar#SUNDAY SUNDAY}, ..., + * {@link Calendar#SATURDAY SATURDAY}. + * @exception IllegalArgumentException + * if any of the given date specifiers is invalid, + * or if any of the calendar fields are inconsistent + * with the given date specifiers in non-lenient mode + * @see GregorianCalendar#isWeekDateSupported() + * @see Calendar#getFirstDayOfWeek() + * @see Calendar#getMinimalDaysInFirstWeek() + * @since 1.7 + */ + @Override + public void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek) { + if (dayOfWeek < SUNDAY || dayOfWeek > SATURDAY) { + throw new IllegalArgumentException("invalid dayOfWeek: " + dayOfWeek); + } + // To avoid changing the time of day fields by date + // calculations, use a clone with the GMT time zone. + GregorianCalendar gc = (GregorianCalendar) clone(); + gc.setLenient(true); + int era = gc.get(ERA); + gc.clear(); + gc.setTimeZone(TimeZone.getTimeZone("GMT")); + gc.set(ERA, era); + gc.set(YEAR, weekYear); + gc.set(WEEK_OF_YEAR, 1); + gc.set(DAY_OF_WEEK, getFirstDayOfWeek()); + int days = dayOfWeek - getFirstDayOfWeek(); + if (days < 0) { + days += 7; + } + days += 7 * (weekOfYear - 1); + if (days != 0) { + gc.add(DAY_OF_YEAR, days); + } else { + gc.complete(); + } + + if (!isLenient() && + (gc.getWeekYear() != weekYear + || gc.internalGet(WEEK_OF_YEAR) != weekOfYear + || gc.internalGet(DAY_OF_WEEK) != dayOfWeek)) { + throw new IllegalArgumentException(); + } + + set(ERA, gc.internalGet(ERA)); + set(YEAR, gc.internalGet(YEAR)); + set(MONTH, gc.internalGet(MONTH)); + set(DAY_OF_MONTH, gc.internalGet(DAY_OF_MONTH)); + + // to avoid throwing an IllegalArgumentException in + // non-lenient, set WEEK_OF_YEAR internally + internalSet(WEEK_OF_YEAR, weekOfYear); + complete(); + } + + /** + * Returns the number of weeks in the <a href="#week_year">week year</a> + * represented by this {@code GregorianCalendar}. + * + * <p>For example, if this {@code GregorianCalendar}'s date is + * December 31, 2008 with <a href="#iso8601_compatible_setting">the ISO + * 8601 compatible setting</a>, this method will return 53 for the + * period: December 29, 2008 to January 3, 2010 while {@link + * #getActualMaximum(int) getActualMaximum(WEEK_OF_YEAR)} will return + * 52 for the period: December 31, 2007 to December 28, 2008. + * + * @return the number of weeks in the week year. + * @see Calendar#WEEK_OF_YEAR + * @see #getWeekYear() + * @see #getActualMaximum(int) + * @since 1.7 + */ + public int getWeeksInWeekYear() { + GregorianCalendar gc = getNormalizedCalendar(); + int weekYear = gc.getWeekYear(); + if (weekYear == gc.internalGet(YEAR)) { + return gc.getActualMaximum(WEEK_OF_YEAR); + } + + // Use the 2nd week for calculating the max of WEEK_OF_YEAR + if (gc == this) { + gc = (GregorianCalendar) gc.clone(); + } + gc.setWeekDate(weekYear, 2, internalGet(DAY_OF_WEEK)); + return gc.getActualMaximum(WEEK_OF_YEAR); + } ///////////////////////////// // Time => Fields computation @@ -2178,7 +2413,7 @@ // If we are in the cutover year, we need some special handling. if (normalizedYear == cutoverYear) { // Need to take care of the "missing" days. - if (getCutoverCalendarSystem() == jcal) { + if (gregorianCutoverYearJulian <= gregorianCutoverYear) { // We need to find out where we are. The cutover // gap could even be more than one year. (One // year difference in ~48667 years.) @@ -2208,27 +2443,36 @@ // December 31, which is not always true in // GregorianCalendar. long fixedDec31 = fixedDateJan1 - 1; - long prevJan1; + long prevJan1 = fixedDateJan1 - 365; if (normalizedYear > (cutoverYear + 1)) { - prevJan1 = fixedDateJan1 - 365; if (CalendarUtils.isGregorianLeapYear(normalizedYear - 1)) { --prevJan1; } + } else if (normalizedYear <= gregorianCutoverYearJulian) { + if (CalendarUtils.isJulianLeapYear(normalizedYear - 1)) { + --prevJan1; + } } else { BaseCalendar calForJan1 = calsys; - int prevYear = normalizedYear - 1; - if (prevYear == cutoverYear) { + //int prevYear = normalizedYear - 1; + int prevYear = getCalendarDate(fixedDec31).getNormalizedYear(); + if (prevYear == gregorianCutoverYear) { calForJan1 = getCutoverCalendarSystem(); - } - prevJan1 = calForJan1.getFixedDate(prevYear, - BaseCalendar.JANUARY, - 1, - null); - while (prevJan1 > fixedDec31) { - prevJan1 = getJulianCalendarSystem().getFixedDate(--prevYear, - BaseCalendar.JANUARY, - 1, - null); + if (calForJan1 == jcal) { + prevJan1 = calForJan1.getFixedDate(prevYear, + BaseCalendar.JANUARY, + 1, + null); + } else { + prevJan1 = gregorianCutoverDate; + calForJan1 = gcal; + } + } else if (prevYear <= gregorianCutoverYearJulian) { + calForJan1 = getJulianCalendarSystem(); + prevJan1 = calForJan1.getFixedDate(prevYear, + BaseCalendar.JANUARY, + 1, + null); } } weekOfYear = getWeekNumber(prevJan1, fixedDec31); @@ -2260,14 +2504,20 @@ if (nextYear == gregorianCutoverYear) { calForJan1 = getCutoverCalendarSystem(); } - long nextJan1 = calForJan1.getFixedDate(nextYear, - BaseCalendar.JANUARY, - 1, - null); - if (nextJan1 < fixedDate) { + + long nextJan1; + if (nextYear > gregorianCutoverYear + || gregorianCutoverYearJulian == gregorianCutoverYear + || nextYear == gregorianCutoverYearJulian) { + nextJan1 = calForJan1.getFixedDate(nextYear, + BaseCalendar.JANUARY, + 1, + null); + } else { nextJan1 = gregorianCutoverDate; calForJan1 = gcal; } + long nextJan1st = calForJan1.getDayOfWeekDateOnOrBefore(nextJan1 + 6, getFirstDayOfWeek()); int ndays = (int)(nextJan1st - nextJan1); @@ -2409,10 +2659,24 @@ } gfd = jfd; } else { + jfd = fixedDate + getFixedDate(getJulianCalendarSystem(), year, fieldMask); gfd = fixedDate + getFixedDate(gcal, year, fieldMask); - jfd = fixedDate + getFixedDate(getJulianCalendarSystem(), year, fieldMask); } + // Now we have to determine which calendar date it is. + + // If the date is relative from the beginning of the year + // in the Julian calendar, then use jfd; + if (isFieldSet(fieldMask, DAY_OF_YEAR) || isFieldSet(fieldMask, WEEK_OF_YEAR)) { + if (gregorianCutoverYear == gregorianCutoverYearJulian) { + fixedDate = jfd; + break calculateFixedDate; + } else if (year == gregorianCutoverYear) { + fixedDate = gfd; + break calculateFixedDate; + } + } + if (gfd >= gregorianCutoverDate) { if (jfd >= gregorianCutoverDate) { fixedDate = gfd; @@ -2494,9 +2758,10 @@ continue; } if (originalFields[field] != internalGet(field)) { + String s = originalFields[field] + " -> " + internalGet(field); // Restore the original field values System.arraycopy(originalFields, 0, fields, 0, fields.length); - throw new IllegalArgumentException(getFieldName(field)); + throw new IllegalArgumentException(getFieldName(field) + ": " + s); } } } @@ -2669,9 +2934,7 @@ * method returns Gregorian. Otherwise, Julian. */ private BaseCalendar getCutoverCalendarSystem() { - CalendarDate date = getGregorianCutoverDate(); - if (date.getMonth() == BaseCalendar.JANUARY - && date.getDayOfMonth() == 1) { + if (gregorianCutoverYearJulian < gregorianCutoverYear) { return gcal; } return getJulianCalendarSystem();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/java/util/IllformedLocaleException.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + ******************************************************************************* + * Copyright (C) 2009-2010, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + */ + +package java.util; + +/** + * Thrown by methods in {@link Locale} and {@link Locale.Builder} to + * indicate that an argument is not a well-formed BCP 47 tag. + * + * @see Locale + * @since 1.7 + */ +public class IllformedLocaleException extends RuntimeException { + + private static final long serialVersionUID = -5245986824925681401L; + + private int _errIdx = -1; + + /** + * Constructs a new <code>IllformedLocaleException</code> with no + * detail message and -1 as the error index. + */ + public IllformedLocaleException() { + super(); + } + + /** + * Constructs a new <code>IllformedLocaleException</code> with the + * given message and -1 as the error index. + * + * @param message the message + */ + public IllformedLocaleException(String message) { + super(message); + } + + /** + * Constructs a new <code>IllformedLocaleException</code> with the + * given message and the error index. The error index is the approximate + * offset from the start of the ill-formed value to the point where the + * parse first detected an error. A negative error index value indicates + * either the error index is not applicable or unknown. + * + * @param message the message + * @param errorIndex the index + */ + public IllformedLocaleException(String message, int errorIndex) { + super(message + ((errorIndex < 0) ? "" : " [at index " + errorIndex + "]")); + _errIdx = errorIndex; + } + + /** + * Returns the index where the error was found. A negative value indicates + * either the error index is not applicable or unknown. + * + * @return the error index + */ + public int getErrorIndex() { + return _errIdx; + } +}
--- a/src/share/classes/java/util/Locale.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/util/Locale.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,86 +40,240 @@ package java.util; -import java.io.*; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamField; +import java.io.Serializable; import java.security.AccessController; import java.text.MessageFormat; -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; import java.util.spi.LocaleNameProvider; -import java.util.spi.LocaleServiceProvider; + import sun.security.action.GetPropertyAction; import sun.util.LocaleServiceProviderPool; +import sun.util.locale.AsciiUtil; +import sun.util.locale.BaseLocale; +import sun.util.locale.InternalLocaleBuilder; +import sun.util.locale.LanguageTag; +import sun.util.locale.LocaleExtensions; +import sun.util.locale.LocaleObjectCache; +import sun.util.locale.LocaleSyntaxException; +import sun.util.locale.ParseStatus; +import sun.util.locale.UnicodeLocaleExtension; import sun.util.resources.LocaleData; import sun.util.resources.OpenListResourceBundle; /** - * * A <code>Locale</code> object represents a specific geographical, political, * or cultural region. An operation that requires a <code>Locale</code> to perform * its task is called <em>locale-sensitive</em> and uses the <code>Locale</code> * to tailor information for the user. For example, displaying a number - * is a locale-sensitive operation--the number should be formatted - * according to the customs/conventions of the user's native country, + * is a locale-sensitive operation— the number should be formatted + * according to the customs and conventions of the user's native country, * region, or culture. * - * <P> - * Create a <code>Locale</code> object using the constructors in this class: + * <p> The <code>Locale</code> class implements identifiers + * interchangeable with BCP 47 (IETF BCP 47, "Tags for Identifying + * Languages"), with support for the LDML (UTS#35, "Unicode Locale + * Data Markup Language") BCP 47-compatible extensions for locale data + * exchange. + * + * <p> A <code>Locale</code> object logically consists of the fields + * described below. + * + * <dl> + * <dt><a name="def_language"/><b>language</b></dt> + * + * <dd>ISO 639 alpha-2 or alpha-3 language code, or registered + * language subtags up to 8 alpha letters (for future enhancements). + * When a language has both an alpha-2 code and an alpha-3 code, the + * alpha-2 code must be used. You can find a full list of valid + * language codes in the IANA Language Subtag Registry (search for + * "Type: language"). The language field is case insensitive, but + * <code>Locale</code> always canonicalizes to lower case.</dd><br> + * + * <dd>Well-formed language values have the form + * <code>[a-zA-Z]{2,8}</code>. Note that this is not the the full + * BCP47 language production, since it excludes extlang. They are + * not needed since modern three-letter language codes replace + * them.</dd><br> + * + * <dd>Example: "en" (English), "ja" (Japanese), "kok" (Konkani)</dd><br> + * + * <dt><a name="def_script"/><b>script</b></dt> + * + * <dd>ISO 15924 alpha-4 script code. You can find a full list of + * valid script codes in the IANA Language Subtag Registry (search + * for "Type: script"). The script field is case insensitive, but + * <code>Locale</code> always canonicalizes to title case (the first + * letter is upper case and the rest of the letters are lower + * case).</dd><br> + * + * <dd>Well-formed script values have the form + * <code>[a-zA-Z]{4}</code></dd><br> + * + * <dd>Example: "Latn" (Latin), "Cyrl" (Cyrillic)</dd><br> + * + * <dt><a name="def_region"/><b>country (region)</b></dt> + * + * <dd>ISO 3166 alpha-2 country code or UN M.49 numeric-3 area code. + * You can find a full list of valid country and region codes in the + * IANA Language Subtag Registry (search for "Type: region"). The + * country (region) field is case insensitive, but + * <code>Locale</code> always canonicalizes to upper case.</dd><br> + * + * <dd>Well-formed country/region values have + * the form <code>[a-zA-Z]{2} | [0-9]{3}</code></dd><br> + * + * <dd>Example: "US" (United States), "FR" (France), "029" + * (Caribbean)</dd><br> + * + * <dt><a name="def_variant"/><b>variant</b></dt> + * + * <dd>Any arbitrary value used to indicate a variation of a + * <code>Locale</code>. Where there are two or more variant values + * each indicating its own semantics, these values should be ordered + * by importance, with most important first, separated by + * underscore('_'). The variant field is case sensitive.</dd><br> + * + * <dd>Note: IETF BCP 47 places syntactic restrictions on variant + * subtags. Also BCP 47 subtags are strictly used to indicate + * additional variations that define a language or its dialects that + * are not covered by any combinations of language, script and + * region subtags. You can find a full list of valid variant codes + * in the IANA Language Subtag Registry (search for "Type: variant"). + * + * <p>However, the variant field in <code>Locale</code> has + * historically been used for any kind of variation, not just + * language variations. For example, some supported variants + * available in Java SE Runtime Environments indicate alternative + * cultural behaviors such as calendar type or number script. In + * BCP 47 this kind of information, which does not identify the + * language, is supported by extension subtags or private use + * subtags.</dd><br> + * + * <dd>Well-formed variant values have the form <code>SUBTAG + * (('_'|'-') SUBTAG)*</code> where <code>SUBTAG = + * [0-9][0-9a-zA-Z]{3} | [0-9a-zA-Z]{5,8}</code>. (Note: BCP 47 only + * uses hyphen ('-') as a delimiter, this is more lenient).</dd><br> + * + * <dd>Example: "polyton" (Polytonic Greek), "POSIX"</dd><br> + * + * <dt><a name="def_extensions"/><b>extensions</b></dt> + * + * <dd>A map from single character keys to string values, indicating + * extensions apart from language identification. The extensions in + * <code>Locale</code> implement the semantics and syntax of BCP 47 + * extension subtags and private use subtags. The extensions are + * case insensitive, but <code>Locale</code> canonicalizes all + * extension keys and values to lower case. Note that extensions + * cannot have empty values.</dd><br> + * + * <dd>Well-formed keys are single characters from the set + * <code>[0-9a-zA-Z]</code>. Well-formed values have the form + * <code>SUBTAG ('-' SUBTAG)*</code> where for the key 'x' + * <code>SUBTAG = [0-9a-zA-Z]{1,8}</code> and for other keys + * <code>SUBTAG = [0-9a-zA-Z]{2,8}</code> (that is, 'x' allows + * single-character subtags).</dd><br> + * + * <dd>Example: key="u"/value="ca-japanese" (Japanese Calendar), + * key="x"/value="java-1-7"</dd> + * </dl> + * + * <b>Note:</b> Although BCP 47 requires field values to be registered + * in the IANA Language Subtag Registry, the <code>Locale</code> class + * does not provide any validation features. The <code>Builder</code> + * only checks if an individual field satisfies the syntactic + * requirement (is well-formed), but does not validate the value + * itself. See {@link Builder} for details. + * + * <h4><a name="def_locale_extension">Unicode locale/language extension</h4> + * + * <p>UTS#35, "Unicode Locale Data Markup Language" defines optional + * attributes and keywords to override or refine the default behavior + * associated with a locale. A keyword is represented by a pair of + * key and type. For example, "nu-thai" indicates that Thai local + * digits (value:"thai") should be used for formatting numbers + * (key:"nu"). + * + * <p>The keywords are mapped to a BCP 47 extension value using the + * extension key 'u' ({@link #UNICODE_LOCALE_EXTENSION}). The above + * example, "nu-thai", becomes the extension "u-nu-thai".code + * + * <p>Thus, when a <code>Locale</code> object contains Unicode locale + * attributes and keywords, + * <code>getExtension(UNICODE_LOCALE_EXTENSION)</code> will return a + * String representing this information, for example, "nu-thai". The + * <code>Locale</code> class also provides {@link + * #getUnicodeLocaleAttributes}, {@link #getUnicodeLocaleKeys}, and + * {@link #getUnicodeLocaleType} which allow you to access Unicode + * locale attributes and key/type pairs directly. When represented as + * a string, the Unicode Locale Extension lists attributes + * alphabetically, followed by key/type sequences with keys listed + * alphabetically (the order of subtags comprising a key's type is + * fixed when the type is defined) + * + * <p>A well-formed locale key has the form + * <code>[0-9a-zA-Z]{2}</code>. A well-formed locale type has the + * form <code>"" | [0-9a-zA-Z]{3,8} ('-' [0-9a-zA-Z]{3,8})*</code> (it + * can be empty, or a series of subtags 3-8 alphanums in length). A + * well-formed locale attribute has the form + * <code>[0-9a-zA-Z]{3,8}</code> (it is a single subtag with the same + * form as a locale type subtag). + * + * <p>The Unicode locale extension specifies optional behavior in + * locale-sensitive services. Although the LDML specification defines + * various keys and values, actual locale-sensitive service + * implementations in a Java Runtime Environment might not support any + * particular Unicode locale attributes or key/type pairs. + * + * <h4>Creating a Locale</h4> + * + * <p>There are several different ways to create a <code>Locale</code> + * object. + * + * <h5>Builder</h5> + * + * <p>Using {@link Builder} you can construct a <code>Locale</code> object + * that conforms to BCP 47 syntax. + * + * <h5>Constructors</h5> + * + * <p>The <code>Locale</code> class provides three constructors: * <blockquote> * <pre> - * Locale(String language) - * Locale(String language, String country) - * Locale(String language, String country, String variant) + * {@link #Locale(String language)} + * {@link #Locale(String language, String country)} + * {@link #Locale(String language, String country, String variant)} * </pre> * </blockquote> - * The language argument is a valid <STRONG>ISO Language Code.</STRONG> - * These codes are the lower-case, two-letter codes as defined by ISO-639. - * You can find a full list of these codes at a number of sites, such as: - * <BR><a href ="http://www.loc.gov/standards/iso639-2/php/English_list.php"> - * <code>http://www.loc.gov/standards/iso639-2/php/English_list.php</code></a> + * These constructors allow you to create a <code>Locale</code> object + * with language, country and variant, but you cannot specify + * script or extensions. * - * <P> - * The country argument is a valid <STRONG>ISO Country Code.</STRONG> These - * codes are the upper-case, two-letter codes as defined by ISO-3166. - * You can find a full list of these codes at a number of sites, such as: - * <BR><a href="http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html"> - * <code>http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html</code></a> + * <h5>Factory Methods</h5> * - * <P> - * The variant argument is a vendor or browser-specific code. - * For example, use WIN for Windows, MAC for Macintosh, and POSIX for POSIX. - * Where there are two variants, separate them with an underscore, and - * put the most important one first. For example, a Traditional Spanish collation - * might construct a locale with parameters for language, country and variant as: - * "es", "ES", "Traditional_WIN". + * <p>The method {@link #forLanguageTag} creates a <code>Locale</code> + * object for a well-formed BCP 47 language tag. * - * <P> - * Because a <code>Locale</code> object is just an identifier for a region, - * no validity check is performed when you construct a <code>Locale</code>. - * If you want to see whether particular resources are available for the - * <code>Locale</code> you construct, you must query those resources. For - * example, ask the <code>NumberFormat</code> for the locales it supports - * using its <code>getAvailableLocales</code> method. - * <BR><STRONG>Note:</STRONG> When you ask for a resource for a particular - * locale, you get back the best available match, not necessarily - * precisely what you asked for. For more information, look at - * {@link ResourceBundle}. + * <h5>Locale Constants</h5> * - * <P> - * The <code>Locale</code> class provides a number of convenient constants + * <p>The <code>Locale</code> class provides a number of convenient constants * that you can use to create <code>Locale</code> objects for commonly used * locales. For example, the following creates a <code>Locale</code> object * for the United States: * <blockquote> * <pre> - * Locale.US + * Locale.US * </pre> * </blockquote> * - * <P> - * Once you've created a <code>Locale</code> you can query it for information about - * itself. Use <code>getCountry</code> to get the ISO Country Code and - * <code>getLanguage</code> to get the ISO Language Code. You can - * use <code>getDisplayCountry</code> to get the + * <h4>Use of Locale</h4> + * + * <p>Once you've created a <code>Locale</code> you can query it for information + * about itself. Use <code>getCountry</code> to get the country (or region) + * code and <code>getLanguage</code> to get the language code. + * You can use <code>getDisplayCountry</code> to get the * name of the country suitable for displaying to the user. Similarly, * you can use <code>getDisplayLanguage</code> to get the name of * the language suitable for displaying to the user. Interestingly, @@ -127,28 +281,27 @@ * and have two versions: one that uses the default locale and one * that uses the locale specified as an argument. * - * <P> - * The Java Platform provides a number of classes that perform locale-sensitive + * <p>The Java Platform provides a number of classes that perform locale-sensitive * operations. For example, the <code>NumberFormat</code> class formats - * numbers, currency, or percentages in a locale-sensitive manner. Classes - * such as <code>NumberFormat</code> have a number of convenience methods + * numbers, currency, and percentages in a locale-sensitive manner. Classes + * such as <code>NumberFormat</code> have several convenience methods * for creating a default object of that type. For example, the * <code>NumberFormat</code> class provides these three convenience methods * for creating a default <code>NumberFormat</code> object: * <blockquote> * <pre> - * NumberFormat.getInstance() - * NumberFormat.getCurrencyInstance() - * NumberFormat.getPercentInstance() + * NumberFormat.getInstance() + * NumberFormat.getCurrencyInstance() + * NumberFormat.getPercentInstance() * </pre> * </blockquote> - * These methods have two variants; one with an explicit locale - * and one without; the latter using the default locale. + * Each of these methods has two variants; one with an explicit locale + * and one without; the latter uses the default locale: * <blockquote> * <pre> - * NumberFormat.getInstance(myLocale) - * NumberFormat.getCurrencyInstance(myLocale) - * NumberFormat.getPercentInstance(myLocale) + * NumberFormat.getInstance(myLocale) + * NumberFormat.getCurrencyInstance(myLocale) + * NumberFormat.getPercentInstance(myLocale) * </pre> * </blockquote> * A <code>Locale</code> is the mechanism for identifying the kind of object @@ -156,75 +309,162 @@ * <STRONG>just</STRONG> a mechanism for identifying objects, * <STRONG>not</STRONG> a container for the objects themselves. * - * @see ResourceBundle - * @see java.text.Format - * @see java.text.NumberFormat - * @see java.text.Collator - * @author Mark Davis - * @since 1.1 + * <h4>Compatibility</h4> + * + * <p>In order to maintain compatibility with existing usage, Locale's + * constructors retain their behavior prior to the Java Runtime + * Environment version 1.7. The same is largely true for the + * <code>toString</code> method. Thus Locale objects can continue to + * be used as they were. In particular, clients who parse the output + * of toString into language, country, and variant fields can continue + * to do so (although this is strongly discouraged), although the + * variant field will have additional information in it if script or + * extensions are present. + * + * <p>In addition, BCP 47 imposes syntax restrictions that are not + * imposed by Locale's constructors. This means that conversions + * between some Locales and BCP 47 language tags cannot be made without + * losing information. Thus <code>toLanguageTag</code> cannot + * represent the state of locales whose language, country, or variant + * do not conform to BCP 47. + * + * <p>Because of these issues, it is recommended that clients migrate + * away from constructing non-conforming locales and use the + * <code>forLanguageTag</code> and <code>Locale.Builder</code> APIs instead. + * Clients desiring a string representation of the complete locale can + * then always rely on <code>toLanguageTag</code> for this purpose. + * + * <h5><a name="special_cases_constructor"/>Special cases</h5> + * + * <p>For compatibility reasons, two + * non-conforming locales are treated as special cases. These are + * <b><tt>ja_JP_JP</tt></b> and <b><tt>th_TH_TH</tt></b>. These are ill-formed + * in BCP 47 since the variants are too short. To ease migration to BCP 47, + * these are treated specially during construction. These two cases (and only + * these) cause a constructor to generate an extension, all other values behave + * exactly as they did prior to Java 7. + * + * <p>Java has used <tt>ja_JP_JP</tt> to represent Japanese as used in + * Japan together with the Japanese Imperial calendar. This is now + * representable using a Unicode locale extension, by specifying the + * Unicode locale key <tt>ca</tt> (for "calendar") and type + * <tt>japanese</tt>. When the Locale constructor is called with the + * arguments "ja", "JP", "JP", the extension "u-ca-japanese" is + * automatically added. + * + * <p>Java has used <tt>th_TH_TH</tt> to represent Thai as used in + * Thailand together with Thai digits. This is also now representable using + * a Unicode locale extension, by specifying the Unicode locale key + * <tt>nu</tt> (for "number") and value <tt>thai</tt>. When the Locale + * constructor is called with the arguments "th", "TH", "TH", the + * extension "u-nu-thai" is automatically added. + * + * <h5>Serialization</h5> + * + * <p>During serialization, writeObject writes all fields to the output + * stream, including extensions. + * + * <p>During deserialization, readResolve adds extensions as described + * in <a href="#special_cases_constructor">Special Cases</a>, only + * for the two cases th_TH_TH and ja_JP_JP. + * + * <h5>Legacy language codes</h5> + * + * <p>Locale's constructor has always converted three language codes to + * their earlier, obsoleted forms: <tt>he</tt> maps to <tt>iw</tt>, + * <tt>yi</tt> maps to <tt>ji</tt>, and <tt>id</tt> maps to + * <tt>in</tt>. This continues to be the case, in order to not break + * backwards compatibility. + * + * <p>The APIs added in 1.7 map between the old and new language codes, + * maintaining the old codes internal to Locale (so that + * <code>getLanguage</code> and <code>toString</code> reflect the old + * code), but using the new codes in the BCP 47 language tag APIs (so + * that <code>toLanguageTag</code> reflects the new one). This + * preserves the equivalence between Locales no matter which code or + * API is used to construct them. Java's default resource bundle + * lookup mechanism also implements this mapping, so that resources + * can be named using either convention, see {@link ResourceBundle.Control}. + * + * <h5>Three-letter language/country(region) codes</h5> + * + * <p>The Locale constructors have always specified that the language + * and the country param be two characters in length, although in + * practice they have accepted any length. The specification has now + * been relaxed to allow language codes of two to eight characters and + * country (region) codes of two to three characters, and in + * particular, three-letter language codes and three-digit region + * codes as specified in the IANA Language Subtag Registry. For + * compatibility, the implementation still does not impose a length + * constraint. + * + * @see Builder + * @see ResourceBundle + * @see java.text.Format + * @see java.text.NumberFormat + * @see java.text.Collator + * @author Mark Davis + * @since 1.1 */ - public final class Locale implements Cloneable, Serializable { - // cache to store singleton Locales - private final static ConcurrentHashMap<String, Locale> cache = - new ConcurrentHashMap<String, Locale>(32); - - /** Useful constant for language. - */ - static public final Locale ENGLISH = createSingleton("en__", "en", ""); - - /** Useful constant for language. - */ - static public final Locale FRENCH = createSingleton("fr__", "fr", ""); - - /** Useful constant for language. - */ - static public final Locale GERMAN = createSingleton("de__", "de", ""); - - /** Useful constant for language. - */ - static public final Locale ITALIAN = createSingleton("it__", "it", ""); + static private final Cache LOCALECACHE = new Cache(); /** Useful constant for language. */ - static public final Locale JAPANESE = createSingleton("ja__", "ja", ""); + static public final Locale ENGLISH = getInstance("en", "", ""); + + /** Useful constant for language. + */ + static public final Locale FRENCH = getInstance("fr", "", ""); /** Useful constant for language. */ - static public final Locale KOREAN = createSingleton("ko__", "ko", ""); + static public final Locale GERMAN = getInstance("de", "", ""); /** Useful constant for language. */ - static public final Locale CHINESE = createSingleton("zh__", "zh", ""); + static public final Locale ITALIAN = getInstance("it", "", ""); /** Useful constant for language. */ - static public final Locale SIMPLIFIED_CHINESE = createSingleton("zh_CN_", "zh", "CN"); + static public final Locale JAPANESE = getInstance("ja", "", ""); + + /** Useful constant for language. + */ + static public final Locale KOREAN = getInstance("ko", "", ""); /** Useful constant for language. */ - static public final Locale TRADITIONAL_CHINESE = createSingleton("zh_TW_", "zh", "TW"); + static public final Locale CHINESE = getInstance("zh", "", ""); - /** Useful constant for country. + /** Useful constant for language. */ - static public final Locale FRANCE = createSingleton("fr_FR_", "fr", "FR"); + static public final Locale SIMPLIFIED_CHINESE = getInstance("zh", "CN", ""); + + /** Useful constant for language. + */ + static public final Locale TRADITIONAL_CHINESE = getInstance("zh", "TW", ""); /** Useful constant for country. */ - static public final Locale GERMANY = createSingleton("de_DE_", "de", "DE"); + static public final Locale FRANCE = getInstance("fr", "FR", ""); + + /** Useful constant for country. + */ + static public final Locale GERMANY = getInstance("de", "DE", ""); /** Useful constant for country. */ - static public final Locale ITALY = createSingleton("it_IT_", "it", "IT"); + static public final Locale ITALY = getInstance("it", "IT", ""); /** Useful constant for country. */ - static public final Locale JAPAN = createSingleton("ja_JP_", "ja", "JP"); + static public final Locale JAPAN = getInstance("ja", "JP", ""); /** Useful constant for country. */ - static public final Locale KOREA = createSingleton("ko_KR_", "ko", "KR"); + static public final Locale KOREA = getInstance("ko", "KR", ""); /** Useful constant for country. */ @@ -240,19 +480,19 @@ /** Useful constant for country. */ - static public final Locale UK = createSingleton("en_GB_", "en", "GB"); + static public final Locale UK = getInstance("en", "GB", ""); /** Useful constant for country. */ - static public final Locale US = createSingleton("en_US_", "en", "US"); + static public final Locale US = getInstance("en", "US", ""); /** Useful constant for country. */ - static public final Locale CANADA = createSingleton("en_CA_", "en", "CA"); + static public final Locale CANADA = getInstance("en", "CA", ""); /** Useful constant for country. */ - static public final Locale CANADA_FRENCH = createSingleton("fr_CA_", "fr", "CA"); + static public final Locale CANADA_FRENCH = getInstance("fr", "CA", ""); /** * Useful constant for the root locale. The root locale is the locale whose @@ -262,7 +502,25 @@ * * @since 1.6 */ - static public final Locale ROOT = createSingleton("__", "", ""); + static public final Locale ROOT = getInstance("", "", ""); + + /** + * The key for the private use extension ('x'). + * + * @see #getExtension(char) + * @see Builder#setExtension(char, String) + * @since 1.7 + */ + static public final char PRIVATE_USE_EXTENSION = 'x'; + + /** + * The key for Unicode locale extension ('u'). + * + * @see #getExtension(char) + * @see Builder#setExtension(char, String) + * @since 1.7 + */ + static public final char UNICODE_LOCALE_EXTENSION = 'u'; /** serialization ID */ @@ -274,32 +532,67 @@ private static final int DISPLAY_LANGUAGE = 0; private static final int DISPLAY_COUNTRY = 1; private static final int DISPLAY_VARIANT = 2; + private static final int DISPLAY_SCRIPT = 3; + + /** + * Private constructor used by getInstance method + */ + private Locale(BaseLocale baseLocale, LocaleExtensions extensions) { + _baseLocale = baseLocale; + _extensions = extensions; + } /** - * Construct a locale from language, country, variant. - * NOTE: ISO 639 is not a stable standard; some of the language codes it defines - * (specifically iw, ji, and in) have changed. This constructor accepts both the - * old codes (iw, ji, and in) and the new codes (he, yi, and id), but all other + * Construct a locale from language, country and variant. + * This constructor normalizes the language value to lowercase and + * the country value to uppercase. + * <p> + * <b>Note:</b> + * <ul> + * <li>ISO 639 is not a stable standard; some of the language codes it defines + * (specifically "iw", "ji", and "in") have changed. This constructor accepts both the + * old codes ("iw", "ji", and "in") and the new codes ("he", "yi", and "id"), but all other * API on Locale will return only the OLD codes. - * @param language lowercase two-letter ISO-639 code. - * @param country uppercase two-letter ISO-3166 code. - * @param variant vendor and browser specific code. See class description. + * <li>For backward compatibility reasons, this constructor does not make + * any syntactic checks on the input. + * <li>The two cases ("ja", "JP", "JP") and ("th", "TH", "TH") are handled specially, + * see <a href="#special_cases_constructor">Special Cases</a> for more information. + * </ul> + * + * @param language An ISO 639 alpha-2 or alpha-3 language code, or a language subtag + * up to 8 characters in length. See the <code>Locale</code> class description about + * valid language values. + * @param country An ISO 3166 alpha-2 country code or a UN M.49 numeric-3 area code. + * See the <code>Locale</code> class description about valid country values. + * @param variant Any arbitrary value used to indicate a variation of a <code>Locale</code>. + * See the <code>Locale</code> class description for the details. * @exception NullPointerException thrown if any argument is null. */ public Locale(String language, String country, String variant) { - this.language = convertOldISOCodes(language); - this.country = toUpperCase(country).intern(); - this.variant = variant.intern(); + _baseLocale = BaseLocale.getInstance(convertOldISOCodes(language), "", country, variant); + _extensions = getCompatibilityExtensions(language, "", country, variant); } /** - * Construct a locale from language, country. - * NOTE: ISO 639 is not a stable standard; some of the language codes it defines - * (specifically iw, ji, and in) have changed. This constructor accepts both the - * old codes (iw, ji, and in) and the new codes (he, yi, and id), but all other + * Construct a locale from language and country. + * This constructor normalizes the language value to lowercase and + * the country value to uppercase. + * <p> + * <b>Note:</b> + * <ul> + * <li>ISO 639 is not a stable standard; some of the language codes it defines + * (specifically "iw", "ji", and "in") have changed. This constructor accepts both the + * old codes ("iw", "ji", and "in") and the new codes ("he", "yi", and "id"), but all other * API on Locale will return only the OLD codes. - * @param language lowercase two-letter ISO-639 code. - * @param country uppercase two-letter ISO-3166 code. + * <li>For backward compatibility reasons, this constructor does not make + * any syntactic checks on the input. + * </ul> + * + * @param language An ISO 639 alpha-2 or alpha-3 language code, or a language subtag + * up to 8 characters in length. See the <code>Locale</code> class description about + * valid language values. + * @param country An ISO 3166 alpha-2 country code or a UN M.49 numeric-3 area code. + * See the <code>Locale</code> class description about valid country values. * @exception NullPointerException thrown if either argument is null. */ public Locale(String language, String country) { @@ -308,11 +601,21 @@ /** * Construct a locale from a language code. - * NOTE: ISO 639 is not a stable standard; some of the language codes it defines - * (specifically iw, ji, and in) have changed. This constructor accepts both the - * old codes (iw, ji, and in) and the new codes (he, yi, and id), but all other + * This constructor normalizes the language value to lowercase. + * <p> + * <b>Note:</b> + * <ul> + * <li>ISO 639 is not a stable standard; some of the language codes it defines + * (specifically "iw", "ji", and "in") have changed. This constructor accepts both the + * old codes ("iw", "ji", and "in") and the new codes ("he", "yi", and "id"), but all other * API on Locale will return only the OLD codes. - * @param language lowercase two-letter ISO-639 code. + * <li>For backward compatibility reasons, this constructor does not make + * any syntactic checks on the input. + * </ul> + * + * @param language An ISO 639 alpha-2 or alpha-3 language code, or a language subtag + * up to 8 characters in length. See the <code>Locale</code> class description about + * valid language values. * @exception NullPointerException thrown if argument is null. * @since 1.4 */ @@ -321,32 +624,6 @@ } /** - * Constructs a <code>Locale</code> using <code>language</code> - * and <code>country</code>. This constructor assumes that - * <code>language</code> and <code>contry</code> are interned and - * it is invoked by createSingleton only. (flag is just for - * avoiding the conflict with the public constructors. - */ - private Locale(String language, String country, boolean flag) { - this.language = language; - this.country = country; - this.variant = ""; - } - - /** - * Creates a <code>Locale</code> instance with the given - * <code>language</code> and <code>counry</code> and puts the - * instance under the given <code>key</code> in the cache. This - * method must be called only when initializing the Locale - * constants. - */ - private static Locale createSingleton(String key, String language, String country) { - Locale locale = new Locale(language, country, false); - cache.put(key, locale); - return locale; - } - - /** * Returns a <code>Locale</code> constructed from the given * <code>language</code>, <code>country</code> and * <code>variant</code>. If the same <code>Locale</code> instance @@ -354,29 +631,70 @@ * returned. Otherwise, a new <code>Locale</code> instance is * created and cached. * - * @param language lowercase two-letter ISO-639 code. - * @param country uppercase two-letter ISO-3166 code. + * @param language lowercase 2 to 8 language code. + * @param country uppercase two-letter ISO-3166 code and numric-3 UN M.49 area code. * @param variant vendor and browser specific code. See class description. * @return the <code>Locale</code> instance requested * @exception NullPointerException if any argument is null. */ static Locale getInstance(String language, String country, String variant) { - if (language== null || country == null || variant == null) { + return getInstance(language, "", country, variant, LocaleExtensions.EMPTY_EXTENSIONS); + } + + static Locale getInstance(String language, String script, String country, + String variant, LocaleExtensions extensions) { + if (language== null || script == null || country == null || variant == null) { throw new NullPointerException(); } - StringBuilder sb = new StringBuilder(); - sb.append(language).append('_').append(country).append('_').append(variant); - String key = sb.toString(); - Locale locale = cache.get(key); - if (locale == null) { - locale = new Locale(language, country, variant); - Locale l = cache.putIfAbsent(key, locale); - if (l != null) { - locale = l; + if (extensions == null) { + extensions = LocaleExtensions.EMPTY_EXTENSIONS; + } + + if (extensions.equals(LocaleExtensions.EMPTY_EXTENSIONS)) { + extensions = getCompatibilityExtensions(language, script, country, variant); + } + + BaseLocale baseloc = BaseLocale.getInstance(language, script, country, variant); + return getInstance(baseloc, extensions); + } + + static Locale getInstance(BaseLocale baseloc, LocaleExtensions extensions) { + LocaleKey key = new LocaleKey(baseloc, extensions); + return LOCALECACHE.get(key); + } + + private static class Cache extends LocaleObjectCache<LocaleKey, Locale> { + public Cache() { + } + protected Locale createObject(LocaleKey key) { + return new Locale(key._base, key._exts); + } + } + + private static class LocaleKey { + private BaseLocale _base; + private LocaleExtensions _exts; + + private LocaleKey(BaseLocale baseLocale, LocaleExtensions extensions) { + _base = baseLocale; + _exts = extensions; + } + + public boolean equals(Object obj) { + if (this == obj) { + return true; } + if (!(obj instanceof LocaleKey)) { + return false; + } + LocaleKey other = (LocaleKey)obj; + return _base.equals(other._base) && _exts.equals(other._exts); } - return locale; + + public int hashCode() { + return _base.hashCode() ^ _exts.hashCode(); + } } /** @@ -395,31 +713,103 @@ // do not synchronize this method - see 4071298 // it's OK if more than one default locale happens to be created if (defaultLocale == null) { - String language, region, country, variant; + initDefault(); + } + return defaultLocale; + } + + /** + * Gets the current value of the default locale for the specified Category + * for this instance of the Java Virtual Machine. + * <p> + * The Java Virtual Machine sets the default locale during startup based + * on the host environment. It is used by many locale-sensitive methods + * if no locale is explicitly specified. It can be changed using the + * setDefault(Locale.Category, Locale) method. + * + * @param category - the specified category to get the default locale + * @throws NullPointerException - if category is null + * @return the default locale for the specified Category for this instance + * of the Java Virtual Machine + * @see #setDefault(Locale.Category, Locale) + * @since 1.7 + */ + public static Locale getDefault(Locale.Category category) { + // do not synchronize this method - see 4071298 + // it's OK if more than one default locale happens to be created + switch (category) { + case DISPLAY: + if (defaultDisplayLocale == null) { + initDefault(category); + } + return defaultDisplayLocale; + case FORMAT: + if (defaultFormatLocale == null) { + initDefault(category); + } + return defaultFormatLocale; + default: + assert false: "Unknown Category"; + } + return getDefault(); + } + + private static void initDefault() { + String language, region, country, variant; + language = AccessController.doPrivileged( + new GetPropertyAction("user.language", "en")); + // for compatibility, check for old user.region property + region = AccessController.doPrivileged( + new GetPropertyAction("user.region")); + if (region != null) { + // region can be of form country, country_variant, or _variant + int i = region.indexOf('_'); + if (i >= 0) { + country = region.substring(0, i); + variant = region.substring(i + 1); + } else { + country = region; + variant = ""; + } + } else { + country = AccessController.doPrivileged( + new GetPropertyAction("user.country", "")); + variant = AccessController.doPrivileged( + new GetPropertyAction("user.variant", "")); + } + defaultLocale = getInstance(language, country, variant); + } + + private static void initDefault(Locale.Category category) { + String language, region, country, variant; + switch (category) { + case DISPLAY: language = AccessController.doPrivileged( - new GetPropertyAction("user.language", "en")); - // for compatibility, check for old user.region property - region = AccessController.doPrivileged( - new GetPropertyAction("user.region")); - if (region != null) { - // region can be of form country, country_variant, or _variant - int i = region.indexOf('_'); - if (i >= 0) { - country = region.substring(0, i); - variant = region.substring(i + 1); - } else { - country = region; - variant = ""; - } + new GetPropertyAction("user.language.display", "")); + if ("".equals(language)) { + defaultDisplayLocale = getDefault(); } else { country = AccessController.doPrivileged( - new GetPropertyAction("user.country", "")); + new GetPropertyAction("user.country.display", "")); variant = AccessController.doPrivileged( - new GetPropertyAction("user.variant", "")); + new GetPropertyAction("user.variant.display", "")); + defaultDisplayLocale = getInstance(language, country, variant); } - defaultLocale = getInstance(language, country, variant); + break; + case FORMAT: + language = AccessController.doPrivileged( + new GetPropertyAction("user.language.format", "")); + if ("".equals(language)) { + defaultFormatLocale = getDefault(); + } else { + country = AccessController.doPrivileged( + new GetPropertyAction("user.country.format", "")); + variant = AccessController.doPrivileged( + new GetPropertyAction("user.variant.format", "")); + defaultFormatLocale = getInstance(language, country, variant); + } + break; } - return defaultLocale; } /** @@ -438,6 +828,9 @@ * of functionality, this method should only be used if the caller * is prepared to reinitialize locale-sensitive code running * within the same Java Virtual Machine. + * <p> + * By setting the default locale with this method, all of the default + * locales for each Category are also set to the specified default locale. * * @throws SecurityException * if a security manager exists and its @@ -448,13 +841,59 @@ * @see java.util.PropertyPermission */ public static synchronized void setDefault(Locale newLocale) { + setDefault(Category.DISPLAY, newLocale); + setDefault(Category.FORMAT, newLocale); + defaultLocale = newLocale; + } + + /** + * Sets the default locale for the specified Category for this instance + * of the Java Virtual Machine. This does not affect the host locale. + * <p> + * If there is a security manager, its checkPermission method is called + * with a PropertyPermission("user.language", "write") permission before + * the default locale is changed. + * <p> + * The Java Virtual Machine sets the default locale during startup based + * on the host environment. It is used by many locale-sensitive methods + * if no locale is explicitly specified. + * <p> + * Since changing the default locale may affect many different areas of + * functionality, this method should only be used if the caller is + * prepared to reinitialize locale-sensitive code running within the + * same Java Virtual Machine. + * <p> + * + * @param category - the specified category to set the default locale + * @param newLocale - the new default locale + * @throws SecurityException - if a security manager exists and its + * checkPermission method doesn't allow the operation. + * @throws NullPointerException - if category and/or newLocale is null + * @see SecurityManager.checkPermission(java.security.Permission) + * @see PropertyPermission + * @see #getDefault(Locale.Category) + * @since 1.7 + */ + public static synchronized void setDefault(Locale.Category category, + Locale newLocale) { + if (category == null) + throw new NullPointerException("Category cannot be NULL"); if (newLocale == null) throw new NullPointerException("Can't set default locale to NULL"); SecurityManager sm = System.getSecurityManager(); if (sm != null) sm.checkPermission(new PropertyPermission ("user.language", "write")); - defaultLocale = newLocale; + switch (category) { + case DISPLAY: + defaultDisplayLocale = newLocale; + break; + case FORMAT: + defaultFormatLocale = newLocale; + break; + default: + assert false: "Unknown Category"; + } } /** @@ -474,6 +913,11 @@ /** * Returns a list of all 2-letter country codes defined in ISO 3166. * Can be used to create Locales. + * <p> + * <b>Note:</b> The <code>Locale</code> class also supports other codes for + * country (region), such as 3-letter numeric UN M.49 area codes. + * Therefore, the list returned by this method does not contain ALL valid + * codes that can be used to create Locales. */ public static String[] getISOCountries() { if (isoCountries == null) { @@ -487,9 +931,16 @@ /** * Returns a list of all 2-letter language codes defined in ISO 639. * Can be used to create Locales. - * [NOTE: ISO 639 is not a stable standard-- some languages' codes have changed. + * <p> + * <b>Note:</b> + * <ul> + * <li>ISO 639 is not a stable standard— some languages' codes have changed. * The list this function returns includes both the new and the old codes for the - * languages whose codes have changed.] + * languages whose codes have changed. + * <li>The <code>Locale</code> class also supports language codes up to + * 8 characters in length. Therefore, the list returned by this method does + * not contain ALL valid codes that can be used to create Locales. + * </ul> */ public static String[] getISOLanguages() { if (isoLanguages == null) { @@ -510,100 +961,516 @@ } /** - * Returns the language code for this locale, which will either be the empty string - * or a lowercase ISO 639 code. - * <p>NOTE: ISO 639 is not a stable standard-- some languages' codes have changed. + * Returns the language code of this Locale. + * + * <p><b>Note:</b> ISO 639 is not a stable standard— some languages' codes have changed. * Locale's constructor recognizes both the new and the old codes for the languages * whose codes have changed, but this function always returns the old code. If you - * want to check for a specific language whose code has changed, don't do <pre> - * if (locale.getLanguage().equals("he")) + * want to check for a specific language whose code has changed, don't do + * <pre> + * if (locale.getLanguage().equals("he")) // BAD! * ... - * </pre>Instead, do<pre> - * if (locale.getLanguage().equals(new Locale("he", "", "").getLanguage())) - * ...</pre> + * </pre> + * Instead, do + * <pre> + * if (locale.getLanguage().equals(new Locale("he").getLanguage())) + * ... + * </pre> + * @return The language code, or the empty string if none is defined. * @see #getDisplayLanguage */ public String getLanguage() { - return language; + return _baseLocale.getLanguage(); } /** - * Returns the country/region code for this locale, which will - * either be the empty string or an uppercase ISO 3166 2-letter code. + * Returns the script for this locale, which should + * either be the empty string or an ISO 15924 4-letter script + * code. The first letter is uppercase and the rest are + * lowercase, for example, 'Latn', 'Cyrl'. + * + * @return The script code, or the empty string if none is defined. + * @see #getDisplayScript + * @since 1.7 + */ + public String getScript() { + return _baseLocale.getScript(); + } + + /** + * Returns the country/region code for this locale, which should + * either be the empty string, an uppercase ISO 3166 2-letter code, + * or a UN M.49 3-digit code. + * + * @return The country/region code, or the empty string if none is defined. * @see #getDisplayCountry */ public String getCountry() { - return country; + return _baseLocale.getRegion(); } /** * Returns the variant code for this locale. + * + * @return The variant code, or the empty string if none is defined. * @see #getDisplayVariant */ public String getVariant() { - return variant; + return _baseLocale.getVariant(); + } + + /** + * Returns the extension (or private use) value associated with + * the specified key, or null if there is no extension + * associated with the key. To be well-formed, the key must be one + * of <code>[0-9A-Za-z]</code>. Keys are case-insensitive, so + * for example 'z' and 'Z' represent the same extension. + * + * @param key the extension key + * @return The extension, or null if this locale defines no + * extension for the specified key. + * @throws IllegalArgumentException if key is not well-formed + * @see #PRIVATE_USE_EXTENSION + * @see #UNICODE_LOCALE_EXTENSION + * @since 1.7 + */ + public String getExtension(char key) { + if (!LocaleExtensions.isValidKey(key)) { + throw new IllegalArgumentException("Ill-formed extension key: " + key); + } + return _extensions.getExtensionValue(key); + } + + /** + * Returns the set of extension keys associated with this locale, or the + * empty set if it has no extensions. The returned set is unmodifiable. + * The keys will all be lower-case. + * + * @return The set of extension keys, or the empty set if this locale has + * no extensions. + * @since 1.7 + */ + public Set<Character> getExtensionKeys() { + return _extensions.getKeys(); + } + + /** + * Returns the set of unicode locale attributes associated with + * this locale, or the empty set if it has no attributes. The + * returned set is unmodifiable. + * + * @return The set of attributes. + * @since 1.7 + */ + public Set<String> getUnicodeLocaleAttributes() { + return _extensions.getUnicodeLocaleAttributes(); + } + + /** + * Returns the Unicode locale type associated with the specified Unicode locale key + * for this locale. Returns the empty string for keys that are defined with no type. + * Returns null if the key is not defined. Keys are case-insensitive. The key must + * be two alphanumeric characters ([0-9a-zA-Z]), or an IllegalArgumentException is + * thrown. + * + * @param key the Unicode locale key + * @return The Unicode locale type associated with the key, or null if the + * locale does not define the key. + * @throws IllegalArgumentException if the key is not well-formed + * @throws NullPointerException if <code>key</code> is null + * @since 1.7 + */ + public String getUnicodeLocaleType(String key) { + if (!UnicodeLocaleExtension.isKey(key)) { + throw new IllegalArgumentException("Ill-formed Unicode locale key: " + key); + } + return _extensions.getUnicodeLocaleType(key); + } + + /** + * Returns the set of Unicode locale keys defined by this locale, or the empty set if + * this locale has none. The returned set is immutable. Keys are all lower case. + * + * @return The set of Unicode locale keys, or the empty set if this locale has + * no Unicode locale keywords. + * @since 1.7 + */ + public Set<String> getUnicodeLocaleKeys() { + return _extensions.getUnicodeLocaleKeys(); } /** - * Getter for the programmatic name of the entire locale, - * with the language, country and variant separated by underbars. - * Language is always lower case, and country is always upper case. - * If the language is missing, the string will begin with an underbar. - * If both the language and country fields are missing, this function - * will return the empty string, even if the variant field is filled in - * (you can't have a locale with just a variant-- the variant must accompany - * a valid language or country code). - * Examples: "en", "de_DE", "_GB", "en_US_WIN", "de__POSIX", "fr__MAC" + * Package locale method returning the Locale's BaseLocale, + * used by ResourceBundle + * @return base locale of this Locale + */ + BaseLocale getBaseLocale() { + return _baseLocale; + } + + /** + * Package local method returning the Locale's LocaleExtensions, + * used by ResourceBundle + * @return locale exnteions of this Locale + */ + LocaleExtensions getLocaleExtensions() { + return _extensions; + } + + /** + * Returns a string representation of this <code>Locale</code> + * object, consisting of language, country, variant, script, + * and extensions as below: + * <p><blockquote> + * language + "_" + country + "_" + (variant + "_#" | "#") + script + "-" + extensions + * </blockquote> + * + * Language is always lower case, country is always upper case, script is always title + * case, and extensions are always lower case. Extensions and private use subtags + * will be in canonical order as explained in {@link #toLanguageTag}. + * + * <p>When the locale has neither script nor extensions, the result is the same as in + * Java 6 and prior. + * + * <p>If both the language and country fields are missing, this function will return + * the empty string, even if the variant, script, or extensions field is present (you + * can't have a locale with just a variant, the variant must accompany a well-formed + * language or country code). + * + * <p>If script or extensions are present and variant is missing, no underscore is + * added before the "#". + * + * <p>This behavior is designed to support debugging and to be compatible with + * previous uses of <code>toString</code> that expected language, country, and variant + * fields only. To represent a Locale as a String for interchange purposes, use + * {@link #toLanguageTag}. + * + * <p>Examples: <ul><tt> + * <li>en + * <li>de_DE + * <li>_GB + * <li>en_US_WIN + * <li>de__POSIX + * <li>zh_CN_#Hans + * <li>zh_TW_#Hant-x-java + * <li>th_TH_TH_#u-nu-thai</tt></ul> + * + * @return A string representation of the Locale, for debugging. * @see #getDisplayName + * @see #toLanguageTag */ public final String toString() { - boolean l = language.length() != 0; - boolean c = country.length() != 0; - boolean v = variant.length() != 0; - StringBuilder result = new StringBuilder(language); - if (c||(l&&v)) { - result.append('_').append(country); // This may just append '_' + boolean l = (_baseLocale.getLanguage().length() != 0); + boolean s = (_baseLocale.getScript().length() != 0); + boolean r = (_baseLocale.getRegion().length() != 0); + boolean v = (_baseLocale.getVariant().length() != 0); + boolean e = (_extensions.getID().length() != 0); + + StringBuilder result = new StringBuilder(_baseLocale.getLanguage()); + if (r || (l && v)) { + result.append('_') + .append(_baseLocale.getRegion()); // This may just append '_' + } + if (v && (l || r)) { + result.append('_') + .append(_baseLocale.getVariant()); } - if (v&&(l||c)) { - result.append('_').append(variant); + + if (s && (l || r)) { + result.append("_#") + .append(_baseLocale.getScript()); } + + if (e && (l || r)) { + result.append('_'); + if (!s) { + result.append('#'); + } + result.append(_extensions.getID()); + } + return result.toString(); } /** - * Returns a three-letter abbreviation for this locale's language. If the locale - * doesn't specify a language, this will be the empty string. Otherwise, this will - * be a lowercase ISO 639-2/T language code. - * The ISO 639-2 language codes can be found on-line at - * <a href="http://www.loc.gov/standards/iso639-2/englangn.html"> - * <code>http://www.loc.gov/standards/iso639-2/englangn.html</code>.</a> - * @exception MissingResourceException Throws MissingResourceException if the + * Returns a well-formed IETF BCP 47 language tag representing + * this locale. + * + * <p>If this <code>Locale</code> has a language, country, or + * variant that does not satisfy the IETF BCP 47 language tag + * syntax requirements, this method handles these fields as + * described below: + * + * <p><b>Language:</b> If language is empty, or not <a + * href="#def_language" >well-formed</a> (for example "a" or + * "e2"), it will be emitted as "und" (Undetermined). + * + * <p><b>Country:</b> If country is not <a + * href="#def_region">well-formed</a> (for example "12" or "USA"), + * it will be omitted. + * + * <p><b>Variant:</b> If variant <b>is</b> <a + * href="#def_variant">well-formed</a>, each sub-segment + * (delimited by '-' or '_') is emitted as a subtag. Otherwise: + * <ul> + * + * <li>if all sub-segments match <code>[0-9a-zA-Z]{1,8}</code> + * (for example "WIN" or "Oracle_JDK_Standard_Edition"), the first + * ill-formed sub-segment and all following will be appended to + * the private use subtag. The first appended subtag will be + * "lvariant", followed by the sub-segments in order, separated by + * hyphen. For example, "x-lvariant-WIN", + * "Oracle-x-lvariant-JDK-Standard-Edition". + * + * <li>if any sub-segment does not match + * <code>[0-9a-zA-Z]{1,8}</code>, the variant will be truncated + * and the problematic sub-segment and all following sub-segments + * will be omitted. If the remainder is non-empty, it will be + * emitted as a private use subtag as above (even if the remainder + * turns out to be well-formed). For example, + * "Solaris_isjustthecoolestthing" is emitted as + * "x-lvariant-Solaris", not as "solaris".</li></ul> + * + * <p><b>Compatibility special cases:</b><ul> + * + * <li>The language codes "iw", "ji", and "in" are handled + * specially. Java uses these deprecated codes for compatibility + * reasons. The <code>toLanguageTag</code> method converts these + * three codes (and only these three) to "he", "yi", and "id" + * respectively. + * + * <li>A locale with language "no", country "NO", and variant + * "NY", representing Norwegian Nynorsk, will be represented as + * having language "nn", country "NO", and empty variant. This is + * because some JVMs used the deprecated form to represent the + * user's default locale, and for compatibility reasons that Take a has + * not been changed.</ul> + * + * <p><b>Note:</b> Although the language tag created by this + * method is well-formed (satisfies the syntax requirements + * defined by the IETF BCP 47 specification), it is not + * necessarily a valid BCP 47 language tag. For example, + * <pre> + * new Locale("xx", "YY").toLanguageTag();</pre> + * + * will return "xx-YY", but the language subtag "xx" and the + * region subtag "YY" are invalid because they are not registered + * in the IANA Language Subtag Registry. + * + * @return a BCP47 language tag representing the locale + * @see #forLanguageTag(String) + * @since 1.7 + */ + public String toLanguageTag() { + LanguageTag tag = LanguageTag.parseLocale(_baseLocale, _extensions); + StringBuilder buf = new StringBuilder(); + + String subtag = tag.getLanguage(); + buf.append(LanguageTag.canonicalizeLanguage(subtag)); + + subtag = tag.getScript(); + if (subtag.length() > 0) { + buf.append(LanguageTag.SEP); + buf.append(LanguageTag.canonicalizeScript(subtag)); + } + + subtag = tag.getRegion(); + if (subtag.length() > 0) { + buf.append(LanguageTag.SEP); + buf.append(LanguageTag.canonicalizeRegion(subtag)); + } + + List<String>subtags = tag.getVariants(); + for (String s : subtags) { + buf.append(LanguageTag.SEP); + // preserve casing + buf.append(s); + } + + subtags = tag.getExtensions(); + for (String s : subtags) { + buf.append(LanguageTag.SEP); + buf.append(LanguageTag.canonicalizeExtension(s)); + } + + subtag = tag.getPrivateuse(); + if (subtag.length() > 0) { + buf.append(LanguageTag.SEP).append(LanguageTag.PRIVATEUSE).append(LanguageTag.SEP); + // preserve casing + buf.append(subtag); + } + + return buf.toString(); + } + + /** + * Returns a locale for the specified IETF BCP 47 language tag string. + * + * <p>If the specified language tag contains any ill-formed subtags, + * the first such subtag and all following subtags are ignored. Compare + * to {@link Locale.Builder#setLanguageTag} which throws an exception + * in this case. + * + * <p>The following <b>conversions</b> are performed:<ul> + * + * <li>The language code "und" is mapped to language "". + * + * <li>The language codes "he", "yi", and "id" are mapped to "iw", + * "ji", and "in" respectively. (This is the same canonicalization + * that's done in Locale's constructors.) + * + * <li>The portion of a private use subtag prefixed by "lvariant", + * if any, is removed and appended to the variant field in the + * result locale (without case normalization). If it is then + * empty, the private use subtag is discarded: + * + * <pre> + * Locale loc; + * loc = Locale.forLanguageTag("en-US-x-lvariant-POSIX); + * loc.getVariant(); // returns "POSIX" + * loc.getExtension('x'); // returns null + * + * loc = Locale.forLanguageTag("de-POSIX-x-URP-lvariant-Abc-Def"); + * loc.getVariant(); // returns "POSIX_Abc_Def" + * loc.getExtension('x'); // returns "urp" + * </pre> + * + * <li>When the languageTag argument contains an extlang subtag, + * the first such subtag is used as the language, and the primary + * language subtag and other extlang subtags are ignored: + * + * <pre> + * Locale.forLanguageTag("ar-aao").getLanguage(); // returns "aao" + * Locale.forLanguageTag("en-abc-def-us").toString(); // returns "abc_US" + * </pre> + * + * <li>Case is normalized except for variant tags, which are left + * unchanged. Language is normalized to lower case, script to + * title case, country to upper case, and extensions to lower + * case. + * + * <li>If, after processing, the locale would exactly match either + * ja_JP_JP or th_TH_TH with no extensions, the appropriate + * extensions are added as though the constructor had been called: + * + * <pre> + * Locale.forLanguageTag("ja-JP-x-lvariant-JP).toLanguageTag(); + * // returns ja-JP-u-ca-japanese-x-lvariant-JP + * Locale.forLanguageTag("th-TH-x-lvariant-TH).toLanguageTag(); + * // returns th-TH-u-nu-thai-x-lvariant-TH + * <pre></ul> + * + * <p>This implements the 'Language-Tag' production of BCP47, and + * so supports grandfathered (regular and irregular) as well as + * private use language tags. Stand alone private use tags are + * represented as empty language and extension 'x-whatever', + * and grandfathered tags are converted to their canonical replacements + * where they exist. + * + * <p>Grandfathered tags with canonical replacements are as follows: + * + * <table> + * <tbody align="center"> + * <tr><th>grandfathered tag</th><th> </th><th>modern replacement</th></tr> + * <tr><td>art-lojban</td><td> </td><td>jbo</td></tr> + * <tr><td>i-ami</td><td> </td><td>ami</td></tr> + * <tr><td>i-bnn</td><td> </td><td>bnn</td></tr> + * <tr><td>i-hak</td><td> </td><td>hak</td></tr> + * <tr><td>i-klingon</td><td> </td><td>tlh</td></tr> + * <tr><td>i-lux</td><td> </td><td>lb</td></tr> + * <tr><td>i-navajo</td><td> </td><td>nv</td></tr> + * <tr><td>i-pwn</td><td> </td><td>pwn</td></tr> + * <tr><td>i-tao</td><td> </td><td>tao</td></tr> + * <tr><td>i-tay</td><td> </td><td>tay</td></tr> + * <tr><td>i-tsu</td><td> </td><td>tsu</td></tr> + * <tr><td>no-bok</td><td> </td><td>nb</td></tr> + * <tr><td>no-nyn</td><td> </td><td>nn</td></tr> + * <tr><td>sgn-BE-FR</td><td> </td><td>sfb</td></tr> + * <tr><td>sgn-BE-NL</td><td> </td><td>vgt</td></tr> + * <tr><td>sgn-CH-DE</td><td> </td><td>sgg</td></tr> + * <tr><td>zh-guoyu</td><td> </td><td>cmn</td></tr> + * <tr><td>zh-hakka</td><td> </td><td>hak</td></tr> + * <tr><td>zh-min-nan</td><td> </td><td>nan</td></tr> + * <tr><td>zh-xiang</td><td> </td><td>hsn</td></tr> + * </tbody> + * </table> + * + * <p>Grandfathered tags with no modern replacement will be + * converted as follows: + * + * <table> + * <tbody align="center"> + * <tr><th>grandfathered tag</th><th> </th><th>converts to</th></tr> + * <tr><td>cel-gaulish</td><td> </td><td>xtg-x-cel-gaulish</td></tr> + * <tr><td>en-GB-oed</td><td> </td><td>en-GB-x-oed</td></tr> + * <tr><td>i-default</td><td> </td><td>en-x-i-default</td></tr> + * <tr><td>i-enochian</td><td> </td><td>und-x-i-enochian</td></tr> + * <tr><td>i-mingo</td><td> </td><td>see-x-i-mingo</td></tr> + * <tr><td>zh-min</td><td> </td><td>nan-x-zh-min</td></tr> + * </tbody> + * </table> + * + * <p>For a list of all grandfathered tags, see the + * IANA Language Subtag Registry (search for "Type: grandfathered"). + * + * <p><b>Note</b>: there is no guarantee that <code>toLanguageTag</code> + * and <code>forLanguageTag</code> will round-trip. + * + * @param languageTag the language tag + * @return The locale that best represents the language tag. + * @throws NullPointerException if <code>languageTag</code> is <code>null</code> + * @see #toLanguageTag() + * @see java.util.Locale.Builder#setLanguageTag(String) + * @since 1.7 + */ + public static Locale forLanguageTag(String languageTag) { + LanguageTag tag = LanguageTag.parse(languageTag, null); + InternalLocaleBuilder bldr = new InternalLocaleBuilder(); + bldr.setLanguageTag(tag); + return getInstance(bldr.getBaseLocale(), bldr.getLocaleExtensions()); + } + + /** + * Returns a three-letter abbreviation of this locale's language. + * If the language matches an ISO 639-1 two-letter code, the + * corresponding ISO 639-2/T three-letter lowercase code is + * returned. The ISO 639-2 language codes can be found on-line, + * see "Codes for the Representation of Names of Languages Part 2: + * Alpha-3 Code". If the locale specifies a three-letter + * language, the language is returned as is. If the locale does + * not specify a language the empty string is returned. + * + * @return A three-letter abbreviation of this locale's language. + * @exception MissingResourceException Throws MissingResourceException if * three-letter language abbreviation is not available for this locale. */ public String getISO3Language() throws MissingResourceException { - String language3 = getISO3Code(language, LocaleISOData.isoLanguageTable); + String language3 = getISO3Code(_baseLocale.getLanguage(), LocaleISOData.isoLanguageTable); if (language3 == null) { throw new MissingResourceException("Couldn't find 3-letter language code for " - + language, "FormatData_" + toString(), "ShortLanguage"); + + _baseLocale.getLanguage(), "FormatData_" + toString(), "ShortLanguage"); } return language3; } /** - * Returns a three-letter abbreviation for this locale's country. If the locale - * doesn't specify a country, this will be the empty string. Otherwise, this will - * be an uppercase ISO 3166 3-letter country code. - * The ISO 3166-2 country codes can be found on-line at - * <a href="http://www.davros.org/misc/iso3166.txt"> - * <code>http://www.davros.org/misc/iso3166.txt</code>.</a> + * Returns a three-letter abbreviation for this locale's country. + * If the country matches an ISO 3166-1 alpha-2 code, the + * corresponding ISO 3166-1 alpha-3 uppercase code is returned. + * If the locale doesn't specify a country, this will be the empty + * string. + * + * <p>The ISO 3166-1 codes can be found on-line. + * + * @return A three-letter abbreviation of this locale's country. * @exception MissingResourceException Throws MissingResourceException if the * three-letter country abbreviation is not available for this locale. */ public String getISO3Country() throws MissingResourceException { - String country3 = getISO3Code(country, LocaleISOData.isoCountryTable); + String country3 = getISO3Code(_baseLocale.getRegion(), LocaleISOData.isoCountryTable); if (country3 == null) { throw new MissingResourceException("Couldn't find 3-letter country code for " - + country, "FormatData_" + toString(), "ShortCountry"); + + _baseLocale.getRegion(), "FormatData_" + toString(), "ShortCountry"); } return country3; } @@ -642,7 +1509,7 @@ * value. If the locale doesn't specify a language, this function returns the empty string. */ public final String getDisplayLanguage() { - return getDisplayLanguage(getDefault()); + return getDisplayLanguage(getDefault(Category.DISPLAY)); } /** @@ -661,7 +1528,33 @@ * @exception NullPointerException if <code>inLocale</code> is <code>null</code> */ public String getDisplayLanguage(Locale inLocale) { - return getDisplayString(language, inLocale, DISPLAY_LANGUAGE); + return getDisplayString(_baseLocale.getLanguage(), inLocale, DISPLAY_LANGUAGE); + } + + /** + * Returns a name for the the locale's script that is appropriate for display to + * the user. If possible, the name will be localized for the default locale. Returns + * the empty string if this locale doesn't specify a script code. + * + * @return the display name of the script code for the current default locale + * @since 1.7 + */ + public String getDisplayScript() { + return getDisplayScript(getDefault()); + } + + /** + * Returns a name for the locale's script that is appropriate + * for display to the user. If possible, the name will be + * localized for the given locale. Returns the empty string if + * this locale doesn't specify a script code. + * + * @return the display name of the script code for the current default locale + * @throws NullPointerException if <code>inLocale</code> is <code>null</code> + * @since 1.7 + */ + public String getDisplayScript(Locale inLocale) { + return getDisplayString(_baseLocale.getScript(), inLocale, DISPLAY_SCRIPT); } /** @@ -677,7 +1570,7 @@ * value. If the locale doesn't specify a country, this function returns the empty string. */ public final String getDisplayCountry() { - return getDisplayCountry(getDefault()); + return getDisplayCountry(getDefault(Category.DISPLAY)); } /** @@ -696,7 +1589,7 @@ * @exception NullPointerException if <code>inLocale</code> is <code>null</code> */ public String getDisplayCountry(Locale inLocale) { - return getDisplayString(country, inLocale, DISPLAY_COUNTRY); + return getDisplayString(_baseLocale.getRegion(), inLocale, DISPLAY_COUNTRY); } private String getDisplayString(String code, Locale inLocale, int type) { @@ -744,7 +1637,7 @@ * doesn't specify a variant code, this function returns the empty string. */ public final String getDisplayVariant() { - return getDisplayVariant(getDefault()); + return getDisplayVariant(getDefault(Category.DISPLAY)); } /** @@ -755,7 +1648,7 @@ * @exception NullPointerException if <code>inLocale</code> is <code>null</code> */ public String getDisplayVariant(Locale inLocale) { - if (variant.length() == 0) + if (_baseLocale.getVariant().length() == 0) return ""; OpenListResourceBundle bundle = LocaleData.getLocaleNames(inLocale); @@ -776,39 +1669,44 @@ /** * Returns a name for the locale that is appropriate for display to the - * user. This will be the values returned by getDisplayLanguage(), getDisplayCountry(), - * and getDisplayVariant() assembled into a single string. The display name will have - * one of the following forms:<p><blockquote> - * language (country, variant)<p> - * language (country)<p> - * language (variant)<p> - * country (variant)<p> - * language<p> - * country<p> - * variant<p></blockquote> - * depending on which fields are specified in the locale. If the language, country, - * and variant fields are all empty, this function returns the empty string. + * user. This will be the values returned by getDisplayLanguage(), + * getDisplayScript(), getDisplayCountry(), and getDisplayVariant() assembled + * into a single string. The the non-empty values are used in order, + * with the second and subsequent names in parentheses. For example: + * <blockquote> + * language (script, country, variant)<br> + * language (country)<br> + * language (variant)<br> + * script (country)<br> + * country<br> + * </blockquote> + * depending on which fields are specified in the locale. If the + * language, sacript, country, and variant fields are all empty, + * this function returns the empty string. */ public final String getDisplayName() { - return getDisplayName(getDefault()); + return getDisplayName(getDefault(Category.DISPLAY)); } /** - * Returns a name for the locale that is appropriate for display to the - * user. This will be the values returned by getDisplayLanguage(), getDisplayCountry(), - * and getDisplayVariant() assembled into a single string. The display name will have - * one of the following forms:<p><blockquote> - * language (country, variant)<p> - * language (country)<p> - * language (variant)<p> - * country (variant)<p> - * language<p> - * country<p> - * variant<p></blockquote> - * depending on which fields are specified in the locale. If the language, country, - * and variant fields are all empty, this function returns the empty string. + * Returns a name for the locale that is appropriate for display + * to the user. This will be the values returned by + * getDisplayLanguage(), getDisplayScript(),getDisplayCountry(), + * and getDisplayVariant() assembled into a single string. + * The non-empty values are used in order, + * with the second and subsequent names in parentheses. For example: + * <blockquote> + * language (script, country, variant)<br> + * language (country)<br> + * language (variant)<br> + * script (country)<br> + * country<br> + * </blockquote> + * depending on which fields are specified in the locale. If the + * language, script, country, and variant fields are all empty, + * this function returns the empty string. * - * @exception NullPointerException if <code>inLocale</code> is <code>null</code> + * @throws NullPointerException if <code>inLocale</code> is <code>null</code> */ public String getDisplayName(Locale inLocale) { OpenListResourceBundle bundle = LocaleData.getLocaleNames(inLocale); @@ -888,7 +1786,7 @@ } /** - * Overrides Cloneable + * Overrides Cloneable. */ public Object clone() { @@ -908,7 +1806,7 @@ public int hashCode() { int hc = hashCodeValue; if (hc == 0) { - hc = (language.hashCode() << 8) ^ country.hashCode() ^ (variant.hashCode() << 4); + hc = _baseLocale.hashCode() ^ _extensions.hashCode(); hashCodeValue = hc; } return hc; @@ -918,8 +1816,8 @@ /** * Returns true if this Locale is equal to another object. A Locale is - * deemed equal to another Locale with identical language, country, - * and variant, and unequal to all other objects. + * deemed equal to another Locale with identical language, script, country, + * variant and extensions, and unequal to all other objects. * * @return true if this Locale is equal to the specified object. */ @@ -929,47 +1827,24 @@ return true; if (!(obj instanceof Locale)) return false; - Locale other = (Locale) obj; - return language == other.language - && country == other.country - && variant == other.variant; + BaseLocale otherBase = ((Locale)obj)._baseLocale; + LocaleExtensions otherExt = ((Locale)obj)._extensions; + return _baseLocale.equals(otherBase) && _extensions.equals(otherExt); } // ================= privates ===================================== - // XXX instance and class variables. For now keep these separate, since it is - // faster to match. Later, make into single string. - - /** - * @serial - * @see #getLanguage - */ - private final String language; + private transient BaseLocale _baseLocale; + private transient LocaleExtensions _extensions; /** - * @serial - * @see #getCountry - */ - private final String country; - - /** - * @serial - * @see #getVariant - */ - private final String variant; - - /** - * Placeholder for the object's hash code. Always -1. - * @serial - */ - private volatile int hashcode = -1; // lazy evaluate - - /** - * Calculated hashcode to fix 4518797. + * Calculated hashcode */ private transient volatile int hashCodeValue = 0; private static Locale defaultLocale = null; + private static Locale defaultDisplayLocale = null; + private static Locale defaultFormatLocale = null; /** * Return an array of the display names of the variant. @@ -978,7 +1853,7 @@ */ private String[] getDisplayVariantArray(OpenListResourceBundle bundle, Locale inLocale) { // Split the variant name into tokens separated by '_'. - StringTokenizer tokenizer = new StringTokenizer(variant, "_"); + StringTokenizer tokenizer = new StringTokenizer(_baseLocale.getVariant(), "_"); String[] names = new String[tokenizer.countTokens()]; // For each variant token, lookup the display name. If @@ -1056,49 +1931,102 @@ } /** - * Replace the deserialized Locale object with a newly - * created object. Newer language codes are replaced with older ISO - * codes. The country and variant codes are replaced with internalized - * String copies. + * @serialField language String + * language subtag in lower case. (See <a href="java/util/Locale.html#getLanguage()">getLanguage()</a>) + * @serialField country String + * country subtag in upper case. (See <a href="java/util/Locale.html#getCountry()">getCountry()</a>) + * @serialField variant String + * variant subtags separated by LOWLINE characters. (See <a href="java/util/Locale.html#getVariant()">getVariant()</a>) + * @serialField hashcode int + * deprectated, for forward compatibility only + * @serialField script String + * script subtag in title case (See <a href="java/util/Locale.html#getScript()">getScript()</a>) + * @serialField extensions String + * canonical representation of extensions, that is, + * BCP47 extensions in alphabetical order followed by + * BCP47 private use subtags, all in lower case letters + * separated by HYPHEN-MINUS characters. + * (See <a href="java/util/Locale.html#getExtensionKeys()">getExtensionKeys()</a>, + * <a href="java/util/Locale.html#getExtension(char)">getExtension(char)</a>) + */ + private static final ObjectStreamField[] serialPersistentFields = { + new ObjectStreamField("language", String.class), + new ObjectStreamField("country", String.class), + new ObjectStreamField("variant", String.class), + new ObjectStreamField("hashcode", int.class), + new ObjectStreamField("script", String.class), + new ObjectStreamField("extensions", String.class), + }; + + /** + * Serializes this <code>Locale</code> to the specified <code>ObjectOutputStream</code>. + * @param out the <code>ObjectOutputStream</code> to write + * @throws IOException + * @since 1.7 + */ + private void writeObject(ObjectOutputStream out) throws IOException { + ObjectOutputStream.PutField fields = out.putFields(); + fields.put("language", _baseLocale.getLanguage()); + fields.put("script", _baseLocale.getScript()); + fields.put("country", _baseLocale.getRegion()); + fields.put("variant", _baseLocale.getVariant()); + fields.put("extensions", _extensions.getID()); + fields.put("hashcode", -1); // place holder just for backward support + out.writeFields(); + } + + /** + * Deserialize this <code>Locale</code>. + * @param in the <code>ObjectInputStream</code> to read + * @throws IOException + * @throws ClassNotFoundException + * @throws IllformdLocaleException + * @since 1.7 + */ + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { + ObjectInputStream.GetField fields = in.readFields(); + String language = (String)fields.get("language", ""); + String script = (String)fields.get("script", ""); + String country = (String)fields.get("country", ""); + String variant = (String)fields.get("variant", ""); + String extStr = (String)fields.get("extensions", ""); + _baseLocale = BaseLocale.getInstance(convertOldISOCodes(language), script, country, variant); + try { + InternalLocaleBuilder bldr = new InternalLocaleBuilder(); + bldr.setExtensions(extStr); + _extensions = bldr.getLocaleExtensions(); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage()); + } + } + + /** + * Returns a cached <code>Locale</code> instance equivalent to + * the deserialized <code>Locale</code>. When serialized + * language, country and variant fields read from the object data stream + * are exactly "ja", "JP", "JP" or "th", "TH", "TH" and script/extensions + * fields are empty, this method supplies <code>UNICODE_LOCALE_EXTENSION</code> + * "ca"/"japanese" (calendar type is "japanese") or "nu"/"thai" (number script + * type is "thai"). See <a href="Locale.html#special_cases_constructor"/>Special Cases</a> + * for more information. + * + * @return an instance of <code>Locale</code> equivalent to + * the deserialized <code>Locale</code>. + * @throws java.io.ObjectStreamException */ private Object readResolve() throws java.io.ObjectStreamException { - return getInstance(language, country, variant); + return getInstance(_baseLocale.getLanguage(), _baseLocale.getScript(), + _baseLocale.getRegion(), _baseLocale.getVariant(), _extensions); } private static volatile String[] isoLanguages = null; private static volatile String[] isoCountries = null; - /* - * Locale needs its own, locale insensitive version of toLowerCase to - * avoid circularity problems between Locale and String. - * The most straightforward algorithm is used. Look at optimizations later. - */ - private String toLowerCase(String str) { - char[] buf = new char[str.length()]; - for (int i = 0; i < buf.length; i++) { - buf[i] = Character.toLowerCase(str.charAt(i)); - } - return new String( buf ); - } - - /* - * Locale needs its own, locale insensitive version of toUpperCase to - * avoid circularity problems between Locale and String. - * The most straightforward algorithm is used. Look at optimizations later. - */ - private String toUpperCase(String str) { - char[] buf = new char[str.length()]; - for (int i = 0; i < buf.length; i++) { - buf[i] = Character.toUpperCase(str.charAt(i)); - } - return new String( buf ); - } - - private String convertOldISOCodes(String language) { + private static String convertOldISOCodes(String language) { // we accept both the old and the new ISO codes for the languages whose ISO // codes have changed, but we always store the OLD code, for backward compatibility - language = toLowerCase(language).intern(); + language = AsciiUtil.toLowerString(language).intern(); if (language == "he") { return "iw"; } else if (language == "yi") { @@ -1110,6 +2038,25 @@ } } + private static LocaleExtensions getCompatibilityExtensions(String language, String script, String country, String variant) { + LocaleExtensions extensions = LocaleExtensions.EMPTY_EXTENSIONS; + // Special cases for backward compatibility support + if (AsciiUtil.caseIgnoreMatch(language, "ja") + && script.length() == 0 + && AsciiUtil.caseIgnoreMatch(country, "JP") + && AsciiUtil.caseIgnoreMatch(variant, "JP")) { + // ja_JP_JP -> u-ca-japanese (calendar = japanese) + extensions = LocaleExtensions.CALENDAR_JAPANESE; + } else if (AsciiUtil.caseIgnoreMatch(language, "th") + && script.length() == 0 + && AsciiUtil.caseIgnoreMatch(country, "TH") + && AsciiUtil.caseIgnoreMatch(variant, "TH")) { + // th_TH_TH -> u-nu-thai (numbersystem = thai) + extensions = LocaleExtensions.NUMBER_THAI; + } + return extensions; + } + /** * Obtains a localized locale names from a LocaleNameProvider * implementation. @@ -1133,6 +2080,8 @@ return localeNameProvider.getDisplayCountry(code, locale); case DISPLAY_VARIANT: return localeNameProvider.getDisplayVariant(code, locale); + case DISPLAY_SCRIPT: + return localeNameProvider.getDisplayScript(code, locale); default: assert false; // shouldn't happen } @@ -1140,4 +2089,370 @@ return null; } } + + /** + * Enum for locale categories. These locale categories are used to get/set + * the default locale for the specific functionality represented by the + * category. + * + * @see #getDefault(Locale.Category) + * @see #setDefault(Locale.Category, Locale) + * @since 1.7 + */ + public enum Category { + + /** + * Category used to represent the default locale for + * displaying user interfaces. + */ + DISPLAY, + + /** + * Category used to represent the default locale for + * formatting dates, numbers, and/or currencies. + */ + FORMAT, + } + + /** + * <code>Builder</code> is used to build instances of <code>Locale</code> + * from values configured by the setters. Unlike the <code>Locale</code> + * constructors, the <code>Builder</code> checks if a value configured by a + * setter satisfies the syntax requirements defined by the <code>Locale</code> + * class. A <code>Locale</code> object created by a <code>Builder</code> is + * well-formed and can be transformed to a well-formed IETF BCP 47 language tag + * without losing information. + * + * <p><b>Note:</b> The <code>Locale</code> class does not provide any + * syntactic restrictions on variant, while BCP 47 requires each variant + * subtag to be 5 to 8 alphanumerics or a single numeric followed by 3 + * alphanumerics. The method <code>setVariant</code> throws + * <code>IllformedLocaleException</code> for a variant that does not satisfy + * this restriction. If it is necessary to support such a variant, use a + * Locale constructor. However, keep in mind that a <code>Locale</code> + * object created this way might lose the variant information when + * transformed to a BCP 47 language tag. + * + * <p>The following example shows how to create a <code>Locale</code> object + * with the <code>Builder</code>. + * <blockquote> + * <pre> + * Locale aLocale = new Builder().setLanguage("sr").setScript("Latn").setRegion("RS").build(); + * </pre> + * </blockquote> + * + * <p>Builders can be reused; <code>clear()</code> resets all + * fields to their default values. + * + * @see Locale#forLanguageTag + * @since 1.7 + */ + public static final class Builder { + private InternalLocaleBuilder _locbld; + + /** + * Constructs an empty Builder. The default value of all + * fields, extensions, and private use information is the + * empty string. + */ + public Builder() { + _locbld = new InternalLocaleBuilder(); + } + + /** + * Resets the <code>Builder</code> to match the provided + * <code>locale</code>. Existing state is discarded. + * + * <p>All fields of the locale must be well-formed, see {@link Locale}. + * + * <p>Locales with any ill-formed fields cause + * <code>IllformedLocaleException</code> to be thrown, except for the + * following three cases which are accepted for compatibility + * reasons:<ul> + * <li>Locale("ja", "JP", "JP") is treated as "ja-JP-u-ca-japanese" + * <li>Locale("th", "TH", "TH") is treated as "th-TH-u-nu-thai" + * <li>Locale("no", "NO", "NY") is treated as "nn-NO"</ul> + * + * @param locale the locale + * @return This builder. + * @throws IllformedLocaleException if <code>locale</code> has + * any ill-formed fields. + * @throws NullPointerException if <code>locale</code> is null. + */ + public Builder setLocale(Locale locale) { + try { + _locbld.setLocale(locale._baseLocale, locale._extensions); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Resets the Builder to match the provided IETF BCP 47 + * language tag. Discards the existing state. Null and the + * empty string cause the builder to be reset, like {@link + * #clear}. Grandfathered tags (see {@link + * Locale#forLanguageTag}) are converted to their canonical + * form before being processed. Otherwise, the language tag + * must be well-formed (see {@link Locale}) or an exception is + * thrown (unlike <code>Locale.forLanguageTag</code>, which + * just discards ill-formed and following portions of the + * tag). + * + * @param languageTag the language tag + * @return This builder. + * @throws IllformedLocaleException if <code>languageTag</code> is ill-formed + * @see Locale#forLanguageTag(String) + */ + public Builder setLanguageTag(String languageTag) { + ParseStatus sts = new ParseStatus(); + LanguageTag tag = LanguageTag.parse(languageTag, sts); + if (sts.isError()) { + throw new IllformedLocaleException(sts.getErrorMessage(), sts.getErrorIndex()); + } + _locbld.setLanguageTag(tag); + + return this; + } + + /** + * Sets the language. If <code>language</code> is the empty string or + * null, the language in this <code>Builder</code> is removed. Otherwise, + * the language must be <a href="./Locale.html#def_language">well-formed</a> + * or an exception is thrown. + * + * <p>The typical language value is a two or three-letter language + * code as defined in ISO639. + * + * @param language the language + * @return This builder. + * @throws IllformedLocaleException if <code>language</code> is ill-formed + */ + public Builder setLanguage(String language) { + try { + _locbld.setLanguage(language); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Sets the script. If <code>script</code> is null or the empty string, + * the script in this <code>Builder</code> is removed. + * Otherwise, the script must be <a href="./Locale.html#def_script">well-formed</a> or an + * exception is thrown. + * + * <p>The typical script value is a four-letter script code as defined by ISO 15924. + * + * @param script the script + * @return This builder. + * @throws IllformedLocaleException if <code>script</code> is ill-formed + */ + public Builder setScript(String script) { + try { + _locbld.setScript(script); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Sets the region. If region is null or the empty string, the region + * in this <code>Builder</code> is removed. Otherwise, + * the region must be <a href="./Locale.html#def_region">well-formed</a> or an + * exception is thrown. + * + * <p>The typical region value is a two-letter ISO 3166 code or a + * three-digit UN M.49 area code. + * + * <p>The country value in the <code>Locale</code> created by the + * <code>Builder</code> is always normalized to upper case. + * + * @param region the region + * @return This builder. + * @throws IllformedLocaleException if <code>region</code> is ill-formed + */ + public Builder setRegion(String region) { + try { + _locbld.setRegion(region); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Sets the variant. If variant is null or the empty string, the + * variant in this <code>Builder</code> is removed. Otherwise, it + * must consist of one or more <a href="./Locale.html#def_variant">well-formed</a> + * subtags, or an exception is thrown. + * + * <p><b>Note:</b> This method checks if <code>variant</code> + * satisfies the IETF BCP 47 variant subtag's syntax requirements, + * and normalizes the value to lowercase letters. However, + * the <code>Locale</code> class does not impose any syntactic + * restriction on variant, and the variant value in + * <code>Locale</code> is case sensitive. To set such a variant, + * use a Locale constructor. + * + * @param variant the variant + * @return This builder. + * @throws IllformedLocaleException if <code>variant</code> is ill-formed + */ + public Builder setVariant(String variant) { + try { + _locbld.setVariant(variant); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Sets the extension for the given key. If the value is null or the + * empty string, the extension is removed. Otherwise, the extension + * must be <a href="./Locale.html#def_extensions">well-formed</a> or an exception + * is thrown. + * + * <p><b>Note:</b> The key {@link Locale#UNICODE_LOCALE_EXTENSION + * UNICODE_LOCALE_EXTENSION} ('u') is used for the Unicode locale extension. + * Setting a value for this key replaces any existing Unicode locale key/type + * pairs with those defined in the extension. + * + * <p><b>Note:</b> The key {@link Locale#PRIVATE_USE_EXTENSION + * PRIVATE_USE_EXTENSION} ('x') is used for the private use code. To be + * well-formed, the value for this key needs only to have subtags of one to + * eight alphanumeric characters, not two to eight as in the general case. + * + * @param key the extension key + * @param value the extension value + * @return This builder. + * @throws IllformedLocaleException if <code>key</code> is illegal + * or <code>value</code> is ill-formed + * @see #setUnicodeLocaleKeyword(String, String) + */ + public Builder setExtension(char key, String value) { + try { + _locbld.setExtension(key, value); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Sets the Unicode locale keyword type for the given key. If the type + * is null, the Unicode keyword is removed. Otherwise, the key must be + * non-null and both key and type must be <a + * href="./Locale.html#def_locale_extension">well-formed</a> or an exception + * is thrown. + * + * <p>Keys and types are converted to lower case. + * + * <p><b>Note</b>:Setting the 'u' extension via {@link #setExtension} + * replaces all Unicode locale keywords with those defined in the + * extension. + * + * @param key the Unicode locale key + * @param type the Unicode locale type + * @return This builder. + * @throws IllformedLocaleException if <code>key</code> or <code>type</code> + * is ill-formed + * @throws NullPointerException if <code>key</code> is null + * @see #setExtension(char, String) + */ + public Builder setUnicodeLocaleKeyword(String key, String type) { + try { + _locbld.setUnicodeLocaleKeyword(key, type); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Adds a unicode locale attribute, if not already present, otherwise + * has no effect. The attribute must not be null and must be <a + * href="./Locale.html#def_locale_extension">well-formed</a> or an exception + * is thrown. + * + * @param attribute the attribute + * @return This builder. + * @throws NullPointerException if <code>attribute</code> is null + * @throws IllformedLocaleException if <code>attribute</code> is ill-formed + * @see #setExtension(char, String) + */ + public Builder addUnicodeLocaleAttribute(String attribute) { + try { + _locbld.addUnicodeLocaleAttribute(attribute); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Removes a unicode locale attribute, if present, otherwise has no + * effect. The attribute must not be null and must be <a + * href="./Locale.html#def_locale_extension">well-formed</a> or an exception + * is thrown. + * + * <p>Attribute comparision for removal is case-insensitive. + * + * @param attribute the attribute + * @return This builder. + * @throws NullPointerException if <code>attribute</code> is null + * @throws IllformedLocaleException if <code>attribute</code> is ill-formed + * @see #setExtension(char, String) + */ + public Builder removeUnicodeLocaleAttribute(String attribute) { + try { + _locbld.removeUnicodeLocaleAttribute(attribute); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Resets the builder to its initial, empty state. + * + * @return This builder. + */ + public Builder clear() { + _locbld.clear(); + return this; + } + + /** + * Resets the extensions to their initial, empty state. + * Language, script, region and variant are unchanged. + * + * @return This builder. + * @see #setExtension(char, String) + */ + public Builder clearExtensions() { + _locbld.clearExtensions(); + return this; + } + + /** + * Returns an instance of <code>Locale</code> created from the fields set + * on this builder. + * + * <p>This applies the conversions listed in {@link Locale#forLanguageTag} + * when constructing a Locale. (Grandfathered tags are handled in + * {@link #setLanguageTag}.) + * + * @return A Locale. + */ + public Locale build() { + BaseLocale baseloc = _locbld.getBaseLocale(); + LocaleExtensions extensions = _locbld.getLocaleExtensions(); + return Locale.getInstance(baseloc, extensions); + } + } }
--- a/src/share/classes/java/util/ResourceBundle.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/util/ResourceBundle.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -56,16 +56,18 @@ import java.util.concurrent.ConcurrentMap; import java.util.jar.JarEntry; +import sun.util.locale.BaseLocale; +import sun.util.locale.LocaleExtensions; +import sun.util.locale.LocaleObjectCache; + /** * - * Resource bundles contain locale-specific objects. - * When your program needs a locale-specific resource, - * a <code>String</code> for example, your program can load it - * from the resource bundle that is appropriate for the - * current user's locale. In this way, you can write - * program code that is largely independent of the user's - * locale isolating most, if not all, of the locale-specific + * Resource bundles contain locale-specific objects. When your program needs a + * locale-specific resource, a <code>String</code> for example, your program can + * load it from the resource bundle that is appropriate for the current user's + * locale. In this way, you can write program code that is largely independent + * of the user's locale isolating most, if not all, of the locale-specific * information in resource bundles. * * <p> @@ -854,87 +856,140 @@ } /** - * Gets a resource bundle using the specified base name, locale, and class loader. + * Gets a resource bundle using the specified base name, locale, and class + * loader. + * + * <p><a name="default_behavior"/>This method behaves the same as calling + * {@link #getBundle(String, Locale, ClassLoader, Control)} passing a + * default instance of {@link Control}. The following describes this behavior. + * + * <p><code>getBundle</code> uses the base name, the specified locale, and + * the default locale (obtained from {@link java.util.Locale#getDefault() + * Locale.getDefault}) to generate a sequence of <a + * name="candidates"><em>candidate bundle names</em></a>. If the specified + * locale's language, script, country, and variant are all empty strings, + * then the base name is the only candidate bundle name. Otherwise, a list + * of candidate locales is generated from the attribute values of the + * specified locale (language, script, country and variant) and appended to + * the base name. Typically, this will look like the following: + * + * <pre> + * baseName + "_" + language + "_" + script + "_" + country + "_" + variant + * baseName + "_" + language + "_" + script + "_" + country + * baseName + "_" + language + "_" + script + * baseName + "_" + language + "_" + country + "_" + variant + * baseName + "_" + language + "_" + country + * baseName + "_" + language + * </pre> * - * <p><a name="default_behavior"/> - * Conceptually, <code>getBundle</code> uses the following strategy for locating and instantiating - * resource bundles: - * <p> - * <code>getBundle</code> uses the base name, the specified locale, and the default - * locale (obtained from {@link java.util.Locale#getDefault() Locale.getDefault}) - * to generate a sequence of <a name="candidates"><em>candidate bundle names</em></a>. - * If the specified locale's language, country, and variant are all empty - * strings, then the base name is the only candidate bundle name. - * Otherwise, the following sequence is generated from the attribute - * values of the specified locale (language1, country1, and variant1) - * and of the default locale (language2, country2, and variant2): - * <ul> - * <li> baseName + "_" + language1 + "_" + country1 + "_" + variant1 - * <li> baseName + "_" + language1 + "_" + country1 - * <li> baseName + "_" + language1 - * <li> baseName + "_" + language2 + "_" + country2 + "_" + variant2 - * <li> baseName + "_" + language2 + "_" + country2 - * <li> baseName + "_" + language2 - * <li> baseName - * </ul> - * <p> - * Candidate bundle names where the final component is an empty string are omitted. - * For example, if country1 is an empty string, the second candidate bundle name is omitted. + * <p>Candidate bundle names where the final component is an empty string + * are omitted, along with the underscore. For example, if country is an + * empty string, the second and the fifth candidate bundle names above + * would be omitted. Also, if script is an empty string, the candidate names + * including script are omitted. For example, a locale with language "de" + * and variant "JAVA" will produce candidate names with base name + * "MyResource" below. + * + * <pre> + * MyResource_de__JAVA + * MyResource_de + * </pre> + * + * In the case that the variant contains one or more underscores ('_'), a + * sequence of bundle names generated by truncating the last underscore and + * the part following it is inserted after a candidate bundle name with the + * original variant. For example, for a locale with language "en", script + * "Latn, country "US" and variant "WINDOWS_VISTA", and bundle base name + * "MyResource", the list of candidate bundle names below is generated: + * + * <pre> + * MyResource_en_Latn_US_WINDOWS_VISTA + * MyResource_en_Latn_US_WINDOWS + * MyResource_en_Latn_US + * MyResource_en_Latn + * MyResource_en_US_WINDOWS_VISTA + * MyResource_en_US_WINDOWS + * MyResource_en_US + * MyResource_en + * </pre> + * + * <blockquote><b>Note:</b> For some <code>Locale</code>s, the list of + * candidate bundle names contains extra names, or the order of bundle names + * is slightly modified. See the description of the default implementation + * of {@link Control#getCandidateLocales(String, Locale) + * getCandidateLocales} for details.</blockquote> * - * <p> - * <code>getBundle</code> then iterates over the candidate bundle names to find the first - * one for which it can <em>instantiate</em> an actual resource bundle. For each candidate - * bundle name, it attempts to create a resource bundle: - * <ul> - * <li> - * First, it attempts to load a class using the candidate bundle name. - * If such a class can be found and loaded using the specified class loader, is assignment - * compatible with ResourceBundle, is accessible from ResourceBundle, and can be instantiated, - * <code>getBundle</code> creates a new instance of this class and uses it as the <em>result - * resource bundle</em>. - * <li> - * Otherwise, <code>getBundle</code> attempts to locate a property resource file. - * It generates a path name from the candidate bundle name by replacing all "." characters - * with "/" and appending the string ".properties". - * It attempts to find a "resource" with this name using - * {@link java.lang.ClassLoader#getResource(java.lang.String) ClassLoader.getResource}. - * (Note that a "resource" in the sense of <code>getResource</code> has nothing to do with - * the contents of a resource bundle, it is just a container of data, such as a file.) - * If it finds a "resource", it attempts to create a new - * {@link PropertyResourceBundle} instance from its contents. - * If successful, this instance becomes the <em>result resource bundle</em>. - * </ul> + * <p><code>getBundle</code> then iterates over the candidate bundle names + * to find the first one for which it can <em>instantiate</em> an actual + * resource bundle. It uses the default controls' {@link Control#getFormats + * getFormats} method, which generates two bundle names for each generated + * name, the first a class name and the second a properties file name. For + * each candidate bundle name, it attempts to create a resource bundle: + * + * <ul><li>First, it attempts to load a class using the generated class name. + * If such a class can be found and loaded using the specified class + * loader, is assignment compatible with ResourceBundle, is accessible from + * ResourceBundle, and can be instantiated, <code>getBundle</code> creates a + * new instance of this class and uses it as the <em>result resource + * bundle</em>. + * + * <li>Otherwise, <code>getBundle</code> attempts to locate a property + * resource file using the generated properties file name. It generates a + * path name from the candidate bundle name by replacing all "." characters + * with "/" and appending the string ".properties". It attempts to find a + * "resource" with this name using {@link + * java.lang.ClassLoader#getResource(java.lang.String) + * ClassLoader.getResource}. (Note that a "resource" in the sense of + * <code>getResource</code> has nothing to do with the contents of a + * resource bundle, it is just a container of data, such as a file.) If it + * finds a "resource", it attempts to create a new {@link + * PropertyResourceBundle} instance from its contents. If successful, this + * instance becomes the <em>result resource bundle</em>. </ul> * - * <p> - * If no result resource bundle has been found, a <code>MissingResourceException</code> - * is thrown. + * <p>This continues until a result resource bundle is instantiated or the + * list of candidate bundle names is exhausted. If no matching resource + * bundle is found, the default control's {@link Control#getFallbackLocale + * getFallbackLocale} method is called, which returns the current default + * locale. A new sequence of candidate locale names is generated using this + * locale and and searched again, as above. + * + * <p>If still no result bundle is found, the base name alone is looked up. If + * this still fails, a <code>MissingResourceException</code> is thrown. * - * <p><a name="parent_chain"/> - * Once a result resource bundle has been found, its <em>parent chain</em> is instantiated. - * <code>getBundle</code> iterates over the candidate bundle names that can be - * obtained by successively removing variant, country, and language - * (each time with the preceding "_") from the bundle name of the result resource bundle. - * As above, candidate bundle names where the final component is an empty string are omitted. - * With each of the candidate bundle names it attempts to instantiate a resource bundle, as - * described above. - * Whenever it succeeds, it calls the previously instantiated resource + * <p><a name="parent_chain"/> Once a result resource bundle has been found, + * its <em>parent chain</em> is instantiated. If the result bundle already + * has a parent (perhaps because it was returned from a cache) the chain is + * complete. + * + * <p>Otherwise, <code>getBundle</code> examines the remainder of the + * candidate locale list that was used during the pass that generated the + * result resource bundle. (As before, candidate bundle names where the + * final component is an empty string are omitted.) When it comes to the + * end of the candidate list, it tries the plain bundle name. With each of the + * candidate bundle names it attempts to instantiate a resource bundle (first + * looking for a class and then a properties file, as described above). + * + * <p>Whenever it succeeds, it calls the previously instantiated resource * bundle's {@link #setParent(java.util.ResourceBundle) setParent} method - * with the new resource bundle, unless the previously instantiated resource - * bundle already has a non-null parent. + * with the new resource bundle. This continues until the list of names + * is exhausted or the current bundle already has a non-null parent. + * + * <p>Once the parent chain is complete, the bundle is returned. * - * <p> - * <code>getBundle</code> caches instantiated resource bundles and - * may return the same resource bundle instance multiple - * times. + * <p><b>Note:</b> <code>getBundle</code> caches instantiated resource + * bundles and might return the same resource bundle instance multiple times. * - * <p> - * The <code>baseName</code> argument should be a fully qualified class name. However, for - * compatibility with earlier versions, Sun's Java SE Runtime Environments do not verify this, - * and so it is possible to access <code>PropertyResourceBundle</code>s by specifying a - * path name (using "/") instead of a fully qualified class name (using "."). + * <p><b>Note:</b>The <code>baseName</code> argument should be a fully + * qualified class name. However, for compatibility with earlier versions, + * Sun's Java SE Runtime Environments do not verify this, and so it is + * possible to access <code>PropertyResourceBundle</code>s by specifying a + * path name (using "/") instead of a fully qualified class name (using + * "."). * * <p><a name="default_behavior_example"/> - * <strong>Example:</strong><br>The following class and property files are provided: + * <strong>Example:</strong> + * <p> + * The following class and property files are provided: * <pre> * MyResources.class * MyResources.properties @@ -944,22 +999,26 @@ * MyResources_en.properties * MyResources_es_ES.class * </pre> - * The contents of all files are valid (that is, public non-abstract subclasses of <code>ResourceBundle</code> for - * the ".class" files, syntactically correct ".properties" files). - * The default locale is <code>Locale("en", "GB")</code>. - * <p> - * Calling <code>getBundle</code> with the shown locale argument values instantiates - * resource bundles from the following sources: - * <ul> - * <li>Locale("fr", "CH"): result MyResources_fr_CH.class, parent MyResources_fr.properties, parent MyResources.class - * <li>Locale("fr", "FR"): result MyResources_fr.properties, parent MyResources.class - * <li>Locale("de", "DE"): result MyResources_en.properties, parent MyResources.class - * <li>Locale("en", "US"): result MyResources_en.properties, parent MyResources.class - * <li>Locale("es", "ES"): result MyResources_es_ES.class, parent MyResources.class - * </ul> - * <p>The file MyResources_fr_CH.properties is never used because it is hidden by - * MyResources_fr_CH.class. Likewise, MyResources.properties is also hidden by - * MyResources.class. + * + * The contents of all files are valid (that is, public non-abstract + * subclasses of <code>ResourceBundle</code> for the ".class" files, + * syntactically correct ".properties" files). The default locale is + * <code>Locale("en", "GB")</code>. + * + * <p>Calling <code>getBundle</code> with the locale arguments below will + * instantiate resource bundles as follows: + * + * <table> + * <tr><td>Locale("fr", "CH")</td><td>MyResources_fr_CH.class, parent MyResources_fr.properties, parent MyResources.class</td></tr> + * <tr><td>Locale("fr", "FR")</td><td>MyResources_fr.properties, parent MyResources.class</td></tr> + * <tr><td>Locale("de", "DE")</td><td>MyResources_en.properties, parent MyResources.class</td></tr> + * <tr><td>Locale("en", "US")</td><td>MyResources_en.properties, parent MyResources.class</td></tr> + * <tr><td>Locale("es", "ES")</td><td>MyResources_es_ES.class, parent MyResources.class</td></tr> + * </table> + * + * <p>The file MyResources_fr_CH.properties is never used because it is + * hidden by the MyResources_fr_CH.class. Likewise, MyResources.properties + * is also hidden by MyResources.class. * * @param baseName the base name of the resource bundle, a fully qualified class name * @param locale the locale for which a resource bundle is desired @@ -1095,8 +1154,6 @@ * href="./ResourceBundle.html#parent_chain">parent chain</a> is * instantiated based on the list of candidate locales from which it was * found. Finally, the bundle is returned to the caller.</li> - * - * * </ol> * * <p>During the resource bundle loading process above, this factory @@ -1119,7 +1176,6 @@ * {@link Control#getTimeToLive(String,Locale) * control.getTimeToLive} for details. * - * * <p>The following is an example of the bundle loading process with the * default <code>ResourceBundle.Control</code> implementation. * @@ -1131,7 +1187,6 @@ * <li>Available resource bundles: * <code>foo/bar/Messages_fr.properties</code> and * <code>foo/bar/Messages.properties</code></li> - * * </ul> * * <p>First, <code>getBundle</code> tries loading a resource bundle in @@ -1811,8 +1866,8 @@ * handleGetObject} method returns <code>null</code>. Once the * <code>Set</code> has been created, the value is kept in this * <code>ResourceBundle</code> in order to avoid producing the - * same <code>Set</code> in the next calls. Override this method - * in subclass implementations for faster handling. + * same <code>Set</code> in subsequent calls. Subclasses can + * override this method for faster handling. * * @return a <code>Set</code> of the keys contained only in this * <code>ResourceBundle</code> @@ -2177,24 +2232,133 @@ * <code>ResourceBundle.getBundle</code> factory method loads only * the base bundle as the resulting resource bundle. * - * <p>It is not a requirement to return an immutable - * (unmodifiable) <code>List</code>. However, the returned - * <code>List</code> must not be mutated after it has been - * returned by <code>getCandidateLocales</code>. + * <p>It is not a requirement to return an immutable (unmodifiable) + * <code>List</code>. However, the returned <code>List</code> must not + * be mutated after it has been returned by + * <code>getCandidateLocales</code>. * * <p>The default implementation returns a <code>List</code> containing - * <code>Locale</code>s in the following sequence: - * <pre> - * Locale(language, country, variant) - * Locale(language, country) - * Locale(language) - * Locale.ROOT - * </pre> - * where <code>language</code>, <code>country</code> and - * <code>variant</code> are the language, country and variant values - * of the given <code>locale</code>, respectively. Locales where the + * <code>Locale</code>s using the rules described below. In the + * description below, <em>L</em>, <em>S</em>, <em>C</em> and <em>V</em> + * respectively represent non-empty language, script, country, and + * variant. For example, [<em>L</em>, <em>C</em>] represents a + * <code>Locale</code> that has non-empty values only for language and + * country. The form <em>L</em>("xx") represents the (non-empty) + * language value is "xx". For all cases, <code>Locale</code>s whose * final component values are empty strings are omitted. * + * <ol><li>For an input <code>Locale</code> with an empty script value, + * append candidate <code>Locale</code>s by omitting the final component + * one by one as below: + * + * <ul> + * <li> [<em>L</em>, <em>C</em>, <em>V</em>] + * <li> [<em>L</em>, <em>C</em>] + * <li> [<em>L</em>] + * <li> <code>Locale.ROOT</code> + * </ul> + * + * <li>For an input <code>Locale</code> with a non-empty script value, + * append candidate <code>Locale</code>s by omitting the final component + * up to language, then append candidates generated from the + * <code>Locale</code> with country and variant restored: + * + * <ul> + * <li> [<em>L</em>, <em>S</em>, <em>C</em>, <em>V</em>] + * <li> [<em>L</em>, <em>S</em>, <em>C</em>] + * <li> [<em>L</em>, <em>S</em>] + * <li> [<em>L</em>, <em>C</em>, <em>V</em>] + * <li> [<em>L</em>, <em>C</em>] + * <li> [<em>L</em>] + * <li> <code>Locale.ROOT</code> + * </ul> + * + * <li>For an input <code>Locale</code> with a variant value consisting + * of multiple subtags separated by underscore, generate candidate + * <code>Locale</code>s by omitting the variant subtags one by one, then + * insert them after every occurence of <code> Locale</code>s with the + * full variant value in the original list. For example, if the + * the variant consists of two subtags <em>V1</em> and <em>V2</em>: + * + * <ul> + * <li> [<em>L</em>, <em>S</em>, <em>C</em>, <em>V1</em>, <em>V2</em>] + * <li> [<em>L</em>, <em>S</em>, <em>C</em>, <em>V1</em>] + * <li> [<em>L</em>, <em>S</em>, <em>C</em>] + * <li> [<em>L</em>, <em>S</em>] + * <li> [<em>L</em>, <em>C</em>, <em>V1</em>, <em>V2</em>] + * <li> [<em>L</em>, <em>C</em>, <em>V1</em>] + * <li> [<em>L</em>, <em>C</em>] + * <li> [<em>L</em>] + * <li> <code>Locale.ROOT</code> + * </ul> + * + * <li>Special cases for Chinese. When an input <code>Locale</code> has the + * language "zh" (Chinese) and an empty script value, either "Hans" (Simplified) or + * "Hant" (Traditional) might be supplied, depending on the country. + * When the country is "CN" (China) or "SG" (Singapore), "Hans" is supplied. + * When the country is "HK" (Hong Kong SAR China), "MO" (Macau SAR China), + * or "TW" (Taiwan), "Hant" is supplied. For all other countries or when the country + * is empty, no script is supplied. For example, for <code>Locale("zh", "CN") + * </code>, the candidate list will be: + * <ul> + * <li> [<em>L</em>("zh"), <em>S</em>("Hans"), <em>C</em>("CN")] + * <li> [<em>L</em>("zh"), <em>S</em>("Hans")] + * <li> [<em>L</em>("zh"), <em>C</em>("CN")] + * <li> [<em>L</em>("zh")] + * <li> <code>Locale.ROOT</code> + * </ul> + * + * For <code>Locale("zh", "TW")</code>, the candidate list will be: + * <ul> + * <li> [<em>L</em>("zh"), <em>S</em>("Hant"), <em>C</em>("TW")] + * <li> [<em>L</em>("zh"), <em>S</em>("Hant")] + * <li> [<em>L</em>("zh"), <em>C</em>("TW")] + * <li> [<em>L</em>("zh")] + * <li> <code>Locale.ROOT</code> + * </ul> + * + * <li>Special cases for Norwegian. Both <code>Locale("no", "NO", + * "NY")</code> and <code>Locale("nn", "NO")</code> represent Norwegian + * Nynorsk. When a locale's language is "nn", the standard candidate + * list is generated up to [<em>L</em>("nn")], and then the following + * candidates are added: + * + * <ul><li> [<em>L</em>("no"), <em>C</em>("NO"), <em>V</em>("NY")] + * <li> [<em>L</em>("no"), <em>C</em>("NO")] + * <li> [<em>L</em>("no")] + * <li> <code>Locale.ROOT</code> + * </ul> + * + * If the locale is exactly <code>Locale("no", "NO", "NY")</code>, it is first + * converted to <code>Locale("nn", "NO")</code> and then the above procedure is + * followed. + * + * <p>Also, Java treats the language "no" as a synonym of Norwegian + * Bokmål "nb". Except for the single case <code>Locale("no", + * "NO", "NY")</code> (handled above), when an input <code>Locale</code> + * has language "no" or "nb", candidate <code>Locale</code>s with + * language code "no" and "nb" are interleaved, first using the + * requested language, then using its synonym. For example, + * <code>Locale("nb", "NO", "POSIX")</code> generates the following + * candidate list: + * + * <ul> + * <li> [<em>L</em>("nb"), <em>C</em>("NO"), <em>V</em>("POSIX")] + * <li> [<em>L</em>("no"), <em>C</em>("NO"), <em>V</em>("POSIX")] + * <li> [<em>L</em>("nb"), <em>C</em>("NO")] + * <li> [<em>L</em>("no"), <em>C</em>("NO")] + * <li> [<em>L</em>("nb")] + * <li> [<em>L</em>("no")] + * <li> <code>Locale.ROOT</code> + * </ul> + * + * <code>Locale("no", "NO", "POSIX")</code> would generate the same list + * except that locales with "no" would appear before the corresponding + * locales with "nb".</li> + * + * </li> + * </ol> + * * <p>The default implementation uses an {@link ArrayList} that * overriding implementations may modify before returning it to the * caller. However, a subclass must not modify it after it has @@ -2231,24 +2395,119 @@ if (baseName == null) { throw new NullPointerException(); } - String language = locale.getLanguage(); - String country = locale.getCountry(); - String variant = locale.getVariant(); + return new ArrayList<Locale>(CANDIDATES_CACHE.get(locale.getBaseLocale())); + } + + private static final CandidateListCache CANDIDATES_CACHE = new CandidateListCache(); + + private static class CandidateListCache extends LocaleObjectCache<BaseLocale, List<Locale>> { + protected List<Locale> createObject(BaseLocale base) { + String language = base.getLanguage(); + String script = base.getScript(); + String region = base.getRegion(); + String variant = base.getVariant(); - List<Locale> locales = new ArrayList<Locale>(4); - if (variant.length() > 0) { - locales.add(locale); + // Special handling for Norwegian + boolean isNorwegianBokmal = false; + boolean isNorwegianNynorsk = false; + if (language.equals("no")) { + if (region.equals("NO") && variant.equals("NY")) { + variant = ""; + isNorwegianNynorsk = true; + } else { + isNorwegianBokmal = true; + } + } + if (language.equals("nb") || isNorwegianBokmal) { + List<Locale> tmpList = getDefaultList("nb", script, region, variant); + // Insert a locale replacing "nb" with "no" for every list entry + List<Locale> bokmalList = new LinkedList<Locale>(); + for (Locale l : tmpList) { + bokmalList.add(l); + if (l.getLanguage().length() == 0) { + break; + } + bokmalList.add(Locale.getInstance("no", l.getScript(), l.getCountry(), + l.getVariant(), LocaleExtensions.EMPTY_EXTENSIONS)); + } + return bokmalList; + } else if (language.equals("nn") || isNorwegianNynorsk) { + // Insert no_NO_NY, no_NO, no after nn + List<Locale> nynorskList = getDefaultList("nn", script, region, variant); + int idx = nynorskList.size() - 1; + nynorskList.add(idx++, Locale.getInstance("no", "NO", "NY")); + nynorskList.add(idx++, Locale.getInstance("no", "NO", "")); + nynorskList.add(idx++, Locale.getInstance("no", "", "")); + return nynorskList; + } + // Special handling for Chinese + else if (language.equals("zh")) { + if (script.length() == 0 && region.length() > 0) { + // Supply script for users who want to use zh_Hans/zh_Hant + // as bundle names (recommended for Java7+) + if (region.equals("TW") || region.equals("HK") || region.equals("MO")) { + script = "Hant"; + } else if (region.equals("CN") || region.equals("SG")) { + script = "Hans"; + } + } else if (script.length() > 0 && region.length() == 0) { + // Supply region(country) for users who still package Chinese + // bundles using old convension. + if (script.equals("Hans")) { + region = "CN"; + } else if (script.equals("Hant")) { + region = "TW"; + } + } + } + + return getDefaultList(language, script, region, variant); } - if (country.length() > 0) { - locales.add((locales.size() == 0) ? - locale : Locale.getInstance(language, country, "")); + + private static List<Locale> getDefaultList(String language, String script, String region, String variant) { + List<String> variants = null; + + if (variant.length() > 0) { + variants = new LinkedList<String>(); + int idx = variant.length(); + while (idx != -1) { + variants.add(variant.substring(0, idx)); + idx = variant.lastIndexOf('_', --idx); + } + } + + LinkedList<Locale> list = new LinkedList<Locale>(); + + if (variants != null) { + for (String v : variants) { + list.add(Locale.getInstance(language, script, region, v, LocaleExtensions.EMPTY_EXTENSIONS)); + } + } + if (region.length() > 0) { + list.add(Locale.getInstance(language, script, region, "", LocaleExtensions.EMPTY_EXTENSIONS)); + } + if (script.length() > 0) { + list.add(Locale.getInstance(language, script, "", "", LocaleExtensions.EMPTY_EXTENSIONS)); + + // With script, after truncating variant, region and script, + // start over without script. + if (variants != null) { + for (String v : variants) { + list.add(Locale.getInstance(language, "", region, v, LocaleExtensions.EMPTY_EXTENSIONS)); + } + } + if (region.length() > 0) { + list.add(Locale.getInstance(language, "", region, "", LocaleExtensions.EMPTY_EXTENSIONS)); + } + } + if (language.length() > 0) { + list.add(Locale.getInstance(language, "", "", "", LocaleExtensions.EMPTY_EXTENSIONS)); + } + // Add root locale at the end + list.add(Locale.ROOT); + + return list; } - if (language.length() > 0) { - locales.add((locales.size() == 0) ? - locale : Locale.getInstance(language, "", "")); - } - locales.add(Locale.ROOT); - return locales; } /** @@ -2606,13 +2865,14 @@ * * <p>This implementation returns the following value: * <pre> - * baseName + "_" + language + "_" + country + "_" + variant + * baseName + "_" + language + "_" + script + "_" + country + "_" + variant * </pre> - * where <code>language</code>, <code>country</code> and - * <code>variant</code> are the language, country and variant values - * of <code>locale</code>, respectively. Final component values that - * are empty Strings are omitted along with the preceding '_'. If - * all of the values are empty strings, then <code>baseName</code> + * where <code>language</code>, <code>script</code>, <code>country</code>, + * and <code>variant</code> are the language, script, country, and variant + * values of <code>locale</code>, respectively. Final component values that + * are empty Strings are omitted along with the preceding '_'. When the + * script is empty, the script value is ommitted along with the preceding '_'. + * If all of the values are empty strings, then <code>baseName</code> * is returned. * * <p>For example, if <code>baseName</code> is @@ -2643,6 +2903,7 @@ } String language = locale.getLanguage(); + String script = locale.getScript(); String country = locale.getCountry(); String variant = locale.getVariant(); @@ -2652,12 +2913,22 @@ StringBuilder sb = new StringBuilder(baseName); sb.append('_'); - if (variant != "") { - sb.append(language).append('_').append(country).append('_').append(variant); - } else if (country != "") { - sb.append(language).append('_').append(country); + if (script != "") { + if (variant != "") { + sb.append(language).append('_').append(script).append('_').append(country).append('_').append(variant); + } else if (country != "") { + sb.append(language).append('_').append(script).append('_').append(country); + } else { + sb.append(language).append('_').append(script); + } } else { - sb.append(language); + if (variant != "") { + sb.append(language).append('_').append(country).append('_').append(variant); + } else if (country != "") { + sb.append(language).append('_').append(country); + } else { + sb.append(language); + } } return sb.toString();
--- a/src/share/classes/java/util/Scanner.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/util/Scanner.java Thu Sep 16 11:17:32 2010 -0700 @@ -582,7 +582,7 @@ matcher = delimPattern.matcher(buf); matcher.useTransparentBounds(true); matcher.useAnchoringBounds(false); - useLocale(Locale.getDefault()); + useLocale(Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -2642,7 +2642,7 @@ */ public Scanner reset() { delimPattern = WHITESPACE_PATTERN; - useLocale(Locale.getDefault()); + useLocale(Locale.getDefault(Locale.Category.FORMAT)); useRadix(10); clearCaches(); return this;
--- a/src/share/classes/java/util/TimeZone.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/util/TimeZone.java Thu Sep 16 11:17:32 2010 -0700 @@ -312,7 +312,7 @@ * @since 1.2 */ public final String getDisplayName() { - return getDisplayName(false, LONG, Locale.getDefault()); + return getDisplayName(false, LONG, Locale.getDefault(Locale.Category.DISPLAY)); } /** @@ -342,7 +342,7 @@ * @since 1.2 */ public final String getDisplayName(boolean daylight, int style) { - return getDisplayName(daylight, style, Locale.getDefault()); + return getDisplayName(daylight, style, Locale.getDefault(Locale.Category.DISPLAY)); } /**
--- a/src/share/classes/java/util/spi/LocaleNameProvider.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/util/spi/LocaleNameProvider.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,22 +44,23 @@ } /** - * Returns a localized name for the given ISO 639 language code and the - * given locale that is appropriate for display to the user. + * Returns a localized name for the given <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt"> + * IETF BCP47</a> language code and the given locale that is appropriate for + * display to the user. * For example, if <code>languageCode</code> is "fr" and <code>locale</code> * is en_US, getDisplayLanguage() will return "French"; if <code>languageCode</code> * is "en" and <code>locale</code> is fr_FR, getDisplayLanguage() will return "anglais". * If the name returned cannot be localized according to <code>locale</code>, * (say, the provider does not have a Japanese name for Croatian), * this method returns null. - * @param languageCode the ISO 639 language code string in the form of two + * @param languageCode the language code string in the form of two to eight * lower-case letters between 'a' (U+0061) and 'z' (U+007A) * @param locale the desired locale * @return the name of the given language code for the specified locale, or null if it's not * available. * @exception NullPointerException if <code>languageCode</code> or <code>locale</code> is null * @exception IllegalArgumentException if <code>languageCode</code> is not in the form of - * two lower-case letters, or <code>locale</code> isn't + * two or three lower-case letters, or <code>locale</code> isn't * one of the locales returned from * {@link java.util.spi.LocaleServiceProvider#getAvailableLocales() * getAvailableLocales()}. @@ -68,22 +69,52 @@ public abstract String getDisplayLanguage(String languageCode, Locale locale); /** - * Returns a localized name for the given ISO 3166 country code and the - * given locale that is appropriate for display to the user. + * Returns a localized name for the given <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt"> + * IETF BCP47</a> script code and the given locale that is appropriate for + * display to the user. + * For example, if <code>scriptCode</code> is "Latn" and <code>locale</code> + * is en_US, getDisplayScript() will return "Latin"; if <code>scriptCode</code> + * is "Cyrl" and <code>locale</code> is fr_FR, getDisplayScript() will return "cyrillique". + * If the name returned cannot be localized according to <code>locale</code>, + * (say, the provider does not have a Japanese name for Cyrillic), + * this method returns null. + * @param scriptCode the four letter script code string in the form of title-case + * letters (the first letter is upper-case character between 'A' (U+0041) and + * 'Z' (U+005A) followed by three lower-case character between 'a' (U+0061) + * and 'z' (U+007A)). + * @param locale the desired locale + * @return the name of the given script code for the specified locale, or null if it's not + * available. + * @exception NullPointerException if <code>scriptCode</code> or <code>locale</code> is null + * @exception IllegalArgumentException if <code>scriptCode</code> is not in the form of + * four title case letters, or <code>locale</code> isn't + * one of the locales returned from + * {@link java.util.spi.LocaleServiceProvider#getAvailableLocales() + * getAvailableLocales()}. + * @see java.util.Locale#getDisplayScript(java.util.Locale) + * @since 1.7 + */ + public abstract String getDisplayScript(String scriptCode, Locale locale); + + /** + * Returns a localized name for the given <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt"> + * IETF BCP47</a> region code (either ISO 3166 country code or UN M.49 area + * codes) and the given locale that is appropriate for display to the user. * For example, if <code>countryCode</code> is "FR" and <code>locale</code> * is en_US, getDisplayCountry() will return "France"; if <code>countryCode</code> * is "US" and <code>locale</code> is fr_FR, getDisplayCountry() will return "Etats-Unis". * If the name returned cannot be localized according to <code>locale</code>, * (say, the provider does not have a Japanese name for Croatia), * this method returns null. - * @param countryCode the ISO 3166 country code string in the form of two - * upper-case letters between 'A' (U+0041) and 'Z' (U+005A) + * @param countryCode the country(region) code string in the form of two + * upper-case letters between 'A' (U+0041) and 'Z' (U+005A) or the UN M.49 area code + * in the form of three digit letters between '0' (U+0030) and '9' (U+0039). * @param locale the desired locale * @return the name of the given country code for the specified locale, or null if it's not * available. * @exception NullPointerException if <code>countryCode</code> or <code>locale</code> is null * @exception IllegalArgumentException if <code>countryCode</code> is not in the form of - * two upper-case letters, or <code>locale</code> isn't + * two upper-case letters or three digit letters, or <code>locale</code> isn't * one of the locales returned from * {@link java.util.spi.LocaleServiceProvider#getAvailableLocales() * getAvailableLocales()}.
--- a/src/share/classes/java/util/spi/LocaleServiceProvider.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/java/util/spi/LocaleServiceProvider.java Thu Sep 16 11:17:32 2010 -0700 @@ -86,18 +86,19 @@ * Otherwise, they call the <code>getAvailableLocales()</code> methods of * installed providers for the appropriate interface to find one that * supports the requested locale. If such a provider is found, its other - * methods are called to obtain the requested object or name. If neither - * the Java runtime environment itself nor an installed provider supports - * the requested locale, a fallback locale is constructed by replacing the - * first of the variant, country, or language strings of the locale that's - * not an empty string with an empty string, and the lookup process is - * restarted. In the case that the variant contains one or more '_'s, the - * fallback locale is constructed by replacing the variant with a new variant - * which eliminates the last '_' and the part following it. Even if a - * fallback occurs, methods that return requested objects or name are - * invoked with the original locale before the fallback.The Java runtime - * environment must support the root locale for all locale sensitive services - * in order to guarantee that this process terminates. + * methods are called to obtain the requested object or name. When checking + * whether a locale is supported, the locale's extensions are ignored. + * If neither the Java runtime environment itself nor an installed provider + * supports the requested locale, the methods go through a list of candidate + * locales and repeat the availability check for each until a match is found. + * The algorithm used for creating a list of candidate locales is same as + * the one used by <code>ResourceBunlde</code> by default (see + * {@link java.util.ResourceBundle.Control#getCandidateLocales getCandidateLocales} + * for the details). Even if a locale is resolved from the candidate list, + * methods that return requested objects or names are invoked with the original + * requested locale including extensions. The Java runtime environment must + * support the root locale for all locale sensitive services in order to + * guarantee that this process terminates. * <p> * Providers of names (but not providers of other objects) are allowed to * return null for some name requests even for locales that they claim to @@ -124,6 +125,11 @@ /** * Returns an array of all locales for which this locale service provider * can provide localized objects or names. + * <p> + * <b>Note:</b> Extensions in a <code>Locale</code> are ignored during + * service provider lookup. So the array returned by this method should + * not include two or more <code>Locale</code> objects only differing in + * their extensions. * * @return An array of all locales for which this locale service provider * can provide localized objects or names.
--- a/src/share/classes/javax/sound/midi/MidiDevice.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/javax/sound/midi/MidiDevice.java Thu Sep 16 11:17:32 2010 -0700 @@ -204,6 +204,9 @@ * MIDI data. The returned receiver must be closed when the application * has finished using it. * + * <p>Usually the returned receiver implements + * the {@code MidiDeviceReceiver} interface. + * * <p>Obtaining a <code>Receiver</code> with this method does not * open the device. To be able to use the device, it has to be * opened explicitly by calling {@link #open}. Also, closing the @@ -223,6 +226,10 @@ * connected with this MidiDevice. * A receiver can be removed * from the device by closing it. + * + * <p>Usually the returned receivers implement + * the {@code MidiDeviceReceiver} interface. + * * @return an unmodifiable list of the open receivers * @since 1.5 */ @@ -234,6 +241,9 @@ * MIDI data The returned transmitter must be closed when the application * has finished using it. * + * <p>Usually the returned transmitter implements + * the {@code MidiDeviceTransmitter} interface. + * * <p>Obtaining a <code>Transmitter</code> with this method does not * open the device. To be able to use the device, it has to be * opened explicitly by calling {@link #open}. Also, closing the @@ -253,6 +263,10 @@ * connected with this MidiDevice. * A transmitter can be removed * from the device by closing it. + * + * <p>Usually the returned transmitters implement + * the {@code MidiDeviceTransmitter} interface. + * * @return an unmodifiable list of the open transmitters * @since 1.5 */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/javax/sound/midi/MidiDeviceReceiver.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package javax.sound.midi; + +/** + * <p>{@code MidiDeviceReceiver} is a {@code Receiver} which represents + * a MIDI input connector of a {@code MidiDevice} + * (see {@link MidiDevice#getReceiver()}). + * + * @since 1.7 + */ +public interface MidiDeviceReceiver extends Receiver { + /** Obtains a MidiDevice object which is an owner of this Receiver. + */ + public MidiDevice getMidiDevice(); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/javax/sound/midi/MidiDeviceTransmitter.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package javax.sound.midi; + + +/** + * <p>{@code MidiDeviceTransmitter} is a {@code Transmitter} which represents + * a MIDI input connector of a {@code MidiDevice} + * (see {@link MidiDevice#getTransmitter()}). + * + * @since 1.7 + */ +public interface MidiDeviceTransmitter extends Transmitter { + + /** Obtains a MidiDevice object which is an owner of this Transmitter. + */ + public MidiDevice getMidiDevice(); +}
--- a/src/share/classes/javax/sound/midi/MidiSystem.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/javax/sound/midi/MidiSystem.java Thu Sep 16 11:17:32 2010 -0700 @@ -47,6 +47,8 @@ import com.sun.media.sound.JDK13Services; import com.sun.media.sound.ReferenceCountingDevice; import com.sun.media.sound.AutoConnectSequencer; +import com.sun.media.sound.MidiDeviceReceiverEnvelope; +import com.sun.media.sound.MidiDeviceTransmitterEnvelope; /** @@ -225,6 +227,8 @@ /** * Obtains a MIDI receiver from an external MIDI port * or other default device. + * The returned receiver always implements + * the {@code MidiDeviceReceiver} interface. * * <p>If the system property * <code>javax.sound.midi.Receiver</code> @@ -261,6 +265,9 @@ } else { receiver = device.getReceiver(); } + if (!(receiver instanceof MidiDeviceReceiver)) { + receiver = new MidiDeviceReceiverEnvelope(device, receiver); + } return receiver; } @@ -268,6 +275,8 @@ /** * Obtains a MIDI transmitter from an external MIDI port * or other default source. + * The returned transmitter always implements + * the {@code MidiDeviceTransmitter} interface. * * <p>If the system property * <code>javax.sound.midi.Transmitter</code> @@ -301,6 +310,9 @@ } else { transmitter = device.getTransmitter(); } + if (!(transmitter instanceof MidiDeviceReceiver)) { + transmitter = new MidiDeviceTransmitterEnvelope(device, transmitter); + } return transmitter; }
--- a/src/share/classes/javax/sound/sampled/AudioFormat.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/javax/sound/sampled/AudioFormat.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -431,34 +431,36 @@ /** - * Indicates whether this format matches the one specified. To match, - * two formats must have the same encoding, the same number of channels, - * and the same number of bits per sample and bytes per frame. - * The two formats must also have the same sample rate, - * unless the specified format has the sample rate value <code>AudioSystem.NOT_SPECIFIED</code>, - * which any sample rate will match. The frame rates must - * similarly be equal, unless the specified format has the frame rate - * value <code>AudioSystem.NOT_SPECIFIED</code>. The byte order (big-endian or little-endian) - * must match if the sample size is greater than one byte. + * Indicates whether this format matches the one specified. + * To match, two formats must have the same encoding, + * and consistent values of the number of channels, sample rate, sample size, + * frame rate, and frame size. + * The values of the property are consistent if they are equal + * or the specified format has the property value + * {@code AudioSystem.NOT_SPECIFIED}. + * The byte order (big-endian or little-endian) must be the same + * if the sample size is greater than one byte. * * @param format format to test for match - * @return <code>true</code> if this format matches the one specified, - * <code>false</code> otherwise. - */ - /* - * $$kk: 04.20.99: i changed the semantics of this. + * @return {@code true} if this format matches the one specified, + * {@code false} otherwise. */ public boolean matches(AudioFormat format) { - - if (format.getEncoding().equals(getEncoding()) && - ( (format.getSampleRate() == (float)AudioSystem.NOT_SPECIFIED) || (format.getSampleRate() == getSampleRate()) ) && - (format.getSampleSizeInBits() == getSampleSizeInBits()) && - (format.getChannels() == getChannels() && - (format.getFrameSize() == getFrameSize()) && - ( (format.getFrameRate() == (float)AudioSystem.NOT_SPECIFIED) || (format.getFrameRate() == getFrameRate()) ) && - ( (format.getSampleSizeInBits() <= 8) || (format.isBigEndian() == isBigEndian()) ) ) ) + if (format.getEncoding().equals(getEncoding()) + && (format.getChannels() == AudioSystem.NOT_SPECIFIED + || format.getChannels() == getChannels()) + && (format.getSampleRate() == (float)AudioSystem.NOT_SPECIFIED + || format.getSampleRate() == getSampleRate()) + && (format.getSampleSizeInBits() == AudioSystem.NOT_SPECIFIED + || format.getSampleSizeInBits() == getSampleSizeInBits()) + && (format.getFrameRate() == (float)AudioSystem.NOT_SPECIFIED + || format.getFrameRate() == getFrameRate()) + && (format.getFrameSize() == AudioSystem.NOT_SPECIFIED + || format.getFrameSize() == getFrameSize()) + && (getSampleSizeInBits() <= 8 + || format.isBigEndian() == isBigEndian())) { return true; - + } return false; } @@ -552,14 +554,14 @@ * which is simply a linear (proportional) representation of the sound * waveform. With PCM, the number stored in each sample is proportional * to the instantaneous amplitude of the sound pressure at that point in - * time. The numbers are frequently signed or unsigned integers. + * time. The numbers may be signed or unsigned integers or floats. * Besides PCM, other encodings include mu-law and a-law, which are nonlinear * mappings of the sound amplitude that are often used for recording speech. * <p> * You can use a predefined encoding by referring to one of the static * objects created by this class, such as PCM_SIGNED or * PCM_UNSIGNED. Service providers can create new encodings, such as - * compressed audio formats or floating-point PCM samples, and make + * compressed audio formats, and make * these available through the <code>{@link AudioSystem}</code> class. * <p> * The <code>Encoding</code> class is static, so that all @@ -590,6 +592,13 @@ public static final Encoding PCM_UNSIGNED = new Encoding("PCM_UNSIGNED"); /** + * Specifies floating-point PCM data. + * + * @since 1.7 + */ + public static final Encoding PCM_FLOAT = new Encoding("PCM_FLOAT"); + + /** * Specifies u-law encoded data. */ public static final Encoding ULAW = new Encoding("ULAW");
--- a/src/share/classes/javax/swing/JColorChooser.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/javax/swing/JColorChooser.java Thu Sep 16 11:17:32 2010 -0700 @@ -27,13 +27,11 @@ import java.awt.*; import java.awt.event.*; -import java.beans.*; import java.io.*; import java.util.*; import javax.swing.colorchooser.*; import javax.swing.plaf.ColorChooserUI; -import javax.swing.event.*; import javax.accessibility.*; import sun.swing.SwingUtilities2; @@ -95,7 +93,7 @@ private ColorSelectionModel selectionModel; - private JComponent previewPanel; + private JComponent previewPanel = ColorChooserComponentFactory.getPreviewPanel(); private AbstractColorChooserPanel[] chooserPanels = new AbstractColorChooserPanel[0];
--- a/src/share/classes/javax/swing/JDialog.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/javax/swing/JDialog.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,12 +26,7 @@ import java.awt.*; import java.awt.event.*; -import java.beans.PropertyChangeListener; -import java.util.Locale; -import java.util.Vector; -import java.io.Serializable; import javax.accessibility.*; -import java.applet.Applet; /** * The main class for creating a dialog window. You can use this class @@ -45,30 +40,30 @@ * * <p> * - * The <code>JDialog</code> component contains a <code>JRootPane</code> + * The {@code JDialog} component contains a {@code JRootPane} * as its only child. - * The <code>contentPane</code> should be the parent of any children of the - * <code>JDialog</code>. - * As a convenience <code>add</code> and its variants, <code>remove</code> and - * <code>setLayout</code> have been overridden to forward to the - * <code>contentPane</code> as necessary. This means you can write: + * The {@code contentPane} should be the parent of any children of the + * {@code JDialog}. + * As a convenience {@code add} and its variants, {@code remove} and + * {@code setLayout} have been overridden to forward to the + * {@code contentPane} as necessary. This means you can write: * <pre> * dialog.add(child); * </pre> * And the child will be added to the contentPane. - * The <code>contentPane</code> is always non-<code>null</code>. - * Attempting to set it to <code>null</code> generates an exception. - * The default <code>contentPane</code> has a <code>BorderLayout</code> + * The {@code contentPane} is always non-{@code null}. + * Attempting to set it to {@code null} generates an exception. + * The default {@code contentPane} has a {@code BorderLayout} * manager set on it. * Refer to {@link javax.swing.RootPaneContainer} - * for details on adding, removing and setting the <code>LayoutManager</code> - * of a <code>JDialog</code>. + * for details on adding, removing and setting the {@code LayoutManager} + * of a {@code JDialog}. * <p> - * Please see the <code>JRootPane</code> documentation for a complete - * description of the <code>contentPane</code>, <code>glassPane</code>, - * and <code>layeredPane</code> components. + * Please see the {@code JRootPane} documentation for a complete + * description of the {@code contentPane}, {@code glassPane}, + * and {@code layeredPane} components. * <p> - * In a multi-screen environment, you can create a <code>JDialog</code> + * In a multi-screen environment, you can create a {@code JDialog} * on a different screen device than its owner. See {@link java.awt.Frame} for * more information. * <p> @@ -83,7 +78,7 @@ * appropriate for short term storage or RMI between applications running * the same version of Swing. As of 1.4, support for long term storage * of all JavaBeans<sup><font size="-2">TM</font></sup> - * has been added to the <code>java.beans</code> package. + * has been added to the {@code java.beans} package. * Please see {@link java.beans.XMLEncoder}. * * @see JOptionPane @@ -120,9 +115,9 @@ protected JRootPane rootPane; /** - * If true then calls to <code>add</code> and <code>setLayout</code> - * will be forwarded to the <code>contentPane</code>. This is initially - * false, but is set to true when the <code>JDialog</code> is constructed. + * If true then calls to {@code add} and {@code setLayout} + * will be forwarded to the {@code contentPane}. This is initially + * false, but is set to true when the {@code JDialog} is constructed. * * @see #isRootPaneCheckingEnabled * @see #setRootPaneCheckingEnabled @@ -131,26 +126,26 @@ protected boolean rootPaneCheckingEnabled = false; /** - * The <code>TransferHandler</code> for this dialog. + * The {@code TransferHandler} for this dialog. */ private TransferHandler transferHandler; /** * Creates a modeless dialog without a title and without a specified - * <code>Frame</code> owner. A shared, hidden frame will be + * {@code Frame} owner. A shared, hidden frame will be * set as the owner of the dialog. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. * <p> * NOTE: This constructor does not allow you to create an unowned - * <code>JDialog</code>. To create an unowned <code>JDialog</code> - * you must use either the <code>JDialog(Window)</code> or - * <code>JDialog(Dialog)</code> constructor with an argument of - * <code>null</code>. + * {@code JDialog}. To create an unowned {@code JDialog} + * you must use either the {@code JDialog(Window)} or + * {@code JDialog(Dialog)} constructor with an argument of + * {@code null}. * - * @exception HeadlessException if <code>GraphicsEnvironment.isHeadless()</code> - * returns <code>true</code>. + * @throws HeadlessException if {@code GraphicsEnvironment.isHeadless()} + * returns {@code true}. * @see java.awt.GraphicsEnvironment#isHeadless * @see JComponent#getDefaultLocale */ @@ -160,22 +155,22 @@ /** * Creates a modeless dialog without a title with the - * specified <code>Frame</code> as its owner. If <code>owner</code> - * is <code>null</code>, a shared, hidden frame will be set as the + * specified {@code Frame} as its owner. If {@code owner} + * is {@code null}, a shared, hidden frame will be set as the * owner of the dialog. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. * <p> * NOTE: This constructor does not allow you to create an unowned - * <code>JDialog</code>. To create an unowned <code>JDialog</code> - * you must use either the <code>JDialog(Window)</code> or - * <code>JDialog(Dialog)</code> constructor with an argument of - * <code>null</code>. + * {@code JDialog}. To create an unowned {@code JDialog} + * you must use either the {@code JDialog(Window)} or + * {@code JDialog(Dialog)} constructor with an argument of + * {@code null}. * - * @param owner the <code>Frame</code> from which the dialog is displayed - * @exception HeadlessException if <code>GraphicsEnvironment.isHeadless()</code> - * returns <code>true</code>. + * @param owner the {@code Frame} from which the dialog is displayed + * @throws HeadlessException if {@code GraphicsEnvironment.isHeadless()} + * returns {@code true}. * @see java.awt.GraphicsEnvironment#isHeadless * @see JComponent#getDefaultLocale */ @@ -184,25 +179,25 @@ } /** - * Creates a dialog with the specified owner <code>Frame</code>, modality - * and an empty title. If <code>owner</code> is <code>null</code>, + * Creates a dialog with the specified owner {@code Frame}, modality + * and an empty title. If {@code owner} is {@code null}, * a shared, hidden frame will be set as the owner of the dialog. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. * <p> * NOTE: This constructor does not allow you to create an unowned - * <code>JDialog</code>. To create an unowned <code>JDialog</code> - * you must use either the <code>JDialog(Window)</code> or - * <code>JDialog(Dialog)</code> constructor with an argument of - * <code>null</code>. + * {@code JDialog}. To create an unowned {@code JDialog} + * you must use either the {@code JDialog(Window)} or + * {@code JDialog(Dialog)} constructor with an argument of + * {@code null}. * - * @param owner the <code>Frame</code> from which the dialog is displayed + * @param owner the {@code Frame} from which the dialog is displayed * @param modal specifies whether dialog blocks user input to other top-level - * windows when shown. If <code>true</code>, the modality type property is set to - * <code>DEFAULT_MODALITY_TYPE</code>, otherwise the dialog is modeless. - * @exception HeadlessException if <code>GraphicsEnvironment.isHeadless()</code> - * returns <code>true</code>. + * windows when shown. If {@code true}, the modality type property is set to + * {@code DEFAULT_MODALITY_TYPE}, otherwise the dialog is modeless. + * @throws HeadlessException if {@code GraphicsEnvironment.isHeadless()} + * returns {@code true}. * @see java.awt.GraphicsEnvironment#isHeadless * @see JComponent#getDefaultLocale */ @@ -212,24 +207,24 @@ /** * Creates a modeless dialog with the specified title and - * with the specified owner frame. If <code>owner</code> - * is <code>null</code>, a shared, hidden frame will be set as the + * with the specified owner frame. If {@code owner} + * is {@code null}, a shared, hidden frame will be set as the * owner of the dialog. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. * <p> * NOTE: This constructor does not allow you to create an unowned - * <code>JDialog</code>. To create an unowned <code>JDialog</code> - * you must use either the <code>JDialog(Window)</code> or - * <code>JDialog(Dialog)</code> constructor with an argument of - * <code>null</code>. + * {@code JDialog}. To create an unowned {@code JDialog} + * you must use either the {@code JDialog(Window)} or + * {@code JDialog(Dialog)} constructor with an argument of + * {@code null}. * - * @param owner the <code>Frame</code> from which the dialog is displayed - * @param title the <code>String</code> to display in the dialog's + * @param owner the {@code Frame} from which the dialog is displayed + * @param title the {@code String} to display in the dialog's * title bar - * @exception HeadlessException if <code>GraphicsEnvironment.isHeadless()</code> - * returns <code>true</code>. + * @throws HeadlessException if {@code GraphicsEnvironment.isHeadless()} + * returns {@code true}. * @see java.awt.GraphicsEnvironment#isHeadless * @see JComponent#getDefaultLocale */ @@ -238,31 +233,31 @@ } /** - * Creates a dialog with the specified title, owner <code>Frame</code> - * and modality. If <code>owner</code> is <code>null</code>, + * Creates a dialog with the specified title, owner {@code Frame} + * and modality. If {@code owner} is {@code null}, * a shared, hidden frame will be set as the owner of this dialog. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. * <p> - * NOTE: Any popup components (<code>JComboBox</code>, - * <code>JPopupMenu</code>, <code>JMenuBar</code>) + * NOTE: Any popup components ({@code JComboBox}, + * {@code JPopupMenu}, {@code JMenuBar}) * created within a modal dialog will be forced to be lightweight. * <p> * NOTE: This constructor does not allow you to create an unowned - * <code>JDialog</code>. To create an unowned <code>JDialog</code> - * you must use either the <code>JDialog(Window)</code> or - * <code>JDialog(Dialog)</code> constructor with an argument of - * <code>null</code>. + * {@code JDialog}. To create an unowned {@code JDialog} + * you must use either the {@code JDialog(Window)} or + * {@code JDialog(Dialog)} constructor with an argument of + * {@code null}. * - * @param owner the <code>Frame</code> from which the dialog is displayed - * @param title the <code>String</code> to display in the dialog's + * @param owner the {@code Frame} from which the dialog is displayed + * @param title the {@code String} to display in the dialog's * title bar * @param modal specifies whether dialog blocks user input to other top-level - * windows when shown. If <code>true</code>, the modality type property is set to - * <code>DEFAULT_MODALITY_TYPE</code> otherwise the dialog is modeless - * @exception HeadlessException if <code>GraphicsEnvironment.isHeadless()</code> - * returns <code>true</code>. + * windows when shown. If {@code true}, the modality type property is set to + * {@code DEFAULT_MODALITY_TYPE} otherwise the dialog is modeless + * @throws HeadlessException if {@code GraphicsEnvironment.isHeadless()} + * returns {@code true}. * * @see java.awt.Dialog.ModalityType * @see java.awt.Dialog.ModalityType#MODELESS @@ -285,35 +280,35 @@ /** * Creates a dialog with the specified title, - * owner <code>Frame</code>, modality and <code>GraphicsConfiguration</code>. - * If <code>owner</code> is <code>null</code>, + * owner {@code Frame}, modality and {@code GraphicsConfiguration}. + * If {@code owner} is {@code null}, * a shared, hidden frame will be set as the owner of this dialog. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. * <p> - * NOTE: Any popup components (<code>JComboBox</code>, - * <code>JPopupMenu</code>, <code>JMenuBar</code>) + * NOTE: Any popup components ({@code JComboBox}, + * {@code JPopupMenu}, {@code JMenuBar}) * created within a modal dialog will be forced to be lightweight. * <p> * NOTE: This constructor does not allow you to create an unowned - * <code>JDialog</code>. To create an unowned <code>JDialog</code> - * you must use either the <code>JDialog(Window)</code> or - * <code>JDialog(Dialog)</code> constructor with an argument of - * <code>null</code>. + * {@code JDialog}. To create an unowned {@code JDialog} + * you must use either the {@code JDialog(Window)} or + * {@code JDialog(Dialog)} constructor with an argument of + * {@code null}. * - * @param owner the <code>Frame</code> from which the dialog is displayed - * @param title the <code>String</code> to display in the dialog's + * @param owner the {@code Frame} from which the dialog is displayed + * @param title the {@code String} to display in the dialog's * title bar * @param modal specifies whether dialog blocks user input to other top-level - * windows when shown. If <code>true</code>, the modality type property is set to - * <code>DEFAULT_MODALITY_TYPE</code>, otherwise the dialog is modeless. - * @param gc the <code>GraphicsConfiguration</code> - * of the target screen device. If <code>gc</code> is - * <code>null</code>, the same - * <code>GraphicsConfiguration</code> as the owning Frame is used. - * @exception HeadlessException if <code>GraphicsEnvironment.isHeadless()</code> - * returns <code>true</code>. + * windows when shown. If {@code true}, the modality type property is set to + * {@code DEFAULT_MODALITY_TYPE}, otherwise the dialog is modeless. + * @param gc the {@code GraphicsConfiguration} + * of the target screen device. If {@code gc} is + * {@code null}, the same + * {@code GraphicsConfiguration} as the owning Frame is used. + * @throws HeadlessException if {@code GraphicsEnvironment.isHeadless()} + * returns {@code true}. * @see java.awt.Dialog.ModalityType * @see java.awt.Dialog.ModalityType#MODELESS * @see java.awt.Dialog#DEFAULT_MODALITY_TYPE @@ -337,15 +332,15 @@ /** * Creates a modeless dialog without a title with the - * specified <code>Dialog</code> as its owner. + * specified {@code Dialog} as its owner. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. * - * @param owner the owner <code>Dialog</code> from which the dialog is displayed - * or <code>null</code> if this dialog has no owner - * @exception HeadlessException <code>if GraphicsEnvironment.isHeadless()</code> - * returns <code>true</code>. + * @param owner the owner {@code Dialog} from which the dialog is displayed + * or {@code null} if this dialog has no owner + * @throws HeadlessException {@code if GraphicsEnvironment.isHeadless()} + * returns {@code true}. * @see java.awt.GraphicsEnvironment#isHeadless * @see JComponent#getDefaultLocale */ @@ -354,18 +349,18 @@ } /** - * Creates a dialog with the specified owner <code>Dialog</code> and modality. + * Creates a dialog with the specified owner {@code Dialog} and modality. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. * - * @param owner the owner <code>Dialog</code> from which the dialog is displayed - * or <code>null</code> if this dialog has no owner + * @param owner the owner {@code Dialog} from which the dialog is displayed + * or {@code null} if this dialog has no owner * @param modal specifies whether dialog blocks user input to other top-level - * windows when shown. If <code>true</code>, the modality type property is set to - * <code>DEFAULT_MODALITY_TYPE</code>, otherwise the dialog is modeless. - * @exception HeadlessException if <code>GraphicsEnvironment.isHeadless()</code> - * returns <code>true</code>. + * windows when shown. If {@code true}, the modality type property is set to + * {@code DEFAULT_MODALITY_TYPE}, otherwise the dialog is modeless. + * @throws HeadlessException if {@code GraphicsEnvironment.isHeadless()} + * returns {@code true}. * @see java.awt.Dialog.ModalityType * @see java.awt.Dialog.ModalityType#MODELESS * @see java.awt.Dialog#DEFAULT_MODALITY_TYPE @@ -383,14 +378,14 @@ * with the specified owner dialog. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. * - * @param owner the owner <code>Dialog</code> from which the dialog is displayed - * or <code>null</code> if this dialog has no owner - * @param title the <code>String</code> to display in the dialog's + * @param owner the owner {@code Dialog} from which the dialog is displayed + * or {@code null} if this dialog has no owner + * @param title the {@code String} to display in the dialog's * title bar - * @exception HeadlessException if <code>GraphicsEnvironment.isHeadless()</code> - * returns <code>true</code>. + * @throws HeadlessException if {@code GraphicsEnvironment.isHeadless()} + * returns {@code true}. * @see java.awt.GraphicsEnvironment#isHeadless * @see JComponent#getDefaultLocale */ @@ -400,20 +395,20 @@ /** * Creates a dialog with the specified title, modality - * and the specified owner <code>Dialog</code>. + * and the specified owner {@code Dialog}. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. * - * @param owner the owner <code>Dialog</code> from which the dialog is displayed - * or <code>null</code> if this dialog has no owner - * @param title the <code>String</code> to display in the dialog's + * @param owner the owner {@code Dialog} from which the dialog is displayed + * or {@code null} if this dialog has no owner + * @param title the {@code String} to display in the dialog's * title bar * @param modal specifies whether dialog blocks user input to other top-level - * windows when shown. If <code>true</code>, the modality type property is set to - * <code>DEFAULT_MODALITY_TYPE</code>, otherwise the dialog is modeless - * @exception HeadlessException if <code>GraphicsEnvironment.isHeadless()</code> - * returns <code>true</code>. + * windows when shown. If {@code true}, the modality type property is set to + * {@code DEFAULT_MODALITY_TYPE}, otherwise the dialog is modeless + * @throws HeadlessException if {@code GraphicsEnvironment.isHeadless()} + * returns {@code true}. * @see java.awt.Dialog.ModalityType * @see java.awt.Dialog.ModalityType#MODELESS * @see java.awt.Dialog#DEFAULT_MODALITY_TYPE @@ -428,30 +423,30 @@ } /** - * Creates a dialog with the specified title, owner <code>Dialog</code>, - * modality and <code>GraphicsConfiguration</code>. + * Creates a dialog with the specified title, owner {@code Dialog}, + * modality and {@code GraphicsConfiguration}. * * <p> - * NOTE: Any popup components (<code>JComboBox</code>, - * <code>JPopupMenu</code>, <code>JMenuBar</code>) + * NOTE: Any popup components ({@code JComboBox}, + * {@code JPopupMenu}, {@code JMenuBar}) * created within a modal dialog will be forced to be lightweight. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. * - * @param owner the owner <code>Dialog</code> from which the dialog is displayed - * or <code>null</code> if this dialog has no owner - * @param title the <code>String</code> to display in the dialog's + * @param owner the owner {@code Dialog} from which the dialog is displayed + * or {@code null} if this dialog has no owner + * @param title the {@code String} to display in the dialog's * title bar * @param modal specifies whether dialog blocks user input to other top-level - * windows when shown. If <code>true</code>, the modality type property is set to - * <code>DEFAULT_MODALITY_TYPE</code>, otherwise the dialog is modeless - * @param gc the <code>GraphicsConfiguration</code> - * of the target screen device. If <code>gc</code> is - * <code>null</code>, the same - * <code>GraphicsConfiguration</code> as the owning Dialog is used. - * @exception HeadlessException if <code>GraphicsEnvironment.isHeadless()</code> - * returns <code>true</code>. + * windows when shown. If {@code true}, the modality type property is set to + * {@code DEFAULT_MODALITY_TYPE}, otherwise the dialog is modeless + * @param gc the {@code GraphicsConfiguration} + * of the target screen device. If {@code gc} is + * {@code null}, the same + * {@code GraphicsConfiguration} as the owning Dialog is used. + * @throws HeadlessException if {@code GraphicsEnvironment.isHeadless()} + * returns {@code true}. * @see java.awt.Dialog.ModalityType * @see java.awt.Dialog.ModalityType#MODELESS * @see java.awt.Dialog#DEFAULT_MODALITY_TYPE @@ -468,16 +463,22 @@ } /** - * Creates a modeless dialog with the specified owner <code>Window</code> and + * Creates a modeless dialog with the specified owner {@code Window} and * an empty title. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. + * + * @param owner the {@code Window} from which the dialog is displayed or + * {@code null} if this dialog has no owner * - * @param owner the <code>Window</code> from which the dialog is displayed or - * <code>null</code> if this dialog has no owner - * @exception HeadlessException when - * <code>GraphicsEnvironment.isHeadless()</code> returns <code>true</code> + * @throws IllegalArgumentException + * if the {@code owner} is not an instance of {@link java.awt.Dialog Dialog} + * or {@link java.awt.Frame Frame} + * @throws IllegalArgumentException + * if the {@code owner}'s {@code GraphicsConfiguration} is not from a screen device + * @throws HeadlessException + * when {@code GraphicsEnvironment.isHeadless()} returns {@code true} * * @see java.awt.GraphicsEnvironment#isHeadless * @see JComponent#getDefaultLocale @@ -489,19 +490,28 @@ } /** - * Creates a dialog with the specified owner <code>Window</code>, modality + * Creates a dialog with the specified owner {@code Window}, modality * and an empty title. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. * - * @param owner the <code>Window</code> from which the dialog is displayed or - * <code>null</code> if this dialog has no owner + * @param owner the {@code Window} from which the dialog is displayed or + * {@code null} if this dialog has no owner * @param modalityType specifies whether dialog blocks input to other - * windows when shown. <code>null</code> value and unsupported modality - * types are equivalent to <code>MODELESS</code> - * @exception HeadlessException when - * <code>GraphicsEnvironment.isHeadless()</code> returns <code>true</code> + * windows when shown. {@code null} value and unsupported modality + * types are equivalent to {@code MODELESS} + * + * @throws IllegalArgumentException + * if the {@code owner} is not an instance of {@link java.awt.Dialog Dialog} + * or {@link java.awt.Frame Frame} + * @throws IllegalArgumentException + * if the {@code owner}'s {@code GraphicsConfiguration} is not from a screen device + * @throws HeadlessException + * when {@code GraphicsEnvironment.isHeadless()} returns {@code true} + * @throws SecurityException + * if the calling thread does not have permission to create modal dialogs + * with the given {@code modalityType} * * @see java.awt.Dialog.ModalityType * @see java.awt.Dialog#setModal @@ -517,17 +527,23 @@ /** * Creates a modeless dialog with the specified title and owner - * <code>Window</code>. + * {@code Window}. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. + * + * @param owner the {@code Window} from which the dialog is displayed or + * {@code null} if this dialog has no owner + * @param title the {@code String} to display in the dialog's + * title bar or {@code null} if the dialog has no title * - * @param owner the <code>Window</code> from which the dialog is displayed or - * <code>null</code> if this dialog has no owner - * @param title the <code>String</code> to display in the dialog's - * title bar or <code>null</code> if the dialog has no title - * @exception java.awt.HeadlessException when - * <code>GraphicsEnvironment.isHeadless()</code> returns <code>true</code> + * @throws IllegalArgumentException + * if the {@code owner} is not an instance of {@link java.awt.Dialog Dialog} + * or {@link java.awt.Frame Frame} + * @throws IllegalArgumentException + * if the {@code owner}'s {@code GraphicsConfiguration} is not from a screen device + * @throws HeadlessException + * when {@code GraphicsEnvironment.isHeadless()} returns {@code true} * * @see java.awt.GraphicsEnvironment#isHeadless * @see JComponent#getDefaultLocale @@ -539,21 +555,30 @@ } /** - * Creates a dialog with the specified title, owner <code>Window</code> and + * Creates a dialog with the specified title, owner {@code Window} and * modality. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. + * + * @param owner the {@code Window} from which the dialog is displayed or + * {@code null} if this dialog has no owner + * @param title the {@code String} to display in the dialog's + * title bar or {@code null} if the dialog has no title + * @param modalityType specifies whether dialog blocks input to other + * windows when shown. {@code null} value and unsupported modality + * types are equivalent to {@code MODELESS} * - * @param owner the <code>Window</code> from which the dialog is displayed or - * <code>null</code> if this dialog has no owner - * @param title the <code>String</code> to display in the dialog's - * title bar or <code>null</code> if the dialog has no title - * @param modalityType specifies whether dialog blocks input to other - * windows when shown. <code>null</code> value and unsupported modality - * types are equivalent to <code>MODELESS</code> - * @exception java.awt.HeadlessException when - * <code>GraphicsEnvironment.isHeadless()</code> returns <code>true</code> + * @throws IllegalArgumentException + * if the {@code owner} is not an instance of {@link java.awt.Dialog Dialog} + * or {@link java.awt.Frame Frame} + * @throws IllegalArgumentException + * if the {@code owner}'s {@code GraphicsConfiguration} is not from a screen device + * @throws HeadlessException + * when {@code GraphicsEnvironment.isHeadless()} returns {@code true} + * @throws SecurityException + * if the calling thread does not have permission to create modal dialogs + * with the given {@code modalityType} * * @see java.awt.Dialog.ModalityType * @see java.awt.Dialog#setModal @@ -569,29 +594,38 @@ } /** - * Creates a dialog with the specified title, owner <code>Window</code>, - * modality and <code>GraphicsConfiguration</code>. + * Creates a dialog with the specified title, owner {@code Window}, + * modality and {@code GraphicsConfiguration}. * <p> - * NOTE: Any popup components (<code>JComboBox</code>, - * <code>JPopupMenu</code>, <code>JMenuBar</code>) + * NOTE: Any popup components ({@code JComboBox}, + * {@code JPopupMenu}, {@code JMenuBar}) * created within a modal dialog will be forced to be lightweight. * <p> * This constructor sets the component's locale property to the value - * returned by <code>JComponent.getDefaultLocale</code>. + * returned by {@code JComponent.getDefaultLocale}. * - * @param owner the <code>Window</code> from which the dialog is displayed or - * <code>null</code> if this dialog has no owner - * @param title the <code>String</code> to display in the dialog's - * title bar or <code>null</code> if the dialog has no title + * @param owner the {@code Window} from which the dialog is displayed or + * {@code null} if this dialog has no owner + * @param title the {@code String} to display in the dialog's + * title bar or {@code null} if the dialog has no title * @param modalityType specifies whether dialog blocks input to other - * windows when shown. <code>null</code> value and unsupported modality - * types are equivalent to <code>MODELESS</code> - * @param gc the <code>GraphicsConfiguration</code> of the target screen device; - * if <code>null</code>, the <code>GraphicsConfiguration</code> from the owning - * window is used; if <code>owner</code> is also <code>null</code>, the - * system default <code>GraphicsConfiguration</code> is assumed - * @exception java.awt.HeadlessException when - * <code>GraphicsEnvironment.isHeadless()</code> returns <code>true</code> + * windows when shown. {@code null} value and unsupported modality + * types are equivalent to {@code MODELESS} + * @param gc the {@code GraphicsConfiguration} of the target screen device; + * if {@code null}, the {@code GraphicsConfiguration} from the owning + * window is used; if {@code owner} is also {@code null}, the + * system default {@code GraphicsConfiguration} is assumed + * + * @throws IllegalArgumentException + * if the {@code owner} is not an instance of {@link java.awt.Dialog Dialog} + * or {@link java.awt.Frame Frame} + * @throws IllegalArgumentException + * if the {@code owner}'s {@code GraphicsConfiguration} is not from a screen device + * @throws HeadlessException + * when {@code GraphicsEnvironment.isHeadless()} returns {@code true} + * @throws SecurityException + * if the calling thread does not have permission to create modal dialogs + * with the given {@code modalityType} * * @see java.awt.Dialog.ModalityType * @see java.awt.Dialog#setModal @@ -608,7 +642,7 @@ } /** - * Called by the constructors to init the <code>JDialog</code> properly. + * Called by the constructors to init the {@code JDialog} properly. */ protected void dialogInit() { enableEvents(AWTEvent.KEY_EVENT_MASK | AWTEvent.WINDOW_EVENT_MASK); @@ -628,7 +662,7 @@ /** * Called by the constructor methods to create the default - * <code>rootPane</code>. + * {@code rootPane}. */ protected JRootPane createRootPane() { JRootPane rp = new JRootPane(); @@ -642,7 +676,7 @@ /** * Handles window events depending on the state of the - * <code>defaultCloseOperation</code> property. + * {@code defaultCloseOperation} property. * * @see #setDefaultCloseOperation */ @@ -671,26 +705,26 @@ * You must specify one of the following choices: * <p> * <ul> - * <li><code>DO_NOTHING_ON_CLOSE</code> - * (defined in <code>WindowConstants</code>): + * <li>{@code DO_NOTHING_ON_CLOSE} + * (defined in {@code WindowConstants}): * Don't do anything; require the - * program to handle the operation in the <code>windowClosing</code> - * method of a registered <code>WindowListener</code> object. + * program to handle the operation in the {@code windowClosing} + * method of a registered {@code WindowListener} object. * - * <li><code>HIDE_ON_CLOSE</code> - * (defined in <code>WindowConstants</code>): + * <li>{@code HIDE_ON_CLOSE} + * (defined in {@code WindowConstants}): * Automatically hide the dialog after - * invoking any registered <code>WindowListener</code> + * invoking any registered {@code WindowListener} * objects. * - * <li><code>DISPOSE_ON_CLOSE</code> - * (defined in <code>WindowConstants</code>): + * <li>{@code DISPOSE_ON_CLOSE} + * (defined in {@code WindowConstants}): * Automatically hide and dispose the - * dialog after invoking any registered <code>WindowListener</code> + * dialog after invoking any registered {@code WindowListener} * objects. * </ul> * <p> - * The value is set to <code>HIDE_ON_CLOSE</code> by default. Changes + * The value is set to {@code HIDE_ON_CLOSE} by default. Changes * to the value of this property cause the firing of a property * change event, with property name "defaultCloseOperation". * <p> @@ -779,9 +813,9 @@ } /** - * Gets the <code>transferHandler</code> property. + * Gets the {@code transferHandler} property. * - * @return the value of the <code>transferHandler</code> property + * @return the value of the {@code transferHandler} property * * @see TransferHandler * @see #setTransferHandler @@ -792,10 +826,10 @@ } /** - * Calls <code>paint(g)</code>. This method was overridden to + * Calls {@code paint(g)}. This method was overridden to * prevent an unnecessary call to clear the background. * - * @param g the <code>Graphics</code> context in which to paint + * @param g the {@code Graphics} context in which to paint */ public void update(Graphics g) { paint(g); @@ -827,10 +861,10 @@ /** - * Returns whether calls to <code>add</code> and - * <code>setLayout</code> are forwarded to the <code>contentPane</code>. + * Returns whether calls to {@code add} and + * {@code setLayout} are forwarded to the {@code contentPane}. * - * @return true if <code>add</code> and <code>setLayout</code> + * @return true if {@code add} and {@code setLayout} * are fowarded; false otherwise * * @see #addImpl @@ -844,12 +878,12 @@ /** - * Sets whether calls to <code>add</code> and - * <code>setLayout</code> are forwarded to the <code>contentPane</code>. + * Sets whether calls to {@code add} and + * {@code setLayout} are forwarded to the {@code contentPane}. * - * @param enabled true if <code>add</code> and <code>setLayout</code> + * @param enabled true if {@code add} and {@code setLayout} * are forwarded, false if they should operate directly on the - * <code>JDialog</code>. + * {@code JDialog}. * * @see #addImpl * @see #setLayout @@ -864,20 +898,20 @@ } /** - * Adds the specified child <code>Component</code>. + * Adds the specified child {@code Component}. * This method is overridden to conditionally forward calls to the - * <code>contentPane</code>. - * By default, children are added to the <code>contentPane</code> instead + * {@code contentPane}. + * By default, children are added to the {@code contentPane} instead * of the frame, refer to {@link javax.swing.RootPaneContainer} for * details. * * @param comp the component to be enhanced * @param constraints the constraints to be respected * @param index the index - * @exception IllegalArgumentException if <code>index</code> is invalid - * @exception IllegalArgumentException if adding the container's parent + * @throws IllegalArgumentException if {@code index} is invalid + * @throws IllegalArgumentException if adding the container's parent * to itself - * @exception IllegalArgumentException if adding a window to a container + * @throws IllegalArgumentException if adding a window to a container * * @see #setRootPaneCheckingEnabled * @see javax.swing.RootPaneContainer @@ -894,13 +928,13 @@ /** * Removes the specified component from the container. If - * <code>comp</code> is not the <code>rootPane</code>, this will forward - * the call to the <code>contentPane</code>. This will do nothing if - * <code>comp</code> is not a child of the <code>JDialog</code> or - * <code>contentPane</code>. + * {@code comp} is not the {@code rootPane}, this will forward + * the call to the {@code contentPane}. This will do nothing if + * {@code comp} is not a child of the {@code JDialog} or + * {@code contentPane}. * * @param comp the component to be removed - * @throws NullPointerException if <code>comp</code> is null + * @throws NullPointerException if {@code comp} is null * @see #add * @see javax.swing.RootPaneContainer */ @@ -914,13 +948,13 @@ /** - * Sets the <code>LayoutManager</code>. + * Sets the {@code LayoutManager}. * Overridden to conditionally forward the call to the - * <code>contentPane</code>. + * {@code contentPane}. * Refer to {@link javax.swing.RootPaneContainer} for * more information. * - * @param manager the <code>LayoutManager</code> + * @param manager the {@code LayoutManager} * @see #setRootPaneCheckingEnabled * @see javax.swing.RootPaneContainer */ @@ -935,7 +969,7 @@ /** - * Returns the <code>rootPane</code> object for this dialog. + * Returns the {@code rootPane} object for this dialog. * * @see #setRootPane * @see RootPaneContainer#getRootPane @@ -946,10 +980,10 @@ /** - * Sets the <code>rootPane</code> property. + * Sets the {@code rootPane} property. * This method is called by the constructor. * - * @param root the <code>rootPane</code> object for this dialog + * @param root the {@code rootPane} object for this dialog * * @see #getRootPane * @@ -976,9 +1010,9 @@ /** - * Returns the <code>contentPane</code> object for this dialog. + * Returns the {@code contentPane} object for this dialog. * - * @return the <code>contentPane</code> property + * @return the {@code contentPane} property * * @see #setContentPane * @see RootPaneContainer#getContentPane @@ -989,19 +1023,19 @@ /** - * Sets the <code>contentPane</code> property. + * Sets the {@code contentPane} property. * This method is called by the constructor. * <p> - * Swing's painting architecture requires an opaque <code>JComponent</code> + * Swing's painting architecture requires an opaque {@code JComponent} * in the containment hiearchy. This is typically provided by the * content pane. If you replace the content pane it is recommended you - * replace it with an opaque <code>JComponent</code>. + * replace it with an opaque {@code JComponent}. * @see JRootPane * - * @param contentPane the <code>contentPane</code> object for this dialog + * @param contentPane the {@code contentPane} object for this dialog * - * @exception java.awt.IllegalComponentStateException (a runtime - * exception) if the content pane parameter is <code>null</code> + * @throws java.awt.IllegalComponentStateException (a runtime + * exception) if the content pane parameter is {@code null} * @see #getContentPane * @see RootPaneContainer#setContentPane * @@ -1015,9 +1049,9 @@ } /** - * Returns the <code>layeredPane</code> object for this dialog. + * Returns the {@code layeredPane} object for this dialog. * - * @return the <code>layeredPane</code> property + * @return the {@code layeredPane} property * * @see #setLayeredPane * @see RootPaneContainer#getLayeredPane @@ -1027,12 +1061,12 @@ } /** - * Sets the <code>layeredPane</code> property. + * Sets the {@code layeredPane} property. * This method is called by the constructor. * - * @param layeredPane the new <code>layeredPane</code> property + * @param layeredPane the new {@code layeredPane} property * - * @exception java.awt.IllegalComponentStateException (a runtime + * @throws java.awt.IllegalComponentStateException (a runtime * exception) if the layered pane parameter is null * @see #getLayeredPane * @see RootPaneContainer#setLayeredPane @@ -1046,9 +1080,9 @@ } /** - * Returns the <code>glassPane</code> object for this dialog. + * Returns the {@code glassPane} object for this dialog. * - * @return the <code>glassPane</code> property + * @return the {@code glassPane} property * * @see #setGlassPane * @see RootPaneContainer#getGlassPane @@ -1058,10 +1092,10 @@ } /** - * Sets the <code>glassPane</code> property. + * Sets the {@code glassPane} property. * This method is called by the constructor. * - * @param glassPane the <code>glassPane</code> object for this dialog + * @param glassPane the {@code glassPane} object for this dialog * @see #getGlassPane * @see RootPaneContainer#setGlassPane * @@ -1085,7 +1119,7 @@ /** * Repaints the specified rectangle of this component within - * <code>time</code> milliseconds. Refer to <code>RepaintManager</code> + * {@code time} milliseconds. Refer to {@code RepaintManager} * for details on how the repaint is handled. * * @param time maximum time in milliseconds before update @@ -1107,15 +1141,15 @@ } /** - * Provides a hint as to whether or not newly created <code>JDialog</code>s + * Provides a hint as to whether or not newly created {@code JDialog}s * should have their Window decorations (such as borders, widgets to * close the window, title...) provided by the current look - * and feel. If <code>defaultLookAndFeelDecorated</code> is true, - * the current <code>LookAndFeel</code> supports providing window + * and feel. If {@code defaultLookAndFeelDecorated} is true, + * the current {@code LookAndFeel} supports providing window * decorations, and the current window manager supports undecorated - * windows, then newly created <code>JDialog</code>s will have their - * Window decorations provided by the current <code>LookAndFeel</code>. - * Otherwise, newly created <code>JDialog</code>s will have their + * windows, then newly created {@code JDialog}s will have their + * Window decorations provided by the current {@code LookAndFeel}. + * Otherwise, newly created {@code JDialog}s will have their * Window decorations provided by the current window manager. * <p> * You can get the same effect on a single JDialog by doing the following: @@ -1139,7 +1173,7 @@ } /** - * Returns true if newly created <code>JDialog</code>s should have their + * Returns true if newly created {@code JDialog}s should have their * Window decorations provided by the current look and feel. This is only * a hint, as certain look and feels may not support this feature. * @@ -1156,14 +1190,14 @@ } /** - * Returns a string representation of this <code>JDialog</code>. + * Returns a string representation of this {@code JDialog}. * This method * is intended to be used only for debugging purposes, and the * content and format of the returned string may vary between * implementations. The returned string may be empty but may not - * be <code>null</code>. + * be {@code null}. * - * @return a string representation of this <code>JDialog</code>. + * @return a string representation of this {@code JDialog}. */ protected String paramString() { String defaultCloseOperationString; @@ -1210,7 +1244,7 @@ /** * This class implements accessibility support for the - * <code>JDialog</code> class. It provides an implementation of the + * {@code JDialog} class. It provides an implementation of the * Java Accessibility API appropriate to dialog user-interface * elements. */
--- a/src/share/classes/javax/swing/plaf/basic/BasicBorders.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/javax/swing/plaf/basic/BasicBorders.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,8 +36,6 @@ import java.awt.Rectangle; import java.awt.Color; import java.awt.Graphics; -import java.io.Serializable; - /** * Factory object that can vend Borders appropriate for the basic L & F. @@ -431,6 +429,9 @@ public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + if (!(c instanceof BasicSplitPaneDivider)) { + return; + } Component child; Rectangle cBounds; JSplitPane splitPane = ((BasicSplitPaneDivider)c). @@ -510,6 +511,9 @@ public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + if (!(c instanceof JSplitPane)) { + return; + } // The only tricky part with this border is that the divider is // not positioned at the top (for horizontal) or left (for vert), // so this border draws to where the divider is:
--- a/src/share/classes/javax/swing/plaf/basic/BasicColorChooserUI.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/javax/swing/plaf/basic/BasicColorChooserUI.java Thu Sep 16 11:17:32 2010 -0700 @@ -142,11 +142,8 @@ if (previewPanel == null) { previewPanel = ColorChooserComponentFactory.getPreviewPanel(); } - else { - Dimension size = new BorderLayout().minimumLayoutSize(previewPanel); - if ((size.width == 0) && (size.height == 0)) { - previewPanel = null; - } + else if (JPanel.class.equals(previewPanel.getClass()) && (0 == previewPanel.getComponentCount())) { + previewPanel = null; } this.previewPanel = previewPanel; if (previewPanel != null) { @@ -215,9 +212,10 @@ } private void selectionChanged(ColorSelectionModel model) { - if (this.previewPanel != null) { - this.previewPanel.setForeground(model.getSelectedColor()); - this.previewPanel.repaint(); + JComponent previewPanel = this.chooser.getPreviewPanel(); + if (previewPanel != null) { + previewPanel.setForeground(model.getSelectedColor()); + previewPanel.repaint(); } AbstractColorChooserPanel[] panels = this.chooser.getChooserPanels(); if (panels != null) {
--- a/src/share/classes/javax/swing/plaf/metal/MetalBorders.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/javax/swing/plaf/metal/MetalBorders.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,14 +33,11 @@ import java.awt.Component; import java.awt.Insets; -import java.awt.Dimension; -import java.awt.Rectangle; import java.awt.Color; import java.awt.Dialog; import java.awt.Frame; import java.awt.Graphics; import java.awt.Window; -import java.io.Serializable; import sun.swing.StringUIClientPropertyKey; @@ -81,6 +78,9 @@ protected static Insets borderInsets = new Insets( 3, 3, 3, 3 ); public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) { + if (!(c instanceof AbstractButton)) { + return; + } if (MetalLookAndFeel.usingOcean()) { paintOceanBorder(c, g, x, y, w, h); return; @@ -473,8 +473,8 @@ if (c instanceof JInternalFrame) { Object obj = ((JInternalFrame) c).getClientProperty( "JInternalFrame.messageType"); - if (obj != null && (obj instanceof Integer)) { - messageType = ((Integer) obj).intValue(); + if (obj instanceof Integer) { + messageType = (Integer) obj; } } @@ -533,7 +533,7 @@ if (MetalLookAndFeel.usingOcean()) { // Only paint a border if we're not next to a horizontal // toolbar - if (!MetalToolBarUI.doesMenuBarBorderToolBar((JMenuBar)c)) { + if ((c instanceof JMenuBar) && !MetalToolBarUI.doesMenuBarBorderToolBar((JMenuBar)c)) { g.setColor(MetalLookAndFeel.getControl()); g.drawLine(0, h - 2, w, h - 2); g.setColor(UIManager.getColor("MenuBar.borderColor")); @@ -564,6 +564,9 @@ protected static Insets borderInsets = new Insets( 2, 2, 2, 2 ); public void paintBorder( Component c, Graphics g, int x, int y, int w, int h ) { + if (!(c instanceof JMenuItem)) { + return; + } JMenuItem b = (JMenuItem) c; ButtonModel model = b.getModel(); @@ -687,6 +690,9 @@ public void paintBorder( Component c, Graphics g, int x, int y, int w, int h ) { + if (!(c instanceof JToolBar)) { + return; + } g.translate( x, y ); if ( ((JToolBar) c).isFloatable() ) @@ -729,6 +735,9 @@ newInsets.top = newInsets.left = newInsets.bottom = newInsets.right = 2; } + if (!(c instanceof JToolBar)) { + return newInsets; + } if ( ((JToolBar) c).isFloatable() ) { if ( ((JToolBar) c).getOrientation() == HORIZONTAL ) { if (c.getComponentOrientation().isLeftToRight()) { @@ -827,6 +836,9 @@ public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) { + if (!(c instanceof JScrollPane)) { + return; + } JScrollPane scroll = (JScrollPane)c; JComponent colHeader = scroll.getColumnHeader(); int colHeaderHeight = 0;
--- a/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -914,6 +914,7 @@ UIResource { public SynthScrollableTabButton(int direction) { super(direction); + setName("TabbedPane.button"); } } }
--- a/src/share/classes/sun/font/FontUtilities.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/sun/font/FontUtilities.java Thu Sep 16 11:17:32 2010 -0700 @@ -373,8 +373,7 @@ */ public static FontUIResource getCompositeFontUIResource(Font font) { - FontUIResource fuir = - new FontUIResource(font.getName(),font.getStyle(),font.getSize()); + FontUIResource fuir = new FontUIResource(font); Font2D font2D = FontUtilities.getFont2D(font); if (!(font2D instanceof PhysicalFont)) {
--- a/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUI.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUI.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -551,6 +551,9 @@ public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + if (!(c instanceof JComponent)) { + return; + } JComponent jc = (JComponent)c; SynthContext context = getContext(jc); SynthStyle style = context.getStyle();
--- a/src/share/classes/sun/util/LocaleServiceProviderPool.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/sun/util/LocaleServiceProviderPool.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,18 +28,20 @@ import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; -import java.util.Arrays; +import java.util.ArrayList; import java.util.HashSet; -import java.util.Iterator; +import java.util.IllformedLocaleException; import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; +import java.util.Locale.Builder; import java.util.Map; +import java.util.ResourceBundle.Control; import java.util.ServiceLoader; -import java.util.ServiceConfigurationError; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.spi.LocaleServiceProvider; + import sun.util.logging.PlatformLogger; import sun.util.resources.LocaleData; import sun.util.resources.OpenListResourceBundle; @@ -90,6 +92,16 @@ private Set<Locale> providerLocales = null; /** + * Special locale for ja_JP with Japanese calendar + */ + private static Locale locale_ja_JP_JP = new Locale("ja", "JP", "JP"); + + /** + * Special locale for th_TH with Thai numbering system + */ + private static Locale locale_th_TH_TH = new Locale("th", "TH", "TH"); + + /** * A factory method that returns a singleton instance */ public static LocaleServiceProviderPool getPool(Class<? extends LocaleServiceProvider> providerClass) { @@ -153,14 +165,20 @@ java.util.spi.CurrencyNameProvider.class, java.util.spi.LocaleNameProvider.class, java.util.spi.TimeZoneNameProvider.class }; - Set<Locale> all = new HashSet<Locale>(Arrays.asList( - LocaleData.getAvailableLocales()) - ); + + // Normalize locales for look up + Locale[] allLocales = LocaleData.getAvailableLocales(); + Set<Locale> all = new HashSet<Locale>(allLocales.length); + for (Locale locale : allLocales) { + all.add(getLookupLocale(locale)); + } + for (Class providerClass : providerClasses) { LocaleServiceProviderPool pool = LocaleServiceProviderPool.getPool(providerClass); all.addAll(pool.getProviderLocales()); } + allAvailableLocales = all.toArray(new Locale[0]); } } @@ -196,7 +214,8 @@ } /** - * Returns an array of available locales from providers. + * Returns an array of available locales (already normalized + * for service lookup) from providers. * Note that this method does not return a defensive copy. * * @return list of the provider locales @@ -208,7 +227,7 @@ for (LocaleServiceProvider lsp : providers) { Locale[] locales = lsp.getAvailableLocales(); for (Locale locale: locales) { - providerLocales.add(locale); + providerLocales.add(getLookupLocale(locale)); } } } @@ -227,15 +246,19 @@ } /** - * Returns an array of available locales supported by the JRE. + * Returns an array of available locales (already normalized for + * service lookup) supported by the JRE. * Note that this method does not return a defensive copy. * * @return list of the available JRE locales */ private synchronized List<Locale> getJRELocales() { if (availableJRELocales == null) { - availableJRELocales = - Arrays.asList(LocaleData.getAvailableLocales()); + Locale[] allLocales = LocaleData.getAvailableLocales(); + availableJRELocales = new ArrayList<Locale>(allLocales.length); + for (Locale locale : allLocales) { + availableJRELocales.add(getLookupLocale(locale)); + } } return availableJRELocales; } @@ -249,7 +272,7 @@ */ private boolean isJRESupported(Locale locale) { List<Locale> locales = getJRELocales(); - return locales.contains(locale); + return locales.contains(getLookupLocale(locale)); } /** @@ -325,7 +348,7 @@ bundleKey = key; } Locale bundleLocale = (bundle != null ? bundle.getLocale() : null); - Locale requested = locale; + List<Locale> lookupLocales = getLookupLocales(locale); P lsp; S providersObj = null; @@ -333,21 +356,30 @@ // to the requested locale than the bundle we've found (for // localized names), or Java runtime's supported locale // (for localized objects) - while ((locale = findProviderLocale(locale, bundleLocale)) != null) { - - lsp = (P)findProvider(locale); - - if (lsp != null) { - providersObj = getter.getObject(lsp, requested, key, params); - if (providersObj != null) { - return providersObj; - } else if (isObjectProvider) { - config( - "A locale sensitive service provider returned null for a localized objects, which should not happen. provider: " + lsp + " locale: " + requested); + Set<Locale> provLoc = getProviderLocales(); + for (int i = 0; i < lookupLocales.size(); i++) { + Locale current = lookupLocales.get(i); + if (bundleLocale != null) { + if (current.equals(bundleLocale)) { + break; + } + } else { + if (isJRESupported(current)) { + break; } } - - locale = getParentLocale(locale); + if (provLoc.contains(current)) { + lsp = (P)findProvider(current); + if (lsp != null) { + providersObj = getter.getObject(lsp, locale, key, params); + if (providersObj != null) { + return providersObj; + } else if (isObjectProvider) { + config( + "A locale sensitive service provider returned null for a localized objects, which should not happen. provider: " + lsp + " locale: " + locale); + } + } + } } // look up the JRE bundle and its parent chain. Only @@ -361,7 +393,7 @@ } else { lsp = (P)findProvider(bundleLocale); if (lsp != null) { - providersObj = getter.getObject(lsp, requested, key, params); + providersObj = getter.getObject(lsp, locale, key, params); if (providersObj != null) { return providersObj; } @@ -399,6 +431,8 @@ for (LocaleServiceProvider lsp : providers) { Locale[] locales = lsp.getAvailableLocales(); for (Locale available: locales) { + // normalize + available = getLookupLocale(available); if (locale.equals(available)) { LocaleServiceProvider providerInCache = providersCache.put(locale, lsp); @@ -414,66 +448,51 @@ } /** - * Returns the provider's locale that is the most appropriate - * within the range - * - * @param start the given locale that is used as the starting one - * @param end the given locale that is used as the end one (exclusive), - * or null if it reaching any of the JRE supported locale should - * terminate the look up. - * @return the most specific locale within the range, or null - * if no provider locale found in that range. + * Returns a list of candidate locales for service look up. + * @param locale the input locale + * @return the list of candiate locales for the given locale */ - private Locale findProviderLocale(Locale start, Locale end) { - Set<Locale> provLoc = getProviderLocales(); - Locale current = start; - - while (current != null) { - if (end != null) { - if (current.equals(end)) { - current = null; - break; - } - } else { - if (isJRESupported(current)) { - current = null; - break; - } - } - - if (provLoc.contains(current)) { - break; - } - - current = getParentLocale(current); - } - - return current; + private static List<Locale> getLookupLocales(Locale locale) { + // Note: We currently use the default implementation of + // ResourceBundle.Control.getCandidateLocales. The result + // returned by getCandidateLocales are already normalized + // (no extensions) for service look up. + List<Locale> lookupLocales = new Control(){}.getCandidateLocales("", locale); + return lookupLocales; } /** - * Returns the parent locale. + * Returns an instance of Locale used for service look up. + * The result Locale has no extensions except for ja_JP_JP + * and th_TH_TH * * @param locale the locale - * @return the parent locale + * @return the locale used for service look up */ - private static Locale getParentLocale(Locale locale) { - String variant = locale.getVariant(); - if (variant != "") { - int underscoreIndex = variant.lastIndexOf('_'); - if (underscoreIndex != (-1)) { - return new Locale(locale.getLanguage(), locale.getCountry(), - variant.substring(0, underscoreIndex)); - } else { - return new Locale(locale.getLanguage(), locale.getCountry()); + private static Locale getLookupLocale(Locale locale) { + Locale lookupLocale = locale; + Set<Character> extensions = locale.getExtensionKeys(); + if (!extensions.isEmpty() + && !locale.equals(locale_ja_JP_JP) + && !locale.equals(locale_th_TH_TH)) { + // remove extensions + Builder locbld = new Builder(); + try { + locbld.setLocale(locale); + locbld.clearExtensions(); + lookupLocale = locbld.build(); + } catch (IllformedLocaleException e) { + // A Locale with non-empty extensions + // should have well-formed fields except + // for ja_JP_JP and th_TH_TH. Therefore, + // it should never enter in this catch clause. + config("A locale(" + locale + ") has non-empty extensions, but has illformed fields."); + + // Fallback - script field will be lost. + lookupLocale = new Locale(locale.getLanguage(), locale.getCountry(), locale.getVariant()); } - } else if (locale.getCountry() != "") { - return new Locale(locale.getLanguage()); - } else if (locale.getLanguage() != "") { - return Locale.ROOT; - } else { - return null; } + return lookupLocale; } /**
--- a/src/share/classes/sun/util/calendar/ZoneInfoFile.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/sun/util/calendar/ZoneInfoFile.java Thu Sep 16 11:17:32 2010 -0700 @@ -30,6 +30,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.lang.ref.SoftReference; +import java.nio.file.FileSystems; import java.security.AccessController; import java.security.PrivilegedAction; import java.security.PrivilegedActionException; @@ -472,17 +473,18 @@ private static Map<String, ZoneInfo> zoneInfoObjects = null; - private static final String ziDir; - static { - String zi = (String) AccessController.doPrivileged( - new sun.security.action.GetPropertyAction("java.home")) - + File.separator + "lib" + File.separator + "zi"; - try { - zi = new File(zi).getCanonicalPath(); - } catch (Exception e) { - } - ziDir = zi; - } + private static final String ziDir = AccessController.doPrivileged( + new PrivilegedAction<String>() { + public String run() { + String zi = System.getProperty("java.home") + + File.separator + "lib" + File.separator + "zi"; + try { + zi = FileSystems.getDefault().getPath(zi).toRealPath(true).toString(); + } catch(Exception e) { + } + return zi; + } + }); /** * Converts the given time zone ID to a platform dependent path
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/util/locale/AsciiUtil.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + ******************************************************************************* + * Copyright (C) 2009, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + */ +package sun.util.locale; + +public final class AsciiUtil { + public static boolean caseIgnoreMatch(String s1, String s2) { + if (s1 == s2) { + return true; + } + int len = s1.length(); + if (len != s2.length()) { + return false; + } + int i = 0; + while (i < len) { + char c1 = s1.charAt(i); + char c2 = s2.charAt(i); + if (c1 != c2 && toLower(c1) != toLower(c2)) { + break; + } + i++; + } + return (i == len); + } + + public static int caseIgnoreCompare(String s1, String s2) { + if (s1 == s2) { + return 0; + } + return AsciiUtil.toLowerString(s1).compareTo(AsciiUtil.toLowerString(s2)); + } + + + public static char toUpper(char c) { + if (c >= 'a' && c <= 'z') { + c -= 0x20; + } + return c; + } + + public static char toLower(char c) { + if (c >= 'A' && c <= 'Z') { + c += 0x20; + } + return c; + } + + public static String toLowerString(String s) { + int idx = 0; + for (; idx < s.length(); idx++) { + char c = s.charAt(idx); + if (c >= 'A' && c <= 'Z') { + break; + } + } + if (idx == s.length()) { + return s; + } + StringBuilder buf = new StringBuilder(s.substring(0, idx)); + for (; idx < s.length(); idx++) { + buf.append(toLower(s.charAt(idx))); + } + return buf.toString(); + } + + public static String toUpperString(String s) { + int idx = 0; + for (; idx < s.length(); idx++) { + char c = s.charAt(idx); + if (c >= 'a' && c <= 'z') { + break; + } + } + if (idx == s.length()) { + return s; + } + StringBuilder buf = new StringBuilder(s.substring(0, idx)); + for (; idx < s.length(); idx++) { + buf.append(toUpper(s.charAt(idx))); + } + return buf.toString(); + } + + public static String toTitleString(String s) { + if (s.length() == 0) { + return s; + } + int idx = 0; + char c = s.charAt(idx); + if (!(c >= 'a' && c <= 'z')) { + for (idx = 1; idx < s.length(); idx++) { + if (c >= 'A' && c <= 'Z') { + break; + } + } + } + if (idx == s.length()) { + return s; + } + StringBuilder buf = new StringBuilder(s.substring(0, idx)); + if (idx == 0) { + buf.append(toUpper(s.charAt(idx))); + idx++; + } + for (; idx < s.length(); idx++) { + buf.append(toLower(s.charAt(idx))); + } + return buf.toString(); + } + + public static boolean isAlpha(char c) { + return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); + } + + public static boolean isAlphaString(String s) { + boolean b = true; + for (int i = 0; i < s.length(); i++) { + if (!isAlpha(s.charAt(i))) { + b = false; + break; + } + } + return b; + } + + public static boolean isNumeric(char c) { + return (c >= '0' && c <= '9'); + } + + public static boolean isNumericString(String s) { + boolean b = true; + for (int i = 0; i < s.length(); i++) { + if (!isNumeric(s.charAt(i))) { + b = false; + break; + } + } + return b; + } + + public static boolean isAlphaNumeric(char c) { + return isAlpha(c) || isNumeric(c); + } + + public static boolean isAlphaNumericString(String s) { + boolean b = true; + for (int i = 0; i < s.length(); i++) { + if (!isAlphaNumeric(s.charAt(i))) { + b = false; + break; + } + } + return b; + } + + public static class CaseInsensitiveKey { + private String _key; + private int _hash; + + public CaseInsensitiveKey(String key) { + _key = key; + _hash = AsciiUtil.toLowerString(key).hashCode(); + } + + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o instanceof CaseInsensitiveKey) { + return AsciiUtil.caseIgnoreMatch(_key, ((CaseInsensitiveKey)o)._key); + } + return false; + } + + public int hashCode() { + return _hash; + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/util/locale/BaseLocale.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + ******************************************************************************* + * Copyright (C) 2009-2010, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + */ + +package sun.util.locale; + + +public final class BaseLocale { + + public static final String SEP = "_"; + + private static final Cache CACHE = new Cache(); + public static final BaseLocale ROOT = BaseLocale.getInstance("", "", "", ""); + + private String _language = ""; + private String _script = ""; + private String _region = ""; + private String _variant = ""; + + private transient volatile int _hash = 0; + + private BaseLocale(String language, String script, String region, String variant) { + if (language != null) { + _language = AsciiUtil.toLowerString(language).intern(); + } + if (script != null) { + _script = AsciiUtil.toTitleString(script).intern(); + } + if (region != null) { + _region = AsciiUtil.toUpperString(region).intern(); + } + if (variant != null) { + _variant = variant.intern(); + } + } + + public static BaseLocale getInstance(String language, String script, String region, String variant) { + // JDK uses deprecated ISO639.1 language codes for he, yi and id + if (AsciiUtil.caseIgnoreMatch(language, "he")) { + language = "iw"; + } else if (AsciiUtil.caseIgnoreMatch(language, "yi")) { + language = "ji"; + } else if (AsciiUtil.caseIgnoreMatch(language, "id")) { + language = "in"; + } + + Key key = new Key(language, script, region, variant); + BaseLocale baseLocale = CACHE.get(key); + return baseLocale; + } + + public String getLanguage() { + return _language; + } + + public String getScript() { + return _script; + } + + public String getRegion() { + return _region; + } + + public String getVariant() { + return _variant; + } + + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof BaseLocale)) { + return false; + } + BaseLocale other = (BaseLocale)obj; + return hashCode() == other.hashCode() + && _language.equals(other._language) + && _script.equals(other._script) + && _region.equals(other._region) + && _variant.equals(other._variant); + } + + public String toString() { + StringBuilder buf = new StringBuilder(); + if (_language.length() > 0) { + buf.append("language="); + buf.append(_language); + } + if (_script.length() > 0) { + if (buf.length() > 0) { + buf.append(", "); + } + buf.append("script="); + buf.append(_script); + } + if (_region.length() > 0) { + if (buf.length() > 0) { + buf.append(", "); + } + buf.append("region="); + buf.append(_region); + } + if (_variant.length() > 0) { + if (buf.length() > 0) { + buf.append(", "); + } + buf.append("variant="); + buf.append(_variant); + } + return buf.toString(); + } + + public int hashCode() { + int h = _hash; + if (h == 0) { + // Generating a hash value from language, script, region and variant + for (int i = 0; i < _language.length(); i++) { + h = 31*h + _language.charAt(i); + } + for (int i = 0; i < _script.length(); i++) { + h = 31*h + _script.charAt(i); + } + for (int i = 0; i < _region.length(); i++) { + h = 31*h + _region.charAt(i); + } + for (int i = 0; i < _variant.length(); i++) { + h = 31*h + _variant.charAt(i); + } + _hash = h; + } + return h; + } + + private static class Key implements Comparable<Key> { + private String _lang = ""; + private String _scrt = ""; + private String _regn = ""; + private String _vart = ""; + + private volatile int _hash; // Default to 0 + + public Key(String language, String script, String region, String variant) { + if (language != null) { + _lang = language; + } + if (script != null) { + _scrt = script; + } + if (region != null) { + _regn = region; + } + if (variant != null) { + _vart = variant; + } + } + + public boolean equals(Object obj) { + return (this == obj) || + (obj instanceof Key) + && AsciiUtil.caseIgnoreMatch(((Key)obj)._lang, this._lang) + && AsciiUtil.caseIgnoreMatch(((Key)obj)._scrt, this._scrt) + && AsciiUtil.caseIgnoreMatch(((Key)obj)._regn, this._regn) + && ((Key)obj)._vart.equals(_vart); // variant is case sensitive in JDK! + } + + public int compareTo(Key other) { + int res = AsciiUtil.caseIgnoreCompare(this._lang, other._lang); + if (res == 0) { + res = AsciiUtil.caseIgnoreCompare(this._scrt, other._scrt); + if (res == 0) { + res = AsciiUtil.caseIgnoreCompare(this._regn, other._regn); + if (res == 0) { + res = this._vart.compareTo(other._vart); + } + } + } + return res; + } + + public int hashCode() { + int h = _hash; + if (h == 0) { + // Generating a hash value from language, script, region and variant + for (int i = 0; i < _lang.length(); i++) { + h = 31*h + AsciiUtil.toLower(_lang.charAt(i)); + } + for (int i = 0; i < _scrt.length(); i++) { + h = 31*h + AsciiUtil.toLower(_scrt.charAt(i)); + } + for (int i = 0; i < _regn.length(); i++) { + h = 31*h + AsciiUtil.toLower(_regn.charAt(i)); + } + for (int i = 0; i < _vart.length(); i++) { + h = 31*h + _vart.charAt(i); + } + _hash = h; + } + return h; + } + + public static Key normalize(Key key) { + String lang = AsciiUtil.toLowerString(key._lang).intern(); + String scrt = AsciiUtil.toTitleString(key._scrt).intern(); + String regn = AsciiUtil.toUpperString(key._regn).intern(); + String vart = key._vart.intern(); // preserve upper/lower cases + + return new Key(lang, scrt, regn, vart); + } + } + + private static class Cache extends LocaleObjectCache<Key, BaseLocale> { + + public Cache() { + } + + protected Key normalizeKey(Key key) { + return Key.normalize(key); + } + + protected BaseLocale createObject(Key key) { + return new BaseLocale(key._lang, key._scrt, key._regn, key._vart); + } + + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/util/locale/Extension.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + ******************************************************************************* + * Copyright (C) 2009-2010, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + */ +package sun.util.locale; + + +public class Extension { + private char _key; + protected String _value; + + protected Extension(char key) { + _key = key; + } + + Extension(char key, String value) { + _key = key; + _value = value; + } + + public char getKey() { + return _key; + } + + public String getValue() { + return _value; + } + + public String getID() { + return _key + LanguageTag.SEP + _value; + } + + public String toString() { + return getID(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/util/locale/InternalLocaleBuilder.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,705 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + ******************************************************************************* + * Copyright (C) 2009-2010, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + */ +package sun.util.locale; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public final class InternalLocaleBuilder { + + private String _language = ""; + private String _script = ""; + private String _region = ""; + private String _variant = ""; + + private static final CaseInsensitiveChar PRIVUSE_KEY = new CaseInsensitiveChar(LanguageTag.PRIVATEUSE.charAt(0)); + + private HashMap<CaseInsensitiveChar, String> _extensions; + private HashSet<CaseInsensitiveString> _uattributes; + private HashMap<CaseInsensitiveString, String> _ukeywords; + + + public InternalLocaleBuilder() { + } + + public InternalLocaleBuilder setLanguage(String language) throws LocaleSyntaxException { + if (language == null || language.length() == 0) { + _language = ""; + } else { + if (!LanguageTag.isLanguage(language)) { + throw new LocaleSyntaxException("Ill-formed language: " + language, 0); + } + _language = language; + } + return this; + } + + public InternalLocaleBuilder setScript(String script) throws LocaleSyntaxException { + if (script == null || script.length() == 0) { + _script = ""; + } else { + if (!LanguageTag.isScript(script)) { + throw new LocaleSyntaxException("Ill-formed script: " + script, 0); + } + _script = script; + } + return this; + } + + public InternalLocaleBuilder setRegion(String region) throws LocaleSyntaxException { + if (region == null || region.length() == 0) { + _region = ""; + } else { + if (!LanguageTag.isRegion(region)) { + throw new LocaleSyntaxException("Ill-formed region: " + region, 0); + } + _region = region; + } + return this; + } + + public InternalLocaleBuilder setVariant(String variant) throws LocaleSyntaxException { + if (variant == null || variant.length() == 0) { + _variant = ""; + } else { + // normalize separators to "_" + String var = variant.replaceAll(LanguageTag.SEP, BaseLocale.SEP); + int errIdx = checkVariants(var, BaseLocale.SEP); + if (errIdx != -1) { + throw new LocaleSyntaxException("Ill-formed variant: " + variant, errIdx); + } + _variant = var; + } + return this; + } + + public InternalLocaleBuilder addUnicodeLocaleAttribute(String attribute) throws LocaleSyntaxException { + if (!UnicodeLocaleExtension.isAttribute(attribute)) { + throw new LocaleSyntaxException("Ill-formed Unicode locale attribute: " + attribute); + } + // Use case insensitive string to prevent duplication + if (_uattributes == null) { + _uattributes = new HashSet<CaseInsensitiveString>(4); + } + _uattributes.add(new CaseInsensitiveString(attribute)); + return this; + } + + public InternalLocaleBuilder removeUnicodeLocaleAttribute(String attribute) throws LocaleSyntaxException { + if (attribute == null || !UnicodeLocaleExtension.isAttribute(attribute)) { + throw new LocaleSyntaxException("Ill-formed Unicode locale attribute: " + attribute); + } + if (_uattributes != null) { + _uattributes.remove(new CaseInsensitiveString(attribute)); + } + return this; + } + + public InternalLocaleBuilder setUnicodeLocaleKeyword(String key, String type) throws LocaleSyntaxException { + if (!UnicodeLocaleExtension.isKey(key)) { + throw new LocaleSyntaxException("Ill-formed Unicode locale keyword key: " + key); + } + + CaseInsensitiveString cikey = new CaseInsensitiveString(key); + if (type == null) { + if (_ukeywords != null) { + // null type is used for remove the key + _ukeywords.remove(cikey); + } + } else { + if (type.length() != 0) { + // normalize separator to "-" + String tp = type.replaceAll(BaseLocale.SEP, LanguageTag.SEP); + // validate + StringTokenIterator itr = new StringTokenIterator(tp, LanguageTag.SEP); + while (!itr.isDone()) { + String s = itr.current(); + if (!UnicodeLocaleExtension.isTypeSubtag(s)) { + throw new LocaleSyntaxException("Ill-formed Unicode locale keyword type: " + type, itr.currentStart()); + } + itr.next(); + } + } + if (_ukeywords == null) { + _ukeywords = new HashMap<CaseInsensitiveString, String>(4); + } + _ukeywords.put(cikey, type); + } + return this; + } + + public InternalLocaleBuilder setExtension(char singleton, String value) throws LocaleSyntaxException { + // validate key + boolean isBcpPrivateuse = LanguageTag.isPrivateusePrefixChar(singleton); + if (!isBcpPrivateuse && !LanguageTag.isExtensionSingletonChar(singleton)) { + throw new LocaleSyntaxException("Ill-formed extension key: " + singleton); + } + + boolean remove = (value == null || value.length() == 0); + CaseInsensitiveChar key = new CaseInsensitiveChar(singleton); + + if (remove) { + if (UnicodeLocaleExtension.isSingletonChar(key.value())) { + // clear entire Unicode locale extension + if (_uattributes != null) { + _uattributes.clear(); + } + if (_ukeywords != null) { + _ukeywords.clear(); + } + } else { + if (_extensions != null && _extensions.containsKey(key)) { + _extensions.remove(key); + } + } + } else { + // validate value + String val = value.replaceAll(BaseLocale.SEP, LanguageTag.SEP); + StringTokenIterator itr = new StringTokenIterator(val, LanguageTag.SEP); + while (!itr.isDone()) { + String s = itr.current(); + boolean validSubtag; + if (isBcpPrivateuse) { + validSubtag = LanguageTag.isPrivateuseSubtag(s); + } else { + validSubtag = LanguageTag.isExtensionSubtag(s); + } + if (!validSubtag) { + throw new LocaleSyntaxException("Ill-formed extension value: " + s, itr.currentStart()); + } + itr.next(); + } + + if (UnicodeLocaleExtension.isSingletonChar(key.value())) { + setUnicodeLocaleExtension(val); + } else { + if (_extensions == null) { + _extensions = new HashMap<CaseInsensitiveChar, String>(4); + } + _extensions.put(key, val); + } + } + return this; + } + + /* + * Set extension/private subtags in a single string representation + */ + public InternalLocaleBuilder setExtensions(String subtags) throws LocaleSyntaxException { + if (subtags == null || subtags.length() == 0) { + clearExtensions(); + return this; + } + subtags = subtags.replaceAll(BaseLocale.SEP, LanguageTag.SEP); + StringTokenIterator itr = new StringTokenIterator(subtags, LanguageTag.SEP); + + List<String> extensions = null; + String privateuse = null; + + int parsed = 0; + int start; + + // Make a list of extension subtags + while (!itr.isDone()) { + String s = itr.current(); + if (LanguageTag.isExtensionSingleton(s)) { + start = itr.currentStart(); + String singleton = s; + StringBuilder sb = new StringBuilder(singleton); + + itr.next(); + while (!itr.isDone()) { + s = itr.current(); + if (LanguageTag.isExtensionSubtag(s)) { + sb.append(LanguageTag.SEP).append(s); + parsed = itr.currentEnd(); + } else { + break; + } + itr.next(); + } + + if (parsed < start) { + throw new LocaleSyntaxException("Incomplete extension '" + singleton + "'", start); + } + + if (extensions == null) { + extensions = new ArrayList<String>(4); + } + extensions.add(sb.toString()); + } else { + break; + } + } + if (!itr.isDone()) { + String s = itr.current(); + if (LanguageTag.isPrivateusePrefix(s)) { + start = itr.currentStart(); + StringBuilder sb = new StringBuilder(s); + + itr.next(); + while (!itr.isDone()) { + s = itr.current(); + if (!LanguageTag.isPrivateuseSubtag(s)) { + break; + } + sb.append(LanguageTag.SEP).append(s); + parsed = itr.currentEnd(); + + itr.next(); + } + if (parsed <= start) { + throw new LocaleSyntaxException("Incomplete privateuse:" + subtags.substring(start), start); + } else { + privateuse = sb.toString(); + } + } + } + + if (!itr.isDone()) { + throw new LocaleSyntaxException("Ill-formed extension subtags:" + subtags.substring(itr.currentStart()), itr.currentStart()); + } + + return setExtensions(extensions, privateuse); + } + + /* + * Set a list of BCP47 extensions and private use subtags + * BCP47 extensions are already validated and well-formed, but may contain duplicates + */ + private InternalLocaleBuilder setExtensions(List<String> bcpExtensions, String privateuse) { + clearExtensions(); + + if (bcpExtensions != null && bcpExtensions.size() > 0) { + HashSet<CaseInsensitiveChar> processedExntensions = new HashSet<CaseInsensitiveChar>(bcpExtensions.size()); + for (String bcpExt : bcpExtensions) { + CaseInsensitiveChar key = new CaseInsensitiveChar(bcpExt.charAt(0)); + // ignore duplicates + if (!processedExntensions.contains(key)) { + // each extension string contains singleton, e.g. "a-abc-def" + if (UnicodeLocaleExtension.isSingletonChar(key.value())) { + setUnicodeLocaleExtension(bcpExt.substring(2)); + } else { + if (_extensions == null) { + _extensions = new HashMap<CaseInsensitiveChar, String>(4); + } + _extensions.put(key, bcpExt.substring(2)); + } + } + } + } + if (privateuse != null && privateuse.length() > 0) { + // privateuse string contains prefix, e.g. "x-abc-def" + if (_extensions == null) { + _extensions = new HashMap<CaseInsensitiveChar, String>(1); + } + _extensions.put(new CaseInsensitiveChar(privateuse.charAt(0)), privateuse.substring(2)); + } + + return this; + } + + /* + * Reset Builder's internal state with the given language tag + */ + public InternalLocaleBuilder setLanguageTag(LanguageTag langtag) { + clear(); + if (langtag.getExtlangs().size() > 0) { + _language = langtag.getExtlangs().get(0); + } else { + String language = langtag.getLanguage(); + if (!language.equals(LanguageTag.UNDETERMINED)) { + _language = language; + } + } + _script = langtag.getScript(); + _region = langtag.getRegion(); + + List<String> bcpVariants = langtag.getVariants(); + if (bcpVariants.size() > 0) { + StringBuilder var = new StringBuilder(bcpVariants.get(0)); + for (int i = 1; i < bcpVariants.size(); i++) { + var.append(BaseLocale.SEP).append(bcpVariants.get(i)); + } + _variant = var.toString(); + } + + setExtensions(langtag.getExtensions(), langtag.getPrivateuse()); + + return this; + } + + public InternalLocaleBuilder setLocale(BaseLocale base, LocaleExtensions extensions) throws LocaleSyntaxException { + String language = base.getLanguage(); + String script = base.getScript(); + String region = base.getRegion(); + String variant = base.getVariant(); + + // Special backward compatibility support + + // Exception 1 - ja_JP_JP + if (language.equals("ja") && region.equals("JP") && variant.equals("JP")) { + // When locale ja_JP_JP is created, ca-japanese is always there. + // The builder ignores the variant "JP" + assert("japanese".equals(extensions.getUnicodeLocaleType("ca"))); + variant = ""; + } + // Exception 2 - th_TH_TH + else if (language.equals("th") && region.equals("TH") && variant.equals("TH")) { + // When locale th_TH_TH is created, nu-thai is always there. + // The builder ignores the variant "TH" + assert("thai".equals(extensions.getUnicodeLocaleType("nu"))); + variant = ""; + } + // Exception 3 - no_NO_NY + else if (language.equals("no") && region.equals("NO") && variant.equals("NY")) { + // no_NO_NY is a valid locale and used by Java 6 or older versions. + // The build ignores the variant "NY" and change the language to "nn". + language = "nn"; + variant = ""; + } + + // Validate base locale fields before updating internal state. + // LocaleExtensions always store validated/canonicalized values, + // so no checks are necessary. + if (language.length() > 0 && !LanguageTag.isLanguage(language)) { + throw new LocaleSyntaxException("Ill-formed language: " + language); + } + + if (script.length() > 0 && !LanguageTag.isScript(script)) { + throw new LocaleSyntaxException("Ill-formed script: " + script); + } + + if (region.length() > 0 && !LanguageTag.isRegion(region)) { + throw new LocaleSyntaxException("Ill-formed region: " + region); + } + + if (variant.length() > 0) { + int errIdx = checkVariants(variant, BaseLocale.SEP); + if (errIdx != -1) { + throw new LocaleSyntaxException("Ill-formed variant: " + variant, errIdx); + } + } + + // The input locale is validated at this point. + // Now, updating builder's internal fields. + _language = language; + _script = script; + _region = region; + _variant = variant; + clearExtensions(); + + Set<Character> extKeys = (extensions == null) ? null : extensions.getKeys(); + if (extKeys != null) { + // map extensions back to builder's internal format + for (Character key : extKeys) { + Extension e = extensions.getExtension(key); + if (e instanceof UnicodeLocaleExtension) { + UnicodeLocaleExtension ue = (UnicodeLocaleExtension)e; + for (String uatr : ue.getUnicodeLocaleAttributes()) { + if (_uattributes == null) { + _uattributes = new HashSet<CaseInsensitiveString>(4); + } + _uattributes.add(new CaseInsensitiveString(uatr)); + } + for (String ukey : ue.getUnicodeLocaleKeys()) { + if (_ukeywords == null) { + _ukeywords = new HashMap<CaseInsensitiveString, String>(4); + } + _ukeywords.put(new CaseInsensitiveString(ukey), ue.getUnicodeLocaleType(ukey)); + } + } else { + if (_extensions == null) { + _extensions = new HashMap<CaseInsensitiveChar, String>(4); + } + _extensions.put(new CaseInsensitiveChar(key.charValue()), e.getValue()); + } + } + } + return this; + } + + public InternalLocaleBuilder clear() { + _language = ""; + _script = ""; + _region = ""; + _variant = ""; + clearExtensions(); + return this; + } + + public InternalLocaleBuilder clearExtensions() { + if (_extensions != null) { + _extensions.clear(); + } + if (_uattributes != null) { + _uattributes.clear(); + } + if (_ukeywords != null) { + _ukeywords.clear(); + } + return this; + } + + public BaseLocale getBaseLocale() { + String language = _language; + String script = _script; + String region = _region; + String variant = _variant; + + // Special private use subtag sequence identified by "lvariant" will be + // interpreted as Java variant. + if (_extensions != null) { + String privuse = _extensions.get(PRIVUSE_KEY); + if (privuse != null) { + StringTokenIterator itr = new StringTokenIterator(privuse, LanguageTag.SEP); + boolean sawPrefix = false; + int privVarStart = -1; + while (!itr.isDone()) { + if (sawPrefix) { + privVarStart = itr.currentStart(); + break; + } + if (AsciiUtil.caseIgnoreMatch(itr.current(), LanguageTag.PRIVUSE_VARIANT_PREFIX)) { + sawPrefix = true; + } + itr.next(); + } + if (privVarStart != -1) { + StringBuilder sb = new StringBuilder(variant); + if (sb.length() != 0) { + sb.append(BaseLocale.SEP); + } + sb.append(privuse.substring(privVarStart).replaceAll(LanguageTag.SEP, BaseLocale.SEP)); + variant = sb.toString(); + } + } + } + + return BaseLocale.getInstance(language, script, region, variant); + } + + public LocaleExtensions getLocaleExtensions() { + if ((_extensions == null || _extensions.size() == 0) + && (_uattributes == null || _uattributes.size() == 0) + && (_ukeywords == null || _ukeywords.size() == 0)) { + return LocaleExtensions.EMPTY_EXTENSIONS; + } + + return new LocaleExtensions(_extensions, _uattributes, _ukeywords); + } + + /* + * Remove special private use subtag sequence identified by "lvariant" + * and return the rest. Only used by LocaleExtensions + */ + static String removePrivateuseVariant(String privuseVal) { + StringTokenIterator itr = new StringTokenIterator(privuseVal, LanguageTag.SEP); + + // Note: privateuse value "abc-lvariant" is unchanged + // because no subtags after "lvariant". + + int prefixStart = -1; + boolean sawPrivuseVar = false; + while (!itr.isDone()) { + if (prefixStart != -1) { + // Note: privateuse value "abc-lvariant" is unchanged + // because no subtags after "lvariant". + sawPrivuseVar = true; + break; + } + if (AsciiUtil.caseIgnoreMatch(itr.current(), LanguageTag.PRIVUSE_VARIANT_PREFIX)) { + prefixStart = itr.currentStart(); + } + itr.next(); + } + if (!sawPrivuseVar) { + return privuseVal; + } + + assert(prefixStart == 0 || prefixStart > 1); + return (prefixStart == 0) ? null : privuseVal.substring(0, prefixStart -1); + } + + /* + * Check if the given variant subtags separated by the given + * separator(s) are valid + */ + private int checkVariants(String variants, String sep) { + StringTokenIterator itr = new StringTokenIterator(variants, sep); + while (!itr.isDone()) { + String s = itr.current(); + if (!LanguageTag.isVariant(s)) { + return itr.currentStart(); + } + itr.next(); + } + return -1; + } + + /* + * Private methods parsing Unicode Locale Extension subtags. + * Duplicated attributes/keywords will be ignored. + * The input must be a valid extension subtags (excluding singleton). + */ + private void setUnicodeLocaleExtension(String subtags) { + // wipe out existing attributes/keywords + if (_uattributes != null) { + _uattributes.clear(); + } + if (_ukeywords != null) { + _ukeywords.clear(); + } + + StringTokenIterator itr = new StringTokenIterator(subtags, LanguageTag.SEP); + + // parse attributes + while (!itr.isDone()) { + if (!UnicodeLocaleExtension.isAttribute(itr.current())) { + break; + } + if (_uattributes == null) { + _uattributes = new HashSet<CaseInsensitiveString>(4); + } + _uattributes.add(new CaseInsensitiveString(itr.current())); + itr.next(); + } + + // parse keywords + CaseInsensitiveString key = null; + String type; + int typeStart = -1; + int typeEnd = -1; + while (!itr.isDone()) { + if (key != null) { + if (UnicodeLocaleExtension.isKey(itr.current())) { + // next keyword - emit previous one + assert(typeStart == -1 || typeEnd != -1); + type = (typeStart == -1) ? "" : subtags.substring(typeStart, typeEnd); + if (_ukeywords == null) { + _ukeywords = new HashMap<CaseInsensitiveString, String>(4); + } + _ukeywords.put(key, type); + + // reset keyword info + CaseInsensitiveString tmpKey = new CaseInsensitiveString(itr.current()); + key = _ukeywords.containsKey(tmpKey) ? null : tmpKey; + typeStart = typeEnd = -1; + } else { + if (typeStart == -1) { + typeStart = itr.currentStart(); + } + typeEnd = itr.currentEnd(); + } + } else if (UnicodeLocaleExtension.isKey(itr.current())) { + // 1. first keyword or + // 2. next keyword, but previous one was duplicate + key = new CaseInsensitiveString(itr.current()); + if (_ukeywords != null && _ukeywords.containsKey(key)) { + // duplicate + key = null; + } + } + + if (!itr.hasNext()) { + if (key != null) { + // last keyword + assert(typeStart == -1 || typeEnd != -1); + type = (typeStart == -1) ? "" : subtags.substring(typeStart, typeEnd); + if (_ukeywords == null) { + _ukeywords = new HashMap<CaseInsensitiveString, String>(4); + } + _ukeywords.put(key, type); + } + break; + } + + itr.next(); + } + } + + static class CaseInsensitiveString { + private String _s; + + CaseInsensitiveString(String s) { + _s = s; + } + + public String value() { + return _s; + } + + public int hashCode() { + return AsciiUtil.toLowerString(_s).hashCode(); + } + + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof CaseInsensitiveString)) { + return false; + } + return AsciiUtil.caseIgnoreMatch(_s, ((CaseInsensitiveString)obj).value()); + } + } + + static class CaseInsensitiveChar { + private char _c; + + CaseInsensitiveChar(char c) { + _c = c; + } + + public char value() { + return _c; + } + + public int hashCode() { + return AsciiUtil.toLower(_c); + } + + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof CaseInsensitiveChar)) { + return false; + } + return _c == AsciiUtil.toLower(((CaseInsensitiveChar)obj).value()); + } + + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/util/locale/LanguageTag.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,726 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + ******************************************************************************* + * Copyright (C) 2010, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + */ +package sun.util.locale; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class LanguageTag { + // + // static fields + // + public static final String SEP = "-"; + public static final String PRIVATEUSE = "x"; + public static String UNDETERMINED = "und"; + public static final String PRIVUSE_VARIANT_PREFIX = "lvariant"; + + // + // Language subtag fields + // + private String _language = ""; // language subtag + private String _script = ""; // script subtag + private String _region = ""; // region subtag + private String _privateuse = ""; // privateuse + + private List<String> _extlangs = Collections.emptyList(); // extlang subtags + private List<String> _variants = Collections.emptyList(); // variant subtags + private List<String> _extensions = Collections.emptyList(); // extensions + + // Map contains grandfathered tags and its preferred mappings from + // http://www.ietf.org/rfc/rfc5646.txt + private static final Map<AsciiUtil.CaseInsensitiveKey, String[]> GRANDFATHERED = + new HashMap<AsciiUtil.CaseInsensitiveKey, String[]>(); + + static { + // grandfathered = irregular ; non-redundant tags registered + // / regular ; during the RFC 3066 era + // + // irregular = "en-GB-oed" ; irregular tags do not match + // / "i-ami" ; the 'langtag' production and + // / "i-bnn" ; would not otherwise be + // / "i-default" ; considered 'well-formed' + // / "i-enochian" ; These tags are all valid, + // / "i-hak" ; but most are deprecated + // / "i-klingon" ; in favor of more modern + // / "i-lux" ; subtags or subtag + // / "i-mingo" ; combination + // / "i-navajo" + // / "i-pwn" + // / "i-tao" + // / "i-tay" + // / "i-tsu" + // / "sgn-BE-FR" + // / "sgn-BE-NL" + // / "sgn-CH-DE" + // + // regular = "art-lojban" ; these tags match the 'langtag' + // / "cel-gaulish" ; production, but their subtags + // / "no-bok" ; are not extended language + // / "no-nyn" ; or variant subtags: their meaning + // / "zh-guoyu" ; is defined by their registration + // / "zh-hakka" ; and all of these are deprecated + // / "zh-min" ; in favor of a more modern + // / "zh-min-nan" ; subtag or sequence of subtags + // / "zh-xiang" + + final String[][] entries = { + //{"tag", "preferred"}, + {"art-lojban", "jbo"}, + {"cel-gaulish", "xtg-x-cel-gaulish"}, // fallback + {"en-GB-oed", "en-GB-x-oed"}, // fallback + {"i-ami", "ami"}, + {"i-bnn", "bnn"}, + {"i-default", "en-x-i-default"}, // fallback + {"i-enochian", "und-x-i-enochian"}, // fallback + {"i-hak", "hak"}, + {"i-klingon", "tlh"}, + {"i-lux", "lb"}, + {"i-mingo", "see-x-i-mingo"}, // fallback + {"i-navajo", "nv"}, + {"i-pwn", "pwn"}, + {"i-tao", "tao"}, + {"i-tay", "tay"}, + {"i-tsu", "tsu"}, + {"no-bok", "nb"}, + {"no-nyn", "nn"}, + {"sgn-BE-FR", "sfb"}, + {"sgn-BE-NL", "vgt"}, + {"sgn-CH-DE", "sgg"}, + {"zh-guoyu", "cmn"}, + {"zh-hakka", "hak"}, + {"zh-min", "nan-x-zh-min"}, // fallback + {"zh-min-nan", "nan"}, + {"zh-xiang", "hsn"}, + }; + for (String[] e : entries) { + GRANDFATHERED.put(new AsciiUtil.CaseInsensitiveKey(e[0]), e); + } + } + + private LanguageTag() { + } + + /* + * BNF in RFC5464 + * + * Language-Tag = langtag ; normal language tags + * / privateuse ; private use tag + * / grandfathered ; grandfathered tags + * + * + * langtag = language + * ["-" script] + * ["-" region] + * *("-" variant) + * *("-" extension) + * ["-" privateuse] + * + * language = 2*3ALPHA ; shortest ISO 639 code + * ["-" extlang] ; sometimes followed by + * ; extended language subtags + * / 4ALPHA ; or reserved for future use + * / 5*8ALPHA ; or registered language subtag + * + * extlang = 3ALPHA ; selected ISO 639 codes + * *2("-" 3ALPHA) ; permanently reserved + * + * script = 4ALPHA ; ISO 15924 code + * + * region = 2ALPHA ; ISO 3166-1 code + * / 3DIGIT ; UN M.49 code + * + * variant = 5*8alphanum ; registered variants + * / (DIGIT 3alphanum) + * + * extension = singleton 1*("-" (2*8alphanum)) + * + * ; Single alphanumerics + * ; "x" reserved for private use + * singleton = DIGIT ; 0 - 9 + * / %x41-57 ; A - W + * / %x59-5A ; Y - Z + * / %x61-77 ; a - w + * / %x79-7A ; y - z + * + * privateuse = "x" 1*("-" (1*8alphanum)) + * + */ + public static LanguageTag parse(String languageTag, ParseStatus sts) { + if (sts == null) { + sts = new ParseStatus(); + } else { + sts.reset(); + } + + StringTokenIterator itr; + + // Check if the tag is grandfathered + String[] gfmap = GRANDFATHERED.get(new AsciiUtil.CaseInsensitiveKey(languageTag)); + if (gfmap != null) { + // use preferred mapping + itr = new StringTokenIterator(gfmap[1], SEP); + } else { + itr = new StringTokenIterator(languageTag, SEP); + } + + LanguageTag tag = new LanguageTag(); + + // langtag must start with either language or privateuse + if (tag.parseLanguage(itr, sts)) { + tag.parseExtlangs(itr, sts); + tag.parseScript(itr, sts); + tag.parseRegion(itr, sts); + tag.parseVariants(itr, sts); + tag.parseExtensions(itr, sts); + } + tag.parsePrivateuse(itr, sts); + + if (!itr.isDone() && !sts.isError()) { + String s = itr.current(); + sts._errorIndex = itr.currentStart(); + if (s.length() == 0) { + sts._errorMsg = "Empty subtag"; + } else { + sts._errorMsg = "Invalid subtag: " + s; + } + } + + return tag; + } + + // + // Language subtag parsers + // + + private boolean parseLanguage(StringTokenIterator itr, ParseStatus sts) { + if (itr.isDone() || sts.isError()) { + return false; + } + + boolean found = false; + + String s = itr.current(); + if (isLanguage(s)) { + found = true; + _language = s; + sts._parseLength = itr.currentEnd(); + itr.next(); + } + + return found; + } + + private boolean parseExtlangs(StringTokenIterator itr, ParseStatus sts) { + if (itr.isDone() || sts.isError()) { + return false; + } + + boolean found = false; + + while (!itr.isDone()) { + String s = itr.current(); + if (!isExtlang(s)) { + break; + } + found = true; + if (_extlangs.isEmpty()) { + _extlangs = new ArrayList<String>(3); + } + _extlangs.add(s); + sts._parseLength = itr.currentEnd(); + itr.next(); + + if (_extlangs.size() == 3) { + // Maximum 3 extlangs + break; + } + } + + return found; + } + + private boolean parseScript(StringTokenIterator itr, ParseStatus sts) { + if (itr.isDone() || sts.isError()) { + return false; + } + + boolean found = false; + + String s = itr.current(); + if (isScript(s)) { + found = true; + _script = s; + sts._parseLength = itr.currentEnd(); + itr.next(); + } + + return found; + } + + private boolean parseRegion(StringTokenIterator itr, ParseStatus sts) { + if (itr.isDone() || sts.isError()) { + return false; + } + + boolean found = false; + + String s = itr.current(); + if (isRegion(s)) { + found = true; + _region = s; + sts._parseLength = itr.currentEnd(); + itr.next(); + } + + return found; + } + + private boolean parseVariants(StringTokenIterator itr, ParseStatus sts) { + if (itr.isDone() || sts.isError()) { + return false; + } + + boolean found = false; + + while (!itr.isDone()) { + String s = itr.current(); + if (!isVariant(s)) { + break; + } + found = true; + if (_variants.isEmpty()) { + _variants = new ArrayList<String>(3); + } + _variants.add(s); + sts._parseLength = itr.currentEnd(); + itr.next(); + } + + return found; + } + + private boolean parseExtensions(StringTokenIterator itr, ParseStatus sts) { + if (itr.isDone() || sts.isError()) { + return false; + } + + boolean found = false; + + while (!itr.isDone()) { + String s = itr.current(); + if (isExtensionSingleton(s)) { + int start = itr.currentStart(); + String singleton = s; + StringBuilder sb = new StringBuilder(singleton); + + itr.next(); + while (!itr.isDone()) { + s = itr.current(); + if (isExtensionSubtag(s)) { + sb.append(SEP).append(s); + sts._parseLength = itr.currentEnd(); + } else { + break; + } + itr.next(); + } + + if (sts._parseLength <= start) { + sts._errorIndex = start; + sts._errorMsg = "Incomplete extension '" + singleton + "'"; + break; + } + + if (_extensions.size() == 0) { + _extensions = new ArrayList<String>(4); + } + _extensions.add(sb.toString()); + found = true; + } else { + break; + } + } + return found; + } + + private boolean parsePrivateuse(StringTokenIterator itr, ParseStatus sts) { + if (itr.isDone() || sts.isError()) { + return false; + } + + boolean found = false; + + String s = itr.current(); + if (isPrivateusePrefix(s)) { + int start = itr.currentStart(); + StringBuilder sb = new StringBuilder(s); + + itr.next(); + while (!itr.isDone()) { + s = itr.current(); + if (!isPrivateuseSubtag(s)) { + break; + } + sb.append(SEP).append(s); + sts._parseLength = itr.currentEnd(); + + itr.next(); + } + + if (sts._parseLength <= start) { + // need at least 1 private subtag + sts._errorIndex = start; + sts._errorMsg = "Incomplete privateuse"; + } else { + _privateuse = sb.toString(); + found = true; + } + } + + return found; + } + + public static LanguageTag parseLocale(BaseLocale baseLocale, LocaleExtensions localeExtensions) { + LanguageTag tag = new LanguageTag(); + + String language = baseLocale.getLanguage(); + String script = baseLocale.getScript(); + String region = baseLocale.getRegion(); + String variant = baseLocale.getVariant(); + + String privuseVar = null; // store ill-formed variant subtags + + if (language.length() == 0 || !isLanguage(language)) { + tag._language = UNDETERMINED; + } else { + // Convert a deprecated language code used by Java to + // a new code + if (language.equals("iw")) { + language = "he"; + } else if (language.equals("ji")) { + language = "yi"; + } else if (language.equals("in")) { + language = "id"; + } + tag._language = language; + } + + if (script.length() > 0 && isScript(script)) { + tag._script = canonicalizeScript(script); + } + + if (region.length() > 0 && isRegion(region)) { + tag._region = canonicalizeRegion(region); + } + + // Special handling for no_NO_NY - use nn_NO for language tag + if (tag._language.equals("no") && tag._region.equals("NO") && variant.equals("NY")) { + tag._language = "nn"; + variant = ""; + } + + if (variant.length() > 0) { + List<String> variants = null; + StringTokenIterator varitr = new StringTokenIterator(variant, BaseLocale.SEP); + while (!varitr.isDone()) { + String var = varitr.current(); + if (!isVariant(var)) { + break; + } + if (variants == null) { + variants = new ArrayList<String>(); + } + variants.add(var); // Do not canonicalize! + varitr.next(); + } + if (variants != null) { + tag._variants = variants; + } + if (!varitr.isDone()) { + // ill-formed variant subtags + StringBuilder buf = new StringBuilder(); + while (!varitr.isDone()) { + String prvv = varitr.current(); + if (!isPrivateuseSubtag(prvv)) { + // cannot use private use subtag - truncated + break; + } + if (buf.length() > 0) { + buf.append(SEP); + } + buf.append(prvv); + varitr.next(); + } + if (buf.length() > 0) { + privuseVar = buf.toString(); + } + } + } + + List<String> extensions = null; + String privateuse = null; + + Set<Character> locextKeys = localeExtensions.getKeys(); + for (Character locextKey : locextKeys) { + Extension ext = localeExtensions.getExtension(locextKey); + if (isPrivateusePrefixChar(locextKey.charValue())) { + privateuse = ext.getValue(); + } else { + if (extensions == null) { + extensions = new ArrayList<String>(); + } + extensions.add(locextKey.toString() + SEP + ext.getValue()); + } + } + + if (extensions != null) { + tag._extensions = extensions; + } + + // append ill-formed variant subtags to private use + if (privuseVar != null) { + if (privateuse == null) { + privateuse = PRIVUSE_VARIANT_PREFIX + SEP + privuseVar; + } else { + privateuse = privateuse + SEP + PRIVUSE_VARIANT_PREFIX + SEP + privuseVar.replace(BaseLocale.SEP, SEP); + } + } + + if (privateuse != null) { + tag._privateuse = privateuse; + } else if (tag._language.length() == 0) { + // use "und" if neither language nor privateuse is available + tag._language = UNDETERMINED; + } + + return tag; + } + + // + // Getter methods for language subtag fields + // + + public String getLanguage() { + return _language; + } + + public List<String> getExtlangs() { + return Collections.unmodifiableList(_extlangs); + } + + public String getScript() { + return _script; + } + + public String getRegion() { + return _region; + } + + public List<String> getVariants() { + return Collections.unmodifiableList(_variants); + } + + public List<String> getExtensions() { + return Collections.unmodifiableList(_extensions); + } + + public String getPrivateuse() { + return _privateuse; + } + + // + // Language subtag syntax checking methods + // + + public static boolean isLanguage(String s) { + // language = 2*3ALPHA ; shortest ISO 639 code + // ["-" extlang] ; sometimes followed by + // ; extended language subtags + // / 4ALPHA ; or reserved for future use + // / 5*8ALPHA ; or registered language subtag + return (s.length() >= 2) && (s.length() <= 8) && AsciiUtil.isAlphaString(s); + } + + public static boolean isExtlang(String s) { + // extlang = 3ALPHA ; selected ISO 639 codes + // *2("-" 3ALPHA) ; permanently reserved + return (s.length() == 3) && AsciiUtil.isAlphaString(s); + } + + public static boolean isScript(String s) { + // script = 4ALPHA ; ISO 15924 code + return (s.length() == 4) && AsciiUtil.isAlphaString(s); + } + + public static boolean isRegion(String s) { + // region = 2ALPHA ; ISO 3166-1 code + // / 3DIGIT ; UN M.49 code + return ((s.length() == 2) && AsciiUtil.isAlphaString(s)) + || ((s.length() == 3) && AsciiUtil.isNumericString(s)); + } + + public static boolean isVariant(String s) { + // variant = 5*8alphanum ; registered variants + // / (DIGIT 3alphanum) + int len = s.length(); + if (len >= 5 && len <= 8) { + return AsciiUtil.isAlphaNumericString(s); + } + if (len == 4) { + return AsciiUtil.isNumeric(s.charAt(0)) + && AsciiUtil.isAlphaNumeric(s.charAt(1)) + && AsciiUtil.isAlphaNumeric(s.charAt(2)) + && AsciiUtil.isAlphaNumeric(s.charAt(3)); + } + return false; + } + + public static boolean isExtensionSingleton(String s) { + // singleton = DIGIT ; 0 - 9 + // / %x41-57 ; A - W + // / %x59-5A ; Y - Z + // / %x61-77 ; a - w + // / %x79-7A ; y - z + + return (s.length() == 1) + && AsciiUtil.isAlphaString(s) + && !AsciiUtil.caseIgnoreMatch(PRIVATEUSE, s); + } + + public static boolean isExtensionSingletonChar(char c) { + return isExtensionSingleton(String.valueOf(c)); + } + + public static boolean isExtensionSubtag(String s) { + // extension = singleton 1*("-" (2*8alphanum)) + return (s.length() >= 2) && (s.length() <= 8) && AsciiUtil.isAlphaNumericString(s); + } + + public static boolean isPrivateusePrefix(String s) { + // privateuse = "x" 1*("-" (1*8alphanum)) + return (s.length() == 1) + && AsciiUtil.caseIgnoreMatch(PRIVATEUSE, s); + } + + public static boolean isPrivateusePrefixChar(char c) { + return (AsciiUtil.caseIgnoreMatch(PRIVATEUSE, String.valueOf(c))); + } + + public static boolean isPrivateuseSubtag(String s) { + // privateuse = "x" 1*("-" (1*8alphanum)) + return (s.length() >= 1) && (s.length() <= 8) && AsciiUtil.isAlphaNumericString(s); + } + + // + // Language subtag canonicalization methods + // + + public static String canonicalizeLanguage(String s) { + return AsciiUtil.toLowerString(s); + } + + public static String canonicalizeExtlang(String s) { + return AsciiUtil.toLowerString(s); + } + + public static String canonicalizeScript(String s) { + return AsciiUtil.toTitleString(s); + } + + public static String canonicalizeRegion(String s) { + return AsciiUtil.toUpperString(s); + } + + public static String canonicalizeVariant(String s) { + return AsciiUtil.toLowerString(s); + } + + public static String canonicalizeExtension(String s) { + return AsciiUtil.toLowerString(s); + } + + public static String canonicalizeExtensionSingleton(String s) { + return AsciiUtil.toLowerString(s); + } + + public static String canonicalizeExtensionSubtag(String s) { + return AsciiUtil.toLowerString(s); + } + + public static String canonicalizePrivateuse(String s) { + return AsciiUtil.toLowerString(s); + } + + public static String canonicalizePrivateuseSubtag(String s) { + return AsciiUtil.toLowerString(s); + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + + if (_language.length() > 0) { + sb.append(_language); + + for (String extlang : _extlangs) { + sb.append(SEP).append(extlang); + } + + if (_script.length() > 0) { + sb.append(SEP).append(_script); + } + + if (_region.length() > 0) { + sb.append(SEP).append(_region); + } + + for (String variant : _extlangs) { + sb.append(SEP).append(variant); + } + + for (String extension : _extensions) { + sb.append(SEP).append(extension); + } + } + if (_privateuse.length() > 0) { + if (sb.length() > 0) { + sb.append(SEP); + } + sb.append(_privateuse); + } + + return sb.toString(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/util/locale/LocaleExtensions.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,246 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + ******************************************************************************* + * Copyright (C) 2009-2010, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + */ +package sun.util.locale; + +import java.util.Collections; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.SortedMap; +import java.util.TreeMap; +import java.util.TreeSet; + +import sun.util.locale.InternalLocaleBuilder.CaseInsensitiveChar; +import sun.util.locale.InternalLocaleBuilder.CaseInsensitiveString; + + +public class LocaleExtensions { + + private SortedMap<Character, Extension> _map; + private String _id; + + private static final SortedMap<Character, Extension> EMPTY_MAP = + Collections.unmodifiableSortedMap(new TreeMap<Character, Extension>()); + + public static final LocaleExtensions EMPTY_EXTENSIONS; + public static final LocaleExtensions CALENDAR_JAPANESE; + public static final LocaleExtensions NUMBER_THAI; + + static { + EMPTY_EXTENSIONS = new LocaleExtensions(); + EMPTY_EXTENSIONS._id = ""; + EMPTY_EXTENSIONS._map = EMPTY_MAP; + + CALENDAR_JAPANESE = new LocaleExtensions(); + CALENDAR_JAPANESE._id = "u-ca-japanese"; + CALENDAR_JAPANESE._map = new TreeMap<Character, Extension>(); + CALENDAR_JAPANESE._map.put(Character.valueOf(UnicodeLocaleExtension.SINGLETON), UnicodeLocaleExtension.CA_JAPANESE); + + NUMBER_THAI = new LocaleExtensions(); + NUMBER_THAI._id = "u-nu-thai"; + NUMBER_THAI._map = new TreeMap<Character, Extension>(); + NUMBER_THAI._map.put(Character.valueOf(UnicodeLocaleExtension.SINGLETON), UnicodeLocaleExtension.NU_THAI); + } + + private LocaleExtensions() { + } + + /* + * Package local constructor, only used by InternalLocaleBuilder. + */ + LocaleExtensions(Map<CaseInsensitiveChar, String> extensions, + Set<CaseInsensitiveString> uattributes, Map<CaseInsensitiveString, String> ukeywords) { + boolean hasExtension = (extensions != null && extensions.size() > 0); + boolean hasUAttributes = (uattributes != null && uattributes.size() > 0); + boolean hasUKeywords = (ukeywords != null && ukeywords.size() > 0); + + if (!hasExtension && !hasUAttributes && !hasUKeywords) { + _map = EMPTY_MAP; + _id = ""; + return; + } + + // Build extension map + _map = new TreeMap<Character, Extension>(); + if (hasExtension) { + for (Entry<CaseInsensitiveChar, String> ext : extensions.entrySet()) { + char key = AsciiUtil.toLower(ext.getKey().value()); + String value = ext.getValue(); + + if (LanguageTag.isPrivateusePrefixChar(key)) { + // we need to exclude special variant in privuateuse, e.g. "x-abc-lvariant-DEF" + value = InternalLocaleBuilder.removePrivateuseVariant(value); + if (value == null) { + continue; + } + } + + Extension e = new Extension(key, AsciiUtil.toLowerString(value)); + _map.put(Character.valueOf(key), e); + } + } + + if (hasUAttributes || hasUKeywords) { + TreeSet<String> uaset = null; + TreeMap<String, String> ukmap = null; + + if (hasUAttributes) { + uaset = new TreeSet<String>(); + for (CaseInsensitiveString cis : uattributes) { + uaset.add(AsciiUtil.toLowerString(cis.value())); + } + } + + if (hasUKeywords) { + ukmap = new TreeMap<String, String>(); + for (Entry<CaseInsensitiveString, String> kwd : ukeywords.entrySet()) { + String key = AsciiUtil.toLowerString(kwd.getKey().value()); + String type = AsciiUtil.toLowerString(kwd.getValue()); + ukmap.put(key, type); + } + } + + UnicodeLocaleExtension ule = new UnicodeLocaleExtension(uaset, ukmap); + _map.put(Character.valueOf(UnicodeLocaleExtension.SINGLETON), ule); + } + + if (_map.size() == 0) { + // this could happen when only privuateuse with special variant + _map = EMPTY_MAP; + _id = ""; + } else { + _id = toID(_map); + } + } + + public Set<Character> getKeys() { + return Collections.unmodifiableSet(_map.keySet()); + } + + public Extension getExtension(Character key) { + return _map.get(Character.valueOf(AsciiUtil.toLower(key.charValue()))); + } + + public String getExtensionValue(Character key) { + Extension ext = _map.get(Character.valueOf(AsciiUtil.toLower(key.charValue()))); + if (ext == null) { + return null; + } + return ext.getValue(); + } + + public Set<String> getUnicodeLocaleAttributes() { + Extension ext = _map.get(Character.valueOf(UnicodeLocaleExtension.SINGLETON)); + if (ext == null) { + return Collections.emptySet(); + } + assert (ext instanceof UnicodeLocaleExtension); + return ((UnicodeLocaleExtension)ext).getUnicodeLocaleAttributes(); + } + + public Set<String> getUnicodeLocaleKeys() { + Extension ext = _map.get(Character.valueOf(UnicodeLocaleExtension.SINGLETON)); + if (ext == null) { + return Collections.emptySet(); + } + assert (ext instanceof UnicodeLocaleExtension); + return ((UnicodeLocaleExtension)ext).getUnicodeLocaleKeys(); + } + + public String getUnicodeLocaleType(String unicodeLocaleKey) { + Extension ext = _map.get(Character.valueOf(UnicodeLocaleExtension.SINGLETON)); + if (ext == null) { + return null; + } + assert (ext instanceof UnicodeLocaleExtension); + return ((UnicodeLocaleExtension)ext).getUnicodeLocaleType(AsciiUtil.toLowerString(unicodeLocaleKey)); + } + + public boolean isEmpty() { + return _map.isEmpty(); + } + + public static boolean isValidKey(char c) { + return LanguageTag.isExtensionSingletonChar(c) || LanguageTag.isPrivateusePrefixChar(c); + } + + public static boolean isValidUnicodeLocaleKey(String ukey) { + return UnicodeLocaleExtension.isKey(ukey); + } + + private static String toID(SortedMap<Character, Extension> map) { + StringBuilder buf = new StringBuilder(); + Extension privuse = null; + for (Entry<Character, Extension> entry : map.entrySet()) { + char singleton = entry.getKey().charValue(); + Extension extension = entry.getValue(); + if (LanguageTag.isPrivateusePrefixChar(singleton)) { + privuse = extension; + } else { + if (buf.length() > 0) { + buf.append(LanguageTag.SEP); + } + buf.append(extension); + } + } + if (privuse != null) { + if (buf.length() > 0) { + buf.append(LanguageTag.SEP); + } + buf.append(privuse); + } + return buf.toString(); + } + + + public String toString() { + return _id; + } + + public String getID() { + return _id; + } + + public int hashCode() { + return _id.hashCode(); + } + + public boolean equals(Object other) { + if (this == other) { + return true; + } + if (!(other instanceof LocaleExtensions)) { + return false; + } + return this._id.equals(((LocaleExtensions)other)._id); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/util/locale/LocaleObjectCache.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + ******************************************************************************* + * Copyright (C) 2009-2010, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + */ +package sun.util.locale; + +import java.lang.ref.ReferenceQueue; +import java.lang.ref.SoftReference; +import java.util.concurrent.ConcurrentHashMap; + +public abstract class LocaleObjectCache<K, V> { + private ConcurrentHashMap<K, CacheEntry<K, V>> _map; + private ReferenceQueue<V> _queue = new ReferenceQueue<V>(); + + public LocaleObjectCache() { + this(16, 0.75f, 16); + } + + public LocaleObjectCache(int initialCapacity, float loadFactor, int concurrencyLevel) { + _map = new ConcurrentHashMap<K, CacheEntry<K, V>>(initialCapacity, loadFactor, concurrencyLevel); + } + + public V get(K key) { + V value = null; + + cleanStaleEntries(); + CacheEntry<K, V> entry = _map.get(key); + if (entry != null) { + value = entry.get(); + } + if (value == null) { + key = normalizeKey(key); + V newVal = createObject(key); + if (key == null || newVal == null) { + // subclass must return non-null key/value object + return null; + } + + CacheEntry<K, V> newEntry = new CacheEntry<K, V>(key, newVal, _queue); + + while (value == null) { + cleanStaleEntries(); + entry = _map.putIfAbsent(key, newEntry); + if (entry == null) { + value = newVal; + break; + } else { + value = entry.get(); + } + } + } + return value; + } + + @SuppressWarnings("unchecked") + private void cleanStaleEntries() { + CacheEntry<K, V> entry; + while ((entry = (CacheEntry<K, V>)_queue.poll()) != null) { + _map.remove(entry.getKey()); + } + } + + protected abstract V createObject(K key); + + protected K normalizeKey(K key) { + return key; + } + + private static class CacheEntry<K, V> extends SoftReference<V> { + private K _key; + + CacheEntry(K key, V value, ReferenceQueue<V> queue) { + super(value, queue); + _key = key; + } + + K getKey() { + return _key; + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/util/locale/LocaleSyntaxException.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + ******************************************************************************* + * Copyright (C) 2009, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + */ +package sun.util.locale; + +public class LocaleSyntaxException extends Exception { + + private static final long serialVersionUID = 1L; + + private int _index = -1; + + public LocaleSyntaxException(String msg) { + this(msg, 0); + } + + public LocaleSyntaxException(String msg, int errorIndex) { + super(msg); + _index = errorIndex; + } + + public int getErrorIndex() { + return _index; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/util/locale/ParseStatus.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + ******************************************************************************* + * Copyright (C) 2010, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + */ +package sun.util.locale; + +public class ParseStatus { + int _parseLength = 0; + int _errorIndex = -1; + String _errorMsg = null; + + public void reset() { + _parseLength = 0; + _errorIndex = -1; + _errorMsg = null; + } + + public boolean isError() { + return (_errorIndex >= 0); + } + + public int getErrorIndex() { + return _errorIndex; + } + + public int getParseLength() { + return _parseLength; + } + + public String getErrorMessage() { + return _errorMsg; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/util/locale/StringTokenIterator.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +/* + ******************************************************************************* + * Copyright (C) 2009, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + */ +package sun.util.locale; + +public class StringTokenIterator { + private String _text; + private String _dlms; + + private String _token; + private int _start; + private int _end; + private boolean _done; + + public StringTokenIterator(String text, String dlms) { + _text = text; + _dlms = dlms; + setStart(0); + } + + public String first() { + setStart(0); + return _token; + } + + public String current() { + return _token; + } + + public int currentStart() { + return _start; + } + + public int currentEnd() { + return _end; + } + + public boolean isDone() { + return _done; + } + + public String next() { + if (hasNext()) { + _start = _end + 1; + _end = nextDelimiter(_start); + _token = _text.substring(_start, _end); + } else { + _start = _end; + _token = null; + _done = true; + } + return _token; + } + + public boolean hasNext() { + return (_end < _text.length()); + } + + public StringTokenIterator setStart(int offset) { + if (offset > _text.length()) { + throw new IndexOutOfBoundsException(); + } + _start = offset; + _end = nextDelimiter(_start); + _token = _text.substring(_start, _end); + _done = false; + return this; + } + + public StringTokenIterator setText(String text) { + _text = text; + setStart(0); + return this; + } + + private int nextDelimiter(int start) { + int idx = start; + outer: while (idx < _text.length()) { + char c = _text.charAt(idx); + for (int i = 0; i < _dlms.length(); i++) { + if (c == _dlms.charAt(i)) { + break outer; + } + } + idx++; + } + return idx; + } +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/util/locale/UnicodeLocaleExtension.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + ******************************************************************************* + * Copyright (C) 2009-2010, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + */ +package sun.util.locale; + +import java.util.Collections; +import java.util.Map.Entry; +import java.util.Set; +import java.util.SortedMap; +import java.util.SortedSet; +import java.util.TreeMap; +import java.util.TreeSet; + +public class UnicodeLocaleExtension extends Extension { + public static final char SINGLETON = 'u'; + + private static final SortedSet<String> EMPTY_SORTED_SET = new TreeSet<String>(); + private static final SortedMap<String, String> EMPTY_SORTED_MAP = new TreeMap<String, String>(); + + private SortedSet<String> _attributes = EMPTY_SORTED_SET; + private SortedMap<String, String> _keywords = EMPTY_SORTED_MAP; + + public static final UnicodeLocaleExtension CA_JAPANESE; + public static final UnicodeLocaleExtension NU_THAI; + + static { + CA_JAPANESE = new UnicodeLocaleExtension(); + CA_JAPANESE._keywords = new TreeMap<String, String>(); + CA_JAPANESE._keywords.put("ca", "japanese"); + CA_JAPANESE._value = "ca-japanese"; + + NU_THAI = new UnicodeLocaleExtension(); + NU_THAI._keywords = new TreeMap<String, String>(); + NU_THAI._keywords.put("nu", "thai"); + NU_THAI._value = "nu-thai"; + } + + private UnicodeLocaleExtension() { + super(SINGLETON); + } + + UnicodeLocaleExtension(SortedSet<String> attributes, SortedMap<String, String> keywords) { + this(); + if (attributes != null && attributes.size() > 0) { + _attributes = attributes; + } + if (keywords != null && keywords.size() > 0) { + _keywords = keywords; + } + + if (_attributes.size() > 0 || _keywords.size() > 0) { + StringBuilder sb = new StringBuilder(); + for (String attribute : _attributes) { + sb.append(LanguageTag.SEP).append(attribute); + } + for (Entry<String, String> keyword : _keywords.entrySet()) { + String key = keyword.getKey(); + String value = keyword.getValue(); + + sb.append(LanguageTag.SEP).append(key); + if (value.length() > 0) { + sb.append(LanguageTag.SEP).append(value); + } + } + _value = sb.substring(1); // skip leading '-' + } + } + + public Set<String> getUnicodeLocaleAttributes() { + return Collections.unmodifiableSet(_attributes); + } + + public Set<String> getUnicodeLocaleKeys() { + return Collections.unmodifiableSet(_keywords.keySet()); + } + + public String getUnicodeLocaleType(String unicodeLocaleKey) { + return _keywords.get(unicodeLocaleKey); + } + + public static boolean isSingletonChar(char c) { + return (SINGLETON == AsciiUtil.toLower(c)); + } + + public static boolean isAttribute(String s) { + // 3*8alphanum + return (s.length() >= 3) && (s.length() <= 8) && AsciiUtil.isAlphaNumericString(s); + } + + public static boolean isKey(String s) { + // 2alphanum + return (s.length() == 2) && AsciiUtil.isAlphaNumericString(s); + } + + public static boolean isTypeSubtag(String s) { + // 3*8alphanum + return (s.length() >= 3) && (s.length() <= 8) && AsciiUtil.isAlphaNumericString(s); + } +}
--- a/src/share/classes/sun/util/resources/LocaleData.java Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/sun/util/resources/LocaleData.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -177,6 +177,11 @@ for (Iterator<Locale> l = candidates.iterator(); l.hasNext(); ) { String lstr = l.next().toString(); + /* truncate extra segment introduced by Java 7 for script and extesions */ + int idx = lstr.indexOf("_#"); + if (idx >= 0) { + lstr = lstr.substring(0, idx); + } /* Every locale string in the locale string list returned from the above getSupportedLocaleString is enclosed within two white spaces so that we could check some locale
--- a/src/share/classes/sun/util/resources/LocaleNames.properties Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/sun/util/resources/LocaleNames.properties Thu Sep 16 11:17:32 2010 -0700 @@ -228,6 +228,157 @@ zh=Chinese zu=Zulu +# script names +# key is ISO 15924 script code + +Arab=Arabic +Armi=Imperial Aramaic +Armn=Armenian +Avst=Avestan +Bali=Balinese +Bamu=Bamum +Bass=Bassa Vah +Batk=Batak +Beng=Bengali +Blis=Blissymbols +Bopo=Bopomofo +Brah=Brahmi +Brai=Braille +Bugi=Buginese +Buhd=Buhid +Cakm=Chakma +Cans=Unified Canadian Aboriginal Syllabics +Cari=Carian +Cham=Cham +Cher=Cherokee +Cirt=Cirth +Copt=Coptic +Cprt=Cypriot +Cyrl=Cyrillic +Cyrs=Old Church Slavonic Cyrillic +Deva=Devanagari +Dsrt=Deseret +Dupl=Duployan shorthand +Egyd=Egyptian demotic +Egyh=Egyptian hieratic +Egyp=Egyptian hieroglyphs +Elba=Elbasan +Ethi=Ethiopic +Geok=Khutsuri +Geor=Georgian +Glag=Glagolitic +Goth=Gothic +Gran=Grantha +Grek=Greek +Gujr=Gujarati +Guru=Gurmukhi +Hang=Hangul +Hani=Han +Hano=Hanunoo +Hans=Simplified Han +Hant=Traditional Han +Hebr=Hebrew +Hira=Hiragana +Hmng=Pahawh Hmong +Hrkt=Katakana or Hiragana +Hung=Old Hungarian +Inds=Indus +Ital=Old Italic +Java=Javanese +Jpan=Japanese +Kali=Kayah Li +Kana=Katakana +Khar=Kharoshthi +Khmr=Khmer +Knda=Kannada +Kore=Korean +Kpel=Kpelle +Kthi=Kaithi +Lana=Tai Tham +Laoo=Lao +Latf=Fraktur Latin +Latg=Gaelic Latin +Latn=Latin +Lepc=Lepcha +Limb=Limbu +Lina=Linear A +Linb=Linear B +Lisu=Lisu +Loma=Loma +Lyci=Lycian +Lydi=Lydian +Mand=Mandaic +Mani=Manichaean +Maya=Mayan hieroglyphs +Mend=Mende +Merc=Meroitic Cursive +Mero=Meroitic +Mlym=Malayalam +Mong=Mongolian +Moon=Moon +Mtei=Meitei Mayek +Mymr=Myanmar +Narb=Old North Arabian +Nbat=Nabataean +Nkgb=Nakhi Geba +Nkoo=N\u2019Ko +Ogam=Ogham +Olck=Ol Chiki +Orkh=Orkhon +Orya=Oriya +Osma=Osmanya +Palm=Palmyrene +Perm=Old Permic +Phag=Phags-pa +Phli=Inscriptional Pahlavi +Phlp=Psalter Pahlavi +Phlv=Book Pahlavi +Phnx=Phoenician +Plrd=Miao +Prti=Inscriptional Parthian +Rjng=Rejang +Roro=Rongorongo +Runr=Runic +Samr=Samaritan +Sara=Sarati +Sarb=Old South Arabian +Saur=Saurashtra +Sgnw=SignWriting +Shaw=Shavian +Sind=Sindhi +Sinh=Sinhala +Sund=Sundanese +Sylo=Syloti Nagri +Syrc=Syriac +Syre=Estrangelo Syriac +Syrj=Western Syriac +Syrn=Eastern Syriac +Tagb=Tagbanwa +Tale=Tai Le +Talu=New Tai Lue +Taml=Tamil +Tavt=Tai Viet +Telu=Telugu +Teng=Tengwar +Tfng=Tifinagh +Tglg=Tagalog +Thaa=Thaana +Thai=Thai +Tibt=Tibetan +Ugar=Ugaritic +Vaii=Vai +Visp=Visible Speech +Wara=Warang Citi +Xpeo=Old Persian +Xsux=Sumero-Akkadian Cuneiform +Yiii=Yi +Zinh=Inherited script +Zmth=Mathematical Notation +Zsym=Symbols +Zxxx=Unwritten +Zyyy=Undetermined script +Zzzz=Uncoded script + # country names # key is ISO 3166 country code @@ -479,6 +630,39 @@ ZM=Zambia ZW=Zimbabwe +# territory names +# key is UN M.49 country and area code + +001=World +002=Africa +003=North America +005=South America +009=Oceania +011=Western Africa +013=Central America +014=Eastern Africa +015=Northern Africa +017=Middle Africa +018=Southern Africa +019=Americas +021=Northern America +029=Caribbean +030=Eastern Asia +034=Southern Asia +035=South-Eastern Asia +039=Southern Europe +053=Australia and New Zealand +054=Melanesia +057=Micronesian Region +061=Polynesia +142=Asia +143=Central Asia +145=Western Asia +150=Europe +151=Eastern Europe +154=Northern Europe +155=Western Europe +419=Latin America and the Caribbean # variant names # key is %%variant
--- a/src/share/classes/sun/util/resources/LocaleNames_zh.properties Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/sun/util/resources/LocaleNames_zh.properties Thu Sep 16 11:17:32 2010 -0700 @@ -227,6 +227,12 @@ zh=\u4e2d\u6587 zu=\u7956\u9c81\u6587 +# script names +# key is ISO 15924 script code + +Hans=\u7b80\u4f53\u4e2d\u6587 +Hant=\u7e41\u4f53\u4e2d\u6587 + # country names # key is ISO 3166 country code
--- a/src/share/classes/sun/util/resources/LocaleNames_zh_TW.properties Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/classes/sun/util/resources/LocaleNames_zh_TW.properties Thu Sep 16 11:17:32 2010 -0700 @@ -227,6 +227,12 @@ zh=\u4e2d\u6587 zu=\u7956\u9b6f\u6587 +# script names +# key is ISO 15924 script code + +Hans=\u7c21\u9ad4\u4e2d\u6587 +Hant=\u7e41\u9ad4\u4e2d\u6587 + # country names # key is ISO 3166 country code
--- a/src/share/native/java/lang/System.c Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/native/java/lang/System.c Thu Sep 16 11:17:32 2010 -0700 @@ -80,6 +80,21 @@ (*env)->DeleteLocalRef(env, jval); \ (*env)->DeleteLocalRef(env, r); \ } else ((void) 0) +#define REMOVEPROP(props, key) \ + if (1) { \ + jstring jkey = JNU_NewStringPlatform(env, key); \ + jobject r = (*env)->CallObjectMethod(env, props, removeID, jkey); \ + if ((*env)->ExceptionOccurred(env)) return NULL; \ + (*env)->DeleteLocalRef(env, jkey); \ + (*env)->DeleteLocalRef(env, r); \ + } else ((void) 0) +#define GETPROP(props, key, jret) \ + if (1) { \ + jstring jkey = JNU_NewStringPlatform(env, key); \ + jret = (*env)->CallObjectMethod(env, props, getPropID, jkey); \ + if ((*env)->ExceptionOccurred(env)) return NULL; \ + (*env)->DeleteLocalRef(env, jkey); \ + } else ((void) 0) #ifndef VENDOR /* Third party may overwrite this. */ #define VENDOR "Sun Microsystems Inc." @@ -90,6 +105,60 @@ #define JAVA_MAX_SUPPORTED_VERSION 51 #define JAVA_MAX_SUPPORTED_MINOR_VERSION 0 +static int fmtdefault; // boolean value +jobject fillI18nProps(JNIEnv *env, jobject props, char *baseKey, + char *platformDispVal, char *platformFmtVal, + jmethodID putID, jmethodID getPropID) { + jstring jVMBaseVal = NULL; + + GETPROP(props, baseKey, jVMBaseVal); + if (jVMBaseVal) { + // user specified the base property. there's nothing to do here. + (*env)->DeleteLocalRef(env, jVMBaseVal); + } else { + char buf[64]; + jstring jVMVal = NULL; + const char *baseVal = ""; + + /* user.xxx base property */ + if (fmtdefault) { + if (platformFmtVal) { + PUTPROP(props, baseKey, platformFmtVal); + baseVal = platformFmtVal; + } + } else { + if (platformDispVal) { + PUTPROP(props, baseKey, platformDispVal); + baseVal = platformDispVal; + } + } + + /* user.xxx.display property */ + jio_snprintf(buf, sizeof(buf), "%s.display", baseKey); + GETPROP(props, buf, jVMVal); + if (jVMVal == NULL) { + if (platformDispVal && (strcmp(baseVal, platformDispVal) != 0)) { + PUTPROP(props, buf, platformDispVal); + } + } else { + (*env)->DeleteLocalRef(env, jVMVal); + } + + /* user.xxx.format property */ + jio_snprintf(buf, sizeof(buf), "%s.format", baseKey); + GETPROP(props, buf, jVMVal); + if (jVMVal == NULL) { + if (platformFmtVal && (strcmp(baseVal, platformFmtVal) != 0)) { + PUTPROP(props, buf, platformFmtVal); + } + } else { + (*env)->DeleteLocalRef(env, jVMVal); + } + } + + return NULL; +} + JNIEXPORT jobject JNICALL Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props) { @@ -99,6 +168,16 @@ (*env)->GetObjectClass(env, props), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + jmethodID removeID = (*env)->GetMethodID(env, + (*env)->GetObjectClass(env, props), + "remove", + "(Ljava/lang/Object;)Ljava/lang/Object;"); + jmethodID getPropID = (*env)->GetMethodID(env, + (*env)->GetObjectClass(env, props), + "getProperty", + "(Ljava/lang/String;)Ljava/lang/String;"); + jobject ret = NULL; + jstring jVMVal = NULL; if (sprops == NULL || putID == NULL ) return NULL; @@ -218,7 +297,46 @@ PUTPROP(props, "sun.desktop", sprops->desktop); } - return JVM_InitProperties(env, props); + /* + * unset "user.language", "user.country", and "user.variant" + * in order to tell whether the command line option "-DXXXX=YYYY" is + * specified or not. They will be reset in fillI18nProps() below. + */ + REMOVEPROP(props, "user.language"); + REMOVEPROP(props, "user.country"); + REMOVEPROP(props, "user.variant"); + REMOVEPROP(props, "file.encoding"); + + ret = JVM_InitProperties(env, props); + + /* Check the compatibility flag */ + GETPROP(props, "sun.locale.formatasdefault", jVMVal); + if (jVMVal) { + const char * val = (*env)->GetStringUTFChars(env, jVMVal, 0); + fmtdefault = !strcmp(val, "true"); + (*env)->ReleaseStringUTFChars(env, jVMVal, val); + (*env)->DeleteLocalRef(env, jVMVal); + } + + /* reconstruct i18n related properties */ + fillI18nProps(env, props, "user.language", sprops->display_language, + sprops->format_language, putID, getPropID); + fillI18nProps(env, props, "user.country", + sprops->display_country, sprops->format_country, putID, getPropID); + fillI18nProps(env, props, "user.variant", + sprops->display_variant, sprops->format_variant, putID, getPropID); + GETPROP(props, "file.encoding", jVMVal); + if (jVMVal == NULL) { + if (fmtdefault) { + PUTPROP(props, "file.encoding", sprops->encoding); + } else { + PUTPROP(props, "file.encoding", sprops->sun_jnu_encoding); + } + } else { + (*env)->DeleteLocalRef(env, jVMVal); + } + + return ret; } /*
--- a/src/share/native/java/lang/java_props.h Thu Sep 16 11:16:02 2010 -0700 +++ b/src/share/native/java/lang/java_props.h Thu Sep 16 11:17:32 2010 -0700 @@ -53,8 +53,14 @@ nchar *user_home; char *language; + char *format_language; + char *display_language; char *country; + char *format_country; + char *display_country; char *variant; + char *format_variant; + char *display_variant; char *encoding; char *sun_jnu_encoding; char *timezone;
--- a/src/solaris/native/java/lang/java_props_md.c Thu Sep 16 11:16:02 2010 -0700 +++ b/src/solaris/native/java/lang/java_props_md.c Thu Sep 16 11:17:32 2010 -0700 @@ -115,6 +115,174 @@ #define P_tmpdir "/var/tmp" #endif +static int ParseLocale(int cat, char ** std_language, char ** std_country, char ** std_variant, char ** std_encoding) { + char temp[64]; + char *language = NULL, *country = NULL, *variant = NULL, + *encoding = NULL; + char *p, encoding_variant[64]; + char *lc; + + /* Query the locale set for the category */ + lc = setlocale(cat, NULL); + +#ifndef __linux__ + if (lc == NULL) { + return 0; + } + + if (cat == LC_CTYPE) { + /* + * Workaround for Solaris bug 4201684: Xlib doesn't like @euro + * locales. Since we don't depend on the libc @euro behavior, + * we just remove the qualifier. + * On Linux, the bug doesn't occur; on the other hand, @euro + * is needed there because it's a shortcut that also determines + * the encoding - without it, we wouldn't get ISO-8859-15. + * Therefore, this code section is Solaris-specific. + */ + lc = strdup(lc); /* keep a copy, setlocale trashes original. */ + strcpy(temp, lc); + p = strstr(temp, "@euro"); + if (p != NULL) { + *p = '\0'; + setlocale(LC_ALL, temp); + } + } +#else + if (lc == NULL || !strcmp(lc, "C") || !strcmp(lc, "POSIX")) { + lc = "en_US"; + } +#endif + + /* + * locale string format in Solaris is + * <language name>_<country name>.<encoding name>@<variant name> + * <country name>, <encoding name>, and <variant name> are optional. + */ + + strcpy(temp, lc); + + /* Parse the language, country, encoding, and variant from the + * locale. Any of the elements may be missing, but they must occur + * in the order language_country.encoding@variant, and must be + * preceded by their delimiter (except for language). + * + * If the locale name (without .encoding@variant, if any) matches + * any of the names in the locale_aliases list, map it to the + * corresponding full locale name. Most of the entries in the + * locale_aliases list are locales that include a language name but + * no country name, and this facility is used to map each language + * to a default country if that's possible. It's also used to map + * the Solaris locale aliases to their proper Java locale IDs. + */ + if ((p = strchr(temp, '.')) != NULL) { + strcpy(encoding_variant, p); /* Copy the leading '.' */ + *p = '\0'; + } else if ((p = strchr(temp, '@')) != NULL) { + strcpy(encoding_variant, p); /* Copy the leading '@' */ + *p = '\0'; + } else { + *encoding_variant = '\0'; + } + + if (mapLookup(locale_aliases, temp, &p)) { + strcpy(temp, p); + } + + language = temp; + if ((country = strchr(temp, '_')) != NULL) { + *country++ = '\0'; + } + + p = encoding_variant; + if ((encoding = strchr(p, '.')) != NULL) { + p[encoding++ - p] = '\0'; + p = encoding; + } + if ((variant = strchr(p, '@')) != NULL) { + p[variant++ - p] = '\0'; + } + + /* Normalize the language name */ + if (std_language != NULL) { + *std_language = "en"; + if (language != NULL) { + mapLookup(language_names, language, std_language); + } + } + + /* Normalize the country name */ + if (std_country != NULL && country != NULL) { + *std_country = country; + mapLookup(country_names, country, std_country); + } + + /* Normalize the variant name. Note that we only use + * variants listed in the mapping array; others are ignored. */ + if (std_variant != NULL && variant != NULL) { + mapLookup(variant_names, variant, std_variant); + } + + /* Normalize the encoding name. Note that we IGNORE the string + * 'encoding' extracted from the locale name above. Instead, we use the + * more reliable method of calling nl_langinfo(CODESET). This function + * returns an empty string if no encoding is set for the given locale + * (e.g., the C or POSIX locales); we use the default ISO 8859-1 + * converter for such locales. + */ + if (std_encoding != NULL) { + /* OK, not so reliable - nl_langinfo() gives wrong answers on + * Euro locales, in particular. */ + if (strcmp(p, "ISO8859-15") == 0) + p = "ISO8859-15"; + else + p = nl_langinfo(CODESET); + + /* Convert the bare "646" used on Solaris to a proper IANA name */ + if (strcmp(p, "646") == 0) + p = "ISO646-US"; + + /* return same result nl_langinfo would return for en_UK, + * in order to use optimizations. */ + *std_encoding = (*p != '\0') ? p : "ISO8859-1"; + +#ifdef __linux__ + /* + * Remap the encoding string to a different value for japanese + * locales on linux so that customized converters are used instead + * of the default converter for "EUC-JP". The customized converters + * omit support for the JIS0212 encoding which is not supported by + * the variant of "EUC-JP" encoding used on linux + */ + if (strcmp(p, "EUC-JP") == 0) { + *std_encoding = "EUC-JP-LINUX"; + } +#else + if (strcmp(p,"eucJP") == 0) { + /* For Solaris use customized vendor defined character + * customized EUC-JP converter + */ + *std_encoding = "eucJP-open"; + } else if (strcmp(p, "Big5") == 0 || strcmp(p, "BIG5") == 0) { + /* + * Remap the encoding string to Big5_Solaris which augments + * the default converter for Solaris Big5 locales to include + * seven additional ideographic characters beyond those included + * in the Java "Big5" converter. + */ + *std_encoding = "Big5_Solaris"; + } else if (strcmp(p, "Big5-HKSCS") == 0) { + /* + * Solaris uses HKSCS2001 + */ + *std_encoding = "Big5-HKSCS-2001"; + } +#endif + } + + return 1; +} + /* This function gets called very early, before VM_CALLS are setup. * Do not use any of the VM_CALLS entries!!! */ @@ -185,182 +353,25 @@ /* Determine the language, country, variant, and encoding from the host, * and store these in the user.language, user.country, user.variant and * file.encoding system properties. */ - { - char *lc; - lc = setlocale(LC_CTYPE, ""); -#ifndef __linux__ - if (lc == NULL) { - /* - * 'lc == null' means system doesn't support user's environment - * variable's locale. - */ - setlocale(LC_ALL, "C"); - sprops.language = "en"; - sprops.encoding = "ISO8859-1"; - sprops.sun_jnu_encoding = sprops.encoding; - } else { -#else - if (lc == NULL || !strcmp(lc, "C") || !strcmp(lc, "POSIX")) { - lc = "en_US"; - } - { -#endif - - /* - * locale string format in Solaris is - * <language name>_<country name>.<encoding name>@<variant name> - * <country name>, <encoding name>, and <variant name> are optional. - */ - char temp[64]; - char *language = NULL, *country = NULL, *variant = NULL, - *encoding = NULL; - char *std_language = NULL, *std_country = NULL, *std_variant = NULL, - *std_encoding = NULL; - char *p, encoding_variant[64]; - int i, found; - -#ifndef __linux__ - /* - * Workaround for Solaris bug 4201684: Xlib doesn't like @euro - * locales. Since we don't depend on the libc @euro behavior, - * we just remove the qualifier. - * On Linux, the bug doesn't occur; on the other hand, @euro - * is needed there because it's a shortcut that also determines - * the encoding - without it, we wouldn't get ISO-8859-15. - * Therefore, this code section is Solaris-specific. - */ - lc = strdup(lc); /* keep a copy, setlocale trashes original. */ - strcpy(temp, lc); - p = strstr(temp, "@euro"); - if (p != NULL) - *p = '\0'; - setlocale(LC_ALL, temp); -#endif - - strcpy(temp, lc); - - /* Parse the language, country, encoding, and variant from the - * locale. Any of the elements may be missing, but they must occur - * in the order language_country.encoding@variant, and must be - * preceded by their delimiter (except for language). - * - * If the locale name (without .encoding@variant, if any) matches - * any of the names in the locale_aliases list, map it to the - * corresponding full locale name. Most of the entries in the - * locale_aliases list are locales that include a language name but - * no country name, and this facility is used to map each language - * to a default country if that's possible. It's also used to map - * the Solaris locale aliases to their proper Java locale IDs. - */ - if ((p = strchr(temp, '.')) != NULL) { - strcpy(encoding_variant, p); /* Copy the leading '.' */ - *p = '\0'; - } else if ((p = strchr(temp, '@')) != NULL) { - strcpy(encoding_variant, p); /* Copy the leading '@' */ - *p = '\0'; - } else { - *encoding_variant = '\0'; - } - - if (mapLookup(locale_aliases, temp, &p)) { - strcpy(temp, p); - } - - language = temp; - if ((country = strchr(temp, '_')) != NULL) { - *country++ = '\0'; - } - - p = encoding_variant; - if ((encoding = strchr(p, '.')) != NULL) { - p[encoding++ - p] = '\0'; - p = encoding; - } - if ((variant = strchr(p, '@')) != NULL) { - p[variant++ - p] = '\0'; - } - - /* Normalize the language name */ - std_language = "en"; - if (language != NULL) { - mapLookup(language_names, language, &std_language); - } - sprops.language = std_language; - - /* Normalize the country name */ - if (country != NULL) { - std_country = country; - mapLookup(country_names, country, &std_country); - sprops.country = strdup(std_country); - } - - /* Normalize the variant name. Note that we only use - * variants listed in the mapping array; others are ignored. */ - if (variant != NULL) { - mapLookup(variant_names, variant, &std_variant); - sprops.variant = std_variant; - } - - /* Normalize the encoding name. Note that we IGNORE the string - * 'encoding' extracted from the locale name above. Instead, we use the - * more reliable method of calling nl_langinfo(CODESET). This function - * returns an empty string if no encoding is set for the given locale - * (e.g., the C or POSIX locales); we use the default ISO 8859-1 - * converter for such locales. - */ - - /* OK, not so reliable - nl_langinfo() gives wrong answers on - * Euro locales, in particular. */ - if (strcmp(p, "ISO8859-15") == 0) - p = "ISO8859-15"; - else - p = nl_langinfo(CODESET); - - /* Convert the bare "646" used on Solaris to a proper IANA name */ - if (strcmp(p, "646") == 0) - p = "ISO646-US"; - - /* return same result nl_langinfo would return for en_UK, - * in order to use optimizations. */ - std_encoding = (*p != '\0') ? p : "ISO8859-1"; - - -#ifdef __linux__ - /* - * Remap the encoding string to a different value for japanese - * locales on linux so that customized converters are used instead - * of the default converter for "EUC-JP". The customized converters - * omit support for the JIS0212 encoding which is not supported by - * the variant of "EUC-JP" encoding used on linux - */ - if (strcmp(p, "EUC-JP") == 0) { - std_encoding = "EUC-JP-LINUX"; - } -#else - if (strcmp(p,"eucJP") == 0) { - /* For Solaris use customized vendor defined character - * customized EUC-JP converter - */ - std_encoding = "eucJP-open"; - } else if (strcmp(p, "Big5") == 0 || strcmp(p, "BIG5") == 0) { - /* - * Remap the encoding string to Big5_Solaris which augments - * the default converter for Solaris Big5 locales to include - * seven additional ideographic characters beyond those included - * in the Java "Big5" converter. - */ - std_encoding = "Big5_Solaris"; - } else if (strcmp(p, "Big5-HKSCS") == 0) { - /* - * Solaris uses HKSCS2001 - */ - std_encoding = "Big5-HKSCS-2001"; - } -#endif - sprops.encoding = std_encoding; - sprops.sun_jnu_encoding = sprops.encoding; - } + setlocale(LC_ALL, ""); + if (ParseLocale(LC_CTYPE, + &(sprops.format_language), + &(sprops.format_country), + &(sprops.format_variant), + &(sprops.encoding))) { + ParseLocale(LC_MESSAGES, + &(sprops.language), + &(sprops.country), + &(sprops.variant), + NULL); + } else { + sprops.language = "en"; + sprops.encoding = "ISO8859-1"; } + sprops.display_language = sprops.language; + sprops.display_country = sprops.country; + sprops.display_variant = sprops.variant; + sprops.sun_jnu_encoding = sprops.encoding; #ifdef __linux__ #if __BYTE_ORDER == __LITTLE_ENDIAN
--- a/src/solaris/native/sun/awt/gtk2_interface.c Thu Sep 16 11:16:02 2010 -0700 +++ b/src/solaris/native/sun/awt/gtk2_interface.c Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -371,6 +371,16 @@ return convertionBuffer; } +static void throw_exception(JNIEnv *env, const char* name, const char* message) +{ + jclass class = (*env)->FindClass(env, name); + + if (class != NULL) + (*env)->ThrowNew(env, class, message); + + (*env)->DeleteLocalRef(env, class); +} + /* This is a workaround for the bug: * http://sourceware.org/bugzilla/show_bug.cgi?id=1814 * (dlsym/dlopen clears dlerror state) @@ -859,14 +869,26 @@ * comparing results. This can be optimized by using subclassed pixmap and * doing the second drawing only if necessary. */ -void gtk2_init_painting(gint width, gint height) +void gtk2_init_painting(JNIEnv *env, gint width, gint height) { GdkGC *gc; + GdkPixbuf *white, *black; init_containers(); if (gtk2_pixbuf_width < width || gtk2_pixbuf_height < height) { + white = (*fp_gdk_pixbuf_new)(GDK_COLORSPACE_RGB, TRUE, 8, width, height); + black = (*fp_gdk_pixbuf_new)(GDK_COLORSPACE_RGB, TRUE, 8, width, height); + + if (white == NULL || black == NULL) + { + snprintf(convertionBuffer, CONV_BUFFER_SIZE, "Couldn't create pixbuf of size %dx%d", width, height); + throw_exception(env, "java/lang/RuntimeException", convertionBuffer); + fp_gdk_threads_leave(); + return; + } + if (gtk2_white_pixmap != NULL) { /* free old stuff */ (*fp_g_object_unref)(gtk2_white_pixmap); @@ -875,14 +897,12 @@ (*fp_g_object_unref)(gtk2_black_pixbuf); } - gtk2_white_pixmap = (*fp_gdk_pixmap_new) - (gtk2_window->window, width, height, -1); - gtk2_black_pixmap = (*fp_gdk_pixmap_new) - (gtk2_window->window, width, height, -1); - gtk2_white_pixbuf = (*fp_gdk_pixbuf_new)(GDK_COLORSPACE_RGB, TRUE, 8, - width, height); - gtk2_black_pixbuf = (*fp_gdk_pixbuf_new)(GDK_COLORSPACE_RGB, TRUE, 8, - width, height); + gtk2_white_pixmap = (*fp_gdk_pixmap_new)(gtk2_window->window, width, height, -1); + gtk2_black_pixmap = (*fp_gdk_pixmap_new)(gtk2_window->window, width, height, -1); + + gtk2_white_pixbuf = white; + gtk2_black_pixbuf = black; + gtk2_pixbuf_width = width; gtk2_pixbuf_height = height; }
--- a/src/solaris/native/sun/awt/gtk2_interface.h Thu Sep 16 11:16:02 2010 -0700 +++ b/src/solaris/native/sun/awt/gtk2_interface.h Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -717,7 +717,7 @@ void gtk_paint_background(WidgetType widget_type, GtkStateType state_type, gint x, gint y, gint width, gint height); -void gtk2_init_painting(gint w, gint h); +void gtk2_init_painting(JNIEnv *env, gint w, gint h); gint gtk2_copy_image(gint *dest, gint width, gint height); gint gtk2_get_xthickness(JNIEnv *env, WidgetType widget_type);
--- a/src/solaris/native/sun/awt/swing_GTKEngine.c Thu Sep 16 11:16:02 2010 -0700 +++ b/src/solaris/native/sun/awt/swing_GTKEngine.c Thu Sep 16 11:17:32 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -293,7 +293,7 @@ JNIEnv *env, jobject this, jint w, jint h) { fp_gdk_threads_enter(); - gtk2_init_painting(w, h); + gtk2_init_painting(env, w, h); fp_gdk_threads_leave(); }
--- a/src/windows/native/java/lang/java_props_md.c Thu Sep 16 11:16:02 2010 -0700 +++ b/src/windows/native/java/lang/java_props_md.c Thu Sep 16 11:17:32 2010 -0700 @@ -43,413 +43,48 @@ #endif typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO); +static void SetupI18nProps(LCID lcid, char** language, char** country, + char** variant, char** encoding); #define SHELL_KEY "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" -/* Encodings for Windows language groups. According to - www.microsoft.com/globaldev/faqs/locales.asp, - some locales do not have codepages, and are - supported in Windows 2000/XP solely through Unicode. - In this case, we use utf-8 encoding */ +static char * +getEncodingInternal(LCID lcid) +{ + char * ret = malloc(16); + int codepage; -static char *encoding_names[] = { - "Cp1250", /* 0:Latin 2 */ - "Cp1251", /* 1:Cyrillic */ - "Cp1252", /* 2:Latin 1 */ - "Cp1253", /* 3:Greek */ - "Cp1254", /* 4:Latin 5 */ - "Cp1255", /* 5:Hebrew */ - "Cp1256", /* 6:Arabic */ - "Cp1257", /* 7:Baltic */ - "Cp1258", /* 8:Viet Nam */ - "MS874", /* 9:Thai */ - "MS932", /* 10:Japanese */ - "GBK", /* 11:PRC GBK */ - "MS949", /* 12:Korean Extended Wansung */ - "MS950", /* 13:Chinese (Taiwan, Hongkong, Macau) */ - "utf-8", /* 14:Unicode */ - "MS1361", /* 15:Korean Johab */ -}; - -/* - * List mapping from LanguageID to Java locale IDs. - * The entries in this list should not be construed to suggest we actually have - * full locale-data and other support for all of these locales; these are - * merely all of the Windows locales for which we could construct an accurate - * locale ID. The data is based on the web page "Windows XP/Server 2003 - - * List of Locale IDs, Input Locale, and Language Collection" - * (http://www.microsoft.com/globaldev/reference/winxp/xp-lcid.mspx) - * - * Some of the language IDs below are not yet used by Windows, but were - * defined by Microsoft for other products, such as Office XP. They may - * become Windows language IDs in the future. - * - */ -typedef struct LANGIDtoLocale { - WORD langID; - WORD encoding; - char* javaID; -} LANGIDtoLocale; + if (GetLocaleInfo(lcid, + LOCALE_IDEFAULTANSICODEPAGE, + ret+2, 14) == 0) { + codepage = 1252; + } else { + codepage = atoi(ret+2); + } -static LANGIDtoLocale langIDMap[] = { - /* fallback locales to use when the country code doesn't match anything we have */ - 0x01, 6, "ar", - 0x02, 1, "bg", - 0x03, 2, "ca", - 0x04, 11, "zh", - 0x05, 0, "cs", - 0x06, 2, "da", - 0x07, 2, "de", - 0x08, 3, "el", - 0x09, 2, "en", - 0x0a, 2, "es", - 0x0b, 2, "fi", - 0x0c, 2, "fr", - 0x0d, 5, "iw", - 0x0e, 0, "hu", - 0x0f, 2, "is", - 0x10, 2, "it", - 0x11, 10, "ja", - 0x12, 12, "ko", - 0x13, 2, "nl", - 0x14, 2, "no", - 0x15, 0, "pl", - 0x16, 2, "pt", - 0x17, 2, "rm", - 0x18, 0, "ro", - 0x19, 1, "ru", - 0x1a, 0, "sr", - 0x1b, 0, "sk", - 0x1c, 0, "sq", - 0x1d, 2, "sv", - 0x1e, 9, "th", - 0x1f, 4, "tr", - 0x20, 2, "ur", - 0x21, 2, "in", - 0x22, 1, "uk", - 0x23, 1, "be", - 0x24, 0, "sl", - 0x25, 7, "et", - 0x26, 7, "lv", - 0x27, 7, "lt", - 0x28, 1, "tg", - 0x29, 6, "fa", - 0x2a, 8, "vi", - 0x2b, 14, "hy", - 0x2c, 4, "az", - 0x2d, 2, "eu", -/* 0x2e, 2, "??", no ISO-639 abbreviation for Sorbian */ - 0x2f, 1, "mk", - 0x31, 2, "ts", - 0x32, 2, "tn", - 0x34, 2, "xh", - 0x35, 2, "zu", - 0x36, 2, "af", - 0x37, 14, "ka", - 0x38, 2, "fo", - 0x39, 14, "hi", - 0x3a, 14, "mt", - 0x3b, 2, "se", - 0x3c, 2, "gd", - 0x3d, 2, "yi", - 0x3e, 2, "ms", - 0x3f, 1, "kk", - 0x40, 1, "ky", - 0x41, 2, "sw", - 0x42, 0, "tk", - 0x43, 1, "uz", - 0x44, 1, "tt", - 0x45, 14, "bn", - 0x46, 14, "pa", - 0x47, 14, "gu", - 0x48, 14, "or", - 0x49, 14, "ta", - 0x4a, 14, "te", - 0x4b, 14, "kn", - 0x4c, 14, "ml", - 0x4d, 14, "as", - 0x4e, 14, "mr", - 0x4f, 14, "sa", - 0x50, 1, "mn", - 0x51, 14, "bo", - 0x52, 1, "cy", - 0x53, 14, "km", - 0x54, 14, "lo", - 0x56, 2, "gl", - 0x5b, 14, "si", - 0x5d, 14, "iu", - 0x5e, 14, "am", -/* 0x5f, 2, "??", no ISO-639 abbreviation for Tamazight */ - 0x68, 2, "ha", - 0x6a, 2, "yo", - 0x6b, 2, "qu", - 0x6d, 1, "ba", - 0x6f, 2, "kl", - 0x70, 2, "ig", -/* 0x78, 14, "??", no ISO-639 abbreviation for Yi */ - 0x7e, 2, "br", - 0x80, 6, "ug", - 0x81, 14, "mi", - 0x82, 2, "oc", - 0x83, 2, "co", -/* 0x84, 2, "??", no ISO-639 abbreviation for Alsatian */ -/* 0x85, 1, "??", no ISO-639 abbreviation for Yakut */ -/* 0x86, 2, "??", no ISO-639 abbreviation for K'iche */ - 0x87, 2, "rw", - 0x88, 2, "wo", -/* 0x8c, 6, "??", no ISO-639 abbreviation for Dari */ - /* mappings for real Windows LCID values */ - 0x0401, 6, "ar_SA", - 0x0402, 1, "bg_BG", - 0x0403, 2, "ca_ES", - 0x0404, 13, "zh_TW", - 0x0405, 0, "cs_CZ", - 0x0406, 2, "da_DK", - 0x0407, 2, "de_DE", - 0x0408, 3, "el_GR", - 0x0409, 2, "en_US", - 0x040a, 2, "es_ES", /* (traditional sort) */ - 0x040b, 2, "fi_FI", - 0x040c, 2, "fr_FR", - 0x040d, 5, "iw_IL", - 0x040e, 0, "hu_HU", - 0x040f, 2, "is_IS", - 0x0410, 2, "it_IT", - 0x0411, 10, "ja_JP", - 0x0412, 12, "ko_KR", - 0x0413, 2, "nl_NL", - 0x0414, 2, "no_NO", - 0x0415, 0, "pl_PL", - 0x0416, 2, "pt_BR", - 0x0417, 2, "rm_CH", - 0x0418, 0, "ro_RO", - 0x0419, 1, "ru_RU", - 0x041a, 0, "hr_HR", - 0x041b, 0, "sk_SK", - 0x041c, 0, "sq_AL", - 0x041d, 2, "sv_SE", - 0x041e, 9, "th_TH", - 0x041f, 4, "tr_TR", - 0x0420, 6, "ur_PK", - 0x0421, 2, "in_ID", - 0x0422, 1, "uk_UA", - 0x0423, 1, "be_BY", - 0x0424, 0, "sl_SI", - 0x0425, 7, "et_EE", - 0x0426, 7, "lv_LV", - 0x0427, 7, "lt_LT", - 0x0428, 1, "tg_TJ", - 0x0429, 6, "fa_IR", - 0x042a, 8, "vi_VN", - 0x042b, 14, "hy_AM", /* Armenian */ - 0x042c, 4, "az_AZ", /* Azeri_Latin */ - 0x042d, 2, "eu_ES", -/* 0x042e, 2, "??", no ISO-639 abbreviation for Upper Sorbian */ - 0x042f, 1, "mk_MK", -/* 0x0430, 2, "??", no ISO-639 abbreviation for Sutu */ - 0x0431, 2, "ts", /* (country?) */ - 0x0432, 2, "tn_ZA", -/* 0x0433, 2, "??", no ISO-639 abbreviation for Venda */ - 0x0434, 2, "xh_ZA", - 0x0435, 2, "zu_ZA", - 0x0436, 2, "af_ZA", - 0x0437, 14, "ka_GE", /* Georgian */ - 0x0438, 2, "fo_FO", - 0x0439, 14, "hi_IN", - 0x043a, 14, "mt_MT", - 0x043b, 2, "se_NO", /* Sami, Northern - Norway */ - 0x043c, 2, "gd_GB", - 0x043d, 2, "yi", /* (country?) */ - 0x043e, 2, "ms_MY", - 0x043f, 1, "kk_KZ", /* Kazakh */ - 0x0440, 1, "ky_KG", /* Kyrgyz */ - 0x0441, 2, "sw_KE", - 0x0442, 0, "tk_TM", - 0x0443, 4, "uz_UZ", /* Uzbek_Latin */ - 0x0444, 1, "tt_RU", /* Tatar */ - 0x0445, 14, "bn_IN", /* Bengali */ - 0x0446, 14, "pa_IN", /* Punjabi */ - 0x0447, 14, "gu_IN", /* Gujarati */ - 0x0448, 14, "or_IN", /* Oriya */ - 0x0449, 14, "ta_IN", /* Tamil */ - 0x044a, 14, "te_IN", /* Telugu */ - 0x044b, 14, "kn_IN", /* Kannada */ - 0x044c, 14, "ml_IN", /* Malayalam */ - 0x044d, 14, "as_IN", /* Assamese */ - 0x044e, 14, "mr_IN", /* Marathi */ - 0x044f, 14, "sa_IN", /* Sanskrit */ - 0x0450, 1, "mn_MN", /* Mongolian */ - 0x0451, 14, "bo_CN", /* Tibetan */ - 0x0452, 2, "cy_GB", /* Welsh */ - 0x0453, 14, "km_KH", /* Khmer */ - 0x0454, 14, "lo_LA", /* Lao */ - 0x0456, 2, "gl_ES", /* Galician */ -/* 0x0457, 14, "??_IN", /* Konkani, no ISO-639 abbreviation*/ -/* 0x045a, 14, "??_SY", /* Syriac, no ISO-639 abbreviation*/ - 0x045b, 14, "si_LK", /* Sinhala */ - 0x045d, 14, "iu_CA", /* Inuktitut */ - 0x045e, 14, "am_ET", /* Amharic */ - 0x0461, 14, "ne_NP", /* Nepali */ - 0x0462, 2, "fy_NL", /* Frisian */ - 0x0463, 6, "ps_AF", /* Pushto */ -/* 0x0464, 2, "??_PH", /* Filipino, no ISO-639 abbreviation*/ - 0x0465, 14, "dv_MV", /* Divehi */ - 0x0468, 2, "ha_NG", /* Hausa */ - 0x046a, 2, "yo_NG", /* Yoruba */ - 0x046b, 2, "qu_BO", /* Quechua - Bolivia */ -/* 0x046c, 2, "??_ZA", /* Northern Sotho, no ISO-639 abbreviation */ - 0x046d, 1, "ba_RU", /* Bashkir */ - 0x046e, 2, "lb_LU", /* Luxembourgish */ - 0x046f, 2, "kl_GL", /* Greenlandic */ - 0x0470, 2, "ig_NG", /* Igbo */ -/* 0x0478, 14, "??_CN", /* Yi (PRC), no ISO-639 abbreviation */ -/* 0x047a, 2, "??_CL", /* Mapudungun (Araucanian), no ISO-639 abbreviation */ -/* 0x047c, 2, "??_CA", /* Mohawk, no ISO-639 abbreviation */ - 0x047e, 2, "br_FR", /* Breton */ - 0x0480, 6, "ug_CN", /* Uighur */ - 0x0481, 14, "mi_NZ", /* Maori - New Zealand */ - 0x0482, 2, "oc_FR", /* Occitan */ - 0x0483, 2, "co_FR", /* Corsican */ -/* 0x0484, 2, "??_FR", /* Alsatian, no ISO-639 abbreviation */ -/* 0x0485, 1, "??_RU", /* Yakut, no ISO-639 abbreviation */ -/* 0x0486, 2, "??_GT", /* K'iche, no ISO-639 abbreviation */ - 0x0487, 2, "rw_RW", /* Kinyarwanda */ - 0x0488, 2, "wo_SN", /* Wolof */ -/* 0x048c, 6, "??_AF", /* Dari, no ISO-639 abbreviation */ - 0x0801, 6, "ar_IQ", - 0x0804, 11, "zh_CN", - 0x0807, 2, "de_CH", - 0x0809, 2, "en_GB", - 0x080a, 2, "es_MX", - 0x080c, 2, "fr_BE", - 0x0810, 2, "it_CH", - 0x0812, 15, "ko_KR", /* Korean(Johab)*/ - 0x0813, 2, "nl_BE", - 0x0814, 2, "no_NO_NY", - 0x0816, 2, "pt_PT", - 0x0818, 0, "ro_MD", - 0x0819, 1, "ru_MD", - 0x081a, 0, "sr_CS", - 0x081d, 2, "sv_FI", - 0x082c, 1, "az_AZ", /* Azeri_Cyrillic */ -/* 0x082e, 2, "??", no ISO-639 abbreviation for Lower Sorbian */ - 0x083b, 2, "se_SE", /* Sami, Northern - Sweden */ - 0x083c, 2, "ga_IE", - 0x083e, 2, "ms_BN", - 0x0843, 1, "uz_UZ", /* Uzbek_Cyrillic */ - 0x0845, 14, "bn_BD", /* Bengali */ - 0x0850, 14, "mn_CN", /* Traditional Mongolian */ - 0x085d, 2, "iu_CA", /* Inuktitut */ -/* 0x085f, 2, "??_DZ", no ISO-639 abbreviation for Tamazight */ - 0x086b, 2, "qu_EC", /* Quechua - Ecuador */ - 0x0c01, 6, "ar_EG", - 0x0c04, 13, "zh_HK", - 0x0c07, 2, "de_AT", - 0x0c09, 2, "en_AU", - 0x0c0a, 2, "es_ES", /* (modern sort) */ - 0x0c0c, 2, "fr_CA", - 0x0c1a, 1, "sr_CS", - 0x0c3b, 2, "se_FI", /* Sami, Northern - Finland */ - 0x0c6b, 2, "qu_PE", /* Quechua - Peru */ - 0x1001, 6, "ar_LY", - 0x1004, 11, "zh_SG", - 0x1007, 2, "de_LU", - 0x1009, 2, "en_CA", - 0x100a, 2, "es_GT", - 0x100c, 2, "fr_CH", - 0x101a, 0, "hr_BA", -/* 0x103b, 2, "??_NO", /* Sami, Lule - Norway */ - 0x1401, 6, "ar_DZ", - 0x1404, 13, "zh_MO", - 0x1407, 2, "de_LI", - 0x1409, 2, "en_NZ", - 0x140a, 2, "es_CR", - 0x140c, 2, "fr_LU", - 0x141a, 0, "bs_BA", -/* 0x143b, 2, "??_SE", /* Sami, Lule - Sweden */ - 0x1801, 6, "ar_MA", - 0x1809, 2, "en_IE", - 0x180a, 2, "es_PA", - 0x180c, 2, "fr_MC", - 0x181a, 0, "sr_BA", -/* 0x183b, 2, "??_NO", /* Sami, Southern - Norway */ - 0x1c01, 6, "ar_TN", - 0x1c09, 2, "en_ZA", - 0x1c0a, 2, "es_DO", - 0x1c1a, 1, "sr_BA", -/* 0x1c3b, 2, "??_SE", /* Sami, Southern - Sweden */ - 0x2001, 6, "ar_OM", - 0x2009, 2, "en_JM", - 0x200a, 2, "es_VE", - 0x201a, 0, "bs_BA", /* Bosnian (Cyrillic) */ -/* 0x203b, 2, "??_FI", /* Sami, Skolt - Finland */ - 0x2401, 6, "ar_YE", - 0x2409, 2, "en", /* ("Caribbean", which could be any of many countries) */ - 0x240a, 2, "es_CO", -/* 0x243b, 2, "??_FI", /* Sami, Inari - Finland */ - 0x2801, 6, "ar_SY", - 0x2809, 2, "en_BZ", - 0x280a, 2, "es_PE", - 0x2c01, 6, "ar_JO", - 0x2c09, 2, "en_TT", - 0x2c0a, 2, "es_AR", - 0x3001, 6, "ar_LB", - 0x3009, 2, "en_ZW", - 0x300a, 2, "es_EC", - 0x3401, 6, "ar_KW", - 0x3409, 2, "en_PH", - 0x340a, 2, "es_CL", - 0x3801, 6, "ar_AE", - 0x380a, 2, "es_UY", - 0x3c01, 6, "ar_BH", - 0x3c0a, 2, "es_PY", - 0x4001, 6, "ar_QA", - 0x4009, 2, "en_IN", - 0x400a, 2, "es_BO", - 0x4409, 2, "en_MY", - 0x440a, 2, "es_SV", - 0x4809, 2, "en_SG", - 0x480a, 2, "es_HN", - 0x4c0a, 2, "es_NI", - 0x500a, 2, "es_PR", - 0x540a, 2, "es_US" -}; - -/* - * binary-search our list of LANGID values. If we don't find the - * one we're looking for, mask out the country code and try again - * with just the primary language ID - */ -static int -getLocaleEntryIndex(LANGID langID) -{ - int index = -1; - int tries = 0; - do { - int lo, hi, mid; - lo = 0; - hi = sizeof(langIDMap) / sizeof(LANGIDtoLocale); - while (index == -1 && lo < hi) { - mid = (lo + hi) / 2; - if (langIDMap[mid].langID == langID) { - index = mid; - } else if (langIDMap[mid].langID > langID) { - hi = mid; - } else { - lo = mid + 1; - } - } - langID = PRIMARYLANGID(langID); - ++tries; - } while (index == -1 && tries < 2); - - return index; -} - -static char * -getEncodingInternal(int index) -{ - char * ret = encoding_names[langIDMap[index].encoding]; + switch (codepage) { + case 0: + strcpy(ret, "UTF-8"); + break; + case 874: /* 9:Thai */ + case 932: /* 10:Japanese */ + case 949: /* 12:Korean Extended Wansung */ + case 950: /* 13:Chinese (Taiwan, Hongkong, Macau) */ + case 1361: /* 15:Korean Johab */ + ret[0] = 'M'; + ret[1] = 'S'; + break; + case 936: + strcpy(ret, "GBK"); + break; + case 54936: + strcpy(ret, "GB18030"); + break; + default: + ret[0] = 'C'; + ret[1] = 'p'; + break; + } //Traditional Chinese Windows should use MS950_HKSCS_XP as the //default encoding, if HKSCS patch has been installed. @@ -460,7 +95,7 @@ WCHAR unicodeChar; MultiByteToWideChar(CP_ACP, 0, mbChar, 2, &unicodeChar, 1); if (unicodeChar == 0x92db) { - ret = "MS950_HKSCS_XP"; + strcpy(ret, "MS950_HKSCS_XP"); } } else { //SimpChinese Windows should use GB18030 as the default @@ -476,7 +111,7 @@ strcat(systemPath, "\\FONTS\\SimSun18030.ttc"); if ((f = fopen(systemPath, "r")) != NULL) { fclose(f); - ret = "GB18030"; + strcpy(ret, "GB18030"); } } } @@ -489,25 +124,35 @@ DllExport const char * getEncodingFromLangID(LANGID langID) { - int index = getLocaleEntryIndex(langID); - - if (index != (-1)) { - return getEncodingInternal(index); - } else { - return "Cp1252"; - } + return getEncodingInternal(MAKELCID(langID, SORT_DEFAULT)); } DllExport const char * getJavaIDFromLangID(LANGID langID) { - int index = getLocaleEntryIndex(langID); + char * lang; + char * ctry; + char * vrnt; + char * enc; + char * ret = malloc(16); - if (index != (-1)) { - return langIDMap[index].javaID; + SetupI18nProps(MAKELCID(langID, SORT_DEFAULT), &lang, &ctry, &vrnt, &enc); + if (ctry[0] != '\0') { + if (vrnt[0] != '\0') { + sprintf(ret, "%s_%s_%s", lang, ctry, vrnt); + } else { + sprintf(ret, "%s_%s", lang, ctry); + } } else { - return NULL; + strcpy(ret, lang); } + + free(lang); + free(ctry); + free(vrnt); + free(enc); + + return ret; } /* @@ -644,6 +289,58 @@ return NULL; } +#define PROPSIZE 3 // two-letter + null terminator +static void +SetupI18nProps(LCID lcid, char** language, char** country, + char** variant, char** encoding) { + /* country */ + *country = malloc(PROPSIZE); + if (GetLocaleInfo(lcid, + LOCALE_SISO3166CTRYNAME, *country, PROPSIZE) == 0) { + (*country)[0] = '\0'; + } + + /* language */ + *language = malloc(PROPSIZE); + if (lcid == 0x46c) { + /* Windows returns non-existent language code "ns" for Northern Sotho. + * Defaults to en_US + */ + strcpy(*language, "en"); + strcpy(*country, "US"); + } else if (GetLocaleInfo(lcid, + LOCALE_SISO639LANGNAME, *language, PROPSIZE) == 0) { + if (lcid == 0x465) { + /* for some reason, Windows returns "div" for this Divehi LCID, even though + * there is a two letter language code "dv". Tweak it here. + */ + strcpy(*language, "dv"); + strcpy(*country, "MV"); + } else { + /* defaults to en_US */ + strcpy(*language, "en"); + strcpy(*country, "US"); + } + } + + /* variant */ + *variant = malloc(PROPSIZE); + (*variant)[0] = '\0'; + + /* handling for Norwegian */ + if (strcmp(*language, "nb") == 0) { + strcpy(*language, "no"); + strcpy(*country , "NO"); + } else if (strcmp(*language, "nn") == 0) { + strcpy(*language, "no"); + strcpy(*country , "NO"); + strcpy(*variant, "NY"); + } + + /* encoding */ + *encoding = getEncodingInternal(lcid); +} + java_props_t * GetJavaProperties(JNIEnv* env) { @@ -876,62 +573,31 @@ * query the system for the current system default locale * (which is a Windows LCID value), */ - LANGID langID = LANGIDFROMLCID(GetUserDefaultLCID()); - LANGID sysLangID = LANGIDFROMLCID(GetSystemDefaultLCID()); + LCID userDefaultLCID = GetUserDefaultLCID(); + LCID systemDefaultLCID = GetSystemDefaultLCID(); + LCID userDefaultUILang = GetUserDefaultUILanguage(); { - int index = getLocaleEntryIndex(langID); - - /* - * if we didn't find the LCID that the system returned to us, - * we don't have a Java locale ID that corresponds to it. - * Fall back on en_US. - */ - if (index == -1) { - sprops.language = "en"; - sprops.country = "US"; - sprops.encoding = "Cp1252"; - } else { - - /* otherwise, look up the corresponding Java locale ID from - * the list of Java locale IDs and set up the system properties - * accordingly. - */ - - char* lang; - char* ctry; - char* variant; - - lang = strdup(langIDMap[index].javaID); - ctry = lang; + char * display_encoding; - while (*ctry != '_' && *ctry != 0) - ++ctry; - - if (*ctry == '_') { - *ctry++ = 0; - } - - variant = ctry; - while (*variant != '_' && *variant != 0) - ++variant; + SetupI18nProps(userDefaultUILang, + &sprops.language, + &sprops.country, + &sprops.variant, + &display_encoding); + SetupI18nProps(userDefaultLCID, + &sprops.format_language, + &sprops.format_country, + &sprops.format_variant, + &sprops.encoding); + SetupI18nProps(userDefaultUILang, + &sprops.display_language, + &sprops.display_country, + &sprops.display_variant, + &display_encoding); - if (*variant == '_') { - *variant++ = 0; - } - - sprops.language = lang; - sprops.country = ctry; - sprops.variant = variant; - sprops.encoding = getEncodingInternal(index); - } - index = getLocaleEntryIndex(sysLangID); - if (index == -1) { - sprops.sun_jnu_encoding = "Cp1252"; - } else { - sprops.sun_jnu_encoding = getEncodingInternal(index); - } - if (langID == 0x0c04 && ver.dwMajorVersion == 6) { + sprops.sun_jnu_encoding = getEncodingInternal(systemDefaultLCID); + if (LANGIDFROMLCID(userDefaultLCID) == 0x0c04 && ver.dwMajorVersion == 6) { // MS claims "Vista has built-in support for HKSCS-2004. // All of the HKSCS-2004 characters have Unicode 4.1. // PUA code point assignments". But what it really means
--- a/src/windows/native/sun/windows/awt_DataTransferer.cpp Thu Sep 16 11:16:02 2010 -0700 +++ b/src/windows/native/sun/windows/awt_DataTransferer.cpp Thu Sep 16 11:17:32 2010 -0700 @@ -201,6 +201,7 @@ throw std::bad_alloc(); } env->SetByteArrayRegion(retval, 0, length, (jbyte *)encoding); + free((void *)encoding); return retval; }
--- a/src/windows/native/sun/windows/awt_InputMethod.cpp Thu Sep 16 11:16:02 2010 -0700 +++ b/src/windows/native/sun/windows/awt_InputMethod.cpp Thu Sep 16 11:17:32 2010 -0700 @@ -296,7 +296,9 @@ // so we can reset this flag. g_bUserHasChangedInputLang = FALSE; - return CreateLocaleObject(env, javaLocaleName); + jobject ret = CreateLocaleObject(env, javaLocaleName); + free((void *)javaLocaleName); + return ret; } else { return NULL; } @@ -323,6 +325,7 @@ const char * requested = env->GetStringUTFChars(localeString, &isCopy); if ((current != NULL) && (strcmp(current, requested) == 0)) { env->ReleaseStringUTFChars(localeString, requested); + free((void *)current); return JNI_TRUE; } @@ -352,6 +355,7 @@ env->ReleaseStringUTFChars(localeString, requested); free(hKLList); + free((void *)current); return retValue; CATCH_BAD_ALLOC_RET(JNI_FALSE); @@ -480,6 +484,7 @@ env->SetObjectArrayElement(locales, current, CreateLocaleObject(env, javaLocaleNames[current])); + free((void *)javaLocaleNames[current]); } DASSERT(!safe_ExceptionOccurred(env));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/text/Format/DateFormat/ISO8601ZoneTest.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,217 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4919632 + * @summary Unit test for ISO8601 time zone format support + */ + +import java.text.*; +import java.util.*; + +public class ISO8601ZoneTest { + static final Date TIMESTAMP = new Date(1283758039020L); + + static final String[][] formatData = { + // time zone name, expected output at TIMESTAMP + { "America/Los_Angeles", "2010-09-06T00:27:19.020-07", }, + { "America/Los_Angeles", "2010-09-06T00:27:19.020-0700", }, + { "America/Los_Angeles", "2010-09-06T00:27:19.020-07:00", }, + { "Australia/Sydney", "2010-09-06T17:27:19.020+10", }, + { "Australia/Sydney", "2010-09-06T17:27:19.020+1000", }, + { "Australia/Sydney", "2010-09-06T17:27:19.020+10:00", }, + { "GMT-07:00", "2010-09-06T00:27:19.020-07", }, + { "GMT-07:00", "2010-09-06T00:27:19.020-0700", }, + { "GMT-07:00", "2010-09-06T00:27:19.020-07:00", }, + { "UTC", "2010-09-06T07:27:19.020Z", }, + { "UTC", "2010-09-06T07:27:19.020Z", }, + { "UTC", "2010-09-06T07:27:19.020Z", }, + }; + + static final String[] zones = { + "America/Los_Angeles", "Australia/Sydney", "GMT-07:00", + "UTC", "GMT+05:30", "GMT-01:23", + }; + + static final String[] isoZoneFormats = { + "yyyy-MM-dd'T'HH:mm:ss.SSSX", + "yyyy-MM-dd'T'HH:mm:ss.SSSXX", + "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", + }; + + static final String[][] badData = { + { "X", "1" }, + { "X", "+1" }, + { "X", "-2" }, + { "X", "-24" }, + { "X", "+24" }, + + { "XX", "9" }, + { "XX", "23" }, + { "XX", "234" }, + { "XX", "3456" }, + { "XX", "23456" }, + { "XX", "+1" }, + { "XX", "-12" }, + { "XX", "+123" }, + { "XX", "-12:34" }, + { "XX", "+12:34" }, + { "XX", "-2423" }, + { "XX", "+2423" }, + { "XX", "-1260" }, + { "XX", "+1260" }, + + { "XXX", "9" }, + { "XXX", "23" }, + { "XXX", "234" }, + { "XXX", "3456" }, + { "XXX", "23456" }, + { "XXX", "2:34" }, + { "XXX", "12:4" }, + { "XXX", "12:34" }, + { "XXX", "-1" }, + { "XXX", "+1" }, + { "XXX", "-12" }, + { "XXX", "+12" }, + { "XXX", "-123" }, + { "XXX", "+123" }, + { "XXX", "-1234" }, + { "XXX", "+1234" }, + { "XXX", "+24:23" }, + { "XXX", "+12:60" }, + { "XXX", "+1:23" }, + { "XXX", "+12:3" }, + }; + + static String[] badFormats = { + "XXXX", "XXXXX", "XXXXXX", + }; + + public static void main(String[] args) throws Exception { + TimeZone tz = TimeZone.getDefault(); + + try { + for (int i = 0; i < formatData.length; i++) { + TimeZone.setDefault(TimeZone.getTimeZone(formatData[i][0])); + formatTest(isoZoneFormats[i % isoZoneFormats.length], + formatData[i][1]); + } + + for (String zone : zones) { + TimeZone.setDefault(TimeZone.getTimeZone(zone)); + for (String fmt : isoZoneFormats) { + roundtripTest(fmt); + SimpleDateFormat f = new SimpleDateFormat(fmt); + } + + } + + for (String[] d : badData) { + badDataParsing(d[0], d[1]); + } + + for (String fmt : badFormats) { + badFormat(fmt); + } + } finally { + TimeZone.setDefault(tz); + } + + } + + static void formatTest(String fmt, String expected) throws Exception { + SimpleDateFormat sdf = new SimpleDateFormat(fmt); + String s = sdf.format(TIMESTAMP); + if (!expected.equals(s)) { + throw new RuntimeException("formatTest: got " + s + + ", expected " + expected); + } + + Date d = sdf.parse(s); + if (d.getTime() != TIMESTAMP.getTime()) { + throw new RuntimeException("formatTest: parse(" + s + + "), got " + d.getTime() + + ", expected " + TIMESTAMP.getTime()); + } + + ParsePosition pos = new ParsePosition(0); + d = sdf.parse(s + "123", pos); + if (d.getTime() != TIMESTAMP.getTime()) { + throw new RuntimeException("formatTest: parse(" + s + + "), got " + d.getTime() + + ", expected " + TIMESTAMP.getTime()); + } + if (pos.getIndex() != s.length()) { + throw new RuntimeException("formatTest: wrong resulting parse position: " + + pos.getIndex() + ", expected " + s.length()); + } + } + + static void roundtripTest(String fmt) throws Exception { + SimpleDateFormat sdf = new SimpleDateFormat(fmt); + Date date = new Date(); + + int fractionalHour = sdf.getTimeZone().getOffset(date.getTime()); + fractionalHour %= 3600000; // fraction of hour + + String s = sdf.format(date); + Date pd = sdf.parse(s); + long diffsInMillis = pd.getTime() - date.getTime(); + if (diffsInMillis != 0) { + if (diffsInMillis != fractionalHour) { + throw new RuntimeException("fmt= " + fmt + + ", diff="+diffsInMillis + + ", fraction=" + fractionalHour); + } + } + } + + + static void badDataParsing(String fmt, String text) { + try { + SimpleDateFormat sdf = new SimpleDateFormat(fmt); + sdf.parse(text); + throw new RuntimeException("didn't throw an exception: fmt=" + fmt + + ", text=" + text); + } catch (ParseException e) { + // OK + } + } + + static void badFormat(String fmt) { + try { + SimpleDateFormat sdf = new SimpleDateFormat(fmt); + throw new RuntimeException("Constructor didn't throw an exception: fmt=" + fmt); + } catch (IllegalArgumentException e) { + // OK + } + try { + SimpleDateFormat sdf = new SimpleDateFormat(); + sdf.applyPattern(fmt); + throw new RuntimeException("applyPattern didn't throw an exception: fmt=" + fmt); + } catch (IllegalArgumentException e) { + // OK + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/text/Format/DateFormat/WeekDateTest.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4267450 + * @summary Unit test for week date support + */ + +import java.text.*; +import java.util.*; +import static java.util.GregorianCalendar.*; + +public class WeekDateTest { + static SimpleDateFormat ymdFormat = new SimpleDateFormat("yyyy-MM-dd"); + static SimpleDateFormat ywdFormat = new SimpleDateFormat("YYYY-'W'ww-u"); + static { + ymdFormat.setCalendar(newCalendar()); + ywdFormat.setCalendar(newCalendar()); + } + + // Round-trip Data + static final String[][] roundTripData = { + { "2005-01-01", "2004-W53-6" }, + { "2005-01-02", "2004-W53-7" }, + { "2005-12-31", "2005-W52-6" }, + { "2007-01-01", "2007-W01-1" }, + { "2007-12-30", "2007-W52-7" }, + { "2007-12-31", "2008-W01-1" }, + { "2008-01-01", "2008-W01-2" }, + { "2008-12-29", "2009-W01-1" }, + { "2008-12-31", "2009-W01-3" }, + { "2009-01-01", "2009-W01-4" }, + { "2009-12-31", "2009-W53-4" }, + { "2010-01-03", "2009-W53-7" }, + { "2009-12-31", "2009-W53-4" }, + { "2010-01-01", "2009-W53-5" }, + { "2010-01-02", "2009-W53-6" }, + { "2010-01-03", "2009-W53-7" }, + { "2008-12-28", "2008-W52-7" }, + { "2008-12-29", "2009-W01-1" }, + { "2008-12-30", "2009-W01-2" }, + { "2008-12-31", "2009-W01-3" }, + { "2009-01-01", "2009-W01-4" }, + { "2009-01-01", "2009-W01-4" }, + }; + + // Data for leniency test + static final String[][] leniencyData = { + { "2008-12-28", "2009-W01-0" }, + { "2010-01-04", "2009-W53-8" }, + { "2008-12-29", "2008-W53-1" }, + }; + + static final String[] invalidData = { + "2010-W00-1", + "2010-W55-1", + "2010-W03-0", + "2010-W04-8", + "2010-W04-19" + }; + + public static void main(String[] args) throws Exception { + formatTest(roundTripData); + parseTest(roundTripData); + parseTest(leniencyData); + nonLenientTest(invalidData); + noWeekDateSupport(); + } + + private static void formatTest(String[][] data) throws Exception { + for (String[] dates : data) { + String regularDate = dates[0]; + String weekDate = dates[1]; + Date date = null; + date = ymdFormat.parse(regularDate); + String s = ywdFormat.format(date); + if (!s.equals(weekDate)) { + throw new RuntimeException("format: got="+s+", expecetd="+weekDate); + } + } + } + + private static void parseTest(String[][] data) throws Exception { + for (String[] dates : data) { + String regularDate = dates[0]; + String weekDate = dates[1]; + Date date1 = null, date2 = null; + date1 = ymdFormat.parse(regularDate); + date2 = ywdFormat.parse(weekDate); + if (!date1.equals(date2)) { + System.err.println(regularDate + ": date1 = " + date1); + System.err.println(weekDate + ": date2 = " + date2); + throw new RuntimeException("parse: date1 != date2"); + } + } + } + + + // Non-lenient mode test + private static void nonLenientTest(String[] data) { + ywdFormat.setLenient(false); + for (String date : data) { + try { + Date d = ywdFormat.parse(date); + throw new RuntimeException("No ParseException thrown with " + date); + } catch (ParseException e) { + // OK + } + } + ywdFormat.setLenient(true); + } + + + private static void noWeekDateSupport() throws Exception { + // Tests with Japanese Imperial Calendar that doesn't support week dates. + Calendar jcal = Calendar.getInstance(TimeZone.getTimeZone("GMT"), + new Locale("ja", "JP", "JP")); + + jcal.setFirstDayOfWeek(MONDAY); + jcal.setMinimalDaysInFirstWeek(4); + SimpleDateFormat sdf = new SimpleDateFormat("Y-'W'ww-u"); + sdf.setCalendar(jcal); + Date d = sdf.parse("21-W01-3"); // 2008-12-31 == H20-12-31 + GregorianCalendar gcal = newCalendar(); + gcal.setTime(d); + if (gcal.get(YEAR) != 2008 + || gcal.get(MONTH) != DECEMBER + || gcal.get(DAY_OF_MONTH) != 31) { + String s = String.format("noWeekDateSupport: got %04d-%02d-%02d, expected 2008-12-31%n", + gcal.get(YEAR), + gcal.get(MONTH)+1, + gcal.get(DAY_OF_MONTH)); + throw new RuntimeException(s); + } + } + + private static GregorianCalendar newCalendar() { + // Use GMT to avoid any surprises related DST transitions. + GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT")); + // Setup the ISO 8601 compatible parameters + cal.setFirstDayOfWeek(MONDAY); + cal.setMinimalDaysInFirstWeek(4); + return cal; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/WeekDateTest.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4267450 + * @summary Unit test for week date support + */ + +import java.text.*; +import java.util.*; +import static java.util.GregorianCalendar.*; + +public class WeekDateTest { + + // Week dates are in the ISO numbering for day-of-week. + static int[][][] data = { + // Calendar year-date, Week year-date + {{ 2005, 01, 01}, { 2004, 53, 6}}, + {{ 2005, 01, 02}, { 2004, 53, 7}}, + {{ 2005, 12, 31}, { 2005, 52, 6}}, + {{ 2007, 01, 01}, { 2007, 01, 1}}, + {{ 2007, 12, 30}, { 2007, 52, 7}}, + {{ 2007, 12, 31}, { 2008, 01, 1}}, + {{ 2008, 01, 01}, { 2008, 01, 2}}, + {{ 2008, 12, 29}, { 2009, 01, 1}}, + {{ 2008, 12, 31}, { 2009, 01, 3}}, + {{ 2009, 01, 01}, { 2009, 01, 4}}, + {{ 2009, 12, 31}, { 2009, 53, 4}}, + {{ 2010, 01, 03}, { 2009, 53, 7}}, + {{ 2009, 12, 31}, { 2009, 53, 4}}, + {{ 2010, 01, 01}, { 2009, 53, 5}}, + {{ 2010, 01, 02}, { 2009, 53, 6}}, + {{ 2010, 01, 03}, { 2009, 53, 7}}, + {{ 2008, 12, 28}, { 2008, 52, 7}}, + {{ 2008, 12, 29}, { 2009, 01, 1}}, + {{ 2008, 12, 30}, { 2009, 01, 2}}, + {{ 2008, 12, 31}, { 2009, 01, 3}}, + {{ 2009, 01, 01}, { 2009, 01, 4}} + }; + + // Data for leniency test + static final int[][][] leniencyData = { + {{ 2008, 12, 28}, { 2009, 0, 7}}, + {{ 2008, 12, 21}, { 2009, -1, 7}}, + {{ 2009, 1, 4}, { 2008, 53, 7}}, + }; + + static final int[][] invalidData = { + { 2010, -1, 1}, + { 2010, 00, 1}, + { 2010, 55, 1}, + { 2010, 03, 0}, + { 2010, 04, 8}, + { 2010, 04, 19}, + { 2010, 05, -1}, + }; + + public static void main(String[] args) { + GregorianCalendar cal = newCalendar(); + for (int[][] dates : data) { + int[] expected = dates[0]; + int[] weekDate = dates[1]; + // Convert ISO 8601 day-of-week to Calendar.DAY_OF_WEEK. + int dayOfWeek = getCalendarDayOfWeek(weekDate[2]); + + cal.clear(); + cal.setWeekDate(weekDate[0], weekDate[1], dayOfWeek); + if (cal.get(YEAR) != expected[0] + || cal.get(MONTH)+1 != expected[1] + || cal.get(DAY_OF_MONTH) != expected[2]) { + String s = String.format("got=%4d-%02d-%02d, expected=%4d-%02d-%02d", + cal.get(YEAR), cal.get(MONTH)+1, cal.get(DAY_OF_MONTH), + expected[0], expected[1], expected[2]); + throw new RuntimeException(s); + } + if (cal.getWeekYear() != weekDate[0] + || cal.get(WEEK_OF_YEAR) != weekDate[1] + || cal.get(DAY_OF_WEEK) != dayOfWeek) { + String s = String.format( + "got=%4d-W%02d-%d, expected=%4d-W%02d-%d (not ISO day-of-week)", + cal.getWeekYear(), cal.get(WEEK_OF_YEAR), cal.get(DAY_OF_WEEK), + weekDate[0], weekDate[1], dayOfWeek); + throw new RuntimeException(s); + } + } + + // Test getWeeksInWeekYear(). + // If we avoid the first week of January and the last week of + // December, getWeeksInWeekYear() and + // getActualMaximum(WEEK_OF_YEAR) values should be the same. + for (int year = 2000; year <= 2100; year++) { + cal.clear(); + cal.set(year, JUNE, 1); + int n = cal.getWeeksInWeekYear(); + if (n != cal.getActualMaximum(WEEK_OF_YEAR)) { + String s = String.format("getWeeksInWeekYear() = %d, " + + "getActualMaximum(WEEK_OF_YEAR) = %d%n", + n, cal.getActualMaximum(WEEK_OF_YEAR)); + throw new RuntimeException(s); + } + + cal.setWeekDate(cal.getWeekYear(), 1, MONDAY); + if (cal.getWeeksInWeekYear() != n) { + String s = String.format("first day: got %d, expected %d%n", + cal.getWeeksInWeekYear(), n); + throw new RuntimeException(s); + } + + cal.setWeekDate(cal.getWeekYear(), n, SUNDAY); + if (cal.getWeeksInWeekYear() != n) { + String s = String.format("last day: got %d, expected %d%n", + cal.getWeeksInWeekYear(), n); + throw new RuntimeException(s); + } + } + + // Test lenient mode with out of range values. + for (int[][] dates : leniencyData) { + int[] expected = dates[0]; + int[] weekDate = dates[1]; + // Convert ISO 8601 day-of-week to Calendar.DAY_OF_WEEK. + int dayOfWeek = getCalendarDayOfWeek(weekDate[2]); + + cal.clear(); + cal.setWeekDate(weekDate[0], weekDate[1], dayOfWeek); + if (cal.get(YEAR) != expected[0] + || cal.get(MONTH)+1 != expected[1] + || cal.get(DAY_OF_MONTH) != expected[2]) { + String s = String.format("got=%4d-%02d-%02d, expected=%4d-%02d-%02d", + cal.get(YEAR), cal.get(MONTH)+1, cal.get(DAY_OF_MONTH), + expected[0], expected[1], expected[2]); + throw new RuntimeException(s); + } + } + + // Test non-lenient mode + cal.setLenient(false); + for (int[] date : invalidData) { + cal.clear(); + try { + // Use the raw dayOfWeek value as invalid data + cal.setWeekDate(date[0], date[1], date[2]); + String s = String.format("didn't throw an IllegalArgumentException with" + + " %d, %d, %d",date[0], date[1], date[2]); + throw new RuntimeException(s); + } catch (IllegalArgumentException e) { + // OK + } + } + } + + private static GregorianCalendar newCalendar() { + // Use GMT to avoid any surprises related DST transitions. + GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT")); + if (!cal.isWeekDateSupported()) { + throw new RuntimeException("Week dates not supported"); + } + // Setup the ISO 8601 compatible parameters + cal.setFirstDayOfWeek(MONDAY); + cal.setMinimalDaysInFirstWeek(4); + return cal; + } + + private static int getCalendarDayOfWeek(int isoDayOfWeek) { + return (isoDayOfWeek == 7) ? SUNDAY : isoDayOfWeek + 1; + } +}
--- a/test/java/util/Formatter/Constructors.java Thu Sep 16 11:16:02 2010 -0700 +++ b/test/java/util/Formatter/Constructors.java Thu Sep 16 11:17:32 2010 -0700 @@ -58,7 +58,7 @@ } static void locale(Formatter f) { - locale(f, Locale.getDefault()); + locale(f, Locale.getDefault(Locale.Category.FORMAT)); } static void locale(Formatter f, Locale l) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Locale/LocaleCategory.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import java.util.Locale; + +public class LocaleCategory { + private static Locale base = null; + private static Locale disp = null; + private static Locale fmt = null; + private static String enc = null; + + public static void main(String[] args) { + base = new Locale(System.getProperty("user.language", ""), + System.getProperty("user.country", ""), + System.getProperty("user.variant", "")); + disp = new Locale(System.getProperty("user.language.display", ""), + System.getProperty("user.country.display", ""), + System.getProperty("user.variant.display", "")); + fmt = new Locale(System.getProperty("user.language.format", ""), + System.getProperty("user.country.format", ""), + System.getProperty("user.variant.format", "")); + checkDefault(); + testGetSetDefault(); + } + + static void checkDefault() { + if (!base.equals(Locale.getDefault()) || + !disp.equals(Locale.getDefault(Locale.Category.DISPLAY)) || + !fmt.equals(Locale.getDefault(Locale.Category.FORMAT))) { + throw new RuntimeException("Some of the return values from getDefault() do not agree with the locale derived from \"user.xxxx\" system properties"); + } + } + + static void testGetSetDefault() { + try { + Locale.setDefault(null, null); + throw new RuntimeException("setDefault(null, null) should throw a NullPointerException"); + } catch (NullPointerException npe) {} + + Locale.setDefault(Locale.CHINA); + if (!Locale.CHINA.equals(Locale.getDefault(Locale.Category.DISPLAY)) || + !Locale.CHINA.equals(Locale.getDefault(Locale.Category.FORMAT))) { + throw new RuntimeException("setDefault() should set all default locales for all categories"); + } + } +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Locale/LocaleCategory.sh Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,79 @@ +#!/bin/sh +# +# @test +# @bug 4700857 +# @summary tests for Locale.getDefault(Locale.Category) and +# Locale.setDefault(Locale.Category, Locale) +# @build LocaleCategory +# @run shell/timeout=600 LocaleCategory.sh + +if [ "${TESTSRC}" = "" ] +then + echo "TESTSRC not set. Test cannot execute. Failed." + exit 1 +fi +echo "TESTSRC=${TESTSRC}" +if [ "${TESTJAVA}" = "" ] +then + echo "TESTJAVA not set. Test cannot execute. Failed." + exit 1 +fi +echo "TESTJAVA=${TESTJAVA}" +if [ "${TESTCLASSES}" = "" ] +then + echo "TESTCLASSES not set. Test cannot execute. Failed." + exit 1 +fi +echo "TESTCLASSES=${TESTCLASSES}" +echo "CLASSPATH=${CLASSPATH}" + +# set platform-dependent variables +OS=`uname -s` +case "$OS" in + SunOS | Linux ) + PS=":" + FS="/" + ;; + Windows* ) + PS=";" + FS="\\" + ;; + * ) + echo "Unrecognized system!" + exit 1; + ;; +esac + +# test user.xxx.display user.xxx.format properties + +# run +RUNCMD="${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} -Duser.language.display=ja -Duser.language.format=zh LocaleCategory" + +echo ${RUNCMD} +${RUNCMD} +result=$? + +if [ $result -eq 0 ] +then + echo "Execution successful" +else + echo "Execution of the test case failed." +fi + +# test user.xxx properties overriding user.xxx.display/format + +# run +RUNCMD="${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} -Duser.language=en -Duser.language.display=ja -Duser.language.format=zh LocaleCategory" + +echo ${RUNCMD} +${RUNCMD} +result=$? + +if [ $result -eq 0 ] +then + echo "Execution successful" +else + echo "Execution of the test case failed." +fi + +exit $result
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Locale/LocaleEnhanceTest.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,1293 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStreamReader; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.IllformedLocaleException; +import java.util.List; +import java.util.Locale; +import java.util.Locale.Builder; +import java.util.Set; + +/** + * @test + * @bug 6875847 + * @summary test API changes to Locale + */ +public class LocaleEnhanceTest extends LocaleTestFmwk { + + public static void main(String[] args) throws Exception { + List<String> argList = new ArrayList<String>(); + argList.addAll(Arrays.asList(args)); + argList.add("-nothrow"); + new LocaleEnhanceTest().run(argList.toArray(new String[argList.size()])); + } + + public LocaleEnhanceTest() { + } + + /// + /// Generic sanity tests + /// + + /** A canonical language code. */ + private static final String l = "en"; + + /** A canonical script code.. */ + private static final String s = "Latn"; + + /** A canonical region code. */ + private static final String c = "US"; + + /** A canonical variant code. */ + private static final String v = "NewYork"; + + /** + * Ensure that Builder builds locales that have the expected + * tag and java6 ID. Note the odd cases for the ID. + */ + public void testCreateLocaleCanonicalValid() { + String[] valids = { + "en-Latn-US-NewYork", "en_US_NewYork_#Latn", + "en-Latn-US", "en_US_#Latn", + "en-Latn-NewYork", "en__NewYork_#Latn", // double underscore + "en-Latn", "en_#Latn", + "en-US-NewYork", "en_US_NewYork", + "en-US", "en_US", + "en-NewYork", "en__NewYork", // double underscore + "en", "en", + "und-Latn-US-NewYork", "_US_NewYork_#Latn", + "und-Latn-US", "_US_#Latn", + "und-Latn-NewYork", "", // variant only not supported + "und-Latn", "", + "und-US-NewYork", "_US_NewYork", + "und-US", "_US", + "und-NewYork", "", // variant only not supported + "und", "" + }; + + Builder builder = new Builder(); + + for (int i = 0; i < valids.length; i += 2) { + String tag = valids[i]; + String id = valids[i+1]; + + String idl = (i & 16) == 0 ? l : ""; + String ids = (i & 8) == 0 ? s : ""; + String idc = (i & 4) == 0 ? c : ""; + String idv = (i & 2) == 0 ? v : ""; + + String msg = String.valueOf(i/2) + ": '" + tag + "' "; + + try { + Locale l = builder + .setLanguage(idl) + .setScript(ids) + .setRegion(idc) + .setVariant(idv) + .build(); + assertEquals(msg + "language", idl, l.getLanguage()); + assertEquals(msg + "script", ids, l.getScript()); + assertEquals(msg + "country", idc, l.getCountry()); + assertEquals(msg + "variant", idv, l.getVariant()); + assertEquals(msg + "tag", tag, l.toLanguageTag()); + assertEquals(msg + "id", id, l.toString()); + } + catch (IllegalArgumentException e) { + errln(msg + e.getMessage()); + } + } + } + + /** + * Test that locale construction works with 'multiple variants'. + * <p> + * The string "Newer__Yorker" is treated as three subtags, + * "Newer", "", and "Yorker", and concatenated into one + * subtag by omitting empty subtags and joining the remainer + * with underscores. So the resulting variant tag is "Newer_Yorker". + * Note that 'New' and 'York' are invalid BCP47 variant subtags + * because they are too short. + */ + public void testCreateLocaleMultipleVariants() { + + String[] valids = { + "en-Latn-US-Newer-Yorker", "en_US_Newer_Yorker_#Latn", + "en-Latn-Newer-Yorker", "en__Newer_Yorker_#Latn", + "en-US-Newer-Yorker", "en_US_Newer_Yorker", + "en-Newer-Yorker", "en__Newer_Yorker", + "und-Latn-US-Newer-Yorker", "_US_Newer_Yorker_#Latn", + "und-Latn-Newer-Yorker", "", + "und-US-Newer-Yorker", "_US_Newer_Yorker", + "und-Newer-Yorker", "", + }; + + Builder builder = new Builder(); // lenient variant + + final String idv = "Newer_Yorker"; + for (int i = 0; i < valids.length; i += 2) { + String tag = valids[i]; + String id = valids[i+1]; + + String idl = (i & 8) == 0 ? l : ""; + String ids = (i & 4) == 0 ? s : ""; + String idc = (i & 2) == 0 ? c : ""; + + String msg = String.valueOf(i/2) + ": " + tag + " "; + try { + Locale l = builder + .setLanguage(idl) + .setScript(ids) + .setRegion(idc) + .setVariant(idv) + .build(); + + assertEquals(msg + " language", idl, l.getLanguage()); + assertEquals(msg + " script", ids, l.getScript()); + assertEquals(msg + " country", idc, l.getCountry()); + assertEquals(msg + " variant", idv, l.getVariant()); + + assertEquals(msg + "tag", tag, l.toLanguageTag()); + assertEquals(msg + "id", id, l.toString()); + } + catch (IllegalArgumentException e) { + errln(msg + e.getMessage()); + } + } + } + + /** + * Ensure that all these invalid formats are not recognized by + * forLanguageTag. + */ + public void testCreateLocaleCanonicalInvalidSeparator() { + String[] invalids = { + // trailing separator + "en_Latn_US_NewYork_", + "en_Latn_US_", + "en_Latn_", + "en_", + "_", + + // double separator + "en_Latn_US__NewYork", + "_Latn_US__NewYork", + "en_US__NewYork", + "_US__NewYork", + + // are these OK? + // "en_Latn__US_NewYork", // variant is 'US_NewYork' + // "_Latn__US_NewYork", // variant is 'US_NewYork' + // "en__Latn_US_NewYork", // variant is 'Latn_US_NewYork' + // "en__US_NewYork", // variant is 'US_NewYork' + + // double separator without language or script + "__US", + "__NewYork", + + // triple separator anywhere except within variant + "en___NewYork", + "en_Latn___NewYork", + "_Latn___NewYork", + "___NewYork", + }; + + for (int i = 0; i < invalids.length; ++i) { + String id = invalids[i]; + Locale l = Locale.forLanguageTag(id); + assertEquals(id, "und", l.toLanguageTag()); + } + } + + /** + * Ensure that all current locale ids parse. Use DateFormat as a proxy + * for all current locale ids. + */ + public void testCurrentLocales() { + Locale[] locales = java.text.DateFormat.getAvailableLocales(); + Builder builder = new Builder(); + + for (Locale target : locales) { + String tag = target.toLanguageTag(); + + // the tag recreates the original locale, + // except no_NO_NY + Locale tagResult = Locale.forLanguageTag(tag); + if (!target.getVariant().equals("NY")) { + assertEquals("tagResult", target, tagResult); + } + + // the builder also recreates the original locale, + // except ja_JP_JP, th_TH_TH and no_NO_NY + Locale builderResult = builder.setLocale(target).build(); + if (target.getVariant().length() != 2) { + assertEquals("builderResult", target, builderResult); + } + } + } + + /** + * Ensure that all icu locale ids parse. + */ + public void testIcuLocales() throws Exception { + BufferedReader br = new BufferedReader( + new InputStreamReader( + LocaleEnhanceTest.class.getResourceAsStream("icuLocales.txt"), + "UTF-8")); + String id = null; + while (null != (id = br.readLine())) { + Locale result = Locale.forLanguageTag(id); + assertEquals("ulocale", id, result.toLanguageTag()); + } + } + + /// + /// Compatibility tests + /// + + public void testConstructor() { + // all the old weirdness still holds, no new weirdness + String[][] tests = { + // language to lower case, region to upper, variant unchanged + // short + { "X", "y", "z", "x", "Y" }, + // long + { "xXxXxXxXxXxX", "yYyYyYyYyYyYyYyY", "zZzZzZzZzZzZzZzZ", + "xxxxxxxxxxxx", "YYYYYYYYYYYYYYYY" }, + // mapped language ids + { "he", "IW", "", "iw" }, + { "iw", "IW", "", "iw" }, + { "yi", "DE", "", "ji" }, + { "ji", "DE", "", "ji" }, + { "id", "ID", "", "in" }, + { "in", "ID", "", "in" }, + // special variants + { "ja", "JP", "JP" }, + { "th", "TH", "TH" }, + { "no", "NO", "NY" }, + { "no", "NO", "NY" }, + // no canonicalization of 3-letter language codes + { "eng", "US", "" } + }; + for (int i = 0; i < tests.length; ++ i) { + String[] test = tests[i]; + String id = String.valueOf(i); + Locale locale = new Locale(test[0], test[1], test[2]); + assertEquals(id + " lang", test.length > 3 ? test[3] : test[0], locale.getLanguage()); + assertEquals(id + " region", test.length > 4 ? test[4] : test[1], locale.getCountry()); + assertEquals(id + " variant", test.length > 5 ? test[5] : test[2], locale.getVariant()); + } + } + + /// + /// Locale API tests. + /// + + public void testGetScript() { + // forLanguageTag normalizes case + Locale locale = Locale.forLanguageTag("und-latn"); + assertEquals("forLanguageTag", "Latn", locale.getScript()); + + // Builder normalizes case + locale = new Builder().setScript("LATN").build(); + assertEquals("builder", "Latn", locale.getScript()); + + // empty string is returned, not null, if there is no script + locale = Locale.forLanguageTag("und"); + assertEquals("script is empty string", "", locale.getScript()); + } + + public void testGetExtension() { + // forLanguageTag does NOT normalize to hyphen + Locale locale = Locale.forLanguageTag("und-a-some_ex-tension"); + assertEquals("some_ex-tension", null, locale.getExtension('a')); + + // regular extension + locale = new Builder().setExtension('a', "some-ex-tension").build(); + assertEquals("builder", "some-ex-tension", locale.getExtension('a')); + + // returns null if extension is not present + assertEquals("empty b", null, locale.getExtension('b')); + + // throws exception if extension tag is illegal + new ExpectIAE() { public void call() { Locale.forLanguageTag("").getExtension('\uD800'); }}; + + // 'x' is not an extension, it's a private use tag, but it's accessed through this API + locale = Locale.forLanguageTag("x-y-z-blork"); + assertEquals("x", "y-z-blork", locale.getExtension('x')); + } + + public void testGetExtensionKeys() { + Locale locale = Locale.forLanguageTag("und-a-xx-yy-b-zz-ww"); + Set<Character> result = locale.getExtensionKeys(); + assertEquals("result size", 2, result.size()); + assertTrue("'a','b'", result.contains('a') && result.contains('b')); + + // result is not mutable + try { + result.add('x'); + errln("expected exception on add to extension key set"); + } + catch (UnsupportedOperationException e) { + // ok + } + + // returns empty set if no extensions + locale = Locale.forLanguageTag("und"); + assertTrue("empty result", locale.getExtensionKeys().isEmpty()); + } + + public void testGetUnicodeLocaleAttributes() { + Locale locale = Locale.forLanguageTag("en-US-u-abc-def"); + Set<String> attributes = locale.getUnicodeLocaleAttributes(); + assertEquals("number of attributes", 2, attributes.size()); + assertTrue("attribute abc", attributes.contains("abc")); + assertTrue("attribute def", attributes.contains("def")); + + locale = Locale.forLanguageTag("en-US-u-ca-gregory"); + attributes = locale.getUnicodeLocaleAttributes(); + assertTrue("empty attributes", attributes.isEmpty()); + } + + public void testGetUnicodeLocaleType() { + Locale locale = Locale.forLanguageTag("und-u-co-japanese-nu-thai"); + assertEquals("collation", "japanese", locale.getUnicodeLocaleType("co")); + assertEquals("numbers", "thai", locale.getUnicodeLocaleType("nu")); + + // Unicode locale extension key is case insensitive + assertEquals("key case", "japanese", locale.getUnicodeLocaleType("Co")); + + // if keyword is not present, returns null + assertEquals("locale keyword not present", null, locale.getUnicodeLocaleType("xx")); + + // if no locale extension is set, returns null + locale = Locale.forLanguageTag("und"); + assertEquals("locale extension not present", null, locale.getUnicodeLocaleType("co")); + + // typeless keyword + locale = Locale.forLanguageTag("und-u-kn"); + assertEquals("typeless keyword", "", locale.getUnicodeLocaleType("kn")); + + // invalid keys throw exception + new ExpectIAE() { public void call() { Locale.forLanguageTag("").getUnicodeLocaleType("q"); }}; + new ExpectIAE() { public void call() { Locale.forLanguageTag("").getUnicodeLocaleType("abcdefghi"); }}; + + // null argument throws exception + new ExpectNPE() { public void call() { Locale.forLanguageTag("").getUnicodeLocaleType(null); }}; + } + + public void testGetUnicodeLocaleKeys() { + Locale locale = Locale.forLanguageTag("und-u-co-japanese-nu-thai"); + Set<String> result = locale.getUnicodeLocaleKeys(); + assertEquals("two keys", 2, result.size()); + assertTrue("co and nu", result.contains("co") && result.contains("nu")); + + // result is not modifiable + try { + result.add("frobozz"); + errln("expected exception when add to locale key set"); + } + catch (UnsupportedOperationException e) { + // ok + } + } + + public void testPrivateUseExtension() { + Locale locale = Locale.forLanguageTag("x-y-x-blork-"); + assertEquals("blork", "y-x-blork", locale.getExtension(Locale.PRIVATE_USE_EXTENSION)); + + locale = Locale.forLanguageTag("und"); + assertEquals("no privateuse", null, locale.getExtension(Locale.PRIVATE_USE_EXTENSION)); + } + + public void testToLanguageTag() { + // lots of normalization to test here + // test locales created using the constructor + String[][] tests = { + // empty locale canonicalizes to 'und' + { "", "", "", "und" }, + // variant alone is not a valid Locale, but has a valid language tag + { "", "", "NewYork", "und-NewYork" }, + // standard valid locales + { "", "Us", "", "und-US" }, + { "", "US", "NewYork", "und-US-NewYork" }, + { "EN", "", "", "en" }, + { "EN", "", "NewYork", "en-NewYork" }, + { "EN", "US", "", "en-US" }, + { "EN", "US", "NewYork", "en-US-NewYork" }, + // underscore in variant will be emitted as multiple variant subtags + { "en", "US", "Newer_Yorker", "en-US-Newer-Yorker" }, + // invalid variant subtags are appended as private use + { "en", "US", "new_yorker", "en-US-x-lvariant-new-yorker" }, + // the first invalid variant subtags and following variant subtags are appended as private use + { "en", "US", "Windows_XP_Home", "en-US-Windows-x-lvariant-XP-Home" }, + // too long variant and following variant subtags disappear + { "en", "US", "WindowsVista_SP2", "en-US" }, + // invalid region subtag disappears + { "en", "USA", "", "en" }, + // invalid language tag disappears + { "e", "US", "", "und-US" }, + // three-letter language tags are not canonicalized + { "Eng", "", "", "eng" }, + // legacy languages canonicalize to modern equivalents + { "he", "IW", "", "he-IW" }, + { "iw", "IW", "", "he-IW" }, + { "yi", "DE", "", "yi-DE" }, + { "ji", "DE", "", "yi-DE" }, + { "id", "ID", "", "id-ID" }, + { "in", "ID", "", "id-ID" }, + // special values are converted on output + { "ja", "JP", "JP", "ja-JP-u-ca-japanese-x-lvariant-JP" }, + { "th", "TH", "TH", "th-TH-u-nu-thai-x-lvariant-TH" }, + { "no", "NO", "NY", "nn-NO" } + }; + for (int i = 0; i < tests.length; ++i) { + String[] test = tests[i]; + Locale locale = new Locale(test[0], test[1], test[2]); + assertEquals("case " + i, test[3], locale.toLanguageTag()); + } + } + + public void testForLanguageTag() { + // forLanguageTag implements the 'Language-Tag' production of + // BCP47, so it handles private use and grandfathered tags, + // unlike locale builder. Tags listed below (except for the + // sample private use tags) come from 4646bis Feb 29, 2009. + + String[][] tests = { + // private use tags only + { "x-abc", "und-x-abc" }, + { "x-a-b-c", "und-x-a-b-c" }, + { "x-a-12345678", "und-x-a-12345678" }, + + // grandfathered tags with preferred mappings + { "i-ami", "ami" }, + { "i-bnn", "bnn" }, + { "i-hak", "hak" }, + { "i-klingon", "tlh" }, + { "i-lux", "lb" }, // two-letter tag + { "i-navajo", "nv" }, // two-letter tag + { "i-pwn", "pwn" }, + { "i-tao", "tao" }, + { "i-tay", "tay" }, + { "i-tsu", "tsu" }, + { "art-lojban", "jbo" }, + { "no-bok", "nb" }, + { "no-nyn", "nn" }, + { "sgn-BE-FR", "sfb" }, + { "sgn-BE-NL", "vgt" }, + { "sgn-CH-DE", "sgg" }, + { "zh-guoyu", "cmn" }, + { "zh-hakka", "hak" }, + { "zh-min-nan", "nan" }, + { "zh-xiang", "hsn" }, + + // grandfathered irregular tags, no preferred mappings, drop illegal fields + // from end. If no subtag is mappable, fallback to 'und' + { "i-default", "en-x-i-default" }, + { "i-enochian", "und-x-i-enochian" }, + { "i-mingo", "see-x-i-mingo" }, + { "en-GB-oed", "en-GB-x-oed" }, + { "zh-min", "nan-x-zh-min" }, + { "cel-gaulish", "xtg-x-cel-gaulish" }, + }; + for (int i = 0; i < tests.length; ++i) { + String[] test = tests[i]; + Locale locale = Locale.forLanguageTag(test[0]); + assertEquals("grandfathered case " + i, test[1], locale.toLanguageTag()); + } + + // forLanguageTag ignores everything past the first place it encounters + // a syntax error + tests = new String[][] { + { "valid", + "en-US-Newer-Yorker-a-bb-cc-dd-u-aa-abc-bb-def-x-y-12345678-z", + "en-US-Newer-Yorker-a-bb-cc-dd-u-aa-abc-bb-def-x-y-12345678-z" }, + { "segment of private use tag too long", + "en-US-Newer-Yorker-a-bb-cc-dd-u-aa-abc-bb-def-x-y-123456789-z", + "en-US-Newer-Yorker-a-bb-cc-dd-u-aa-abc-bb-def-x-y" }, + { "segment of private use tag is empty", + "en-US-Newer-Yorker-a-bb-cc-dd-u-aa-abc-bb-def-x-y--12345678-z", + "en-US-Newer-Yorker-a-bb-cc-dd-u-aa-abc-bb-def-x-y" }, + { "first segment of private use tag is empty", + "en-US-Newer-Yorker-a-bb-cc-dd-u-aa-abc-bb-def-x--y-12345678-z", + "en-US-Newer-Yorker-a-bb-cc-dd-u-aa-abc-bb-def" }, + { "illegal extension tag", + "en-US-Newer-Yorker-a-bb-cc-dd-u-aa-abc-bb-def-\uD800-y-12345678-z", + "en-US-Newer-Yorker-a-bb-cc-dd-u-aa-abc-bb-def" }, + { "locale subtag with no value", + "en-US-Newer-Yorker-a-bb-cc-dd-u-aa-abc-bb-x-y-12345678-z", + "en-US-Newer-Yorker-a-bb-cc-dd-u-aa-abc-bb-x-y-12345678-z" }, + { "locale key subtag invalid", + "en-US-Newer-Yorker-a-bb-cc-dd-u-aa-abc-123456789-def-x-y-12345678-z", + "en-US-Newer-Yorker-a-bb-cc-dd-u-aa-abc" }, + // locale key subtag invalid in earlier position, all following subtags + // dropped (and so the locale extension dropped as well) + { "locale key subtag invalid in earlier position", + "en-US-Newer-Yorker-a-bb-cc-dd-u-123456789-abc-bb-def-x-y-12345678-z", + "en-US-Newer-Yorker-a-bb-cc-dd" }, + }; + for (int i = 0; i < tests.length; ++i) { + String[] test = tests[i]; + String msg = "syntax error case " + i + " " + test[0]; + try { + Locale locale = Locale.forLanguageTag(test[1]); + assertEquals(msg, test[2], locale.toLanguageTag()); + } + catch (IllegalArgumentException e) { + errln(msg + " caught exception: " + e); + } + } + + // duplicated extension are just ignored + Locale locale = Locale.forLanguageTag("und-d-aa-00-bb-01-D-AA-10-cc-11-c-1234"); + assertEquals("extension", "aa-00-bb-01", locale.getExtension('d')); + assertEquals("extension c", "1234", locale.getExtension('c')); + + // redundant Unicode locale keys in an extension are ignored + locale = Locale.forLanguageTag("und-u-aa-000-bb-001-bB-002-cc-003-c-1234"); + assertEquals("Unicode keywords", "aa-000-bb-001-cc-003", locale.getExtension(Locale.UNICODE_LOCALE_EXTENSION)); + assertEquals("Duplicated Unicode locake key followed by an extension", "1234", locale.getExtension('c')); + } + + public void testGetDisplayScript() { + Locale latnLocale = Locale.forLanguageTag("und-latn"); + Locale hansLocale = Locale.forLanguageTag("und-hans"); + + Locale oldLocale = Locale.getDefault(); + + Locale.setDefault(Locale.US); + assertEquals("latn US", "Latin", latnLocale.getDisplayScript()); + assertEquals("hans US", "Simplified Han", hansLocale.getDisplayScript()); + + // note, no localization data yet other than US + // this should break when we have localization data for DE + Locale.setDefault(Locale.GERMANY); + assertEquals("latn DE", "Latin", latnLocale.getDisplayScript()); + assertEquals("hans DE", "Simplified Han", hansLocale.getDisplayScript()); + + Locale.setDefault(oldLocale); + } + + public void testGetDisplayScriptWithLocale() { + Locale latnLocale = Locale.forLanguageTag("und-latn"); + Locale hansLocale = Locale.forLanguageTag("und-hans"); + + assertEquals("latn US", "Latin", latnLocale.getDisplayScript(Locale.US)); + assertEquals("hans US", "Simplified Han", hansLocale.getDisplayScript(Locale.US)); + + // note, no localization data yet other than US + // this should break when we have localization data for DE + assertEquals("latn DE", "Latin", latnLocale.getDisplayScript(Locale.GERMANY)); + assertEquals("hans DE", "Simplified Han", hansLocale.getDisplayScript(Locale.GERMANY)); + } + + /// + /// Builder tests + /// + + public void testBuilderSetLocale() { + Builder builder = new Builder(); + Builder lenientBuilder = new Builder(); + + String languageTag = "en-Latn-US-NewYork-a-bb-ccc-u-co-japanese-x-y-z"; + String target = "en-Latn-US-NewYork-a-bb-ccc-u-co-japanese-x-y-z"; + + Locale locale = Locale.forLanguageTag(languageTag); + Locale result = lenientBuilder + .setLocale(locale) + .build(); + assertEquals("long tag", target, result.toLanguageTag()); + assertEquals("long tag", locale, result); + + // null is illegal + new BuilderNPE("locale") { + public void call() { b.setLocale(null); } + }; + + // builder canonicalizes the three legacy locales: + // ja_JP_JP, th_TH_TH, no_NY_NO. + locale = builder.setLocale(new Locale("ja", "JP", "JP")).build(); + assertEquals("ja_JP_JP languagetag", "ja-JP-u-ca-japanese", locale.toLanguageTag()); + assertEquals("ja_JP_JP variant", "", locale.getVariant()); + + locale = builder.setLocale(new Locale("th", "TH", "TH")).build(); + assertEquals("th_TH_TH languagetag", "th-TH-u-nu-thai", locale.toLanguageTag()); + assertEquals("th_TH_TH variant", "", locale.getVariant()); + + locale = builder.setLocale(new Locale("no", "NO", "NY")).build(); + assertEquals("no_NO_NY languagetag", "nn-NO", locale.toLanguageTag()); + assertEquals("no_NO_NY language", "nn", locale.getLanguage()); + assertEquals("no_NO_NY variant", "", locale.getVariant()); + + // non-canonical, non-legacy locales are invalid + new BuilderILE("123_4567_89") { + public void call() { + b.setLocale(new Locale("123", "4567", "89")); + } + }; + } + + public void testBuilderSetLanguageTag() { + String source = "eN-LaTn-Us-NewYork-A-Xx-B-Yy-X-1-2-3"; + String target = "en-Latn-US-NewYork-a-xx-b-yy-x-1-2-3"; + Builder builder = new Builder(); + String result = builder + .setLanguageTag(source) + .build() + .toLanguageTag(); + assertEquals("language", target, result); + + // redundant extensions cause a failure + new BuilderILE() { public void call() { b.setLanguageTag("und-a-xx-yy-b-ww-A-00-11-c-vv"); }}; + + // redundant Unicode locale extension keys within an Unicode locale extension cause a failure + new BuilderILE() { public void call() { b.setLanguageTag("und-u-nu-thai-NU-chinese-xx-1234"); }}; + } + + public void testBuilderSetLanguage() { + // language is normalized to lower case + String source = "eN"; + String target = "en"; + String defaulted = ""; + Builder builder = new Builder(); + String result = builder + .setLanguage(source) + .build() + .getLanguage(); + assertEquals("en", target, result); + + // setting with empty resets + result = builder + .setLanguage(target) + .setLanguage("") + .build() + .getLanguage(); + assertEquals("empty", defaulted, result); + + // setting with null resets too + result = builder + .setLanguage(target) + .setLanguage(null) + .build() + .getLanguage(); + assertEquals("null", defaulted, result); + + // language codes must be 2-8 alpha + // for forwards compatibility, 4-alpha and 5-8 alpha (registered) + // languages are accepted syntax + new BuilderILE("q", "abcdefghi", "13") { public void call() { b.setLanguage(arg); }}; + + // language code validation is NOT performed, any 2-8-alpha passes + assertNotNull("2alpha", builder.setLanguage("zz").build()); + assertNotNull("8alpha", builder.setLanguage("abcdefgh").build()); + + // three-letter language codes are NOT canonicalized to two-letter + result = builder + .setLanguage("eng") + .build() + .getLanguage(); + assertEquals("eng", "eng", result); + } + + public void testBuilderSetScript() { + // script is normalized to title case + String source = "lAtN"; + String target = "Latn"; + String defaulted = ""; + Builder builder = new Builder(); + String result = builder + .setScript(source) + .build() + .getScript(); + assertEquals("script", target, result); + + // setting with empty resets + result = builder + .setScript(target) + .setScript("") + .build() + .getScript(); + assertEquals("empty", defaulted, result); + + // settting with null also resets + result = builder + .setScript(target) + .setScript(null) + .build() + .getScript(); + assertEquals("null", defaulted, result); + + // ill-formed script codes throw IAE + // must be 4alpha + new BuilderILE("abc", "abcde", "l3tn") { public void call() { b.setScript(arg); }}; + + // script code validation is NOT performed, any 4-alpha passes + assertEquals("4alpha", "Wxyz", builder.setScript("wxyz").build().getScript()); + } + + public void testBuilderSetRegion() { + // region is normalized to upper case + String source = "uS"; + String target = "US"; + String defaulted = ""; + Builder builder = new Builder(); + String result = builder + .setRegion(source) + .build() + .getCountry(); + assertEquals("us", target, result); + + // setting with empty resets + result = builder + .setRegion(target) + .setRegion("") + .build() + .getCountry(); + assertEquals("empty", defaulted, result); + + // setting with null also resets + result = builder + .setRegion(target) + .setRegion(null) + .build() + .getCountry(); + assertEquals("null", defaulted, result); + + // ill-formed region codes throw IAE + // 2 alpha or 3 numeric + new BuilderILE("q", "abc", "12", "1234", "a3", "12a") { public void call() { b.setRegion(arg); }}; + + // region code validation is NOT performed, any 2-alpha or 3-digit passes + assertEquals("2alpha", "ZZ", builder.setRegion("ZZ").build().getCountry()); + assertEquals("3digit", "000", builder.setRegion("000").build().getCountry()); + } + + public void testBuilderSetVariant() { + // Variant case is not normalized in lenient variant mode + String source = "NewYork"; + String target = source; + String defaulted = ""; + Builder builder = new Builder(); + String result = builder + .setVariant(source) + .build() + .getVariant(); + assertEquals("NewYork", target, result); + + result = builder + .setVariant("NeWeR_YoRkEr") + .build() + .toLanguageTag(); + assertEquals("newer yorker", "und-NeWeR-YoRkEr", result); + + // subtags of variant are NOT reordered + result = builder + .setVariant("zzzzz_yyyyy_xxxxx") + .build() + .getVariant(); + assertEquals("zyx", "zzzzz_yyyyy_xxxxx", result); + + // setting to empty resets + result = builder + .setVariant(target) + .setVariant("") + .build() + .getVariant(); + assertEquals("empty", defaulted, result); + + // setting to null also resets + result = builder + .setVariant(target) + .setVariant(null) + .build() + .getVariant(); + assertEquals("null", defaulted, result); + + // ill-formed variants throw IAE + // digit followed by 3-7 characters, or alpha followed by 4-8 characters. + new BuilderILE("abcd", "abcdefghi", "1ab", "1abcdefgh") { public void call() { b.setVariant(arg); }}; + + // 4 characters is ok as long as the first is a digit + assertEquals("digit+3alpha", "1abc", builder.setVariant("1abc").build().getVariant()); + + // all subfields must conform + new BuilderILE("abcde-fg") { public void call() { b.setVariant(arg); }}; + } + + public void testBuilderSetExtension() { + // upper case characters are normalized to lower case + final char sourceKey = 'a'; + final String sourceValue = "aB-aBcdefgh-12-12345678"; + String target = "ab-abcdefgh-12-12345678"; + Builder builder = new Builder(); + String result = builder + .setExtension(sourceKey, sourceValue) + .build() + .getExtension(sourceKey); + assertEquals("extension", target, result); + + // setting with empty resets + result = builder + .setExtension(sourceKey, sourceValue) + .setExtension(sourceKey, "") + .build() + .getExtension(sourceKey); + assertEquals("empty", null, result); + + // setting with null also resets + result = builder + .setExtension(sourceKey, sourceValue) + .setExtension(sourceKey, null) + .build() + .getExtension(sourceKey); + assertEquals("null", null, result); + + // ill-formed extension keys throw IAE + // must be in [0-9a-ZA-Z] + new BuilderILE("$") { public void call() { b.setExtension('$', sourceValue); }}; + + // each segment of value must be 2-8 alphanum + new BuilderILE("ab-cd-123456789") { public void call() { b.setExtension(sourceKey, arg); }}; + + // no multiple hyphens. + new BuilderILE("ab--cd") { public void call() { b.setExtension(sourceKey, arg); }}; + + // locale extension key has special handling + Locale locale = builder + .setExtension('u', "co-japanese") + .build(); + assertEquals("locale extension", "japanese", locale.getUnicodeLocaleType("co")); + + // locale extension has same behavior with set locale keyword + Locale locale2 = builder + .setUnicodeLocaleKeyword("co", "japanese") + .build(); + assertEquals("locales with extension", locale, locale2); + + // setting locale extension overrides all previous calls to setLocaleKeyword + Locale locale3 = builder + .setExtension('u', "xxx-nu-thai") + .build(); + assertEquals("remove co", null, locale3.getUnicodeLocaleType("co")); + assertEquals("override thai", "thai", locale3.getUnicodeLocaleType("nu")); + assertEquals("override attribute", 1, locale3.getUnicodeLocaleAttributes().size()); + + // setting locale keyword extends values already set by the locale extension + Locale locale4 = builder + .setUnicodeLocaleKeyword("co", "japanese") + .build(); + assertEquals("extend", "japanese", locale4.getUnicodeLocaleType("co")); + assertEquals("extend", "thai", locale4.getUnicodeLocaleType("nu")); + + // locale extension subtags are reordered + result = builder + .clear() + .setExtension('u', "456-123-zz-123-yy-456-xx-789") + .build() + .toLanguageTag(); + assertEquals("reorder", "und-u-123-456-xx-789-yy-456-zz-123", result); + + // multiple keyword types + result = builder + .clear() + .setExtension('u', "nu-thai-foobar") + .build() + .getUnicodeLocaleType("nu"); + assertEquals("multiple types", "thai-foobar", result); + + // redundant locale extensions are ignored + result = builder + .clear() + .setExtension('u', "nu-thai-NU-chinese-xx-1234") + .build() + .toLanguageTag(); + assertEquals("duplicate keys", "und-u-nu-thai-xx-1234", result); + } + + public void testBuilderAddUnicodeLocaleAttribute() { + Builder builder = new Builder(); + Locale locale = builder + .addUnicodeLocaleAttribute("def") + .addUnicodeLocaleAttribute("abc") + .build(); + + Set<String> uattrs = locale.getUnicodeLocaleAttributes(); + assertEquals("number of attributes", 2, uattrs.size()); + assertTrue("attribute abc", uattrs.contains("abc")); + assertTrue("attribute def", uattrs.contains("def")); + + // remove attribute + locale = builder.removeUnicodeLocaleAttribute("xxx") + .build(); + + assertEquals("remove bogus", 2, uattrs.size()); + + // add duplicate + locale = builder.addUnicodeLocaleAttribute("abc") + .build(); + assertEquals("add duplicate", 2, uattrs.size()); + + // null attribute throws NPE + new BuilderNPE("null attribute") { public void call() { b.addUnicodeLocaleAttribute(null); }}; + + // illformed attribute throws IllformedLocaleException + new BuilderILE("invalid attribute") { public void call() { b.addUnicodeLocaleAttribute("ca"); }}; + } + + public void testBuildersetUnicodeLocaleKeyword() { + // Note: most behavior is tested in testBuilderSetExtension + Builder builder = new Builder(); + Locale locale = builder + .setUnicodeLocaleKeyword("co", "japanese") + .setUnicodeLocaleKeyword("nu", "thai") + .build(); + assertEquals("co", "japanese", locale.getUnicodeLocaleType("co")); + assertEquals("nu", "thai", locale.getUnicodeLocaleType("nu")); + assertEquals("keys", 2, locale.getUnicodeLocaleKeys().size()); + + // can clear a keyword by setting to null, others remain + String result = builder + .setUnicodeLocaleKeyword("co", null) + .build() + .toLanguageTag(); + assertEquals("empty co", "und-u-nu-thai", result); + + // locale keyword extension goes when all keywords are gone + result = builder + .setUnicodeLocaleKeyword("nu", null) + .build() + .toLanguageTag(); + assertEquals("empty nu", "und", result); + + // locale keywords are ordered independent of order of addition + result = builder + .setUnicodeLocaleKeyword("zz", "012") + .setUnicodeLocaleKeyword("aa", "345") + .build() + .toLanguageTag(); + assertEquals("reordered", "und-u-aa-345-zz-012", result); + + // null keyword throws NPE + new BuilderNPE("keyword") { public void call() { b.setUnicodeLocaleKeyword(null, "thai"); }}; + + // well-formed keywords are two alphanum + new BuilderILE("a", "abc") { public void call() { b.setUnicodeLocaleKeyword(arg, "value"); }}; + + // well-formed values are 3-8 alphanum + new BuilderILE("ab", "abcdefghi") { public void call() { b.setUnicodeLocaleKeyword("ab", arg); }}; + } + + public void testBuilderPrivateUseExtension() { + // normalizes hyphens to underscore, case to lower + String source = "c-B-a"; + String target = "c-b-a"; + Builder builder = new Builder(); + String result = builder + .setExtension(Locale.PRIVATE_USE_EXTENSION, source) + .build() + .getExtension(Locale.PRIVATE_USE_EXTENSION); + assertEquals("abc", target, result); + + // multiple hyphens are ill-formed + new BuilderILE("a--b") { public void call() { b.setExtension(Locale.PRIVATE_USE_EXTENSION, arg); }}; + } + + public void testBuilderClear() { + String monster = "en-latn-US-NewYork-a-bb-cc-u-co-japanese-x-z-y-x-x"; + Builder builder = new Builder(); + Locale locale = Locale.forLanguageTag(monster); + String result = builder + .setLocale(locale) + .clear() + .build() + .toLanguageTag(); + assertEquals("clear", "und", result); + } + + public void testBuilderRemoveUnicodeAttribute() { + // tested in testBuilderAddUnicodeAttribute + } + + public void testBuilderBuild() { + // tested in other test methods + } + + public void testSerialize() { + final Locale[] testLocales = { + Locale.ROOT, + new Locale("en"), + new Locale("en", "US"), + new Locale("en", "US", "Win"), + new Locale("en", "US", "Win_XP"), + new Locale("ja", "JP"), + new Locale("ja", "JP", "JP"), + new Locale("th", "TH"), + new Locale("th", "TH", "TH"), + new Locale("no", "NO"), + new Locale("nb", "NO"), + new Locale("nn", "NO"), + new Locale("no", "NO", "NY"), + new Locale("nn", "NO", "NY"), + new Locale("he", "IL"), + new Locale("he", "IL", "var"), + new Locale("Language", "Country", "Variant"), + new Locale("", "US"), + new Locale("", "", "Java"), + Locale.forLanguageTag("en-Latn-US"), + Locale.forLanguageTag("zh-Hans"), + Locale.forLanguageTag("zh-Hant-TW"), + Locale.forLanguageTag("ja-JP-u-ca-japanese"), + Locale.forLanguageTag("und-Hant"), + Locale.forLanguageTag("und-a-123-456"), + Locale.forLanguageTag("en-x-java"), + Locale.forLanguageTag("th-TH-u-ca-buddist-nu-thai-x-lvariant-TH"), + }; + + for (Locale locale : testLocales) { + try { + // write + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(bos); + oos.writeObject(locale); + + // read + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + ObjectInputStream ois = new ObjectInputStream(bis); + Object o = ois.readObject(); + + assertEquals("roundtrip " + locale, locale, o); + } catch (Exception e) { + errln(locale + " encountered exception:" + e.getLocalizedMessage()); + } + } + } + + public void testDeserialize6() { + final String TESTFILEPREFIX = "java6locale_"; + + File dataDir = null; + String dataDirName = System.getProperty("serialized.data.dir"); + if (dataDirName == null) { + URL resdirUrl = getClass().getClassLoader().getResource("serialized"); + if (resdirUrl != null) { + try { + dataDir = new File(resdirUrl.toURI()); + } catch (URISyntaxException urie) { + } + } + } else { + dataDir = new File(dataDirName); + } + + if (dataDir == null || !dataDir.isDirectory()) { + errln("Could not locate the serialized test case data location"); + return; + } + + File[] files = dataDir.listFiles(); + for (File testfile : files) { + if (testfile.isDirectory()) { + continue; + } + String name = testfile.getName(); + if (!name.startsWith(TESTFILEPREFIX)) { + continue; + } + Locale locale; + String locStr = name.substring(TESTFILEPREFIX.length()); + if (locStr.equals("ROOT")) { + locale = Locale.ROOT; + } else { + String[] fields = locStr.split("_", 3); + String lang = fields[0]; + String country = (fields.length >= 2) ? fields[1] : ""; + String variant = (fields.length == 3) ? fields[2] : ""; + locale = new Locale(lang, country, variant); + } + + // desrialize + try { + FileInputStream fis = new FileInputStream(testfile); + ObjectInputStream ois = new ObjectInputStream(fis); + + Object o = ois.readObject(); + assertEquals("Deserialize Java 6 Locale " + locale, o, locale); + ois.close(); + } catch (Exception e) { + errln("Exception while reading " + testfile.getAbsolutePath() + " - " + e.getMessage()); + } + } + } + + /// + /// utility asserts + /// + + private void assertTrue(String msg, boolean v) { + if (!v) { + errln(msg + ": expected true"); + } + } + + private void assertFalse(String msg, boolean v) { + if (v) { + errln(msg + ": expected false"); + } + } + + private void assertEquals(String msg, Object e, Object v) { + if (e == null ? v != null : !e.equals(v)) { + if (e != null) { + e = "'" + e + "'"; + } + if (v != null) { + v = "'" + v + "'"; + } + errln(msg + ": expected " + e + " but got " + v); + } + } + + private void assertNotEquals(String msg, Object e, Object v) { + if (e == null ? v == null : e.equals(v)) { + if (e != null) { + e = "'" + e + "'"; + } + errln(msg + ": expected not equal " + e); + } + } + + private void assertNull(String msg, Object o) { + if (o != null) { + errln(msg + ": expected null but got '" + o + "'"); + } + } + + private void assertNotNull(String msg, Object o) { + if (o == null) { + errln(msg + ": expected non null"); + } + } + + // not currently used, might get rid of exceptions from the API + private abstract class ExceptionTest { + private final Class<? extends Exception> exceptionClass; + + ExceptionTest(Class<? extends Exception> exceptionClass) { + this.exceptionClass = exceptionClass; + } + + public void run() { + String failMsg = null; + try { + call(); + failMsg = "expected " + exceptionClass.getName() + " but no exception thrown."; + } + catch (Exception e) { + if (!exceptionClass.isAssignableFrom(e.getClass())) { + failMsg = "expected " + exceptionClass.getName() + " but caught " + e; + } + } + if (failMsg != null) { + String msg = message(); + msg = msg == null ? "" : msg + " "; + errln(msg + failMsg); + } + } + + public String message() { + return null; + } + + public abstract void call(); + } + + private abstract class ExpectNPE extends ExceptionTest { + ExpectNPE() { + super(NullPointerException.class); + run(); + } + } + + private abstract class BuilderNPE extends ExceptionTest { + protected final String msg; + protected final Builder b = new Builder(); + + BuilderNPE(String msg) { + super(NullPointerException.class); + + this.msg = msg; + + run(); + } + + public String message() { + return msg; + } + } + + private abstract class ExpectIAE extends ExceptionTest { + ExpectIAE() { + super(IllegalArgumentException.class); + run(); + } + } + + private abstract class BuilderILE extends ExceptionTest { + protected final String[] args; + protected final Builder b = new Builder(); + + protected String arg; // mutates during call + + BuilderILE(String... args) { + super(IllformedLocaleException.class); + + this.args = args; + + run(); + } + + public void run() { + for (String arg : args) { + this.arg = arg; + super.run(); + } + } + + public String message() { + return "arg: '" + arg + "'"; + } + } +}
--- a/test/java/util/Locale/LocaleTestFmwk.java Thu Sep 16 11:16:02 2010 -0700 +++ b/test/java/util/Locale/LocaleTestFmwk.java Thu Sep 16 11:17:32 2010 -0700 @@ -1,10 +1,12 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -20,6 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ + /* * * @@ -112,6 +115,8 @@ prompt = true; } else if (args[i].equals("-nothrow")) { nothrow = true; + } else if (args[i].equals("-exitcode")) { + exitcode = true; } else { Object m = testMethods.get( args[i] ); if( m != null ) { @@ -165,7 +170,12 @@ } } if (nothrow) { - System.exit(errorCount); + if (exitcode) { + System.exit(errorCount); + } + if (errorCount > 0) { + throw new IllegalArgumentException("encountered " + errorCount + " errors"); + } } } @@ -235,7 +245,7 @@ */ void usage() { System.out.println(getClass().getName() + - ": [-verbose] [-nothrow] [-prompt] [test names]"); + ": [-verbose] [-nothrow] [-exitcode] [-prompt] [test names]"); System.out.println("test names:"); Enumeration methodNames = testMethods.keys(); @@ -246,6 +256,7 @@ private boolean prompt = false; private boolean nothrow = false; + private boolean exitcode = false; protected boolean verbose = false; private PrintWriter log;
--- a/test/java/util/Locale/PrintDefaultLocale.java Thu Sep 16 11:16:02 2010 -0700 +++ b/test/java/util/Locale/PrintDefaultLocale.java Thu Sep 16 11:17:32 2010 -0700 @@ -231,8 +231,15 @@ public class PrintDefaultLocale { public static void main(String[] args) { - System.out.println(Locale.getDefault().toString()); - System.out.println(Locale.getDefault().getDisplayName(Locale.US)); - System.out.println(Charset.defaultCharset()); + System.out.printf("default locale: ID: %s, Name: %s\n", + Locale.getDefault().toString(), + Locale.getDefault().getDisplayName(Locale.US)); + System.out.printf("display locale: ID: %s, Name: %s\n", + Locale.getDefault(Locale.Category.DISPLAY).toString(), + Locale.getDefault(Locale.Category.DISPLAY).getDisplayName(Locale.US)); + System.out.printf("format locale: ID: %s, Name: %s\n", + Locale.getDefault(Locale.Category.FORMAT).toString(), + Locale.getDefault(Locale.Category.FORMAT).getDisplayName(Locale.US)); + System.out.printf("default charset: %s\n", Charset.defaultCharset()); } }
--- a/test/java/util/Locale/data/deflocale.c Thu Sep 16 11:16:02 2010 -0700 +++ b/test/java/util/Locale/data/deflocale.c Thu Sep 16 11:17:32 2010 -0700 @@ -29,100 +29,233 @@ * WARNING: This tool directly modifies the locale info in the Windows registry. * It may not work with the Windows versions after Windows XP SP2. Also, * if the test did not complete or was manually killed, you will need to reset - * the user default locale in the Control Panel manually. + * the user default locale in the Control Panel manually. This executable has + * to be run with the "Administrator" privilege. * * Usage: "deflocale.exe <java launcher> PrintDefaultLocale * - * How to compile: "cl deflocale.c advapi32.lib" + * How to compile: "cl -DUNICODE -D_UNICODE deflocale.c user32.lib advapi32.lib" */ #include <windows.h> #include <stdio.h> #include <memory.h> -char* launcher; -char szBuffer[MAX_PATH]; +wchar_t* launcher; +wchar_t szBuffer[MAX_PATH]; LCID LCIDArray[1024]; int numLCIDs = 0; +BOOL isWin7orUp = FALSE; -void testLCID(int anLCID) { +// for Windows 7 +BOOL (WINAPI * pfnEnumSystemLocalesEx)(LPVOID, DWORD, LPARAM, LPVOID); +BOOL (WINAPI * pfnEnumUILanguages)(LPVOID, DWORD, LPARAM); +LCID (WINAPI * pfnLocaleNameToLCID)(LPCWSTR, DWORD); +int (WINAPI * pfnLCIDToLocaleName)(LCID, LPWSTR, int, DWORD); +wchar_t* LocaleNamesArray[1024]; +wchar_t* UILangNamesArray[1024]; +int numLocaleNames = 0; +int numUILangNames = 0; + +void launchAndWait() { + STARTUPINFO si; + PROCESS_INFORMATION pi; + + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + ZeroMemory(&pi, sizeof(pi)); + if (CreateProcess(NULL, launcher, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)==0) { + wprintf(L"CreateProcess failed with the error code: %x\n", GetLastError()); + } + + WaitForSingleObject( pi.hProcess, INFINITE ); +} + +void testLocale(int anLCID, wchar_t* pName) { HKEY hk; - printf("\n"); - printf("OS Locale (lcid: %x): ", anLCID); + if (pName != NULL && wcslen(pName) == 2) { + // ignore language only locale. + return; + } + + wprintf(L"\n"); + wprintf(L"OS Locale (lcid: %x", anLCID); + if (pName != NULL) { + wprintf(L", name: %s", pName); + } GetLocaleInfo(anLCID, LOCALE_SENGLANGUAGE, szBuffer, MAX_PATH); - printf("%s (", szBuffer); + wprintf(L"): %s (", szBuffer); GetLocaleInfo(anLCID, LOCALE_SENGCOUNTRY, szBuffer, MAX_PATH); - printf("%s) - ", szBuffer); + wprintf(L"%s) - ", szBuffer); GetLocaleInfo(anLCID, LOCALE_IDEFAULTANSICODEPAGE, szBuffer, MAX_PATH); - printf("%s\n", szBuffer); + wprintf(L"%s\n", szBuffer); fflush(0); - if (RegOpenKeyEx(HKEY_CURRENT_USER, "Control Panel\\International", 0, KEY_READ | KEY_WRITE, &hk) == ERROR_SUCCESS) { - BYTE original[16]; - BYTE test[16]; - DWORD cb = 16; - STARTUPINFO si; - PROCESS_INFORMATION pi; + if (RegOpenKeyEx(HKEY_CURRENT_USER, L"Control Panel\\International", 0, KEY_READ | KEY_WRITE, &hk) == ERROR_SUCCESS) { + wchar_t originalLocale[16]; + wchar_t testLocale[16]; + wchar_t* pKeyName; + DWORD cb = sizeof(originalLocale); + DWORD cbTest; - RegQueryValueEx(hk, "Locale", 0, 0, original, &cb); - sprintf(test, "%08x", anLCID); - RegSetValueEx(hk, "Locale", 0, REG_SZ, test, cb); - - ZeroMemory(&si, sizeof(si)); - si.cb = sizeof(si); - ZeroMemory(&pi, sizeof(pi)); - if (CreateProcess(NULL, launcher, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)==0) { - printf("CreateProcess failed with the error code: %x\n", GetLastError()); + if (isWin7orUp) { + pKeyName = L"LocaleName"; + wcscpy(testLocale, pName); + cbTest = wcslen(pName) * sizeof(wchar_t); + } else { + pKeyName = L"Locale"; + swprintf(testLocale, L"%08x", anLCID); + cbTest = sizeof(wchar_t) * 8; } - WaitForSingleObject( pi.hProcess, INFINITE ); - - RegSetValueEx(hk, "Locale", 0, REG_SZ, original, cb); + RegQueryValueEx(hk, pKeyName, 0, 0, (LPBYTE)originalLocale, &cb); + RegSetValueEx(hk, pKeyName, 0, REG_SZ, (LPBYTE)testLocale, cbTest ); + launchAndWait(); + RegSetValueEx(hk, pKeyName, 0, REG_SZ, (LPBYTE)originalLocale, cb); RegCloseKey(hk); } } -BOOL CALLBACK EnumLocaleProc(LPTSTR lpLocaleStr) { - sscanf(lpLocaleStr, "%08x", &LCIDArray[numLCIDs]); +void testUILang(wchar_t* pName) { + HKEY hk; + + wprintf(L"\n"); + wprintf(L"OS UI Language (name: %s)\n", pName); + fflush(0); + + if (RegOpenKeyEx(HKEY_CURRENT_USER, L"Control Panel\\Desktop", 0, KEY_READ | KEY_WRITE, &hk) == ERROR_SUCCESS) { + wchar_t originalUILang[16]; + wchar_t testUILang[16]; + wchar_t* pKeyName; + DWORD cb = sizeof(originalUILang); + DWORD cbTest = wcslen(pName) * sizeof(wchar_t); + + pKeyName = L"PreferredUILanguages"; + wcscpy(testUILang, pName); + cbTest = wcslen(pName) * sizeof(wchar_t); + + RegQueryValueEx(hk, pKeyName, 0, 0, (LPBYTE)originalUILang, &cb); + RegSetValueEx(hk, pKeyName, 0, REG_SZ, (LPBYTE)testUILang, cbTest); + launchAndWait(); + RegSetValueEx(hk, pKeyName, 0, REG_SZ, (LPBYTE)originalUILang, cb); + RegCloseKey(hk); + } +} + +BOOL CALLBACK EnumLocalesProc(LPWSTR lpLocaleStr) { + swscanf(lpLocaleStr, L"%08x", &LCIDArray[numLCIDs]); numLCIDs ++; return TRUE; } +BOOL CALLBACK EnumLocalesProcEx(LPWSTR lpLocaleStr, DWORD flags, LPARAM lp) { + wchar_t* pName = malloc((wcslen(lpLocaleStr) + 1) * sizeof(wchar_t *)); + wcscpy(pName, lpLocaleStr); + LocaleNamesArray[numLocaleNames] = pName; + numLocaleNames ++; + + return TRUE; +} + +BOOL CALLBACK EnumUILanguagesProc(LPWSTR lpUILangStr, LPARAM lp) { + wchar_t* pName = malloc((wcslen(lpUILangStr) + 1) * sizeof(wchar_t *)); + wcscpy(pName, lpUILangStr); + UILangNamesArray[numUILangNames] = pName; + numUILangNames ++; + + return TRUE; +} + int sortLCIDs(LCID * pLCID1, LCID * pLCID2) { if (*pLCID1 < *pLCID2) return (-1); if (*pLCID1 == *pLCID2) return 0; - if (*pLCID1 > *pLCID2) return 1; + return 1; +} + +int sortLocaleNames(wchar_t** ppName1, wchar_t** ppName2) { + LCID l1 = pfnLocaleNameToLCID(*ppName1, 0); + LCID l2 = pfnLocaleNameToLCID(*ppName2, 0); + return sortLCIDs(&l1, &l2); } int main(int argc, char** argv) { OSVERSIONINFO osvi; - LPTSTR commandline = GetCommandLine(); + LPWSTR commandline = GetCommandLine(); int i; osvi.dwOSVersionInfoSize = sizeof(osvi); GetVersionEx(&osvi); - printf("# OSVersionInfo\n"); - printf("# MajorVersion: %d\n", osvi.dwMajorVersion); - printf("# MinorVersion: %d\n", osvi.dwMinorVersion); - printf("# BuildNumber: %d\n", osvi.dwBuildNumber); - printf("# CSDVersion: %s\n", osvi.szCSDVersion); - printf("\n"); + wprintf(L"# OSVersionInfo\n"); + wprintf(L"# MajorVersion: %d\n", osvi.dwMajorVersion); + wprintf(L"# MinorVersion: %d\n", osvi.dwMinorVersion); + wprintf(L"# BuildNumber: %d\n", osvi.dwBuildNumber); + wprintf(L"# CSDVersion: %s\n", osvi.szCSDVersion); + wprintf(L"\n"); fflush(0); - launcher = strchr(commandline, ' ')+1; - while (*launcher == ' ') { + launcher = wcschr(commandline, L' ')+1; + while (*launcher == L' ') { launcher++; } - // Enumerate locales - EnumSystemLocales(EnumLocaleProc, LCID_INSTALLED); + isWin7orUp = (osvi.dwMajorVersion > 6) || + (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion >= 1); + + if (!isWin7orUp) { + // Enumerate locales + EnumSystemLocales(EnumLocalesProc, LCID_INSTALLED); - // Sort LCIDs - qsort(LCIDArray, numLCIDs, sizeof(LCID), (void *)sortLCIDs); + // Sort LCIDs + qsort(LCIDArray, numLCIDs, sizeof(LCID), (void *)sortLCIDs); + } else { + // For Windows 7, use "LocaleName" registry key for the user locale + // as they seem to switch from "Locale". + HMODULE hmod = GetModuleHandle(L"kernel32"); + *(FARPROC*)&pfnEnumSystemLocalesEx = + GetProcAddress(hmod, "EnumSystemLocalesEx"); + *(FARPROC*)&pfnEnumUILanguages = + GetProcAddress(hmod, "EnumUILanguagesW"); + *(FARPROC*)&pfnLocaleNameToLCID = + GetProcAddress(hmod, "LocaleNameToLCID"); + *(FARPROC*)&pfnLCIDToLocaleName = + GetProcAddress(hmod, "LCIDToLocaleName"); + if (pfnEnumSystemLocalesEx != NULL && + pfnEnumUILanguages != NULL && + pfnLocaleNameToLCID != NULL && + pfnLCIDToLocaleName != NULL) { + // Enumerate locales + pfnEnumSystemLocalesEx(EnumLocalesProcEx, + 1, // LOCALE_WINDOWS + (LPARAM)NULL, NULL); + // Enumerate UI Languages. + pfnEnumUILanguages(EnumUILanguagesProc, + 0x8, // MUI_LANGUAGE_NAME + (LPARAM)NULL); + } else { + wprintf(L"Could not get needed entry points. quitting.\n"); + exit(-1); + } + + // Sort LocaleNames + qsort(LocaleNamesArray, numLocaleNames, + sizeof(wchar_t*), (void *)sortLocaleNames); + qsort(UILangNamesArray, numUILangNames, + sizeof(wchar_t*), (void *)sortLocaleNames); + } // Execute enumeration of Java default locales - for (i = 0; i < numLCIDs; i ++) { - testLCID(LCIDArray[i]); + if (isWin7orUp) { + for (i = 0; i < numLocaleNames; i ++) { + testLocale(pfnLocaleNameToLCID(LocaleNamesArray[i], 0), + LocaleNamesArray[i]); + } + for (i = 0; i < numUILangNames; i ++) { + testUILang(UILangNamesArray[i]); + } + } else { + for (i = 0; i < numLCIDs; i ++) { + testLocale(LCIDArray[i], NULL); + } } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Locale/data/deflocale.input Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,7 @@ +# data file for deflocale.sh. Each line must have two locales in the following order. +# +# LC_CTYPE LC_MESSAGES + + ja_JP.UTF-8 zh_CN.UTF-8 + zh_CN.UTF-8 en_US.UTF-8 + C zh_CN.UTF-8
--- a/test/java/util/Locale/data/deflocale.jds3 Thu Sep 16 11:16:02 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1793 +0,0 @@ -Sun Java Desktop System, Release 3 - build 36 -Assembled 23 May 2005 -Linux dnm-dtf-012 2.6.5-7.139-default #1 Fri Jan 14 15:41:33 UTC 2005 i686 i686 i386 GNU/Linux - -OS Locale: aa_DJ -aa_DJ -Afar (Djibouti) -ISO-8859-1 - -OS Locale: aa_ER -aa_ER -Afar (Eritrea) -UTF-8 - -OS Locale: aa_ER.utf8 -aa_ER -Afar (Eritrea) -UTF-8 - -OS Locale: aa_ER@saaho -aa_ER -Afar (Eritrea) -UTF-8 - -OS Locale: aa_ET -aa_ET -Afar (Ethiopia) -UTF-8 - -OS Locale: aa_ET.utf8 -aa_ET -Afar (Ethiopia) -UTF-8 - -OS Locale: af_ZA -af_ZA -Afrikaans (South Africa) -ISO-8859-1 - -OS Locale: am_ET -am_ET -Amharic (Ethiopia) -UTF-8 - -OS Locale: am_ET.utf8 -am_ET -Amharic (Ethiopia) -UTF-8 - -OS Locale: an_ES -an_ES -Aragonese (Spain) -ISO-8859-15 - -OS Locale: ar_AE -ar_AE -Arabic (United Arab Emirates) -ISO-8859-6 - -OS Locale: ar_AE.utf8 -ar_AE -Arabic (United Arab Emirates) -UTF-8 - -OS Locale: ar_BH -ar_BH -Arabic (Bahrain) -ISO-8859-6 - -OS Locale: ar_BH.utf8 -ar_BH -Arabic (Bahrain) -UTF-8 - -OS Locale: ar_DZ -ar_DZ -Arabic (Algeria) -ISO-8859-6 - -OS Locale: ar_DZ.utf8 -ar_DZ -Arabic (Algeria) -UTF-8 - -OS Locale: ar_EG -ar_EG -Arabic (Egypt) -ISO-8859-6 - -OS Locale: ar_EG.utf8 -ar_EG -Arabic (Egypt) -UTF-8 - -OS Locale: ar_IN -ar_IN -Arabic (India) -UTF-8 - -OS Locale: ar_IN.utf8 -ar_IN -Arabic (India) -UTF-8 - -OS Locale: ar_IQ -ar_IQ -Arabic (Iraq) -ISO-8859-6 - -OS Locale: ar_IQ.utf8 -ar_IQ -Arabic (Iraq) -UTF-8 - -OS Locale: ar_JO -ar_JO -Arabic (Jordan) -ISO-8859-6 - -OS Locale: ar_JO.utf8 -ar_JO -Arabic (Jordan) -UTF-8 - -OS Locale: ar_KW -ar_KW -Arabic (Kuwait) -ISO-8859-6 - -OS Locale: ar_KW.utf8 -ar_KW -Arabic (Kuwait) -UTF-8 - -OS Locale: ar_LB -ar_LB -Arabic (Lebanon) -ISO-8859-6 - -OS Locale: ar_LB.utf8 -ar_LB -Arabic (Lebanon) -UTF-8 - -OS Locale: ar_LY -ar_LY -Arabic (Libya) -ISO-8859-6 - -OS Locale: ar_LY.utf8 -ar_LY -Arabic (Libya) -UTF-8 - -OS Locale: ar_MA -ar_MA -Arabic (Morocco) -ISO-8859-6 - -OS Locale: ar_MA.utf8 -ar_MA -Arabic (Morocco) -UTF-8 - -OS Locale: ar_OM -ar_OM -Arabic (Oman) -ISO-8859-6 - -OS Locale: ar_OM.utf8 -ar_OM -Arabic (Oman) -UTF-8 - -OS Locale: ar_QA -ar_QA -Arabic (Qatar) -ISO-8859-6 - -OS Locale: ar_QA.utf8 -ar_QA -Arabic (Qatar) -UTF-8 - -OS Locale: ar_SA -ar_SA -Arabic (Saudi Arabia) -ISO-8859-6 - -OS Locale: ar_SA.utf8 -ar_SA -Arabic (Saudi Arabia) -UTF-8 - -OS Locale: ar_SD -ar_SD -Arabic (Sudan) -ISO-8859-6 - -OS Locale: ar_SD.utf8 -ar_SD -Arabic (Sudan) -UTF-8 - -OS Locale: ar_SY -ar_SY -Arabic (Syria) -ISO-8859-6 - -OS Locale: ar_SY.utf8 -ar_SY -Arabic (Syria) -UTF-8 - -OS Locale: ar_TN -ar_TN -Arabic (Tunisia) -ISO-8859-6 - -OS Locale: ar_TN.utf8 -ar_TN -Arabic (Tunisia) -UTF-8 - -OS Locale: ar_YE -ar_YE -Arabic (Yemen) -ISO-8859-6 - -OS Locale: ar_YE.utf8 -ar_YE -Arabic (Yemen) -UTF-8 - -OS Locale: az_AZ.utf8 -az_AZ -Azerbaijani (Azerbaijan) -UTF-8 - -OS Locale: be_BY -be_BY -Belarusian (Belarus) -windows-1251 - -OS Locale: be_BY.utf8 -be_BY -Belarusian (Belarus) -UTF-8 - -OS Locale: bg_BG -bg_BG -Bulgarian (Bulgaria) -windows-1251 - -OS Locale: bg_BG.utf8 -bg_BG -Bulgarian (Bulgaria) -UTF-8 - -OS Locale: bn_BD -bn_BD -Bengali (Bangladesh) -UTF-8 - -OS Locale: bn_BD.utf8 -bn_BD -Bengali (Bangladesh) -UTF-8 - -OS Locale: bn_IN -bn_IN -Bengali (India) -UTF-8 - -OS Locale: bn_IN.utf8 -bn_IN -Bengali (India) -UTF-8 - -OS Locale: br_FR -br_FR -Breton (France) -ISO-8859-1 - -OS Locale: br_FR@euro -br_FR -Breton (France) -ISO-8859-15 - -OS Locale: bs_BA -bs_BA -Bosnian (Bosnia and Herzegovina) -ISO-8859-2 - -OS Locale: byn_ER -en_ER -English (Eritrea) -UTF-8 - -OS Locale: byn_ER.utf8 -en_ER -English (Eritrea) -UTF-8 - -OS Locale: ca_ES -ca_ES -Catalan (Spain) -ISO-8859-1 - -OS Locale: ca_ES.utf8 -ca_ES -Catalan (Spain) -UTF-8 - -OS Locale: ca_ES@euro -ca_ES -Catalan (Spain) -ISO-8859-15 - -OS Locale: cs_CZ -cs_CZ -Czech (Czech Republic) -ISO-8859-2 - -OS Locale: cs_CZ.utf8 -cs_CZ -Czech (Czech Republic) -UTF-8 - -OS Locale: cy_GB -cy_GB -Welsh (United Kingdom) -UTF-8 - -OS Locale: cy_GB.utf8 -cy_GB -Welsh (United Kingdom) -UTF-8 - -OS Locale: da_DK -da_DK -Danish (Denmark) -ISO-8859-1 - -OS Locale: da_DK.utf8 -da_DK -Danish (Denmark) -UTF-8 - -OS Locale: da_DK@euro -da_DK -Danish (Denmark) -ISO-8859-1 - -OS Locale: de_AT -de_AT -German (Austria) -ISO-8859-1 - -OS Locale: de_AT.utf8 -de_AT -German (Austria) -UTF-8 - -OS Locale: de_AT@euro -de_AT -German (Austria) -ISO-8859-15 - -OS Locale: de_BE -de_BE -German (Belgium) -ISO-8859-1 - -OS Locale: de_BE.utf8 -de_BE -German (Belgium) -UTF-8 - -OS Locale: de_BE@euro -de_BE -German (Belgium) -ISO-8859-15 - -OS Locale: de_CH -de_CH -German (Switzerland) -ISO-8859-1 - -OS Locale: de_CH.utf8 -de_CH -German (Switzerland) -UTF-8 - -OS Locale: de_DE -de_DE -German (Germany) -ISO-8859-1 - -OS Locale: de_DE.utf8 -de_DE -German (Germany) -UTF-8 - -OS Locale: de_DE@euro -de_DE -German (Germany) -ISO-8859-15 - -OS Locale: de_LU -de_LU -German (Luxembourg) -ISO-8859-1 - -OS Locale: de_LU.utf8 -de_LU -German (Luxembourg) -UTF-8 - -OS Locale: de_LU@euro -de_LU -German (Luxembourg) -ISO-8859-15 - -OS Locale: el_GR -el_GR -Greek (Greece) -ISO-8859-7 - -OS Locale: el_GR.utf8 -el_GR -Greek (Greece) -UTF-8 - -OS Locale: en_AU -en_AU -English (Australia) -ISO-8859-1 - -OS Locale: en_AU.utf8 -en_AU -English (Australia) -UTF-8 - -OS Locale: en_BE -en_BE -English (Belgium) -ISO-8859-1 - -OS Locale: en_BE.utf8 -en_BE -English (Belgium) -UTF-8 - -OS Locale: en_BE@euro -en_BE -English (Belgium) -ISO-8859-15 - -OS Locale: en_BW -en_BW -English (Botswana) -ISO-8859-1 - -OS Locale: en_BW.utf8 -en_BW -English (Botswana) -UTF-8 - -OS Locale: en_CA -en_CA -English (Canada) -ISO-8859-1 - -OS Locale: en_CA.utf8 -en_CA -English (Canada) -UTF-8 - -OS Locale: en_DK -en_DK -English (Denmark) -ISO-8859-1 - -OS Locale: en_DK.utf8 -en_DK -English (Denmark) -UTF-8 - -OS Locale: en_GB -en_GB -English (United Kingdom) -ISO-8859-1 - -OS Locale: en_GB.iso885915 -en_GB -English (United Kingdom) -ISO-8859-15 - -OS Locale: en_GB.utf8 -en_GB -English (United Kingdom) -UTF-8 - -OS Locale: en_HK -en_HK -English (Hong Kong) -ISO-8859-1 - -OS Locale: en_HK.utf8 -en_HK -English (Hong Kong) -UTF-8 - -OS Locale: en_IE -en_IE -English (Ireland) -ISO-8859-1 - -OS Locale: en_IE.utf8 -en_IE -English (Ireland) -UTF-8 - -OS Locale: en_IE@euro -en_IE -English (Ireland) -ISO-8859-15 - -OS Locale: en_IN -en_IN -English (India) -UTF-8 - -OS Locale: en_NZ -en_NZ -English (New Zealand) -ISO-8859-1 - -OS Locale: en_NZ.utf8 -en_NZ -English (New Zealand) -UTF-8 - -OS Locale: en_PH -en_PH -English (Philippines) -ISO-8859-1 - -OS Locale: en_PH.utf8 -en_PH -English (Philippines) -UTF-8 - -OS Locale: en_SG -en_SG -English (Singapore) -ISO-8859-1 - -OS Locale: en_SG.utf8 -en_SG -English (Singapore) -UTF-8 - -OS Locale: en_US -en_US -English (United States) -ISO-8859-1 - -OS Locale: en_US.iso885915 -en_US -English (United States) -ISO-8859-15 - -OS Locale: en_US.utf8 -en_US -English (United States) -UTF-8 - -OS Locale: en_ZA -en_ZA -English (South Africa) -ISO-8859-1 - -OS Locale: en_ZA.utf8 -en_ZA -English (South Africa) -UTF-8 - -OS Locale: en_ZW -en_ZW -English (Zimbabwe) -ISO-8859-1 - -OS Locale: en_ZW.utf8 -en_ZW -English (Zimbabwe) -UTF-8 - -OS Locale: es_AR -es_AR -Spanish (Argentina) -ISO-8859-1 - -OS Locale: es_AR.utf8 -es_AR -Spanish (Argentina) -UTF-8 - -OS Locale: es_BO -es_BO -Spanish (Bolivia) -ISO-8859-1 - -OS Locale: es_BO.utf8 -es_BO -Spanish (Bolivia) -UTF-8 - -OS Locale: es_CL -es_CL -Spanish (Chile) -ISO-8859-1 - -OS Locale: es_CL.utf8 -es_CL -Spanish (Chile) -UTF-8 - -OS Locale: es_CO -es_CO -Spanish (Colombia) -ISO-8859-1 - -OS Locale: es_CO.utf8 -es_CO -Spanish (Colombia) -UTF-8 - -OS Locale: es_CR -es_CR -Spanish (Costa Rica) -ISO-8859-1 - -OS Locale: es_CR.utf8 -es_CR -Spanish (Costa Rica) -UTF-8 - -OS Locale: es_DO -es_DO -Spanish (Dominican Republic) -ISO-8859-1 - -OS Locale: es_DO.utf8 -es_DO -Spanish (Dominican Republic) -UTF-8 - -OS Locale: es_EC -es_EC -Spanish (Ecuador) -ISO-8859-1 - -OS Locale: es_EC.utf8 -es_EC -Spanish (Ecuador) -UTF-8 - -OS Locale: es_ES -es_ES -Spanish (Spain) -ISO-8859-1 - -OS Locale: es_ES.utf8 -es_ES -Spanish (Spain) -UTF-8 - -OS Locale: es_ES@euro -es_ES -Spanish (Spain) -ISO-8859-15 - -OS Locale: es_GT -es_GT -Spanish (Guatemala) -ISO-8859-1 - -OS Locale: es_GT.utf8 -es_GT -Spanish (Guatemala) -UTF-8 - -OS Locale: es_HN -es_HN -Spanish (Honduras) -ISO-8859-1 - -OS Locale: es_HN.utf8 -es_HN -Spanish (Honduras) -UTF-8 - -OS Locale: es_MX -es_MX -Spanish (Mexico) -ISO-8859-1 - -OS Locale: es_MX.utf8 -es_MX -Spanish (Mexico) -UTF-8 - -OS Locale: es_NI -es_NI -Spanish (Nicaragua) -ISO-8859-1 - -OS Locale: es_NI.utf8 -es_NI -Spanish (Nicaragua) -UTF-8 - -OS Locale: es_PA -es_PA -Spanish (Panama) -ISO-8859-1 - -OS Locale: es_PA.utf8 -es_PA -Spanish (Panama) -UTF-8 - -OS Locale: es_PE -es_PE -Spanish (Peru) -ISO-8859-1 - -OS Locale: es_PE.utf8 -es_PE -Spanish (Peru) -UTF-8 - -OS Locale: es_PR -es_PR -Spanish (Puerto Rico) -ISO-8859-1 - -OS Locale: es_PR.utf8 -es_PR -Spanish (Puerto Rico) -UTF-8 - -OS Locale: es_PY -es_PY -Spanish (Paraguay) -ISO-8859-1 - -OS Locale: es_PY.utf8 -es_PY -Spanish (Paraguay) -UTF-8 - -OS Locale: es_SV -es_SV -Spanish (El Salvador) -ISO-8859-1 - -OS Locale: es_SV.utf8 -es_SV -Spanish (El Salvador) -UTF-8 - -OS Locale: es_US -es_US -Spanish (United States) -ISO-8859-1 - -OS Locale: es_US.utf8 -es_US -Spanish (United States) -UTF-8 - -OS Locale: es_UY -es_UY -Spanish (Uruguay) -ISO-8859-1 - -OS Locale: es_UY.utf8 -es_UY -Spanish (Uruguay) -UTF-8 - -OS Locale: es_VE -es_VE -Spanish (Venezuela) -ISO-8859-1 - -OS Locale: es_VE.utf8 -es_VE -Spanish (Venezuela) -UTF-8 - -OS Locale: et_EE -et_EE -Estonian (Estonia) -ISO-8859-1 - -OS Locale: et_EE.iso885915 -et_EE -Estonian (Estonia) -ISO-8859-15 - -OS Locale: et_EE.utf8 -et_EE -Estonian (Estonia) -UTF-8 - -OS Locale: eu_ES -eu_ES -Basque (Spain) -ISO-8859-1 - -OS Locale: eu_ES.utf8 -eu_ES -Basque (Spain) -UTF-8 - -OS Locale: eu_ES@euro -eu_ES -Basque (Spain) -ISO-8859-15 - -OS Locale: fa_IR -fa_IR -Persian (Iran) -UTF-8 - -OS Locale: fa_IR.utf8 -fa_IR -Persian (Iran) -UTF-8 - -OS Locale: fi_FI -fi_FI -Finnish (Finland) -ISO-8859-1 - -OS Locale: fi_FI.utf8 -fi_FI -Finnish (Finland) -UTF-8 - -OS Locale: fi_FI@euro -fi_FI -Finnish (Finland) -ISO-8859-15 - -OS Locale: fo_FO -fo_FO -Faroese (Faroe Islands) -ISO-8859-1 - -OS Locale: fo_FO.utf8 -fo_FO -Faroese (Faroe Islands) -UTF-8 - -OS Locale: fr_BE -fr_BE -French (Belgium) -ISO-8859-1 - -OS Locale: fr_BE.utf8 -fr_BE -French (Belgium) -UTF-8 - -OS Locale: fr_BE@euro -fr_BE -French (Belgium) -ISO-8859-15 - -OS Locale: fr_CA -fr_CA -French (Canada) -ISO-8859-1 - -OS Locale: fr_CA.utf8 -fr_CA -French (Canada) -UTF-8 - -OS Locale: fr_CH -fr_CH -French (Switzerland) -ISO-8859-1 - -OS Locale: fr_CH.utf8 -fr_CH -French (Switzerland) -UTF-8 - -OS Locale: fr_FR -fr_FR -French (France) -ISO-8859-1 - -OS Locale: fr_FR.utf8 -fr_FR -French (France) -UTF-8 - -OS Locale: fr_FR@euro -fr_FR -French (France) -ISO-8859-15 - -OS Locale: fr_LU -fr_LU -French (Luxembourg) -ISO-8859-1 - -OS Locale: fr_LU.utf8 -fr_LU -French (Luxembourg) -UTF-8 - -OS Locale: fr_LU@euro -fr_LU -French (Luxembourg) -ISO-8859-15 - -OS Locale: ga_IE -ga_IE -Irish (Ireland) -ISO-8859-1 - -OS Locale: ga_IE.utf8 -ga_IE -Irish (Ireland) -UTF-8 - -OS Locale: ga_IE@euro -ga_IE -Irish (Ireland) -ISO-8859-15 - -OS Locale: gd_GB -gd_GB -Scottish Gaelic (United Kingdom) -ISO-8859-15 - -OS Locale: gez_ER -en_ER -English (Eritrea) -UTF-8 - -OS Locale: gez_ER@abegede -en_ER -English (Eritrea) -UTF-8 - -OS Locale: gez_ET -en_ET -English (Ethiopia) -UTF-8 - -OS Locale: gez_ET@abegede -en_ET -English (Ethiopia) -UTF-8 - -OS Locale: gl_ES -gl_ES -Gallegan (Spain) -ISO-8859-1 - -OS Locale: gl_ES.utf8 -gl_ES -Gallegan (Spain) -UTF-8 - -OS Locale: gl_ES@euro -gl_ES -Gallegan (Spain) -ISO-8859-15 - -OS Locale: gu_IN -gu_IN -Gujarati (India) -UTF-8 - -OS Locale: gv_GB -gv_GB -Manx (United Kingdom) -ISO-8859-1 - -OS Locale: gv_GB.utf8 -gv_GB -Manx (United Kingdom) -UTF-8 - -OS Locale: he_IL -iw_IL -Hebrew (Israel) -ISO-8859-8 - -OS Locale: he_IL.utf8 -iw_IL -Hebrew (Israel) -UTF-8 - -OS Locale: hi_IN -hi_IN -Hindi (India) -UTF-8 - -OS Locale: hi_IN.utf8 -hi_IN -Hindi (India) -UTF-8 - -OS Locale: hr_HR -hr_HR -Croatian (Croatia) -ISO-8859-2 - -OS Locale: hr_HR.utf8 -hr_HR -Croatian (Croatia) -UTF-8 - -OS Locale: hu_HU -hu_HU -Hungarian (Hungary) -ISO-8859-2 - -OS Locale: hu_HU.utf8 -hu_HU -Hungarian (Hungary) -UTF-8 - -OS Locale: id_ID -in_ID -Indonesian (Indonesia) -ISO-8859-1 - -OS Locale: id_ID.utf8 -in_ID -Indonesian (Indonesia) -UTF-8 - -OS Locale: is_IS -is_IS -Icelandic (Iceland) -ISO-8859-1 - -OS Locale: is_IS.utf8 -is_IS -Icelandic (Iceland) -UTF-8 - -OS Locale: it_CH -it_CH -Italian (Switzerland) -ISO-8859-1 - -OS Locale: it_CH.utf8 -it_CH -Italian (Switzerland) -UTF-8 - -OS Locale: it_IT -it_IT -Italian (Italy) -ISO-8859-1 - -OS Locale: it_IT.utf8 -it_IT -Italian (Italy) -UTF-8 - -OS Locale: it_IT@euro -it_IT -Italian (Italy) -ISO-8859-15 - -OS Locale: iw_IL -iw_IL -Hebrew (Israel) -ISO-8859-8 - -OS Locale: iw_IL.utf8 -iw_IL -Hebrew (Israel) -UTF-8 - -OS Locale: ja_JP.eucjp -ja_JP -Japanese (Japan) -x-euc-jp-linux - -OS Locale: ja_JP.sjis -ja_JP -Japanese (Japan) -Shift_JIS - -OS Locale: ja_JP.utf8 -ja_JP -Japanese (Japan) -UTF-8 - -OS Locale: ka_GE -ka_GE -Georgian (Georgia) -UTF-8 - -OS Locale: kk_KZ -kk_KZ -Kazakh (Kazakhstan) -UTF-8 - -OS Locale: kl_GL -kl_GL -Greenlandic (Greenland) -ISO-8859-1 - -OS Locale: kl_GL.utf8 -kl_GL -Greenlandic (Greenland) -UTF-8 - -OS Locale: kn_IN -kn_IN -Kannada (India) -UTF-8 - -OS Locale: ko_KR.euckr -ko_KR -Korean (South Korea) -EUC-KR - -OS Locale: ko_KR.utf8 -ko_KR -Korean (South Korea) -UTF-8 - -OS Locale: kw_GB -kw_GB -Cornish (United Kingdom) -ISO-8859-1 - -OS Locale: kw_GB.utf8 -kw_GB -Cornish (United Kingdom) -UTF-8 - -OS Locale: lg_UG -lg_UG -Ganda (Uganda) -UTF-8 - -OS Locale: lo_LA -lo_LA -Lao (Laos) -UTF-8 - -OS Locale: lt_LT -lt_LT -Lithuanian (Lithuania) -ISO-8859-13 - -OS Locale: lt_LT.utf8 -lt_LT -Lithuanian (Lithuania) -UTF-8 - -OS Locale: lv_LV -lv_LV -Latvian (Latvia) -ISO-8859-13 - -OS Locale: lv_LV.utf8 -lv_LV -Latvian (Latvia) -UTF-8 - -OS Locale: mi_NZ -mi_NZ -Maori (New Zealand) -ISO-8859-13 - -OS Locale: mk_MK -mk_MK -Macedonian (Macedonia) -ISO-8859-5 - -OS Locale: mk_MK.utf8 -mk_MK -Macedonian (Macedonia) -UTF-8 - -OS Locale: ml_IN -ml_IN -Malayalam (India) -UTF-8 - -OS Locale: ml_IN.utf8 -ml_IN -Malayalam (India) -UTF-8 - -OS Locale: mn_MN -mn_MN -Mongolian (Mongolia) -UTF-8 - -OS Locale: mn_MN.utf8 -mn_MN -Mongolian (Mongolia) -UTF-8 - -OS Locale: mr_IN -mr_IN -Marathi (India) -UTF-8 - -OS Locale: mr_IN.utf8 -mr_IN -Marathi (India) -UTF-8 - -OS Locale: ms_MY -ms_MY -Malay (Malaysia) -ISO-8859-1 - -OS Locale: ms_MY.utf8 -ms_MY -Malay (Malaysia) -UTF-8 - -OS Locale: mt_MT -mt_MT -Maltese (Malta) -ISO-8859-3 - -OS Locale: mt_MT.utf8 -mt_MT -Maltese (Malta) -UTF-8 - -OS Locale: nb_NO -nb_NO -Norwegian Bokmål (Norway) -ISO-8859-1 - -OS Locale: nb_NO.utf8 -nb_NO -Norwegian BokmÃ¥l (Norway) -UTF-8 - -OS Locale: ne_NP -ne_NP -Nepali (Nepal) -UTF-8 - -OS Locale: ne_NP.utf8 -ne_NP -Nepali (Nepal) -UTF-8 - -OS Locale: nl_BE -nl_BE -Dutch (Belgium) -ISO-8859-1 - -OS Locale: nl_BE.utf8 -nl_BE -Dutch (Belgium) -UTF-8 - -OS Locale: nl_BE@euro -nl_BE -Dutch (Belgium) -ISO-8859-15 - -OS Locale: nl_NL -nl_NL -Dutch (Netherlands) -ISO-8859-1 - -OS Locale: nl_NL.utf8 -nl_NL -Dutch (Netherlands) -UTF-8 - -OS Locale: nl_NL@euro -nl_NL -Dutch (Netherlands) -ISO-8859-15 - -OS Locale: nn_NO -nn_NO -Norwegian Nynorsk (Norway) -ISO-8859-1 - -OS Locale: nn_NO.utf8 -nn_NO -Norwegian Nynorsk (Norway) -UTF-8 - -OS Locale: no_NO -no_NO -Norwegian (Norway) -ISO-8859-1 - -OS Locale: no_NO.utf8 -no_NO -Norwegian (Norway) -UTF-8 - -OS Locale: oc_FR -oc_FR -Occitan (France) -ISO-8859-1 - -OS Locale: om_ET -om_ET -Oromo (Ethiopia) -UTF-8 - -OS Locale: om_ET.utf8 -om_ET -Oromo (Ethiopia) -UTF-8 - -OS Locale: om_KE -om_KE -Oromo (Kenya) -ISO-8859-1 - -OS Locale: pa_IN -pa_IN -Panjabi (India) -UTF-8 - -OS Locale: pa_IN.utf8 -pa_IN -Panjabi (India) -UTF-8 - -OS Locale: pl_PL -pl_PL -Polish (Poland) -ISO-8859-2 - -OS Locale: pl_PL.utf8 -pl_PL -Polish (Poland) -UTF-8 - -OS Locale: pt_BR -pt_BR -Portuguese (Brazil) -ISO-8859-1 - -OS Locale: pt_BR.utf8 -pt_BR -Portuguese (Brazil) -UTF-8 - -OS Locale: pt_PT -pt_PT -Portuguese (Portugal) -ISO-8859-1 - -OS Locale: pt_PT.utf8 -pt_PT -Portuguese (Portugal) -UTF-8 - -OS Locale: pt_PT@euro -pt_PT -Portuguese (Portugal) -ISO-8859-15 - -OS Locale: ro_RO -ro_RO -Romanian (Romania) -ISO-8859-2 - -OS Locale: ro_RO.utf8 -ro_RO -Romanian (Romania) -UTF-8 - -OS Locale: ru_RU -ru_RU -Russian (Russia) -ISO-8859-5 - -OS Locale: ru_RU.koi8r -ru_RU -Russian (Russia) -KOI8-R - -OS Locale: ru_RU.utf8 -ru_RU -Russian (Russia) -UTF-8 - -OS Locale: ru_UA -ru_UA -Russian (Ukraine) -KOI8-U - -OS Locale: ru_UA.utf8 -ru_UA -Russian (Ukraine) -UTF-8 - -OS Locale: se_NO -se_NO -Northern Sami (Norway) -UTF-8 - -OS Locale: se_NO.utf8 -se_NO -Northern Sami (Norway) -UTF-8 - -OS Locale: sh_YU -sr_CS -Serbian (Serbia and Montenegro) -ISO-8859-2 - -OS Locale: sh_YU.utf8 -sr_CS -Serbian (Serbia and Montenegro) -UTF-8 - -OS Locale: sid_ET -en_ET -English (Ethiopia) -UTF-8 - -OS Locale: sid_ET.utf8 -en_ET -English (Ethiopia) -UTF-8 - -OS Locale: sk_SK -sk_SK -Slovak (Slovakia) -ISO-8859-2 - -OS Locale: sk_SK.utf8 -sk_SK -Slovak (Slovakia) -UTF-8 - -OS Locale: sl_SI -sl_SI -Slovenian (Slovenia) -ISO-8859-2 - -OS Locale: sl_SI.utf8 -sl_SI -Slovenian (Slovenia) -UTF-8 - -OS Locale: so_DJ -so_DJ -Somali (Djibouti) -ISO-8859-1 - -OS Locale: so_ET -so_ET -Somali (Ethiopia) -UTF-8 - -OS Locale: so_ET.utf8 -so_ET -Somali (Ethiopia) -UTF-8 - -OS Locale: so_KE -so_KE -Somali (Kenya) -ISO-8859-1 - -OS Locale: so_SO -so_SO -Somali (Somalia) -ISO-8859-1 - -OS Locale: sq_AL -sq_AL -Albanian (Albania) -ISO-8859-1 - -OS Locale: sq_AL.utf8 -sq_AL -Albanian (Albania) -UTF-8 - -OS Locale: sr_YU -sr_CS -Serbian (Serbia and Montenegro) -ISO-8859-2 - -OS Locale: sr_YU.utf8 -sr_CS -Serbian (Serbia and Montenegro) -UTF-8 - -OS Locale: sr_YU.utf8@cyrillic -sr_CS -Serbian (Serbia and Montenegro) -UTF-8 - -OS Locale: sr_YU@cyrillic -sr_CS -Serbian (Serbia and Montenegro) -ISO-8859-5 - -OS Locale: st_ZA -st_ZA -Southern Sotho (South Africa) -ISO-8859-1 - -OS Locale: st_ZA.utf8 -st_ZA -Southern Sotho (South Africa) -UTF-8 - -OS Locale: sv_FI -sv_FI -Swedish (Finland) -ISO-8859-1 - -OS Locale: sv_FI.utf8 -sv_FI -Swedish (Finland) -UTF-8 - -OS Locale: sv_FI@euro -sv_FI -Swedish (Finland) -ISO-8859-15 - -OS Locale: sv_SE -sv_SE -Swedish (Sweden) -ISO-8859-1 - -OS Locale: sv_SE.iso885915 -sv_SE -Swedish (Sweden) -ISO-8859-15 - -OS Locale: sv_SE.utf8 -sv_SE -Swedish (Sweden) -UTF-8 - -OS Locale: ta_IN -ta_IN -Tamil (India) -UTF-8 - -OS Locale: ta_IN.utf8 -ta_IN -Tamil (India) -UTF-8 - -OS Locale: te_IN -te_IN -Telugu (India) -UTF-8 - -OS Locale: te_IN.utf8 -te_IN -Telugu (India) -UTF-8 - -OS Locale: tg_TJ -tg_TJ -Tajik (Tajikistan) -UTF-8 - -OS Locale: th_TH -th_TH -Thai (Thailand) -TIS-620 - -OS Locale: th_TH.utf8 -th_TH -Thai (Thailand) -UTF-8 - -OS Locale: ti_ER -ti_ER -Tigrinya (Eritrea) -UTF-8 - -OS Locale: ti_ER.utf8 -ti_ER -Tigrinya (Eritrea) -UTF-8 - -OS Locale: ti_ET -ti_ET -Tigrinya (Ethiopia) -UTF-8 - -OS Locale: ti_ET.utf8 -ti_ET -Tigrinya (Ethiopia) -UTF-8 - -OS Locale: tig_ER -en_ER -English (Eritrea) -UTF-8 - -OS Locale: tig_ER.utf8 -en_ER -English (Eritrea) -UTF-8 - -OS Locale: tl_PH -tl_PH -Tagalog (Philippines) -ISO-8859-1 - -OS Locale: tr_TR -tr_TR -Turkish (Turkey) -ISO-8859-9 - -OS Locale: tr_TR.utf8 -tr_TR -Turkish (Turkey) -UTF-8 - -OS Locale: tt_RU.utf8 -tt_RU -Tatar (Russia) -UTF-8 - -OS Locale: uk_UA -uk_UA -Ukrainian (Ukraine) -KOI8-U - -OS Locale: uk_UA.utf8 -uk_UA -Ukrainian (Ukraine) -UTF-8 - -OS Locale: ur_PK -ur_PK -Urdu (Pakistan) -UTF-8 - -OS Locale: ur_PK.utf8 -ur_PK -Urdu (Pakistan) -UTF-8 - -OS Locale: uz_UZ -uz_UZ -Uzbek (Uzbekistan) -ISO-8859-1 - -OS Locale: uz_UZ@cyrillic -uz_UZ -Uzbek (Uzbekistan) -UTF-8 - -OS Locale: vi_VN -vi_VN -Vietnamese (Vietnam) -UTF-8 - -OS Locale: vi_VN.tcvn -vi_VN -Vietnamese (Vietnam) -UTF-8 - -OS Locale: vi_VN.utf8 -vi_VN -Vietnamese (Vietnam) -UTF-8 - -OS Locale: wa_BE -wa_BE -Walloon (Belgium) -ISO-8859-1 - -OS Locale: wa_BE.utf8 -wa_BE -Walloon (Belgium) -UTF-8 - -OS Locale: wa_BE@euro -wa_BE -Walloon (Belgium) -ISO-8859-15 - -OS Locale: xh_ZA -xh_ZA -Xhosa (South Africa) -ISO-8859-1 - -OS Locale: xh_ZA.utf8 -xh_ZA -Xhosa (South Africa) -UTF-8 - -OS Locale: yi_US -ji_US -Yiddish (United States) -windows-1255 - -OS Locale: zh_CN -zh_CN -Chinese (China) -GB2312 - -OS Locale: zh_CN.gb18030 -zh_CN -Chinese (China) -GB18030 - -OS Locale: zh_CN.gbk -zh_CN -Chinese (China) -GBK - -OS Locale: zh_CN.utf8 -zh_CN -Chinese (China) -UTF-8 - -OS Locale: zh_HK -zh_HK -Chinese (Hong Kong) -Big5-HKSCS - -OS Locale: zh_HK.utf8 -zh_HK -Chinese (Hong Kong) -UTF-8 - -OS Locale: zh_SG -zh_SG -Chinese (Singapore) -GB2312 - -OS Locale: zh_SG.gbk -zh_SG -Chinese (Singapore) -GBK - -OS Locale: zh_TW -zh_TW -Chinese (Taiwan) -Big5 - -OS Locale: zh_TW.euctw -zh_TW -Chinese (Taiwan) -x-EUC-TW - -OS Locale: zh_TW.utf8 -zh_TW -Chinese (Taiwan) -UTF-8 - -OS Locale: zu_ZA -zu_ZA -Zulu (South Africa) -ISO-8859-1 - -OS Locale: zu_ZA.utf8 -zu_ZA -Zulu (South Africa) -UTF-8
--- a/test/java/util/Locale/data/deflocale.rhel4 Thu Sep 16 11:16:02 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1623 +0,0 @@ -LSB_VERSION="1.3" -Red Hat Enterprise Linux AS release 4 (Nahant Update 1) -Linux i18n-hp733-6.sfbay.sun.com 2.6.9-6.37.EL #1 Tue Mar 29 15:34:14 EST 2005 i686 i686 i386 GNU/Linux - -OS Locale: aa_DJ -aa_DJ -Afar (Djibouti) -ISO-8859-1 - -OS Locale: aa_ER -aa_ER -Afar (Eritrea) -UTF-8 - -OS Locale: aa_ER@saaho -aa_ER -Afar (Eritrea) -UTF-8 - -OS Locale: aa_ET -aa_ET -Afar (Ethiopia) -UTF-8 - -OS Locale: af_ZA -af_ZA -Afrikaans (South Africa) -ISO-8859-1 - -OS Locale: am_ET -am_ET -Amharic (Ethiopia) -UTF-8 - -OS Locale: an_ES -an_ES -Aragonese (Spain) -ISO-8859-15 - -OS Locale: ar_AE -ar_AE -Arabic (United Arab Emirates) -ISO-8859-6 - -OS Locale: ar_AE.utf8 -ar_AE -Arabic (United Arab Emirates) -UTF-8 - -OS Locale: ar_BH -ar_BH -Arabic (Bahrain) -ISO-8859-6 - -OS Locale: ar_BH.utf8 -ar_BH -Arabic (Bahrain) -UTF-8 - -OS Locale: ar_DZ -ar_DZ -Arabic (Algeria) -ISO-8859-6 - -OS Locale: ar_DZ.utf8 -ar_DZ -Arabic (Algeria) -UTF-8 - -OS Locale: ar_EG -ar_EG -Arabic (Egypt) -ISO-8859-6 - -OS Locale: ar_EG.utf8 -ar_EG -Arabic (Egypt) -UTF-8 - -OS Locale: ar_IN -ar_IN -Arabic (India) -UTF-8 - -OS Locale: ar_IQ -ar_IQ -Arabic (Iraq) -ISO-8859-6 - -OS Locale: ar_IQ.utf8 -ar_IQ -Arabic (Iraq) -UTF-8 - -OS Locale: ar_JO -ar_JO -Arabic (Jordan) -ISO-8859-6 - -OS Locale: ar_JO.utf8 -ar_JO -Arabic (Jordan) -UTF-8 - -OS Locale: ar_KW -ar_KW -Arabic (Kuwait) -ISO-8859-6 - -OS Locale: ar_KW.utf8 -ar_KW -Arabic (Kuwait) -UTF-8 - -OS Locale: ar_LB -ar_LB -Arabic (Lebanon) -ISO-8859-6 - -OS Locale: ar_LB.utf8 -ar_LB -Arabic (Lebanon) -UTF-8 - -OS Locale: ar_LY -ar_LY -Arabic (Libya) -ISO-8859-6 - -OS Locale: ar_LY.utf8 -ar_LY -Arabic (Libya) -UTF-8 - -OS Locale: ar_MA -ar_MA -Arabic (Morocco) -ISO-8859-6 - -OS Locale: ar_MA.utf8 -ar_MA -Arabic (Morocco) -UTF-8 - -OS Locale: ar_OM -ar_OM -Arabic (Oman) -ISO-8859-6 - -OS Locale: ar_OM.utf8 -ar_OM -Arabic (Oman) -UTF-8 - -OS Locale: ar_QA -ar_QA -Arabic (Qatar) -ISO-8859-6 - -OS Locale: ar_QA.utf8 -ar_QA -Arabic (Qatar) -UTF-8 - -OS Locale: ar_SA -ar_SA -Arabic (Saudi Arabia) -ISO-8859-6 - -OS Locale: ar_SA.utf8 -ar_SA -Arabic (Saudi Arabia) -UTF-8 - -OS Locale: ar_SD -ar_SD -Arabic (Sudan) -ISO-8859-6 - -OS Locale: ar_SD.utf8 -ar_SD -Arabic (Sudan) -UTF-8 - -OS Locale: ar_SY -ar_SY -Arabic (Syria) -ISO-8859-6 - -OS Locale: ar_SY.utf8 -ar_SY -Arabic (Syria) -UTF-8 - -OS Locale: ar_TN -ar_TN -Arabic (Tunisia) -ISO-8859-6 - -OS Locale: ar_TN.utf8 -ar_TN -Arabic (Tunisia) -UTF-8 - -OS Locale: ar_YE -ar_YE -Arabic (Yemen) -ISO-8859-6 - -OS Locale: ar_YE.utf8 -ar_YE -Arabic (Yemen) -UTF-8 - -OS Locale: az_AZ.utf8 -az_AZ -Azerbaijani (Azerbaijan) -UTF-8 - -OS Locale: be_BY -be_BY -Belarusian (Belarus) -windows-1251 - -OS Locale: be_BY.utf8 -be_BY -Belarusian (Belarus) -UTF-8 - -OS Locale: bg_BG -bg_BG -Bulgarian (Bulgaria) -windows-1251 - -OS Locale: bg_BG.utf8 -bg_BG -Bulgarian (Bulgaria) -UTF-8 - -OS Locale: bn_BD -bn_BD -Bengali (Bangladesh) -UTF-8 - -OS Locale: bn_IN -bn_IN -Bengali (India) -UTF-8 - -OS Locale: br_FR -br_FR -Breton (France) -ISO-8859-1 - -OS Locale: br_FR@euro -br_FR -Breton (France) -ISO-8859-15 - -OS Locale: bs_BA -bs_BA -Bosnian (Bosnia and Herzegovina) -ISO-8859-2 - -OS Locale: byn_ER -en_ER -English (Eritrea) -UTF-8 - -OS Locale: ca_ES -ca_ES -Catalan (Spain) -ISO-8859-1 - -OS Locale: ca_ES.utf8 -ca_ES -Catalan (Spain) -UTF-8 - -OS Locale: ca_ES@euro -ca_ES -Catalan (Spain) -ISO-8859-15 - -OS Locale: cs_CZ -cs_CZ -Czech (Czech Republic) -ISO-8859-2 - -OS Locale: cs_CZ.utf8 -cs_CZ -Czech (Czech Republic) -UTF-8 - -OS Locale: cy_GB -cy_GB -Welsh (United Kingdom) -UTF-8 - -OS Locale: cy_GB.utf8 -cy_GB -Welsh (United Kingdom) -UTF-8 - -OS Locale: da_DK -da_DK -Danish (Denmark) -ISO-8859-1 - -OS Locale: da_DK.iso885915 -da_DK -Danish (Denmark) -ISO-8859-15 - -OS Locale: da_DK.utf8 -da_DK -Danish (Denmark) -UTF-8 - -OS Locale: de_AT -de_AT -German (Austria) -ISO-8859-1 - -OS Locale: de_AT.utf8 -de_AT -German (Austria) -UTF-8 - -OS Locale: de_AT@euro -de_AT -German (Austria) -ISO-8859-15 - -OS Locale: de_BE -de_BE -German (Belgium) -ISO-8859-1 - -OS Locale: de_BE.utf8 -de_BE -German (Belgium) -UTF-8 - -OS Locale: de_BE@euro -de_BE -German (Belgium) -ISO-8859-15 - -OS Locale: de_CH -de_CH -German (Switzerland) -ISO-8859-1 - -OS Locale: de_CH.utf8 -de_CH -German (Switzerland) -UTF-8 - -OS Locale: de_DE -de_DE -German (Germany) -ISO-8859-1 - -OS Locale: de_DE.utf8 -de_DE -German (Germany) -UTF-8 - -OS Locale: de_DE@euro -de_DE -German (Germany) -ISO-8859-15 - -OS Locale: de_LU -de_LU -German (Luxembourg) -ISO-8859-1 - -OS Locale: de_LU.utf8 -de_LU -German (Luxembourg) -UTF-8 - -OS Locale: de_LU@euro -de_LU -German (Luxembourg) -ISO-8859-15 - -OS Locale: el_GR -el_GR -Greek (Greece) -ISO-8859-7 - -OS Locale: el_GR.utf8 -el_GR -Greek (Greece) -UTF-8 - -OS Locale: en_AU -en_AU -English (Australia) -ISO-8859-1 - -OS Locale: en_AU.utf8 -en_AU -English (Australia) -UTF-8 - -OS Locale: en_BW -en_BW -English (Botswana) -ISO-8859-1 - -OS Locale: en_BW.utf8 -en_BW -English (Botswana) -UTF-8 - -OS Locale: en_CA -en_CA -English (Canada) -ISO-8859-1 - -OS Locale: en_CA.utf8 -en_CA -English (Canada) -UTF-8 - -OS Locale: en_DK -en_DK -English (Denmark) -ISO-8859-1 - -OS Locale: en_DK.utf8 -en_DK -English (Denmark) -UTF-8 - -OS Locale: en_GB -en_GB -English (United Kingdom) -ISO-8859-1 - -OS Locale: en_GB.iso885915 -en_GB -English (United Kingdom) -ISO-8859-15 - -OS Locale: en_GB.utf8 -en_GB -English (United Kingdom) -UTF-8 - -OS Locale: en_HK -en_HK -English (Hong Kong) -ISO-8859-1 - -OS Locale: en_HK.utf8 -en_HK -English (Hong Kong) -UTF-8 - -OS Locale: en_IE -en_IE -English (Ireland) -ISO-8859-1 - -OS Locale: en_IE.utf8 -en_IE -English (Ireland) -UTF-8 - -OS Locale: en_IE@euro -en_IE -English (Ireland) -ISO-8859-15 - -OS Locale: en_IN -en_IN -English (India) -UTF-8 - -OS Locale: en_NZ -en_NZ -English (New Zealand) -ISO-8859-1 - -OS Locale: en_NZ.utf8 -en_NZ -English (New Zealand) -UTF-8 - -OS Locale: en_PH -en_PH -English (Philippines) -ISO-8859-1 - -OS Locale: en_PH.utf8 -en_PH -English (Philippines) -UTF-8 - -OS Locale: en_SG -en_SG -English (Singapore) -ISO-8859-1 - -OS Locale: en_SG.utf8 -en_SG -English (Singapore) -UTF-8 - -OS Locale: en_US -en_US -English (United States) -ISO-8859-1 - -OS Locale: en_US.iso885915 -en_US -English (United States) -ISO-8859-15 - -OS Locale: en_US.utf8 -en_US -English (United States) -UTF-8 - -OS Locale: en_ZA -en_ZA -English (South Africa) -ISO-8859-1 - -OS Locale: en_ZA.utf8 -en_ZA -English (South Africa) -UTF-8 - -OS Locale: en_ZW -en_ZW -English (Zimbabwe) -ISO-8859-1 - -OS Locale: en_ZW.utf8 -en_ZW -English (Zimbabwe) -UTF-8 - -OS Locale: es_AR -es_AR -Spanish (Argentina) -ISO-8859-1 - -OS Locale: es_AR.utf8 -es_AR -Spanish (Argentina) -UTF-8 - -OS Locale: es_BO -es_BO -Spanish (Bolivia) -ISO-8859-1 - -OS Locale: es_BO.utf8 -es_BO -Spanish (Bolivia) -UTF-8 - -OS Locale: es_CL -es_CL -Spanish (Chile) -ISO-8859-1 - -OS Locale: es_CL.utf8 -es_CL -Spanish (Chile) -UTF-8 - -OS Locale: es_CO -es_CO -Spanish (Colombia) -ISO-8859-1 - -OS Locale: es_CO.utf8 -es_CO -Spanish (Colombia) -UTF-8 - -OS Locale: es_CR -es_CR -Spanish (Costa Rica) -ISO-8859-1 - -OS Locale: es_CR.utf8 -es_CR -Spanish (Costa Rica) -UTF-8 - -OS Locale: es_DO -es_DO -Spanish (Dominican Republic) -ISO-8859-1 - -OS Locale: es_DO.utf8 -es_DO -Spanish (Dominican Republic) -UTF-8 - -OS Locale: es_EC -es_EC -Spanish (Ecuador) -ISO-8859-1 - -OS Locale: es_EC.utf8 -es_EC -Spanish (Ecuador) -UTF-8 - -OS Locale: es_ES -es_ES -Spanish (Spain) -ISO-8859-1 - -OS Locale: es_ES.utf8 -es_ES -Spanish (Spain) -UTF-8 - -OS Locale: es_ES@euro -es_ES -Spanish (Spain) -ISO-8859-15 - -OS Locale: es_GT -es_GT -Spanish (Guatemala) -ISO-8859-1 - -OS Locale: es_GT.utf8 -es_GT -Spanish (Guatemala) -UTF-8 - -OS Locale: es_HN -es_HN -Spanish (Honduras) -ISO-8859-1 - -OS Locale: es_HN.utf8 -es_HN -Spanish (Honduras) -UTF-8 - -OS Locale: es_MX -es_MX -Spanish (Mexico) -ISO-8859-1 - -OS Locale: es_MX.utf8 -es_MX -Spanish (Mexico) -UTF-8 - -OS Locale: es_NI -es_NI -Spanish (Nicaragua) -ISO-8859-1 - -OS Locale: es_NI.utf8 -es_NI -Spanish (Nicaragua) -UTF-8 - -OS Locale: es_PA -es_PA -Spanish (Panama) -ISO-8859-1 - -OS Locale: es_PA.utf8 -es_PA -Spanish (Panama) -UTF-8 - -OS Locale: es_PE -es_PE -Spanish (Peru) -ISO-8859-1 - -OS Locale: es_PE.utf8 -es_PE -Spanish (Peru) -UTF-8 - -OS Locale: es_PR -es_PR -Spanish (Puerto Rico) -ISO-8859-1 - -OS Locale: es_PR.utf8 -es_PR -Spanish (Puerto Rico) -UTF-8 - -OS Locale: es_PY -es_PY -Spanish (Paraguay) -ISO-8859-1 - -OS Locale: es_PY.utf8 -es_PY -Spanish (Paraguay) -UTF-8 - -OS Locale: es_SV -es_SV -Spanish (El Salvador) -ISO-8859-1 - -OS Locale: es_SV.utf8 -es_SV -Spanish (El Salvador) -UTF-8 - -OS Locale: es_US -es_US -Spanish (United States) -ISO-8859-1 - -OS Locale: es_US.utf8 -es_US -Spanish (United States) -UTF-8 - -OS Locale: es_UY -es_UY -Spanish (Uruguay) -ISO-8859-1 - -OS Locale: es_UY.utf8 -es_UY -Spanish (Uruguay) -UTF-8 - -OS Locale: es_VE -es_VE -Spanish (Venezuela) -ISO-8859-1 - -OS Locale: es_VE.utf8 -es_VE -Spanish (Venezuela) -UTF-8 - -OS Locale: et_EE -et_EE -Estonian (Estonia) -ISO-8859-1 - -OS Locale: et_EE.iso885915 -et_EE -Estonian (Estonia) -ISO-8859-15 - -OS Locale: et_EE.utf8 -et_EE -Estonian (Estonia) -UTF-8 - -OS Locale: eu_ES -eu_ES -Basque (Spain) -ISO-8859-1 - -OS Locale: eu_ES.utf8 -eu_ES -Basque (Spain) -UTF-8 - -OS Locale: eu_ES@euro -eu_ES -Basque (Spain) -ISO-8859-15 - -OS Locale: fa_IR -fa_IR -Persian (Iran) -UTF-8 - -OS Locale: fi_FI -fi_FI -Finnish (Finland) -ISO-8859-1 - -OS Locale: fi_FI.utf8 -fi_FI -Finnish (Finland) -UTF-8 - -OS Locale: fi_FI@euro -fi_FI -Finnish (Finland) -ISO-8859-15 - -OS Locale: fo_FO -fo_FO -Faroese (Faroe Islands) -ISO-8859-1 - -OS Locale: fo_FO.utf8 -fo_FO -Faroese (Faroe Islands) -UTF-8 - -OS Locale: fr_BE -fr_BE -French (Belgium) -ISO-8859-1 - -OS Locale: fr_BE.utf8 -fr_BE -French (Belgium) -UTF-8 - -OS Locale: fr_BE@euro -fr_BE -French (Belgium) -ISO-8859-15 - -OS Locale: fr_CA -fr_CA -French (Canada) -ISO-8859-1 - -OS Locale: fr_CA.utf8 -fr_CA -French (Canada) -UTF-8 - -OS Locale: fr_CH -fr_CH -French (Switzerland) -ISO-8859-1 - -OS Locale: fr_CH.utf8 -fr_CH -French (Switzerland) -UTF-8 - -OS Locale: fr_FR -fr_FR -French (France) -ISO-8859-1 - -OS Locale: fr_FR.utf8 -fr_FR -French (France) -UTF-8 - -OS Locale: fr_FR@euro -fr_FR -French (France) -ISO-8859-15 - -OS Locale: fr_LU -fr_LU -French (Luxembourg) -ISO-8859-1 - -OS Locale: fr_LU.utf8 -fr_LU -French (Luxembourg) -UTF-8 - -OS Locale: fr_LU@euro -fr_LU -French (Luxembourg) -ISO-8859-15 - -OS Locale: ga_IE -ga_IE -Irish (Ireland) -ISO-8859-1 - -OS Locale: ga_IE.utf8 -ga_IE -Irish (Ireland) -UTF-8 - -OS Locale: ga_IE@euro -ga_IE -Irish (Ireland) -ISO-8859-15 - -OS Locale: gd_GB -gd_GB -Scottish Gaelic (United Kingdom) -ISO-8859-15 - -OS Locale: gez_ER -en_ER -English (Eritrea) -UTF-8 - -OS Locale: gez_ER@abegede -en_ER -English (Eritrea) -UTF-8 - -OS Locale: gez_ET -en_ET -English (Ethiopia) -UTF-8 - -OS Locale: gez_ET@abegede -en_ET -English (Ethiopia) -UTF-8 - -OS Locale: gl_ES -gl_ES -Gallegan (Spain) -ISO-8859-1 - -OS Locale: gl_ES.utf8 -gl_ES -Gallegan (Spain) -UTF-8 - -OS Locale: gl_ES@euro -gl_ES -Gallegan (Spain) -ISO-8859-15 - -OS Locale: gu_IN -gu_IN -Gujarati (India) -UTF-8 - -OS Locale: gv_GB -gv_GB -Manx (United Kingdom) -ISO-8859-1 - -OS Locale: gv_GB.utf8 -gv_GB -Manx (United Kingdom) -UTF-8 - -OS Locale: he_IL -iw_IL -Hebrew (Israel) -ISO-8859-8 - -OS Locale: he_IL.utf8 -iw_IL -Hebrew (Israel) -UTF-8 - -OS Locale: hi_IN -hi_IN -Hindi (India) -UTF-8 - -OS Locale: hr_HR -hr_HR -Croatian (Croatia) -ISO-8859-2 - -OS Locale: hr_HR.utf8 -hr_HR -Croatian (Croatia) -UTF-8 - -OS Locale: hu_HU -hu_HU -Hungarian (Hungary) -ISO-8859-2 - -OS Locale: hu_HU.utf8 -hu_HU -Hungarian (Hungary) -UTF-8 - -OS Locale: id_ID -in_ID -Indonesian (Indonesia) -ISO-8859-1 - -OS Locale: id_ID.utf8 -in_ID -Indonesian (Indonesia) -UTF-8 - -OS Locale: is_IS -is_IS -Icelandic (Iceland) -ISO-8859-1 - -OS Locale: is_IS.utf8 -is_IS -Icelandic (Iceland) -UTF-8 - -OS Locale: it_CH -it_CH -Italian (Switzerland) -ISO-8859-1 - -OS Locale: it_CH.utf8 -it_CH -Italian (Switzerland) -UTF-8 - -OS Locale: it_IT -it_IT -Italian (Italy) -ISO-8859-1 - -OS Locale: it_IT.utf8 -it_IT -Italian (Italy) -UTF-8 - -OS Locale: it_IT@euro -it_IT -Italian (Italy) -ISO-8859-15 - -OS Locale: iw_IL -iw_IL -Hebrew (Israel) -ISO-8859-8 - -OS Locale: iw_IL.utf8 -iw_IL -Hebrew (Israel) -UTF-8 - -OS Locale: ja_JP.eucjp -ja_JP -Japanese (Japan) -x-euc-jp-linux - -OS Locale: ja_JP.utf8 -ja_JP -Japanese (Japan) -UTF-8 - -OS Locale: ka_GE -ka_GE -Georgian (Georgia) -UTF-8 - -OS Locale: kk_KZ -kk_KZ -Kazakh (Kazakhstan) -UTF-8 - -OS Locale: kl_GL -kl_GL -Greenlandic (Greenland) -ISO-8859-1 - -OS Locale: kl_GL.utf8 -kl_GL -Greenlandic (Greenland) -UTF-8 - -OS Locale: kn_IN -kn_IN -Kannada (India) -UTF-8 - -OS Locale: ko_KR.euckr -ko_KR -Korean (South Korea) -EUC-KR - -OS Locale: ko_KR.utf8 -ko_KR -Korean (South Korea) -UTF-8 - -OS Locale: kw_GB -kw_GB -Cornish (United Kingdom) -ISO-8859-1 - -OS Locale: kw_GB.utf8 -kw_GB -Cornish (United Kingdom) -UTF-8 - -OS Locale: lg_UG -lg_UG -Ganda (Uganda) -UTF-8 - -OS Locale: lo_LA -lo_LA -Lao (Laos) -UTF-8 - -OS Locale: locale-archive -en_US -English (United States) -US-ASCII - -OS Locale: lt_LT -lt_LT -Lithuanian (Lithuania) -ISO-8859-13 - -OS Locale: lt_LT.utf8 -lt_LT -Lithuanian (Lithuania) -UTF-8 - -OS Locale: lv_LV -lv_LV -Latvian (Latvia) -ISO-8859-13 - -OS Locale: lv_LV.utf8 -lv_LV -Latvian (Latvia) -UTF-8 - -OS Locale: mi_NZ -mi_NZ -Maori (New Zealand) -ISO-8859-13 - -OS Locale: mk_MK -mk_MK -Macedonian (Macedonia) -ISO-8859-5 - -OS Locale: mk_MK.utf8 -mk_MK -Macedonian (Macedonia) -UTF-8 - -OS Locale: ml_IN -ml_IN -Malayalam (India) -UTF-8 - -OS Locale: mn_MN -mn_MN -Mongolian (Mongolia) -UTF-8 - -OS Locale: mr_IN -mr_IN -Marathi (India) -UTF-8 - -OS Locale: ms_MY -ms_MY -Malay (Malaysia) -ISO-8859-1 - -OS Locale: ms_MY.utf8 -ms_MY -Malay (Malaysia) -UTF-8 - -OS Locale: mt_MT -mt_MT -Maltese (Malta) -ISO-8859-3 - -OS Locale: mt_MT.utf8 -mt_MT -Maltese (Malta) -UTF-8 - -OS Locale: nb_NO -nb_NO -Norwegian Bokmål (Norway) -ISO-8859-1 - -OS Locale: nb_NO.utf8 -nb_NO -Norwegian BokmÃ¥l (Norway) -UTF-8 - -OS Locale: ne_NP -ne_NP -Nepali (Nepal) -UTF-8 - -OS Locale: nl_BE -nl_BE -Dutch (Belgium) -ISO-8859-1 - -OS Locale: nl_BE.utf8 -nl_BE -Dutch (Belgium) -UTF-8 - -OS Locale: nl_BE@euro -nl_BE -Dutch (Belgium) -ISO-8859-15 - -OS Locale: nl_NL -nl_NL -Dutch (Netherlands) -ISO-8859-1 - -OS Locale: nl_NL.utf8 -nl_NL -Dutch (Netherlands) -UTF-8 - -OS Locale: nl_NL@euro -nl_NL -Dutch (Netherlands) -ISO-8859-15 - -OS Locale: nn_NO -nn_NO -Norwegian Nynorsk (Norway) -ISO-8859-1 - -OS Locale: nn_NO.utf8 -nn_NO -Norwegian Nynorsk (Norway) -UTF-8 - -OS Locale: no_NO -no_NO -Norwegian (Norway) -ISO-8859-1 - -OS Locale: no_NO.utf8 -no_NO -Norwegian (Norway) -UTF-8 - -OS Locale: oc_FR -oc_FR -Occitan (France) -ISO-8859-1 - -OS Locale: om_ET -om_ET -Oromo (Ethiopia) -UTF-8 - -OS Locale: om_KE -om_KE -Oromo (Kenya) -ISO-8859-1 - -OS Locale: pa_IN -pa_IN -Panjabi (India) -UTF-8 - -OS Locale: pl_PL -pl_PL -Polish (Poland) -ISO-8859-2 - -OS Locale: pl_PL.utf8 -pl_PL -Polish (Poland) -UTF-8 - -OS Locale: pt_BR -pt_BR -Portuguese (Brazil) -ISO-8859-1 - -OS Locale: pt_BR.utf8 -pt_BR -Portuguese (Brazil) -UTF-8 - -OS Locale: pt_PT -pt_PT -Portuguese (Portugal) -ISO-8859-1 - -OS Locale: pt_PT.utf8 -pt_PT -Portuguese (Portugal) -UTF-8 - -OS Locale: pt_PT@euro -pt_PT -Portuguese (Portugal) -ISO-8859-15 - -OS Locale: ro_RO -ro_RO -Romanian (Romania) -ISO-8859-2 - -OS Locale: ro_RO.utf8 -ro_RO -Romanian (Romania) -UTF-8 - -OS Locale: ru_RU -ru_RU -Russian (Russia) -ISO-8859-5 - -OS Locale: ru_RU.koi8r -ru_RU -Russian (Russia) -KOI8-R - -OS Locale: ru_RU.utf8 -ru_RU -Russian (Russia) -UTF-8 - -OS Locale: ru_UA -ru_UA -Russian (Ukraine) -KOI8-U - -OS Locale: ru_UA.utf8 -ru_UA -Russian (Ukraine) -UTF-8 - -OS Locale: se_NO -se_NO -Northern Sami (Norway) -UTF-8 - -OS Locale: sid_ET -en_ET -English (Ethiopia) -UTF-8 - -OS Locale: sk_SK -sk_SK -Slovak (Slovakia) -ISO-8859-2 - -OS Locale: sk_SK.utf8 -sk_SK -Slovak (Slovakia) -UTF-8 - -OS Locale: sl_SI -sl_SI -Slovenian (Slovenia) -ISO-8859-2 - -OS Locale: sl_SI.utf8 -sl_SI -Slovenian (Slovenia) -UTF-8 - -OS Locale: so_DJ -so_DJ -Somali (Djibouti) -ISO-8859-1 - -OS Locale: so_ET -so_ET -Somali (Ethiopia) -UTF-8 - -OS Locale: so_KE -so_KE -Somali (Kenya) -ISO-8859-1 - -OS Locale: so_SO -so_SO -Somali (Somalia) -ISO-8859-1 - -OS Locale: sq_AL -sq_AL -Albanian (Albania) -ISO-8859-1 - -OS Locale: sq_AL.utf8 -sq_AL -Albanian (Albania) -UTF-8 - -OS Locale: st_ZA -st_ZA -Southern Sotho (South Africa) -ISO-8859-1 - -OS Locale: st_ZA.utf8 -st_ZA -Southern Sotho (South Africa) -UTF-8 - -OS Locale: sv_FI -sv_FI -Swedish (Finland) -ISO-8859-1 - -OS Locale: sv_FI.utf8 -sv_FI -Swedish (Finland) -UTF-8 - -OS Locale: sv_FI@euro -sv_FI -Swedish (Finland) -ISO-8859-15 - -OS Locale: sv_SE -sv_SE -Swedish (Sweden) -ISO-8859-1 - -OS Locale: sv_SE.iso885915 -sv_SE -Swedish (Sweden) -ISO-8859-15 - -OS Locale: sv_SE.utf8 -sv_SE -Swedish (Sweden) -UTF-8 - -OS Locale: ta_IN -ta_IN -Tamil (India) -UTF-8 - -OS Locale: te_IN -te_IN -Telugu (India) -UTF-8 - -OS Locale: tg_TJ -tg_TJ -Tajik (Tajikistan) -UTF-8 - -OS Locale: th_TH -th_TH -Thai (Thailand) -TIS-620 - -OS Locale: th_TH.utf8 -th_TH -Thai (Thailand) -UTF-8 - -OS Locale: ti_ER -ti_ER -Tigrinya (Eritrea) -UTF-8 - -OS Locale: ti_ET -ti_ET -Tigrinya (Ethiopia) -UTF-8 - -OS Locale: tig_ER -en_ER -English (Eritrea) -UTF-8 - -OS Locale: tl_PH -tl_PH -Tagalog (Philippines) -ISO-8859-1 - -OS Locale: tr_TR -tr_TR -Turkish (Turkey) -ISO-8859-9 - -OS Locale: tr_TR.utf8 -tr_TR -Turkish (Turkey) -UTF-8 - -OS Locale: tt_RU.utf8 -tt_RU -Tatar (Russia) -UTF-8 - -OS Locale: uk_UA -uk_UA -Ukrainian (Ukraine) -KOI8-U - -OS Locale: uk_UA.utf8 -uk_UA -Ukrainian (Ukraine) -UTF-8 - -OS Locale: ur_PK -ur_PK -Urdu (Pakistan) -UTF-8 - -OS Locale: uz_UZ -uz_UZ -Uzbek (Uzbekistan) -ISO-8859-1 - -OS Locale: uz_UZ@cyrillic -uz_UZ -Uzbek (Uzbekistan) -UTF-8 - -OS Locale: vi_VN -vi_VN -Vietnamese (Vietnam) -UTF-8 - -OS Locale: vi_VN.tcvn -vi_VN -Vietnamese (Vietnam) -UTF-8 - -OS Locale: wa_BE -wa_BE -Walloon (Belgium) -ISO-8859-1 - -OS Locale: wa_BE.utf8 -wa_BE -Walloon (Belgium) -UTF-8 - -OS Locale: wa_BE@euro -wa_BE -Walloon (Belgium) -ISO-8859-15 - -OS Locale: xh_ZA -xh_ZA -Xhosa (South Africa) -ISO-8859-1 - -OS Locale: xh_ZA.utf8 -xh_ZA -Xhosa (South Africa) -UTF-8 - -OS Locale: yi_US -ji_US -Yiddish (United States) -windows-1255 - -OS Locale: zh_CN -zh_CN -Chinese (China) -GB2312 - -OS Locale: zh_CN.gb18030 -zh_CN -Chinese (China) -GB18030 - -OS Locale: zh_CN.gbk -zh_CN -Chinese (China) -GBK - -OS Locale: zh_CN.utf8 -zh_CN -Chinese (China) -UTF-8 - -OS Locale: zh_HK -zh_HK -Chinese (Hong Kong) -Big5-HKSCS - -OS Locale: zh_HK.utf8 -zh_HK -Chinese (Hong Kong) -UTF-8 - -OS Locale: zh_SG -zh_SG -Chinese (Singapore) -GB2312 - -OS Locale: zh_SG.gbk -zh_SG -Chinese (Singapore) -GBK - -OS Locale: zh_TW -zh_TW -Chinese (Taiwan) -Big5 - -OS Locale: zh_TW.euctw -zh_TW -Chinese (Taiwan) -x-EUC-TW - -OS Locale: zh_TW.utf8 -zh_TW -Chinese (Taiwan) -UTF-8 - -OS Locale: zu_ZA -zu_ZA -Zulu (South Africa) -ISO-8859-1 - -OS Locale: zu_ZA.utf8 -zu_ZA -Zulu (South Africa) -UTF-8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Locale/data/deflocale.rhel5 Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,3924 @@ +Red Hat Enterprise Linux Server release 5.3 (Tikanga) +Linux localhost.localdomain 2.6.18-128.el5 #1 SMP Wed Dec 17 11:42:39 EST 2008 i686 i686 i386 GNU/Linux +Testing all available locales + +OS Locale: C +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: US-ASCII + +OS Locale: POSIX +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: US-ASCII + +OS Locale: aa_DJ +default locale: ID: aa_DJ, Name: Afar (Djibouti) +display locale: ID: aa_DJ, Name: Afar (Djibouti) +format locale: ID: aa_DJ, Name: Afar (Djibouti) +default charset: ISO-8859-1 + +OS Locale: aa_DJ.iso88591 +default locale: ID: aa_DJ, Name: Afar (Djibouti) +display locale: ID: aa_DJ, Name: Afar (Djibouti) +format locale: ID: aa_DJ, Name: Afar (Djibouti) +default charset: ISO-8859-1 + +OS Locale: aa_DJ.utf8 +default locale: ID: aa_DJ, Name: Afar (Djibouti) +display locale: ID: aa_DJ, Name: Afar (Djibouti) +format locale: ID: aa_DJ, Name: Afar (Djibouti) +default charset: UTF-8 + +OS Locale: aa_ER +default locale: ID: aa_ER, Name: Afar (Eritrea) +display locale: ID: aa_ER, Name: Afar (Eritrea) +format locale: ID: aa_ER, Name: Afar (Eritrea) +default charset: UTF-8 + +OS Locale: aa_ER.utf8 +default locale: ID: aa_ER, Name: Afar (Eritrea) +display locale: ID: aa_ER, Name: Afar (Eritrea) +format locale: ID: aa_ER, Name: Afar (Eritrea) +default charset: UTF-8 + +OS Locale: aa_ER.utf8@saaho +default locale: ID: aa_ER, Name: Afar (Eritrea) +display locale: ID: aa_ER, Name: Afar (Eritrea) +format locale: ID: aa_ER, Name: Afar (Eritrea) +default charset: UTF-8 + +OS Locale: aa_ER@saaho +default locale: ID: aa_ER, Name: Afar (Eritrea) +display locale: ID: aa_ER, Name: Afar (Eritrea) +format locale: ID: aa_ER, Name: Afar (Eritrea) +default charset: UTF-8 + +OS Locale: aa_ET +default locale: ID: aa_ET, Name: Afar (Ethiopia) +display locale: ID: aa_ET, Name: Afar (Ethiopia) +format locale: ID: aa_ET, Name: Afar (Ethiopia) +default charset: UTF-8 + +OS Locale: aa_ET.utf8 +default locale: ID: aa_ET, Name: Afar (Ethiopia) +display locale: ID: aa_ET, Name: Afar (Ethiopia) +format locale: ID: aa_ET, Name: Afar (Ethiopia) +default charset: UTF-8 + +OS Locale: af_ZA +default locale: ID: af_ZA, Name: Afrikaans (South Africa) +display locale: ID: af_ZA, Name: Afrikaans (South Africa) +format locale: ID: af_ZA, Name: Afrikaans (South Africa) +default charset: ISO-8859-1 + +OS Locale: af_ZA.iso88591 +default locale: ID: af_ZA, Name: Afrikaans (South Africa) +display locale: ID: af_ZA, Name: Afrikaans (South Africa) +format locale: ID: af_ZA, Name: Afrikaans (South Africa) +default charset: ISO-8859-1 + +OS Locale: af_ZA.utf8 +default locale: ID: af_ZA, Name: Afrikaans (South Africa) +display locale: ID: af_ZA, Name: Afrikaans (South Africa) +format locale: ID: af_ZA, Name: Afrikaans (South Africa) +default charset: UTF-8 + +OS Locale: am_ET +default locale: ID: am_ET, Name: Amharic (Ethiopia) +display locale: ID: am_ET, Name: Amharic (Ethiopia) +format locale: ID: am_ET, Name: Amharic (Ethiopia) +default charset: UTF-8 + +OS Locale: am_ET.utf8 +default locale: ID: am_ET, Name: Amharic (Ethiopia) +display locale: ID: am_ET, Name: Amharic (Ethiopia) +format locale: ID: am_ET, Name: Amharic (Ethiopia) +default charset: UTF-8 + +OS Locale: an_ES +default locale: ID: an_ES, Name: Aragonese (Spain) +display locale: ID: an_ES, Name: Aragonese (Spain) +format locale: ID: an_ES, Name: Aragonese (Spain) +default charset: ISO-8859-15 + +OS Locale: an_ES.iso885915 +default locale: ID: an_ES, Name: Aragonese (Spain) +display locale: ID: an_ES, Name: Aragonese (Spain) +format locale: ID: an_ES, Name: Aragonese (Spain) +default charset: ISO-8859-15 + +OS Locale: an_ES.utf8 +default locale: ID: an_ES, Name: Aragonese (Spain) +display locale: ID: an_ES, Name: Aragonese (Spain) +format locale: ID: an_ES, Name: Aragonese (Spain) +default charset: UTF-8 + +OS Locale: ar_AE +default locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +display locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +format locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +default charset: ISO-8859-6 + +OS Locale: ar_AE.iso88596 +default locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +display locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +format locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +default charset: ISO-8859-6 + +OS Locale: ar_AE.utf8 +default locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +display locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +format locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +default charset: UTF-8 + +OS Locale: ar_BH +default locale: ID: ar_BH, Name: Arabic (Bahrain) +display locale: ID: ar_BH, Name: Arabic (Bahrain) +format locale: ID: ar_BH, Name: Arabic (Bahrain) +default charset: ISO-8859-6 + +OS Locale: ar_BH.iso88596 +default locale: ID: ar_BH, Name: Arabic (Bahrain) +display locale: ID: ar_BH, Name: Arabic (Bahrain) +format locale: ID: ar_BH, Name: Arabic (Bahrain) +default charset: ISO-8859-6 + +OS Locale: ar_BH.utf8 +default locale: ID: ar_BH, Name: Arabic (Bahrain) +display locale: ID: ar_BH, Name: Arabic (Bahrain) +format locale: ID: ar_BH, Name: Arabic (Bahrain) +default charset: UTF-8 + +OS Locale: ar_DZ +default locale: ID: ar_DZ, Name: Arabic (Algeria) +display locale: ID: ar_DZ, Name: Arabic (Algeria) +format locale: ID: ar_DZ, Name: Arabic (Algeria) +default charset: ISO-8859-6 + +OS Locale: ar_DZ.iso88596 +default locale: ID: ar_DZ, Name: Arabic (Algeria) +display locale: ID: ar_DZ, Name: Arabic (Algeria) +format locale: ID: ar_DZ, Name: Arabic (Algeria) +default charset: ISO-8859-6 + +OS Locale: ar_DZ.utf8 +default locale: ID: ar_DZ, Name: Arabic (Algeria) +display locale: ID: ar_DZ, Name: Arabic (Algeria) +format locale: ID: ar_DZ, Name: Arabic (Algeria) +default charset: UTF-8 + +OS Locale: ar_EG +default locale: ID: ar_EG, Name: Arabic (Egypt) +display locale: ID: ar_EG, Name: Arabic (Egypt) +format locale: ID: ar_EG, Name: Arabic (Egypt) +default charset: ISO-8859-6 + +OS Locale: ar_EG.iso88596 +default locale: ID: ar_EG, Name: Arabic (Egypt) +display locale: ID: ar_EG, Name: Arabic (Egypt) +format locale: ID: ar_EG, Name: Arabic (Egypt) +default charset: ISO-8859-6 + +OS Locale: ar_EG.utf8 +default locale: ID: ar_EG, Name: Arabic (Egypt) +display locale: ID: ar_EG, Name: Arabic (Egypt) +format locale: ID: ar_EG, Name: Arabic (Egypt) +default charset: UTF-8 + +OS Locale: ar_IN +default locale: ID: ar_IN, Name: Arabic (India) +display locale: ID: ar_IN, Name: Arabic (India) +format locale: ID: ar_IN, Name: Arabic (India) +default charset: UTF-8 + +OS Locale: ar_IN.utf8 +default locale: ID: ar_IN, Name: Arabic (India) +display locale: ID: ar_IN, Name: Arabic (India) +format locale: ID: ar_IN, Name: Arabic (India) +default charset: UTF-8 + +OS Locale: ar_IQ +default locale: ID: ar_IQ, Name: Arabic (Iraq) +display locale: ID: ar_IQ, Name: Arabic (Iraq) +format locale: ID: ar_IQ, Name: Arabic (Iraq) +default charset: ISO-8859-6 + +OS Locale: ar_IQ.iso88596 +default locale: ID: ar_IQ, Name: Arabic (Iraq) +display locale: ID: ar_IQ, Name: Arabic (Iraq) +format locale: ID: ar_IQ, Name: Arabic (Iraq) +default charset: ISO-8859-6 + +OS Locale: ar_IQ.utf8 +default locale: ID: ar_IQ, Name: Arabic (Iraq) +display locale: ID: ar_IQ, Name: Arabic (Iraq) +format locale: ID: ar_IQ, Name: Arabic (Iraq) +default charset: UTF-8 + +OS Locale: ar_JO +default locale: ID: ar_JO, Name: Arabic (Jordan) +display locale: ID: ar_JO, Name: Arabic (Jordan) +format locale: ID: ar_JO, Name: Arabic (Jordan) +default charset: ISO-8859-6 + +OS Locale: ar_JO.iso88596 +default locale: ID: ar_JO, Name: Arabic (Jordan) +display locale: ID: ar_JO, Name: Arabic (Jordan) +format locale: ID: ar_JO, Name: Arabic (Jordan) +default charset: ISO-8859-6 + +OS Locale: ar_JO.utf8 +default locale: ID: ar_JO, Name: Arabic (Jordan) +display locale: ID: ar_JO, Name: Arabic (Jordan) +format locale: ID: ar_JO, Name: Arabic (Jordan) +default charset: UTF-8 + +OS Locale: ar_KW +default locale: ID: ar_KW, Name: Arabic (Kuwait) +display locale: ID: ar_KW, Name: Arabic (Kuwait) +format locale: ID: ar_KW, Name: Arabic (Kuwait) +default charset: ISO-8859-6 + +OS Locale: ar_KW.iso88596 +default locale: ID: ar_KW, Name: Arabic (Kuwait) +display locale: ID: ar_KW, Name: Arabic (Kuwait) +format locale: ID: ar_KW, Name: Arabic (Kuwait) +default charset: ISO-8859-6 + +OS Locale: ar_KW.utf8 +default locale: ID: ar_KW, Name: Arabic (Kuwait) +display locale: ID: ar_KW, Name: Arabic (Kuwait) +format locale: ID: ar_KW, Name: Arabic (Kuwait) +default charset: UTF-8 + +OS Locale: ar_LB +default locale: ID: ar_LB, Name: Arabic (Lebanon) +display locale: ID: ar_LB, Name: Arabic (Lebanon) +format locale: ID: ar_LB, Name: Arabic (Lebanon) +default charset: ISO-8859-6 + +OS Locale: ar_LB.iso88596 +default locale: ID: ar_LB, Name: Arabic (Lebanon) +display locale: ID: ar_LB, Name: Arabic (Lebanon) +format locale: ID: ar_LB, Name: Arabic (Lebanon) +default charset: ISO-8859-6 + +OS Locale: ar_LB.utf8 +default locale: ID: ar_LB, Name: Arabic (Lebanon) +display locale: ID: ar_LB, Name: Arabic (Lebanon) +format locale: ID: ar_LB, Name: Arabic (Lebanon) +default charset: UTF-8 + +OS Locale: ar_LY +default locale: ID: ar_LY, Name: Arabic (Libya) +display locale: ID: ar_LY, Name: Arabic (Libya) +format locale: ID: ar_LY, Name: Arabic (Libya) +default charset: ISO-8859-6 + +OS Locale: ar_LY.iso88596 +default locale: ID: ar_LY, Name: Arabic (Libya) +display locale: ID: ar_LY, Name: Arabic (Libya) +format locale: ID: ar_LY, Name: Arabic (Libya) +default charset: ISO-8859-6 + +OS Locale: ar_LY.utf8 +default locale: ID: ar_LY, Name: Arabic (Libya) +display locale: ID: ar_LY, Name: Arabic (Libya) +format locale: ID: ar_LY, Name: Arabic (Libya) +default charset: UTF-8 + +OS Locale: ar_MA +default locale: ID: ar_MA, Name: Arabic (Morocco) +display locale: ID: ar_MA, Name: Arabic (Morocco) +format locale: ID: ar_MA, Name: Arabic (Morocco) +default charset: ISO-8859-6 + +OS Locale: ar_MA.iso88596 +default locale: ID: ar_MA, Name: Arabic (Morocco) +display locale: ID: ar_MA, Name: Arabic (Morocco) +format locale: ID: ar_MA, Name: Arabic (Morocco) +default charset: ISO-8859-6 + +OS Locale: ar_MA.utf8 +default locale: ID: ar_MA, Name: Arabic (Morocco) +display locale: ID: ar_MA, Name: Arabic (Morocco) +format locale: ID: ar_MA, Name: Arabic (Morocco) +default charset: UTF-8 + +OS Locale: ar_OM +default locale: ID: ar_OM, Name: Arabic (Oman) +display locale: ID: ar_OM, Name: Arabic (Oman) +format locale: ID: ar_OM, Name: Arabic (Oman) +default charset: ISO-8859-6 + +OS Locale: ar_OM.iso88596 +default locale: ID: ar_OM, Name: Arabic (Oman) +display locale: ID: ar_OM, Name: Arabic (Oman) +format locale: ID: ar_OM, Name: Arabic (Oman) +default charset: ISO-8859-6 + +OS Locale: ar_OM.utf8 +default locale: ID: ar_OM, Name: Arabic (Oman) +display locale: ID: ar_OM, Name: Arabic (Oman) +format locale: ID: ar_OM, Name: Arabic (Oman) +default charset: UTF-8 + +OS Locale: ar_QA +default locale: ID: ar_QA, Name: Arabic (Qatar) +display locale: ID: ar_QA, Name: Arabic (Qatar) +format locale: ID: ar_QA, Name: Arabic (Qatar) +default charset: ISO-8859-6 + +OS Locale: ar_QA.iso88596 +default locale: ID: ar_QA, Name: Arabic (Qatar) +display locale: ID: ar_QA, Name: Arabic (Qatar) +format locale: ID: ar_QA, Name: Arabic (Qatar) +default charset: ISO-8859-6 + +OS Locale: ar_QA.utf8 +default locale: ID: ar_QA, Name: Arabic (Qatar) +display locale: ID: ar_QA, Name: Arabic (Qatar) +format locale: ID: ar_QA, Name: Arabic (Qatar) +default charset: UTF-8 + +OS Locale: ar_SA +default locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +display locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +format locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +default charset: ISO-8859-6 + +OS Locale: ar_SA.iso88596 +default locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +display locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +format locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +default charset: ISO-8859-6 + +OS Locale: ar_SA.utf8 +default locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +display locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +format locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +default charset: UTF-8 + +OS Locale: ar_SD +default locale: ID: ar_SD, Name: Arabic (Sudan) +display locale: ID: ar_SD, Name: Arabic (Sudan) +format locale: ID: ar_SD, Name: Arabic (Sudan) +default charset: ISO-8859-6 + +OS Locale: ar_SD.iso88596 +default locale: ID: ar_SD, Name: Arabic (Sudan) +display locale: ID: ar_SD, Name: Arabic (Sudan) +format locale: ID: ar_SD, Name: Arabic (Sudan) +default charset: ISO-8859-6 + +OS Locale: ar_SD.utf8 +default locale: ID: ar_SD, Name: Arabic (Sudan) +display locale: ID: ar_SD, Name: Arabic (Sudan) +format locale: ID: ar_SD, Name: Arabic (Sudan) +default charset: UTF-8 + +OS Locale: ar_SY +default locale: ID: ar_SY, Name: Arabic (Syria) +display locale: ID: ar_SY, Name: Arabic (Syria) +format locale: ID: ar_SY, Name: Arabic (Syria) +default charset: ISO-8859-6 + +OS Locale: ar_SY.iso88596 +default locale: ID: ar_SY, Name: Arabic (Syria) +display locale: ID: ar_SY, Name: Arabic (Syria) +format locale: ID: ar_SY, Name: Arabic (Syria) +default charset: ISO-8859-6 + +OS Locale: ar_SY.utf8 +default locale: ID: ar_SY, Name: Arabic (Syria) +display locale: ID: ar_SY, Name: Arabic (Syria) +format locale: ID: ar_SY, Name: Arabic (Syria) +default charset: UTF-8 + +OS Locale: ar_TN +default locale: ID: ar_TN, Name: Arabic (Tunisia) +display locale: ID: ar_TN, Name: Arabic (Tunisia) +format locale: ID: ar_TN, Name: Arabic (Tunisia) +default charset: ISO-8859-6 + +OS Locale: ar_TN.iso88596 +default locale: ID: ar_TN, Name: Arabic (Tunisia) +display locale: ID: ar_TN, Name: Arabic (Tunisia) +format locale: ID: ar_TN, Name: Arabic (Tunisia) +default charset: ISO-8859-6 + +OS Locale: ar_TN.utf8 +default locale: ID: ar_TN, Name: Arabic (Tunisia) +display locale: ID: ar_TN, Name: Arabic (Tunisia) +format locale: ID: ar_TN, Name: Arabic (Tunisia) +default charset: UTF-8 + +OS Locale: ar_YE +default locale: ID: ar_YE, Name: Arabic (Yemen) +display locale: ID: ar_YE, Name: Arabic (Yemen) +format locale: ID: ar_YE, Name: Arabic (Yemen) +default charset: ISO-8859-6 + +OS Locale: ar_YE.iso88596 +default locale: ID: ar_YE, Name: Arabic (Yemen) +display locale: ID: ar_YE, Name: Arabic (Yemen) +format locale: ID: ar_YE, Name: Arabic (Yemen) +default charset: ISO-8859-6 + +OS Locale: ar_YE.utf8 +default locale: ID: ar_YE, Name: Arabic (Yemen) +display locale: ID: ar_YE, Name: Arabic (Yemen) +format locale: ID: ar_YE, Name: Arabic (Yemen) +default charset: UTF-8 + +OS Locale: as_IN.utf8 +default locale: ID: as_IN, Name: Assamese (India) +display locale: ID: as_IN, Name: Assamese (India) +format locale: ID: as_IN, Name: Assamese (India) +default charset: UTF-8 + +OS Locale: az_AZ.utf8 +default locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +display locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +format locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +default charset: UTF-8 + +OS Locale: be_BY +default locale: ID: be_BY, Name: Belarusian (Belarus) +display locale: ID: be_BY, Name: Belarusian (Belarus) +format locale: ID: be_BY, Name: Belarusian (Belarus) +default charset: windows-1251 + +OS Locale: be_BY.cp1251 +default locale: ID: be_BY, Name: Belarusian (Belarus) +display locale: ID: be_BY, Name: Belarusian (Belarus) +format locale: ID: be_BY, Name: Belarusian (Belarus) +default charset: windows-1251 + +OS Locale: be_BY.utf8 +default locale: ID: be_BY, Name: Belarusian (Belarus) +display locale: ID: be_BY, Name: Belarusian (Belarus) +format locale: ID: be_BY, Name: Belarusian (Belarus) +default charset: UTF-8 + +OS Locale: be_BY.utf8@latin +default locale: ID: be_BY, Name: Belarusian (Belarus) +display locale: ID: be_BY, Name: Belarusian (Belarus) +format locale: ID: be_BY, Name: Belarusian (Belarus) +default charset: UTF-8 + +OS Locale: be_BY@latin +default locale: ID: be_BY, Name: Belarusian (Belarus) +display locale: ID: be_BY, Name: Belarusian (Belarus) +format locale: ID: be_BY, Name: Belarusian (Belarus) +default charset: UTF-8 + +OS Locale: bg_BG +default locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +display locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +format locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +default charset: windows-1251 + +OS Locale: bg_BG.cp1251 +default locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +display locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +format locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +default charset: windows-1251 + +OS Locale: bg_BG.utf8 +default locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +display locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +format locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +default charset: UTF-8 + +OS Locale: bn_BD +default locale: ID: bn_BD, Name: Bengali (Bangladesh) +display locale: ID: bn_BD, Name: Bengali (Bangladesh) +format locale: ID: bn_BD, Name: Bengali (Bangladesh) +default charset: UTF-8 + +OS Locale: bn_BD.utf8 +default locale: ID: bn_BD, Name: Bengali (Bangladesh) +display locale: ID: bn_BD, Name: Bengali (Bangladesh) +format locale: ID: bn_BD, Name: Bengali (Bangladesh) +default charset: UTF-8 + +OS Locale: bn_IN +default locale: ID: bn_IN, Name: Bengali (India) +display locale: ID: bn_IN, Name: Bengali (India) +format locale: ID: bn_IN, Name: Bengali (India) +default charset: UTF-8 + +OS Locale: bn_IN.utf8 +default locale: ID: bn_IN, Name: Bengali (India) +display locale: ID: bn_IN, Name: Bengali (India) +format locale: ID: bn_IN, Name: Bengali (India) +default charset: UTF-8 + +OS Locale: bokmål +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-1 + +OS Locale: bokmal +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-1 + +OS Locale: br_FR +default locale: ID: br_FR, Name: Breton (France) +display locale: ID: br_FR, Name: Breton (France) +format locale: ID: br_FR, Name: Breton (France) +default charset: ISO-8859-1 + +OS Locale: br_FR.iso88591 +default locale: ID: br_FR, Name: Breton (France) +display locale: ID: br_FR, Name: Breton (France) +format locale: ID: br_FR, Name: Breton (France) +default charset: ISO-8859-1 + +OS Locale: br_FR.iso885915@euro +default locale: ID: br_FR, Name: Breton (France) +display locale: ID: br_FR, Name: Breton (France) +format locale: ID: br_FR, Name: Breton (France) +default charset: ISO-8859-15 + +OS Locale: br_FR.utf8 +default locale: ID: br_FR, Name: Breton (France) +display locale: ID: br_FR, Name: Breton (France) +format locale: ID: br_FR, Name: Breton (France) +default charset: UTF-8 + +OS Locale: br_FR@euro +default locale: ID: br_FR, Name: Breton (France) +display locale: ID: br_FR, Name: Breton (France) +format locale: ID: br_FR, Name: Breton (France) +default charset: ISO-8859-15 + +OS Locale: bs_BA +default locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +display locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +format locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +default charset: ISO-8859-2 + +OS Locale: bs_BA.iso88592 +default locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +display locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +format locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +default charset: ISO-8859-2 + +OS Locale: bs_BA.utf8 +default locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +display locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +format locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +default charset: UTF-8 + +OS Locale: byn_ER +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: byn_ER.utf8 +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: ca_AD +default locale: ID: ca_AD, Name: Catalan (Andorra) +display locale: ID: ca_AD, Name: Catalan (Andorra) +format locale: ID: ca_AD, Name: Catalan (Andorra) +default charset: ISO-8859-15 + +OS Locale: ca_AD.iso885915 +default locale: ID: ca_AD, Name: Catalan (Andorra) +display locale: ID: ca_AD, Name: Catalan (Andorra) +format locale: ID: ca_AD, Name: Catalan (Andorra) +default charset: ISO-8859-15 + +OS Locale: ca_AD.utf8 +default locale: ID: ca_AD, Name: Catalan (Andorra) +display locale: ID: ca_AD, Name: Catalan (Andorra) +format locale: ID: ca_AD, Name: Catalan (Andorra) +default charset: UTF-8 + +OS Locale: ca_ES +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-1 + +OS Locale: ca_ES.iso88591 +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-1 + +OS Locale: ca_ES.iso885915@euro +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-15 + +OS Locale: ca_ES.utf8 +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: UTF-8 + +OS Locale: ca_ES@euro +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-15 + +OS Locale: ca_FR +default locale: ID: ca_FR, Name: Catalan (France) +display locale: ID: ca_FR, Name: Catalan (France) +format locale: ID: ca_FR, Name: Catalan (France) +default charset: ISO-8859-15 + +OS Locale: ca_FR.iso885915 +default locale: ID: ca_FR, Name: Catalan (France) +display locale: ID: ca_FR, Name: Catalan (France) +format locale: ID: ca_FR, Name: Catalan (France) +default charset: ISO-8859-15 + +OS Locale: ca_FR.utf8 +default locale: ID: ca_FR, Name: Catalan (France) +display locale: ID: ca_FR, Name: Catalan (France) +format locale: ID: ca_FR, Name: Catalan (France) +default charset: UTF-8 + +OS Locale: ca_IT +default locale: ID: ca_IT, Name: Catalan (Italy) +display locale: ID: ca_IT, Name: Catalan (Italy) +format locale: ID: ca_IT, Name: Catalan (Italy) +default charset: ISO-8859-15 + +OS Locale: ca_IT.iso885915 +default locale: ID: ca_IT, Name: Catalan (Italy) +display locale: ID: ca_IT, Name: Catalan (Italy) +format locale: ID: ca_IT, Name: Catalan (Italy) +default charset: ISO-8859-15 + +OS Locale: ca_IT.utf8 +default locale: ID: ca_IT, Name: Catalan (Italy) +display locale: ID: ca_IT, Name: Catalan (Italy) +format locale: ID: ca_IT, Name: Catalan (Italy) +default charset: UTF-8 + +OS Locale: catalan +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-1 + +OS Locale: croatian +default locale: ID: hr_HR, Name: Croatian (Croatia) +display locale: ID: hr_HR, Name: Croatian (Croatia) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: ISO-8859-2 + +OS Locale: cs_CZ +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: ISO-8859-2 + +OS Locale: cs_CZ.iso88592 +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: ISO-8859-2 + +OS Locale: cs_CZ.utf8 +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: UTF-8 + +OS Locale: csb_PL +default locale: ID: en_PL, Name: English (Poland) +display locale: ID: en_PL, Name: English (Poland) +format locale: ID: en_PL, Name: English (Poland) +default charset: UTF-8 + +OS Locale: csb_PL.utf8 +default locale: ID: en_PL, Name: English (Poland) +display locale: ID: en_PL, Name: English (Poland) +format locale: ID: en_PL, Name: English (Poland) +default charset: UTF-8 + +OS Locale: cy_GB +default locale: ID: cy_GB, Name: Welsh (United Kingdom) +display locale: ID: cy_GB, Name: Welsh (United Kingdom) +format locale: ID: cy_GB, Name: Welsh (United Kingdom) +default charset: UTF-8 + +OS Locale: cy_GB.iso885914 +default locale: ID: cy_GB, Name: Welsh (United Kingdom) +display locale: ID: cy_GB, Name: Welsh (United Kingdom) +format locale: ID: cy_GB, Name: Welsh (United Kingdom) +default charset: UTF-8 + +OS Locale: cy_GB.utf8 +default locale: ID: cy_GB, Name: Welsh (United Kingdom) +display locale: ID: cy_GB, Name: Welsh (United Kingdom) +format locale: ID: cy_GB, Name: Welsh (United Kingdom) +default charset: UTF-8 + +OS Locale: czech +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: ISO-8859-2 + +OS Locale: da_DK +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-1 + +OS Locale: da_DK.iso88591 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-1 + +OS Locale: da_DK.iso885915 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-15 + +OS Locale: da_DK.utf8 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: UTF-8 + +OS Locale: danish +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-1 + +OS Locale: dansk +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-1 + +OS Locale: de_AT +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-1 + +OS Locale: de_AT.iso88591 +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-1 + +OS Locale: de_AT.iso885915@euro +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-15 + +OS Locale: de_AT.utf8 +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: UTF-8 + +OS Locale: de_AT@euro +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-15 + +OS Locale: de_BE +default locale: ID: de_BE, Name: German (Belgium) +display locale: ID: de_BE, Name: German (Belgium) +format locale: ID: de_BE, Name: German (Belgium) +default charset: ISO-8859-1 + +OS Locale: de_BE.iso88591 +default locale: ID: de_BE, Name: German (Belgium) +display locale: ID: de_BE, Name: German (Belgium) +format locale: ID: de_BE, Name: German (Belgium) +default charset: ISO-8859-1 + +OS Locale: de_BE.iso885915@euro +default locale: ID: de_BE, Name: German (Belgium) +display locale: ID: de_BE, Name: German (Belgium) +format locale: ID: de_BE, Name: German (Belgium) +default charset: ISO-8859-15 + +OS Locale: de_BE.utf8 +default locale: ID: de_BE, Name: German (Belgium) +display locale: ID: de_BE, Name: German (Belgium) +format locale: ID: de_BE, Name: German (Belgium) +default charset: UTF-8 + +OS Locale: de_BE@euro +default locale: ID: de_BE, Name: German (Belgium) +display locale: ID: de_BE, Name: German (Belgium) +format locale: ID: de_BE, Name: German (Belgium) +default charset: ISO-8859-15 + +OS Locale: de_CH +default locale: ID: de_CH, Name: German (Switzerland) +display locale: ID: de_CH, Name: German (Switzerland) +format locale: ID: de_CH, Name: German (Switzerland) +default charset: ISO-8859-1 + +OS Locale: de_CH.iso88591 +default locale: ID: de_CH, Name: German (Switzerland) +display locale: ID: de_CH, Name: German (Switzerland) +format locale: ID: de_CH, Name: German (Switzerland) +default charset: ISO-8859-1 + +OS Locale: de_CH.utf8 +default locale: ID: de_CH, Name: German (Switzerland) +display locale: ID: de_CH, Name: German (Switzerland) +format locale: ID: de_CH, Name: German (Switzerland) +default charset: UTF-8 + +OS Locale: de_DE +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-1 + +OS Locale: de_DE.iso88591 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-1 + +OS Locale: de_DE.iso885915@euro +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-15 + +OS Locale: de_DE.utf8 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: UTF-8 + +OS Locale: de_DE@euro +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-15 + +OS Locale: de_LU +default locale: ID: de_LU, Name: German (Luxembourg) +display locale: ID: de_LU, Name: German (Luxembourg) +format locale: ID: de_LU, Name: German (Luxembourg) +default charset: ISO-8859-1 + +OS Locale: de_LU.iso88591 +default locale: ID: de_LU, Name: German (Luxembourg) +display locale: ID: de_LU, Name: German (Luxembourg) +format locale: ID: de_LU, Name: German (Luxembourg) +default charset: ISO-8859-1 + +OS Locale: de_LU.iso885915@euro +default locale: ID: de_LU, Name: German (Luxembourg) +display locale: ID: de_LU, Name: German (Luxembourg) +format locale: ID: de_LU, Name: German (Luxembourg) +default charset: ISO-8859-15 + +OS Locale: de_LU.utf8 +default locale: ID: de_LU, Name: German (Luxembourg) +display locale: ID: de_LU, Name: German (Luxembourg) +format locale: ID: de_LU, Name: German (Luxembourg) +default charset: UTF-8 + +OS Locale: de_LU@euro +default locale: ID: de_LU, Name: German (Luxembourg) +display locale: ID: de_LU, Name: German (Luxembourg) +format locale: ID: de_LU, Name: German (Luxembourg) +default charset: ISO-8859-15 + +OS Locale: deutsch +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-1 + +OS Locale: dutch +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-1 + +OS Locale: dz_BT +default locale: ID: dz_BT, Name: Dzongkha (Bhutan) +display locale: ID: dz_BT, Name: Dzongkha (Bhutan) +format locale: ID: dz_BT, Name: Dzongkha (Bhutan) +default charset: UTF-8 + +OS Locale: dz_BT.utf8 +default locale: ID: dz_BT, Name: Dzongkha (Bhutan) +display locale: ID: dz_BT, Name: Dzongkha (Bhutan) +format locale: ID: dz_BT, Name: Dzongkha (Bhutan) +default charset: UTF-8 + +OS Locale: eesti +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-1 + +OS Locale: el_CY +default locale: ID: el_CY, Name: Greek (Cyprus) +display locale: ID: el_CY, Name: Greek (Cyprus) +format locale: ID: el_CY, Name: Greek (Cyprus) +default charset: ISO-8859-7 + +OS Locale: el_CY.iso88597 +default locale: ID: el_CY, Name: Greek (Cyprus) +display locale: ID: el_CY, Name: Greek (Cyprus) +format locale: ID: el_CY, Name: Greek (Cyprus) +default charset: ISO-8859-7 + +OS Locale: el_CY.utf8 +default locale: ID: el_CY, Name: Greek (Cyprus) +display locale: ID: el_CY, Name: Greek (Cyprus) +format locale: ID: el_CY, Name: Greek (Cyprus) +default charset: UTF-8 + +OS Locale: el_GR +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 + +OS Locale: el_GR.iso88597 +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 + +OS Locale: el_GR.utf8 +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: UTF-8 + +OS Locale: en_AU +default locale: ID: en_AU, Name: English (Australia) +display locale: ID: en_AU, Name: English (Australia) +format locale: ID: en_AU, Name: English (Australia) +default charset: ISO-8859-1 + +OS Locale: en_AU.iso88591 +default locale: ID: en_AU, Name: English (Australia) +display locale: ID: en_AU, Name: English (Australia) +format locale: ID: en_AU, Name: English (Australia) +default charset: ISO-8859-1 + +OS Locale: en_AU.utf8 +default locale: ID: en_AU, Name: English (Australia) +display locale: ID: en_AU, Name: English (Australia) +format locale: ID: en_AU, Name: English (Australia) +default charset: UTF-8 + +OS Locale: en_BW +default locale: ID: en_BW, Name: English (Botswana) +display locale: ID: en_BW, Name: English (Botswana) +format locale: ID: en_BW, Name: English (Botswana) +default charset: ISO-8859-1 + +OS Locale: en_BW.iso88591 +default locale: ID: en_BW, Name: English (Botswana) +display locale: ID: en_BW, Name: English (Botswana) +format locale: ID: en_BW, Name: English (Botswana) +default charset: ISO-8859-1 + +OS Locale: en_BW.utf8 +default locale: ID: en_BW, Name: English (Botswana) +display locale: ID: en_BW, Name: English (Botswana) +format locale: ID: en_BW, Name: English (Botswana) +default charset: UTF-8 + +OS Locale: en_CA +default locale: ID: en_CA, Name: English (Canada) +display locale: ID: en_CA, Name: English (Canada) +format locale: ID: en_CA, Name: English (Canada) +default charset: ISO-8859-1 + +OS Locale: en_CA.iso88591 +default locale: ID: en_CA, Name: English (Canada) +display locale: ID: en_CA, Name: English (Canada) +format locale: ID: en_CA, Name: English (Canada) +default charset: ISO-8859-1 + +OS Locale: en_CA.utf8 +default locale: ID: en_CA, Name: English (Canada) +display locale: ID: en_CA, Name: English (Canada) +format locale: ID: en_CA, Name: English (Canada) +default charset: UTF-8 + +OS Locale: en_DK +default locale: ID: en_DK, Name: English (Denmark) +display locale: ID: en_DK, Name: English (Denmark) +format locale: ID: en_DK, Name: English (Denmark) +default charset: ISO-8859-1 + +OS Locale: en_DK.iso88591 +default locale: ID: en_DK, Name: English (Denmark) +display locale: ID: en_DK, Name: English (Denmark) +format locale: ID: en_DK, Name: English (Denmark) +default charset: ISO-8859-1 + +OS Locale: en_DK.utf8 +default locale: ID: en_DK, Name: English (Denmark) +display locale: ID: en_DK, Name: English (Denmark) +format locale: ID: en_DK, Name: English (Denmark) +default charset: UTF-8 + +OS Locale: en_GB +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: ISO-8859-1 + +OS Locale: en_GB.iso88591 +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: ISO-8859-1 + +OS Locale: en_GB.iso885915 +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: ISO-8859-15 + +OS Locale: en_GB.utf8 +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: UTF-8 + +OS Locale: en_HK +default locale: ID: en_HK, Name: English (Hong Kong) +display locale: ID: en_HK, Name: English (Hong Kong) +format locale: ID: en_HK, Name: English (Hong Kong) +default charset: ISO-8859-1 + +OS Locale: en_HK.iso88591 +default locale: ID: en_HK, Name: English (Hong Kong) +display locale: ID: en_HK, Name: English (Hong Kong) +format locale: ID: en_HK, Name: English (Hong Kong) +default charset: ISO-8859-1 + +OS Locale: en_HK.utf8 +default locale: ID: en_HK, Name: English (Hong Kong) +display locale: ID: en_HK, Name: English (Hong Kong) +format locale: ID: en_HK, Name: English (Hong Kong) +default charset: UTF-8 + +OS Locale: en_IE +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-1 + +OS Locale: en_IE.iso88591 +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-1 + +OS Locale: en_IE.iso885915@euro +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-15 + +OS Locale: en_IE.utf8 +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: UTF-8 + +OS Locale: en_IE@euro +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-15 + +OS Locale: en_IN +default locale: ID: en_IN, Name: English (India) +display locale: ID: en_IN, Name: English (India) +format locale: ID: en_IN, Name: English (India) +default charset: UTF-8 + +OS Locale: en_IN.utf8 +default locale: ID: en_IN, Name: English (India) +display locale: ID: en_IN, Name: English (India) +format locale: ID: en_IN, Name: English (India) +default charset: UTF-8 + +OS Locale: en_NZ +default locale: ID: en_NZ, Name: English (New Zealand) +display locale: ID: en_NZ, Name: English (New Zealand) +format locale: ID: en_NZ, Name: English (New Zealand) +default charset: ISO-8859-1 + +OS Locale: en_NZ.iso88591 +default locale: ID: en_NZ, Name: English (New Zealand) +display locale: ID: en_NZ, Name: English (New Zealand) +format locale: ID: en_NZ, Name: English (New Zealand) +default charset: ISO-8859-1 + +OS Locale: en_NZ.utf8 +default locale: ID: en_NZ, Name: English (New Zealand) +display locale: ID: en_NZ, Name: English (New Zealand) +format locale: ID: en_NZ, Name: English (New Zealand) +default charset: UTF-8 + +OS Locale: en_PH +default locale: ID: en_PH, Name: English (Philippines) +display locale: ID: en_PH, Name: English (Philippines) +format locale: ID: en_PH, Name: English (Philippines) +default charset: ISO-8859-1 + +OS Locale: en_PH.iso88591 +default locale: ID: en_PH, Name: English (Philippines) +display locale: ID: en_PH, Name: English (Philippines) +format locale: ID: en_PH, Name: English (Philippines) +default charset: ISO-8859-1 + +OS Locale: en_PH.utf8 +default locale: ID: en_PH, Name: English (Philippines) +display locale: ID: en_PH, Name: English (Philippines) +format locale: ID: en_PH, Name: English (Philippines) +default charset: UTF-8 + +OS Locale: en_SG +default locale: ID: en_SG, Name: English (Singapore) +display locale: ID: en_SG, Name: English (Singapore) +format locale: ID: en_SG, Name: English (Singapore) +default charset: ISO-8859-1 + +OS Locale: en_SG.iso88591 +default locale: ID: en_SG, Name: English (Singapore) +display locale: ID: en_SG, Name: English (Singapore) +format locale: ID: en_SG, Name: English (Singapore) +default charset: ISO-8859-1 + +OS Locale: en_SG.utf8 +default locale: ID: en_SG, Name: English (Singapore) +display locale: ID: en_SG, Name: English (Singapore) +format locale: ID: en_SG, Name: English (Singapore) +default charset: UTF-8 + +OS Locale: en_US +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: ISO-8859-1 + +OS Locale: en_US.iso88591 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: ISO-8859-1 + +OS Locale: en_US.iso885915 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: ISO-8859-15 + +OS Locale: en_US.utf8 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: UTF-8 + +OS Locale: en_ZA +default locale: ID: en_ZA, Name: English (South Africa) +display locale: ID: en_ZA, Name: English (South Africa) +format locale: ID: en_ZA, Name: English (South Africa) +default charset: ISO-8859-1 + +OS Locale: en_ZA.iso88591 +default locale: ID: en_ZA, Name: English (South Africa) +display locale: ID: en_ZA, Name: English (South Africa) +format locale: ID: en_ZA, Name: English (South Africa) +default charset: ISO-8859-1 + +OS Locale: en_ZA.utf8 +default locale: ID: en_ZA, Name: English (South Africa) +display locale: ID: en_ZA, Name: English (South Africa) +format locale: ID: en_ZA, Name: English (South Africa) +default charset: UTF-8 + +OS Locale: en_ZW +default locale: ID: en_ZW, Name: English (Zimbabwe) +display locale: ID: en_ZW, Name: English (Zimbabwe) +format locale: ID: en_ZW, Name: English (Zimbabwe) +default charset: ISO-8859-1 + +OS Locale: en_ZW.iso88591 +default locale: ID: en_ZW, Name: English (Zimbabwe) +display locale: ID: en_ZW, Name: English (Zimbabwe) +format locale: ID: en_ZW, Name: English (Zimbabwe) +default charset: ISO-8859-1 + +OS Locale: en_ZW.utf8 +default locale: ID: en_ZW, Name: English (Zimbabwe) +display locale: ID: en_ZW, Name: English (Zimbabwe) +format locale: ID: en_ZW, Name: English (Zimbabwe) +default charset: UTF-8 + +OS Locale: es_AR +default locale: ID: es_AR, Name: Spanish (Argentina) +display locale: ID: es_AR, Name: Spanish (Argentina) +format locale: ID: es_AR, Name: Spanish (Argentina) +default charset: ISO-8859-1 + +OS Locale: es_AR.iso88591 +default locale: ID: es_AR, Name: Spanish (Argentina) +display locale: ID: es_AR, Name: Spanish (Argentina) +format locale: ID: es_AR, Name: Spanish (Argentina) +default charset: ISO-8859-1 + +OS Locale: es_AR.utf8 +default locale: ID: es_AR, Name: Spanish (Argentina) +display locale: ID: es_AR, Name: Spanish (Argentina) +format locale: ID: es_AR, Name: Spanish (Argentina) +default charset: UTF-8 + +OS Locale: es_BO +default locale: ID: es_BO, Name: Spanish (Bolivia) +display locale: ID: es_BO, Name: Spanish (Bolivia) +format locale: ID: es_BO, Name: Spanish (Bolivia) +default charset: ISO-8859-1 + +OS Locale: es_BO.iso88591 +default locale: ID: es_BO, Name: Spanish (Bolivia) +display locale: ID: es_BO, Name: Spanish (Bolivia) +format locale: ID: es_BO, Name: Spanish (Bolivia) +default charset: ISO-8859-1 + +OS Locale: es_BO.utf8 +default locale: ID: es_BO, Name: Spanish (Bolivia) +display locale: ID: es_BO, Name: Spanish (Bolivia) +format locale: ID: es_BO, Name: Spanish (Bolivia) +default charset: UTF-8 + +OS Locale: es_CL +default locale: ID: es_CL, Name: Spanish (Chile) +display locale: ID: es_CL, Name: Spanish (Chile) +format locale: ID: es_CL, Name: Spanish (Chile) +default charset: ISO-8859-1 + +OS Locale: es_CL.iso88591 +default locale: ID: es_CL, Name: Spanish (Chile) +display locale: ID: es_CL, Name: Spanish (Chile) +format locale: ID: es_CL, Name: Spanish (Chile) +default charset: ISO-8859-1 + +OS Locale: es_CL.utf8 +default locale: ID: es_CL, Name: Spanish (Chile) +display locale: ID: es_CL, Name: Spanish (Chile) +format locale: ID: es_CL, Name: Spanish (Chile) +default charset: UTF-8 + +OS Locale: es_CO +default locale: ID: es_CO, Name: Spanish (Colombia) +display locale: ID: es_CO, Name: Spanish (Colombia) +format locale: ID: es_CO, Name: Spanish (Colombia) +default charset: ISO-8859-1 + +OS Locale: es_CO.iso88591 +default locale: ID: es_CO, Name: Spanish (Colombia) +display locale: ID: es_CO, Name: Spanish (Colombia) +format locale: ID: es_CO, Name: Spanish (Colombia) +default charset: ISO-8859-1 + +OS Locale: es_CO.utf8 +default locale: ID: es_CO, Name: Spanish (Colombia) +display locale: ID: es_CO, Name: Spanish (Colombia) +format locale: ID: es_CO, Name: Spanish (Colombia) +default charset: UTF-8 + +OS Locale: es_CR +default locale: ID: es_CR, Name: Spanish (Costa Rica) +display locale: ID: es_CR, Name: Spanish (Costa Rica) +format locale: ID: es_CR, Name: Spanish (Costa Rica) +default charset: ISO-8859-1 + +OS Locale: es_CR.iso88591 +default locale: ID: es_CR, Name: Spanish (Costa Rica) +display locale: ID: es_CR, Name: Spanish (Costa Rica) +format locale: ID: es_CR, Name: Spanish (Costa Rica) +default charset: ISO-8859-1 + +OS Locale: es_CR.utf8 +default locale: ID: es_CR, Name: Spanish (Costa Rica) +display locale: ID: es_CR, Name: Spanish (Costa Rica) +format locale: ID: es_CR, Name: Spanish (Costa Rica) +default charset: UTF-8 + +OS Locale: es_DO +default locale: ID: es_DO, Name: Spanish (Dominican Republic) +display locale: ID: es_DO, Name: Spanish (Dominican Republic) +format locale: ID: es_DO, Name: Spanish (Dominican Republic) +default charset: ISO-8859-1 + +OS Locale: es_DO.iso88591 +default locale: ID: es_DO, Name: Spanish (Dominican Republic) +display locale: ID: es_DO, Name: Spanish (Dominican Republic) +format locale: ID: es_DO, Name: Spanish (Dominican Republic) +default charset: ISO-8859-1 + +OS Locale: es_DO.utf8 +default locale: ID: es_DO, Name: Spanish (Dominican Republic) +display locale: ID: es_DO, Name: Spanish (Dominican Republic) +format locale: ID: es_DO, Name: Spanish (Dominican Republic) +default charset: UTF-8 + +OS Locale: es_EC +default locale: ID: es_EC, Name: Spanish (Ecuador) +display locale: ID: es_EC, Name: Spanish (Ecuador) +format locale: ID: es_EC, Name: Spanish (Ecuador) +default charset: ISO-8859-1 + +OS Locale: es_EC.iso88591 +default locale: ID: es_EC, Name: Spanish (Ecuador) +display locale: ID: es_EC, Name: Spanish (Ecuador) +format locale: ID: es_EC, Name: Spanish (Ecuador) +default charset: ISO-8859-1 + +OS Locale: es_EC.utf8 +default locale: ID: es_EC, Name: Spanish (Ecuador) +display locale: ID: es_EC, Name: Spanish (Ecuador) +format locale: ID: es_EC, Name: Spanish (Ecuador) +default charset: UTF-8 + +OS Locale: es_ES +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-1 + +OS Locale: es_ES.iso88591 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-1 + +OS Locale: es_ES.iso885915@euro +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-15 + +OS Locale: es_ES.utf8 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: UTF-8 + +OS Locale: es_ES@euro +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-15 + +OS Locale: es_GT +default locale: ID: es_GT, Name: Spanish (Guatemala) +display locale: ID: es_GT, Name: Spanish (Guatemala) +format locale: ID: es_GT, Name: Spanish (Guatemala) +default charset: ISO-8859-1 + +OS Locale: es_GT.iso88591 +default locale: ID: es_GT, Name: Spanish (Guatemala) +display locale: ID: es_GT, Name: Spanish (Guatemala) +format locale: ID: es_GT, Name: Spanish (Guatemala) +default charset: ISO-8859-1 + +OS Locale: es_GT.utf8 +default locale: ID: es_GT, Name: Spanish (Guatemala) +display locale: ID: es_GT, Name: Spanish (Guatemala) +format locale: ID: es_GT, Name: Spanish (Guatemala) +default charset: UTF-8 + +OS Locale: es_HN +default locale: ID: es_HN, Name: Spanish (Honduras) +display locale: ID: es_HN, Name: Spanish (Honduras) +format locale: ID: es_HN, Name: Spanish (Honduras) +default charset: ISO-8859-1 + +OS Locale: es_HN.iso88591 +default locale: ID: es_HN, Name: Spanish (Honduras) +display locale: ID: es_HN, Name: Spanish (Honduras) +format locale: ID: es_HN, Name: Spanish (Honduras) +default charset: ISO-8859-1 + +OS Locale: es_HN.utf8 +default locale: ID: es_HN, Name: Spanish (Honduras) +display locale: ID: es_HN, Name: Spanish (Honduras) +format locale: ID: es_HN, Name: Spanish (Honduras) +default charset: UTF-8 + +OS Locale: es_MX +default locale: ID: es_MX, Name: Spanish (Mexico) +display locale: ID: es_MX, Name: Spanish (Mexico) +format locale: ID: es_MX, Name: Spanish (Mexico) +default charset: ISO-8859-1 + +OS Locale: es_MX.iso88591 +default locale: ID: es_MX, Name: Spanish (Mexico) +display locale: ID: es_MX, Name: Spanish (Mexico) +format locale: ID: es_MX, Name: Spanish (Mexico) +default charset: ISO-8859-1 + +OS Locale: es_MX.utf8 +default locale: ID: es_MX, Name: Spanish (Mexico) +display locale: ID: es_MX, Name: Spanish (Mexico) +format locale: ID: es_MX, Name: Spanish (Mexico) +default charset: UTF-8 + +OS Locale: es_NI +default locale: ID: es_NI, Name: Spanish (Nicaragua) +display locale: ID: es_NI, Name: Spanish (Nicaragua) +format locale: ID: es_NI, Name: Spanish (Nicaragua) +default charset: ISO-8859-1 + +OS Locale: es_NI.iso88591 +default locale: ID: es_NI, Name: Spanish (Nicaragua) +display locale: ID: es_NI, Name: Spanish (Nicaragua) +format locale: ID: es_NI, Name: Spanish (Nicaragua) +default charset: ISO-8859-1 + +OS Locale: es_NI.utf8 +default locale: ID: es_NI, Name: Spanish (Nicaragua) +display locale: ID: es_NI, Name: Spanish (Nicaragua) +format locale: ID: es_NI, Name: Spanish (Nicaragua) +default charset: UTF-8 + +OS Locale: es_PA +default locale: ID: es_PA, Name: Spanish (Panama) +display locale: ID: es_PA, Name: Spanish (Panama) +format locale: ID: es_PA, Name: Spanish (Panama) +default charset: ISO-8859-1 + +OS Locale: es_PA.iso88591 +default locale: ID: es_PA, Name: Spanish (Panama) +display locale: ID: es_PA, Name: Spanish (Panama) +format locale: ID: es_PA, Name: Spanish (Panama) +default charset: ISO-8859-1 + +OS Locale: es_PA.utf8 +default locale: ID: es_PA, Name: Spanish (Panama) +display locale: ID: es_PA, Name: Spanish (Panama) +format locale: ID: es_PA, Name: Spanish (Panama) +default charset: UTF-8 + +OS Locale: es_PE +default locale: ID: es_PE, Name: Spanish (Peru) +display locale: ID: es_PE, Name: Spanish (Peru) +format locale: ID: es_PE, Name: Spanish (Peru) +default charset: ISO-8859-1 + +OS Locale: es_PE.iso88591 +default locale: ID: es_PE, Name: Spanish (Peru) +display locale: ID: es_PE, Name: Spanish (Peru) +format locale: ID: es_PE, Name: Spanish (Peru) +default charset: ISO-8859-1 + +OS Locale: es_PE.utf8 +default locale: ID: es_PE, Name: Spanish (Peru) +display locale: ID: es_PE, Name: Spanish (Peru) +format locale: ID: es_PE, Name: Spanish (Peru) +default charset: UTF-8 + +OS Locale: es_PR +default locale: ID: es_PR, Name: Spanish (Puerto Rico) +display locale: ID: es_PR, Name: Spanish (Puerto Rico) +format locale: ID: es_PR, Name: Spanish (Puerto Rico) +default charset: ISO-8859-1 + +OS Locale: es_PR.iso88591 +default locale: ID: es_PR, Name: Spanish (Puerto Rico) +display locale: ID: es_PR, Name: Spanish (Puerto Rico) +format locale: ID: es_PR, Name: Spanish (Puerto Rico) +default charset: ISO-8859-1 + +OS Locale: es_PR.utf8 +default locale: ID: es_PR, Name: Spanish (Puerto Rico) +display locale: ID: es_PR, Name: Spanish (Puerto Rico) +format locale: ID: es_PR, Name: Spanish (Puerto Rico) +default charset: UTF-8 + +OS Locale: es_PY +default locale: ID: es_PY, Name: Spanish (Paraguay) +display locale: ID: es_PY, Name: Spanish (Paraguay) +format locale: ID: es_PY, Name: Spanish (Paraguay) +default charset: ISO-8859-1 + +OS Locale: es_PY.iso88591 +default locale: ID: es_PY, Name: Spanish (Paraguay) +display locale: ID: es_PY, Name: Spanish (Paraguay) +format locale: ID: es_PY, Name: Spanish (Paraguay) +default charset: ISO-8859-1 + +OS Locale: es_PY.utf8 +default locale: ID: es_PY, Name: Spanish (Paraguay) +display locale: ID: es_PY, Name: Spanish (Paraguay) +format locale: ID: es_PY, Name: Spanish (Paraguay) +default charset: UTF-8 + +OS Locale: es_SV +default locale: ID: es_SV, Name: Spanish (El Salvador) +display locale: ID: es_SV, Name: Spanish (El Salvador) +format locale: ID: es_SV, Name: Spanish (El Salvador) +default charset: ISO-8859-1 + +OS Locale: es_SV.iso88591 +default locale: ID: es_SV, Name: Spanish (El Salvador) +display locale: ID: es_SV, Name: Spanish (El Salvador) +format locale: ID: es_SV, Name: Spanish (El Salvador) +default charset: ISO-8859-1 + +OS Locale: es_SV.utf8 +default locale: ID: es_SV, Name: Spanish (El Salvador) +display locale: ID: es_SV, Name: Spanish (El Salvador) +format locale: ID: es_SV, Name: Spanish (El Salvador) +default charset: UTF-8 + +OS Locale: es_US +default locale: ID: es_US, Name: Spanish (United States) +display locale: ID: es_US, Name: Spanish (United States) +format locale: ID: es_US, Name: Spanish (United States) +default charset: ISO-8859-1 + +OS Locale: es_US.iso88591 +default locale: ID: es_US, Name: Spanish (United States) +display locale: ID: es_US, Name: Spanish (United States) +format locale: ID: es_US, Name: Spanish (United States) +default charset: ISO-8859-1 + +OS Locale: es_US.utf8 +default locale: ID: es_US, Name: Spanish (United States) +display locale: ID: es_US, Name: Spanish (United States) +format locale: ID: es_US, Name: Spanish (United States) +default charset: UTF-8 + +OS Locale: es_UY +default locale: ID: es_UY, Name: Spanish (Uruguay) +display locale: ID: es_UY, Name: Spanish (Uruguay) +format locale: ID: es_UY, Name: Spanish (Uruguay) +default charset: ISO-8859-1 + +OS Locale: es_UY.iso88591 +default locale: ID: es_UY, Name: Spanish (Uruguay) +display locale: ID: es_UY, Name: Spanish (Uruguay) +format locale: ID: es_UY, Name: Spanish (Uruguay) +default charset: ISO-8859-1 + +OS Locale: es_UY.utf8 +default locale: ID: es_UY, Name: Spanish (Uruguay) +display locale: ID: es_UY, Name: Spanish (Uruguay) +format locale: ID: es_UY, Name: Spanish (Uruguay) +default charset: UTF-8 + +OS Locale: es_VE +default locale: ID: es_VE, Name: Spanish (Venezuela) +display locale: ID: es_VE, Name: Spanish (Venezuela) +format locale: ID: es_VE, Name: Spanish (Venezuela) +default charset: ISO-8859-1 + +OS Locale: es_VE.iso88591 +default locale: ID: es_VE, Name: Spanish (Venezuela) +display locale: ID: es_VE, Name: Spanish (Venezuela) +format locale: ID: es_VE, Name: Spanish (Venezuela) +default charset: ISO-8859-1 + +OS Locale: es_VE.utf8 +default locale: ID: es_VE, Name: Spanish (Venezuela) +display locale: ID: es_VE, Name: Spanish (Venezuela) +format locale: ID: es_VE, Name: Spanish (Venezuela) +default charset: UTF-8 + +OS Locale: estonian +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-1 + +OS Locale: et_EE +default locale: ID: et_EE, Name: Estonian (Estonia) +display locale: ID: et_EE, Name: Estonian (Estonia) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: ISO-8859-1 + +OS Locale: et_EE.iso88591 +default locale: ID: et_EE, Name: Estonian (Estonia) +display locale: ID: et_EE, Name: Estonian (Estonia) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: ISO-8859-1 + +OS Locale: et_EE.iso885915 +default locale: ID: et_EE, Name: Estonian (Estonia) +display locale: ID: et_EE, Name: Estonian (Estonia) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: ISO-8859-15 + +OS Locale: et_EE.utf8 +default locale: ID: et_EE, Name: Estonian (Estonia) +display locale: ID: et_EE, Name: Estonian (Estonia) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: UTF-8 + +OS Locale: eu_ES +default locale: ID: eu_ES, Name: Basque (Spain) +display locale: ID: eu_ES, Name: Basque (Spain) +format locale: ID: eu_ES, Name: Basque (Spain) +default charset: ISO-8859-1 + +OS Locale: eu_ES.iso88591 +default locale: ID: eu_ES, Name: Basque (Spain) +display locale: ID: eu_ES, Name: Basque (Spain) +format locale: ID: eu_ES, Name: Basque (Spain) +default charset: ISO-8859-1 + +OS Locale: eu_ES.iso885915@euro +default locale: ID: eu_ES, Name: Basque (Spain) +display locale: ID: eu_ES, Name: Basque (Spain) +format locale: ID: eu_ES, Name: Basque (Spain) +default charset: ISO-8859-15 + +OS Locale: eu_ES.utf8 +default locale: ID: eu_ES, Name: Basque (Spain) +display locale: ID: eu_ES, Name: Basque (Spain) +format locale: ID: eu_ES, Name: Basque (Spain) +default charset: UTF-8 + +OS Locale: eu_ES@euro +default locale: ID: eu_ES, Name: Basque (Spain) +display locale: ID: eu_ES, Name: Basque (Spain) +format locale: ID: eu_ES, Name: Basque (Spain) +default charset: ISO-8859-15 + +OS Locale: fa_IR +default locale: ID: fa_IR, Name: Persian (Iran) +display locale: ID: fa_IR, Name: Persian (Iran) +format locale: ID: fa_IR, Name: Persian (Iran) +default charset: UTF-8 + +OS Locale: fa_IR.utf8 +default locale: ID: fa_IR, Name: Persian (Iran) +display locale: ID: fa_IR, Name: Persian (Iran) +format locale: ID: fa_IR, Name: Persian (Iran) +default charset: UTF-8 + +OS Locale: fi_FI +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-1 + +OS Locale: fi_FI.iso88591 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-1 + +OS Locale: fi_FI.iso885915@euro +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-15 + +OS Locale: fi_FI.utf8 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: UTF-8 + +OS Locale: fi_FI@euro +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-15 + +OS Locale: finnish +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-1 + +OS Locale: fo_FO +default locale: ID: fo_FO, Name: Faroese (Faroe Islands) +display locale: ID: fo_FO, Name: Faroese (Faroe Islands) +format locale: ID: fo_FO, Name: Faroese (Faroe Islands) +default charset: ISO-8859-1 + +OS Locale: fo_FO.iso88591 +default locale: ID: fo_FO, Name: Faroese (Faroe Islands) +display locale: ID: fo_FO, Name: Faroese (Faroe Islands) +format locale: ID: fo_FO, Name: Faroese (Faroe Islands) +default charset: ISO-8859-1 + +OS Locale: fo_FO.utf8 +default locale: ID: fo_FO, Name: Faroese (Faroe Islands) +display locale: ID: fo_FO, Name: Faroese (Faroe Islands) +format locale: ID: fo_FO, Name: Faroese (Faroe Islands) +default charset: UTF-8 + +OS Locale: fr_BE +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-1 + +OS Locale: fr_BE.iso88591 +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-1 + +OS Locale: fr_BE.iso885915@euro +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-15 + +OS Locale: fr_BE.utf8 +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: UTF-8 + +OS Locale: fr_BE@euro +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-15 + +OS Locale: fr_CA +default locale: ID: fr_CA, Name: French (Canada) +display locale: ID: fr_CA, Name: French (Canada) +format locale: ID: fr_CA, Name: French (Canada) +default charset: ISO-8859-1 + +OS Locale: fr_CA.iso88591 +default locale: ID: fr_CA, Name: French (Canada) +display locale: ID: fr_CA, Name: French (Canada) +format locale: ID: fr_CA, Name: French (Canada) +default charset: ISO-8859-1 + +OS Locale: fr_CA.utf8 +default locale: ID: fr_CA, Name: French (Canada) +display locale: ID: fr_CA, Name: French (Canada) +format locale: ID: fr_CA, Name: French (Canada) +default charset: UTF-8 + +OS Locale: fr_CH +default locale: ID: fr_CH, Name: French (Switzerland) +display locale: ID: fr_CH, Name: French (Switzerland) +format locale: ID: fr_CH, Name: French (Switzerland) +default charset: ISO-8859-1 + +OS Locale: fr_CH.iso88591 +default locale: ID: fr_CH, Name: French (Switzerland) +display locale: ID: fr_CH, Name: French (Switzerland) +format locale: ID: fr_CH, Name: French (Switzerland) +default charset: ISO-8859-1 + +OS Locale: fr_CH.utf8 +default locale: ID: fr_CH, Name: French (Switzerland) +display locale: ID: fr_CH, Name: French (Switzerland) +format locale: ID: fr_CH, Name: French (Switzerland) +default charset: UTF-8 + +OS Locale: fr_FR +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-1 + +OS Locale: fr_FR.iso88591 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-1 + +OS Locale: fr_FR.iso885915@euro +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-15 + +OS Locale: fr_FR.utf8 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: UTF-8 + +OS Locale: fr_FR@euro +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-15 + +OS Locale: fr_LU +default locale: ID: fr_LU, Name: French (Luxembourg) +display locale: ID: fr_LU, Name: French (Luxembourg) +format locale: ID: fr_LU, Name: French (Luxembourg) +default charset: ISO-8859-1 + +OS Locale: fr_LU.iso88591 +default locale: ID: fr_LU, Name: French (Luxembourg) +display locale: ID: fr_LU, Name: French (Luxembourg) +format locale: ID: fr_LU, Name: French (Luxembourg) +default charset: ISO-8859-1 + +OS Locale: fr_LU.iso885915@euro +default locale: ID: fr_LU, Name: French (Luxembourg) +display locale: ID: fr_LU, Name: French (Luxembourg) +format locale: ID: fr_LU, Name: French (Luxembourg) +default charset: ISO-8859-15 + +OS Locale: fr_LU.utf8 +default locale: ID: fr_LU, Name: French (Luxembourg) +display locale: ID: fr_LU, Name: French (Luxembourg) +format locale: ID: fr_LU, Name: French (Luxembourg) +default charset: UTF-8 + +OS Locale: fr_LU@euro +default locale: ID: fr_LU, Name: French (Luxembourg) +display locale: ID: fr_LU, Name: French (Luxembourg) +format locale: ID: fr_LU, Name: French (Luxembourg) +default charset: ISO-8859-15 + +OS Locale: français +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-1 + +OS Locale: french +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-1 + +OS Locale: fy_NL +default locale: ID: fy_NL, Name: Frisian (Netherlands) +display locale: ID: fy_NL, Name: Frisian (Netherlands) +format locale: ID: fy_NL, Name: Frisian (Netherlands) +default charset: UTF-8 + +OS Locale: fy_NL.utf8 +default locale: ID: fy_NL, Name: Frisian (Netherlands) +display locale: ID: fy_NL, Name: Frisian (Netherlands) +format locale: ID: fy_NL, Name: Frisian (Netherlands) +default charset: UTF-8 + +OS Locale: ga_IE +default locale: ID: ga_IE, Name: Irish (Ireland) +display locale: ID: ga_IE, Name: Irish (Ireland) +format locale: ID: ga_IE, Name: Irish (Ireland) +default charset: ISO-8859-1 + +OS Locale: ga_IE.iso88591 +default locale: ID: ga_IE, Name: Irish (Ireland) +display locale: ID: ga_IE, Name: Irish (Ireland) +format locale: ID: ga_IE, Name: Irish (Ireland) +default charset: ISO-8859-1 + +OS Locale: ga_IE.iso885915@euro +default locale: ID: ga_IE, Name: Irish (Ireland) +display locale: ID: ga_IE, Name: Irish (Ireland) +format locale: ID: ga_IE, Name: Irish (Ireland) +default charset: ISO-8859-15 + +OS Locale: ga_IE.utf8 +default locale: ID: ga_IE, Name: Irish (Ireland) +display locale: ID: ga_IE, Name: Irish (Ireland) +format locale: ID: ga_IE, Name: Irish (Ireland) +default charset: UTF-8 + +OS Locale: ga_IE@euro +default locale: ID: ga_IE, Name: Irish (Ireland) +display locale: ID: ga_IE, Name: Irish (Ireland) +format locale: ID: ga_IE, Name: Irish (Ireland) +default charset: ISO-8859-15 + +OS Locale: galego +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-1 + +OS Locale: galician +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-1 + +OS Locale: gd_GB +default locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +display locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +format locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +default charset: ISO-8859-15 + +OS Locale: gd_GB.iso885915 +default locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +display locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +format locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +default charset: ISO-8859-15 + +OS Locale: gd_GB.utf8 +default locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +display locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +format locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +default charset: UTF-8 + +OS Locale: german +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-1 + +OS Locale: gez_ER +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: gez_ER.utf8 +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: gez_ER.utf8@abegede +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: gez_ER@abegede +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: gez_ET +default locale: ID: en_ET, Name: English (Ethiopia) +display locale: ID: en_ET, Name: English (Ethiopia) +format locale: ID: en_ET, Name: English (Ethiopia) +default charset: UTF-8 + +OS Locale: gez_ET.utf8 +default locale: ID: en_ET, Name: English (Ethiopia) +display locale: ID: en_ET, Name: English (Ethiopia) +format locale: ID: en_ET, Name: English (Ethiopia) +default charset: UTF-8 + +OS Locale: gez_ET.utf8@abegede +default locale: ID: en_ET, Name: English (Ethiopia) +display locale: ID: en_ET, Name: English (Ethiopia) +format locale: ID: en_ET, Name: English (Ethiopia) +default charset: UTF-8 + +OS Locale: gez_ET@abegede +default locale: ID: en_ET, Name: English (Ethiopia) +display locale: ID: en_ET, Name: English (Ethiopia) +format locale: ID: en_ET, Name: English (Ethiopia) +default charset: UTF-8 + +OS Locale: gl_ES +default locale: ID: gl_ES, Name: Gallegan (Spain) +display locale: ID: gl_ES, Name: Gallegan (Spain) +format locale: ID: gl_ES, Name: Gallegan (Spain) +default charset: ISO-8859-1 + +OS Locale: gl_ES.iso88591 +default locale: ID: gl_ES, Name: Gallegan (Spain) +display locale: ID: gl_ES, Name: Gallegan (Spain) +format locale: ID: gl_ES, Name: Gallegan (Spain) +default charset: ISO-8859-1 + +OS Locale: gl_ES.iso885915@euro +default locale: ID: gl_ES, Name: Gallegan (Spain) +display locale: ID: gl_ES, Name: Gallegan (Spain) +format locale: ID: gl_ES, Name: Gallegan (Spain) +default charset: ISO-8859-15 + +OS Locale: gl_ES.utf8 +default locale: ID: gl_ES, Name: Gallegan (Spain) +display locale: ID: gl_ES, Name: Gallegan (Spain) +format locale: ID: gl_ES, Name: Gallegan (Spain) +default charset: UTF-8 + +OS Locale: gl_ES@euro +default locale: ID: gl_ES, Name: Gallegan (Spain) +display locale: ID: gl_ES, Name: Gallegan (Spain) +format locale: ID: gl_ES, Name: Gallegan (Spain) +default charset: ISO-8859-15 + +OS Locale: greek +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 + +OS Locale: gu_IN +default locale: ID: gu_IN, Name: Gujarati (India) +display locale: ID: gu_IN, Name: Gujarati (India) +format locale: ID: gu_IN, Name: Gujarati (India) +default charset: UTF-8 + +OS Locale: gu_IN.utf8 +default locale: ID: gu_IN, Name: Gujarati (India) +display locale: ID: gu_IN, Name: Gujarati (India) +format locale: ID: gu_IN, Name: Gujarati (India) +default charset: UTF-8 + +OS Locale: gv_GB +default locale: ID: gv_GB, Name: Manx (United Kingdom) +display locale: ID: gv_GB, Name: Manx (United Kingdom) +format locale: ID: gv_GB, Name: Manx (United Kingdom) +default charset: ISO-8859-1 + +OS Locale: gv_GB.iso88591 +default locale: ID: gv_GB, Name: Manx (United Kingdom) +display locale: ID: gv_GB, Name: Manx (United Kingdom) +format locale: ID: gv_GB, Name: Manx (United Kingdom) +default charset: ISO-8859-1 + +OS Locale: gv_GB.utf8 +default locale: ID: gv_GB, Name: Manx (United Kingdom) +display locale: ID: gv_GB, Name: Manx (United Kingdom) +format locale: ID: gv_GB, Name: Manx (United Kingdom) +default charset: UTF-8 + +OS Locale: he_IL +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: ISO-8859-8 + +OS Locale: he_IL.iso88598 +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: ISO-8859-8 + +OS Locale: he_IL.utf8 +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: UTF-8 + +OS Locale: hebrew +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: ISO-8859-8 + +OS Locale: hi_IN +default locale: ID: hi_IN, Name: Hindi (India) +display locale: ID: hi_IN, Name: Hindi (India) +format locale: ID: hi_IN, Name: Hindi (India) +default charset: UTF-8 + +OS Locale: hi_IN.utf8 +default locale: ID: hi_IN, Name: Hindi (India) +display locale: ID: hi_IN, Name: Hindi (India) +format locale: ID: hi_IN, Name: Hindi (India) +default charset: UTF-8 + +OS Locale: hr_HR +default locale: ID: hr_HR, Name: Croatian (Croatia) +display locale: ID: hr_HR, Name: Croatian (Croatia) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: ISO-8859-2 + +OS Locale: hr_HR.iso88592 +default locale: ID: hr_HR, Name: Croatian (Croatia) +display locale: ID: hr_HR, Name: Croatian (Croatia) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: ISO-8859-2 + +OS Locale: hr_HR.utf8 +default locale: ID: hr_HR, Name: Croatian (Croatia) +display locale: ID: hr_HR, Name: Croatian (Croatia) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: UTF-8 + +OS Locale: hrvatski +default locale: ID: hr_HR, Name: Croatian (Croatia) +display locale: ID: hr_HR, Name: Croatian (Croatia) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: ISO-8859-2 + +OS Locale: hsb_DE +default locale: ID: en_DE, Name: English (Germany) +display locale: ID: en_DE, Name: English (Germany) +format locale: ID: en_DE, Name: English (Germany) +default charset: ISO-8859-2 + +OS Locale: hsb_DE.iso88592 +default locale: ID: en_DE, Name: English (Germany) +display locale: ID: en_DE, Name: English (Germany) +format locale: ID: en_DE, Name: English (Germany) +default charset: ISO-8859-2 + +OS Locale: hsb_DE.utf8 +default locale: ID: en_DE, Name: English (Germany) +display locale: ID: en_DE, Name: English (Germany) +format locale: ID: en_DE, Name: English (Germany) +default charset: UTF-8 + +OS Locale: hu_HU +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: ISO-8859-2 + +OS Locale: hu_HU.iso88592 +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: ISO-8859-2 + +OS Locale: hu_HU.utf8 +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: UTF-8 + +OS Locale: hungarian +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: ISO-8859-2 + +OS Locale: hy_AM +default locale: ID: hy_AM, Name: Armenian (Armenia) +display locale: ID: hy_AM, Name: Armenian (Armenia) +format locale: ID: hy_AM, Name: Armenian (Armenia) +default charset: UTF-8 + +OS Locale: hy_AM.armscii8 +default locale: ID: hy_AM, Name: Armenian (Armenia) +display locale: ID: hy_AM, Name: Armenian (Armenia) +format locale: ID: hy_AM, Name: Armenian (Armenia) +default charset: UTF-8 + +OS Locale: hy_AM.utf8 +default locale: ID: hy_AM, Name: Armenian (Armenia) +display locale: ID: hy_AM, Name: Armenian (Armenia) +format locale: ID: hy_AM, Name: Armenian (Armenia) +default charset: UTF-8 + +OS Locale: icelandic +default locale: ID: is_IS, Name: Icelandic (Iceland) +display locale: ID: is_IS, Name: Icelandic (Iceland) +format locale: ID: is_IS, Name: Icelandic (Iceland) +default charset: ISO-8859-1 + +OS Locale: id_ID +default locale: ID: in_ID, Name: Indonesian (Indonesia) +display locale: ID: in_ID, Name: Indonesian (Indonesia) +format locale: ID: in_ID, Name: Indonesian (Indonesia) +default charset: ISO-8859-1 + +OS Locale: id_ID.iso88591 +default locale: ID: in_ID, Name: Indonesian (Indonesia) +display locale: ID: in_ID, Name: Indonesian (Indonesia) +format locale: ID: in_ID, Name: Indonesian (Indonesia) +default charset: ISO-8859-1 + +OS Locale: id_ID.utf8 +default locale: ID: in_ID, Name: Indonesian (Indonesia) +display locale: ID: in_ID, Name: Indonesian (Indonesia) +format locale: ID: in_ID, Name: Indonesian (Indonesia) +default charset: UTF-8 + +OS Locale: is_IS +default locale: ID: is_IS, Name: Icelandic (Iceland) +display locale: ID: is_IS, Name: Icelandic (Iceland) +format locale: ID: is_IS, Name: Icelandic (Iceland) +default charset: ISO-8859-1 + +OS Locale: is_IS.iso88591 +default locale: ID: is_IS, Name: Icelandic (Iceland) +display locale: ID: is_IS, Name: Icelandic (Iceland) +format locale: ID: is_IS, Name: Icelandic (Iceland) +default charset: ISO-8859-1 + +OS Locale: is_IS.utf8 +default locale: ID: is_IS, Name: Icelandic (Iceland) +display locale: ID: is_IS, Name: Icelandic (Iceland) +format locale: ID: is_IS, Name: Icelandic (Iceland) +default charset: UTF-8 + +OS Locale: it_CH +default locale: ID: it_CH, Name: Italian (Switzerland) +display locale: ID: it_CH, Name: Italian (Switzerland) +format locale: ID: it_CH, Name: Italian (Switzerland) +default charset: ISO-8859-1 + +OS Locale: it_CH.iso88591 +default locale: ID: it_CH, Name: Italian (Switzerland) +display locale: ID: it_CH, Name: Italian (Switzerland) +format locale: ID: it_CH, Name: Italian (Switzerland) +default charset: ISO-8859-1 + +OS Locale: it_CH.utf8 +default locale: ID: it_CH, Name: Italian (Switzerland) +display locale: ID: it_CH, Name: Italian (Switzerland) +format locale: ID: it_CH, Name: Italian (Switzerland) +default charset: UTF-8 + +OS Locale: it_IT +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-1 + +OS Locale: it_IT.iso88591 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-1 + +OS Locale: it_IT.iso885915@euro +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-15 + +OS Locale: it_IT.utf8 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: UTF-8 + +OS Locale: it_IT@euro +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-15 + +OS Locale: italian +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-1 + +OS Locale: iw_IL +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: ISO-8859-8 + +OS Locale: iw_IL.iso88598 +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: ISO-8859-8 + +OS Locale: iw_IL.utf8 +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: UTF-8 + +OS Locale: ja_JP +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-euc-jp-linux + +OS Locale: ja_JP.eucjp +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-euc-jp-linux + +OS Locale: ja_JP.ujis +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-euc-jp-linux + +OS Locale: ja_JP.utf8 +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: UTF-8 + +OS Locale: japanese +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-euc-jp-linux + +OS Locale: japanese.euc +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-euc-jp-linux + +OS Locale: ka_GE +default locale: ID: ka_GE, Name: Georgian (Georgia) +display locale: ID: ka_GE, Name: Georgian (Georgia) +format locale: ID: ka_GE, Name: Georgian (Georgia) +default charset: UTF-8 + +OS Locale: ka_GE.georgianps +default locale: ID: ka_GE, Name: Georgian (Georgia) +display locale: ID: ka_GE, Name: Georgian (Georgia) +format locale: ID: ka_GE, Name: Georgian (Georgia) +default charset: UTF-8 + +OS Locale: ka_GE.utf8 +default locale: ID: ka_GE, Name: Georgian (Georgia) +display locale: ID: ka_GE, Name: Georgian (Georgia) +format locale: ID: ka_GE, Name: Georgian (Georgia) +default charset: UTF-8 + +OS Locale: kk_KZ +default locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +display locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +format locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +default charset: UTF-8 + +OS Locale: kk_KZ.pt154 +default locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +display locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +format locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +default charset: UTF-8 + +OS Locale: kk_KZ.utf8 +default locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +display locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +format locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +default charset: UTF-8 + +OS Locale: kl_GL +default locale: ID: kl_GL, Name: Greenlandic (Greenland) +display locale: ID: kl_GL, Name: Greenlandic (Greenland) +format locale: ID: kl_GL, Name: Greenlandic (Greenland) +default charset: ISO-8859-1 + +OS Locale: kl_GL.iso88591 +default locale: ID: kl_GL, Name: Greenlandic (Greenland) +display locale: ID: kl_GL, Name: Greenlandic (Greenland) +format locale: ID: kl_GL, Name: Greenlandic (Greenland) +default charset: ISO-8859-1 + +OS Locale: kl_GL.utf8 +default locale: ID: kl_GL, Name: Greenlandic (Greenland) +display locale: ID: kl_GL, Name: Greenlandic (Greenland) +format locale: ID: kl_GL, Name: Greenlandic (Greenland) +default charset: UTF-8 + +OS Locale: km_KH +default locale: ID: km_KH, Name: Khmer (Cambodia) +display locale: ID: km_KH, Name: Khmer (Cambodia) +format locale: ID: km_KH, Name: Khmer (Cambodia) +default charset: UTF-8 + +OS Locale: km_KH.utf8 +default locale: ID: km_KH, Name: Khmer (Cambodia) +display locale: ID: km_KH, Name: Khmer (Cambodia) +format locale: ID: km_KH, Name: Khmer (Cambodia) +default charset: UTF-8 + +OS Locale: kn_IN +default locale: ID: kn_IN, Name: Kannada (India) +display locale: ID: kn_IN, Name: Kannada (India) +format locale: ID: kn_IN, Name: Kannada (India) +default charset: UTF-8 + +OS Locale: kn_IN.utf8 +default locale: ID: kn_IN, Name: Kannada (India) +display locale: ID: kn_IN, Name: Kannada (India) +format locale: ID: kn_IN, Name: Kannada (India) +default charset: UTF-8 + +OS Locale: ko_KR +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: EUC-KR + +OS Locale: ko_KR.euckr +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: EUC-KR + +OS Locale: ko_KR.utf8 +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: UTF-8 + +OS Locale: korean +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: EUC-KR + +OS Locale: korean.euc +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: EUC-KR + +OS Locale: ku_TR +default locale: ID: ku_TR, Name: Kurdish (Turkey) +display locale: ID: ku_TR, Name: Kurdish (Turkey) +format locale: ID: ku_TR, Name: Kurdish (Turkey) +default charset: ISO-8859-9 + +OS Locale: ku_TR.iso88599 +default locale: ID: ku_TR, Name: Kurdish (Turkey) +display locale: ID: ku_TR, Name: Kurdish (Turkey) +format locale: ID: ku_TR, Name: Kurdish (Turkey) +default charset: ISO-8859-9 + +OS Locale: ku_TR.utf8 +default locale: ID: ku_TR, Name: Kurdish (Turkey) +display locale: ID: ku_TR, Name: Kurdish (Turkey) +format locale: ID: ku_TR, Name: Kurdish (Turkey) +default charset: UTF-8 + +OS Locale: kw_GB +default locale: ID: kw_GB, Name: Cornish (United Kingdom) +display locale: ID: kw_GB, Name: Cornish (United Kingdom) +format locale: ID: kw_GB, Name: Cornish (United Kingdom) +default charset: ISO-8859-1 + +OS Locale: kw_GB.iso88591 +default locale: ID: kw_GB, Name: Cornish (United Kingdom) +display locale: ID: kw_GB, Name: Cornish (United Kingdom) +format locale: ID: kw_GB, Name: Cornish (United Kingdom) +default charset: ISO-8859-1 + +OS Locale: kw_GB.utf8 +default locale: ID: kw_GB, Name: Cornish (United Kingdom) +display locale: ID: kw_GB, Name: Cornish (United Kingdom) +format locale: ID: kw_GB, Name: Cornish (United Kingdom) +default charset: UTF-8 + +OS Locale: ky_KG +default locale: ID: ky_KG, Name: Kirghiz (Kyrgyzstan) +display locale: ID: ky_KG, Name: Kirghiz (Kyrgyzstan) +format locale: ID: ky_KG, Name: Kirghiz (Kyrgyzstan) +default charset: UTF-8 + +OS Locale: ky_KG.utf8 +default locale: ID: ky_KG, Name: Kirghiz (Kyrgyzstan) +display locale: ID: ky_KG, Name: Kirghiz (Kyrgyzstan) +format locale: ID: ky_KG, Name: Kirghiz (Kyrgyzstan) +default charset: UTF-8 + +OS Locale: lg_UG +default locale: ID: lg_UG, Name: Ganda (Uganda) +display locale: ID: lg_UG, Name: Ganda (Uganda) +format locale: ID: lg_UG, Name: Ganda (Uganda) +default charset: UTF-8 + +OS Locale: lg_UG.iso885910 +default locale: ID: lg_UG, Name: Ganda (Uganda) +display locale: ID: lg_UG, Name: Ganda (Uganda) +format locale: ID: lg_UG, Name: Ganda (Uganda) +default charset: UTF-8 + +OS Locale: lg_UG.utf8 +default locale: ID: lg_UG, Name: Ganda (Uganda) +display locale: ID: lg_UG, Name: Ganda (Uganda) +format locale: ID: lg_UG, Name: Ganda (Uganda) +default charset: UTF-8 + +OS Locale: lithuanian +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-13 + +OS Locale: lo_LA +default locale: ID: lo_LA, Name: Lao (Laos) +display locale: ID: lo_LA, Name: Lao (Laos) +format locale: ID: lo_LA, Name: Lao (Laos) +default charset: UTF-8 + +OS Locale: lo_LA.utf8 +default locale: ID: lo_LA, Name: Lao (Laos) +display locale: ID: lo_LA, Name: Lao (Laos) +format locale: ID: lo_LA, Name: Lao (Laos) +default charset: UTF-8 + +OS Locale: lt_LT +default locale: ID: lt_LT, Name: Lithuanian (Lithuania) +display locale: ID: lt_LT, Name: Lithuanian (Lithuania) +format locale: ID: lt_LT, Name: Lithuanian (Lithuania) +default charset: ISO-8859-13 + +OS Locale: lt_LT.iso885913 +default locale: ID: lt_LT, Name: Lithuanian (Lithuania) +display locale: ID: lt_LT, Name: Lithuanian (Lithuania) +format locale: ID: lt_LT, Name: Lithuanian (Lithuania) +default charset: ISO-8859-13 + +OS Locale: lt_LT.utf8 +default locale: ID: lt_LT, Name: Lithuanian (Lithuania) +display locale: ID: lt_LT, Name: Lithuanian (Lithuania) +format locale: ID: lt_LT, Name: Lithuanian (Lithuania) +default charset: UTF-8 + +OS Locale: lv_LV +default locale: ID: lv_LV, Name: Latvian (Latvia) +display locale: ID: lv_LV, Name: Latvian (Latvia) +format locale: ID: lv_LV, Name: Latvian (Latvia) +default charset: ISO-8859-13 + +OS Locale: lv_LV.iso885913 +default locale: ID: lv_LV, Name: Latvian (Latvia) +display locale: ID: lv_LV, Name: Latvian (Latvia) +format locale: ID: lv_LV, Name: Latvian (Latvia) +default charset: ISO-8859-13 + +OS Locale: lv_LV.utf8 +default locale: ID: lv_LV, Name: Latvian (Latvia) +display locale: ID: lv_LV, Name: Latvian (Latvia) +format locale: ID: lv_LV, Name: Latvian (Latvia) +default charset: UTF-8 + +OS Locale: mai_IN +default locale: ID: en_IN, Name: English (India) +display locale: ID: en_IN, Name: English (India) +format locale: ID: en_IN, Name: English (India) +default charset: UTF-8 + +OS Locale: mai_IN.utf8 +default locale: ID: en_IN, Name: English (India) +display locale: ID: en_IN, Name: English (India) +format locale: ID: en_IN, Name: English (India) +default charset: UTF-8 + +OS Locale: mg_MG +default locale: ID: mg_MG, Name: Malagasy (Madagascar) +display locale: ID: mg_MG, Name: Malagasy (Madagascar) +format locale: ID: mg_MG, Name: Malagasy (Madagascar) +default charset: ISO-8859-15 + +OS Locale: mg_MG.iso885915 +default locale: ID: mg_MG, Name: Malagasy (Madagascar) +display locale: ID: mg_MG, Name: Malagasy (Madagascar) +format locale: ID: mg_MG, Name: Malagasy (Madagascar) +default charset: ISO-8859-15 + +OS Locale: mg_MG.utf8 +default locale: ID: mg_MG, Name: Malagasy (Madagascar) +display locale: ID: mg_MG, Name: Malagasy (Madagascar) +format locale: ID: mg_MG, Name: Malagasy (Madagascar) +default charset: UTF-8 + +OS Locale: mi_NZ +default locale: ID: mi_NZ, Name: Maori (New Zealand) +display locale: ID: mi_NZ, Name: Maori (New Zealand) +format locale: ID: mi_NZ, Name: Maori (New Zealand) +default charset: ISO-8859-13 + +OS Locale: mi_NZ.iso885913 +default locale: ID: mi_NZ, Name: Maori (New Zealand) +display locale: ID: mi_NZ, Name: Maori (New Zealand) +format locale: ID: mi_NZ, Name: Maori (New Zealand) +default charset: ISO-8859-13 + +OS Locale: mi_NZ.utf8 +default locale: ID: mi_NZ, Name: Maori (New Zealand) +display locale: ID: mi_NZ, Name: Maori (New Zealand) +format locale: ID: mi_NZ, Name: Maori (New Zealand) +default charset: UTF-8 + +OS Locale: mk_MK +default locale: ID: mk_MK, Name: Macedonian (Macedonia) +display locale: ID: mk_MK, Name: Macedonian (Macedonia) +format locale: ID: mk_MK, Name: Macedonian (Macedonia) +default charset: ISO-8859-5 + +OS Locale: mk_MK.iso88595 +default locale: ID: mk_MK, Name: Macedonian (Macedonia) +display locale: ID: mk_MK, Name: Macedonian (Macedonia) +format locale: ID: mk_MK, Name: Macedonian (Macedonia) +default charset: ISO-8859-5 + +OS Locale: mk_MK.utf8 +default locale: ID: mk_MK, Name: Macedonian (Macedonia) +display locale: ID: mk_MK, Name: Macedonian (Macedonia) +format locale: ID: mk_MK, Name: Macedonian (Macedonia) +default charset: UTF-8 + +OS Locale: ml_IN +default locale: ID: ml_IN, Name: Malayalam (India) +display locale: ID: ml_IN, Name: Malayalam (India) +format locale: ID: ml_IN, Name: Malayalam (India) +default charset: UTF-8 + +OS Locale: ml_IN.utf8 +default locale: ID: ml_IN, Name: Malayalam (India) +display locale: ID: ml_IN, Name: Malayalam (India) +format locale: ID: ml_IN, Name: Malayalam (India) +default charset: UTF-8 + +OS Locale: mn_MN +default locale: ID: mn_MN, Name: Mongolian (Mongolia) +display locale: ID: mn_MN, Name: Mongolian (Mongolia) +format locale: ID: mn_MN, Name: Mongolian (Mongolia) +default charset: UTF-8 + +OS Locale: mn_MN.utf8 +default locale: ID: mn_MN, Name: Mongolian (Mongolia) +display locale: ID: mn_MN, Name: Mongolian (Mongolia) +format locale: ID: mn_MN, Name: Mongolian (Mongolia) +default charset: UTF-8 + +OS Locale: mr_IN +default locale: ID: mr_IN, Name: Marathi (India) +display locale: ID: mr_IN, Name: Marathi (India) +format locale: ID: mr_IN, Name: Marathi (India) +default charset: UTF-8 + +OS Locale: mr_IN.utf8 +default locale: ID: mr_IN, Name: Marathi (India) +display locale: ID: mr_IN, Name: Marathi (India) +format locale: ID: mr_IN, Name: Marathi (India) +default charset: UTF-8 + +OS Locale: ms_MY +default locale: ID: ms_MY, Name: Malay (Malaysia) +display locale: ID: ms_MY, Name: Malay (Malaysia) +format locale: ID: ms_MY, Name: Malay (Malaysia) +default charset: ISO-8859-1 + +OS Locale: ms_MY.iso88591 +default locale: ID: ms_MY, Name: Malay (Malaysia) +display locale: ID: ms_MY, Name: Malay (Malaysia) +format locale: ID: ms_MY, Name: Malay (Malaysia) +default charset: ISO-8859-1 + +OS Locale: ms_MY.utf8 +default locale: ID: ms_MY, Name: Malay (Malaysia) +display locale: ID: ms_MY, Name: Malay (Malaysia) +format locale: ID: ms_MY, Name: Malay (Malaysia) +default charset: UTF-8 + +OS Locale: mt_MT +default locale: ID: mt_MT, Name: Maltese (Malta) +display locale: ID: mt_MT, Name: Maltese (Malta) +format locale: ID: mt_MT, Name: Maltese (Malta) +default charset: ISO-8859-3 + +OS Locale: mt_MT.iso88593 +default locale: ID: mt_MT, Name: Maltese (Malta) +display locale: ID: mt_MT, Name: Maltese (Malta) +format locale: ID: mt_MT, Name: Maltese (Malta) +default charset: ISO-8859-3 + +OS Locale: mt_MT.utf8 +default locale: ID: mt_MT, Name: Maltese (Malta) +display locale: ID: mt_MT, Name: Maltese (Malta) +format locale: ID: mt_MT, Name: Maltese (Malta) +default charset: UTF-8 + +OS Locale: nb_NO +default locale: ID: nb_NO, Name: Norwegian Bokmål (Norway) +display locale: ID: nb_NO, Name: Norwegian Bokmål (Norway) +format locale: ID: nb_NO, Name: Norwegian Bokmål (Norway) +default charset: ISO-8859-1 + +OS Locale: nb_NO.iso88591 +default locale: ID: nb_NO, Name: Norwegian Bokmål (Norway) +display locale: ID: nb_NO, Name: Norwegian Bokmål (Norway) +format locale: ID: nb_NO, Name: Norwegian Bokmål (Norway) +default charset: ISO-8859-1 + +OS Locale: nb_NO.utf8 +default locale: ID: nb_NO, Name: Norwegian BokmÃ¥l (Norway) +display locale: ID: nb_NO, Name: Norwegian BokmÃ¥l (Norway) +format locale: ID: nb_NO, Name: Norwegian BokmÃ¥l (Norway) +default charset: UTF-8 + +OS Locale: ne_NP +default locale: ID: ne_NP, Name: Nepali (Nepal) +display locale: ID: ne_NP, Name: Nepali (Nepal) +format locale: ID: ne_NP, Name: Nepali (Nepal) +default charset: UTF-8 + +OS Locale: ne_NP.utf8 +default locale: ID: ne_NP, Name: Nepali (Nepal) +display locale: ID: ne_NP, Name: Nepali (Nepal) +format locale: ID: ne_NP, Name: Nepali (Nepal) +default charset: UTF-8 + +OS Locale: nl_BE +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-1 + +OS Locale: nl_BE.iso88591 +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-1 + +OS Locale: nl_BE.iso885915@euro +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-15 + +OS Locale: nl_BE.utf8 +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: UTF-8 + +OS Locale: nl_BE@euro +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-15 + +OS Locale: nl_NL +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-1 + +OS Locale: nl_NL.iso88591 +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-1 + +OS Locale: nl_NL.iso885915@euro +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-15 + +OS Locale: nl_NL.utf8 +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: UTF-8 + +OS Locale: nl_NL@euro +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-15 + +OS Locale: nn_NO +default locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +display locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +format locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +default charset: ISO-8859-1 + +OS Locale: nn_NO.iso88591 +default locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +display locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +format locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +default charset: ISO-8859-1 + +OS Locale: nn_NO.utf8 +default locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +display locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +format locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +default charset: UTF-8 + +OS Locale: no_NO +default locale: ID: no_NO, Name: Norwegian (Norway) +display locale: ID: no_NO, Name: Norwegian (Norway) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: ISO-8859-1 + +OS Locale: no_NO.iso88591 +default locale: ID: no_NO, Name: Norwegian (Norway) +display locale: ID: no_NO, Name: Norwegian (Norway) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: ISO-8859-1 + +OS Locale: no_NO.utf8 +default locale: ID: no_NO, Name: Norwegian (Norway) +display locale: ID: no_NO, Name: Norwegian (Norway) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: UTF-8 + +OS Locale: norwegian +default locale: ID: no_NO, Name: Norwegian (Norway) +display locale: ID: no_NO, Name: Norwegian (Norway) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: ISO-8859-1 + +OS Locale: nr_ZA +default locale: ID: nr_ZA, Name: South Ndebele (South Africa) +display locale: ID: nr_ZA, Name: South Ndebele (South Africa) +format locale: ID: nr_ZA, Name: South Ndebele (South Africa) +default charset: UTF-8 + +OS Locale: nr_ZA.utf8 +default locale: ID: nr_ZA, Name: South Ndebele (South Africa) +display locale: ID: nr_ZA, Name: South Ndebele (South Africa) +format locale: ID: nr_ZA, Name: South Ndebele (South Africa) +default charset: UTF-8 + +OS Locale: nso_ZA +default locale: ID: en_ZA, Name: English (South Africa) +display locale: ID: en_ZA, Name: English (South Africa) +format locale: ID: en_ZA, Name: English (South Africa) +default charset: UTF-8 + +OS Locale: nso_ZA.utf8 +default locale: ID: en_ZA, Name: English (South Africa) +display locale: ID: en_ZA, Name: English (South Africa) +format locale: ID: en_ZA, Name: English (South Africa) +default charset: UTF-8 + +OS Locale: nynorsk +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-1 + +OS Locale: oc_FR +default locale: ID: oc_FR, Name: Occitan (France) +display locale: ID: oc_FR, Name: Occitan (France) +format locale: ID: oc_FR, Name: Occitan (France) +default charset: ISO-8859-1 + +OS Locale: oc_FR.iso88591 +default locale: ID: oc_FR, Name: Occitan (France) +display locale: ID: oc_FR, Name: Occitan (France) +format locale: ID: oc_FR, Name: Occitan (France) +default charset: ISO-8859-1 + +OS Locale: oc_FR.utf8 +default locale: ID: oc_FR, Name: Occitan (France) +display locale: ID: oc_FR, Name: Occitan (France) +format locale: ID: oc_FR, Name: Occitan (France) +default charset: UTF-8 + +OS Locale: om_ET +default locale: ID: om_ET, Name: Oromo (Ethiopia) +display locale: ID: om_ET, Name: Oromo (Ethiopia) +format locale: ID: om_ET, Name: Oromo (Ethiopia) +default charset: UTF-8 + +OS Locale: om_ET.utf8 +default locale: ID: om_ET, Name: Oromo (Ethiopia) +display locale: ID: om_ET, Name: Oromo (Ethiopia) +format locale: ID: om_ET, Name: Oromo (Ethiopia) +default charset: UTF-8 + +OS Locale: om_KE +default locale: ID: om_KE, Name: Oromo (Kenya) +display locale: ID: om_KE, Name: Oromo (Kenya) +format locale: ID: om_KE, Name: Oromo (Kenya) +default charset: ISO-8859-1 + +OS Locale: om_KE.iso88591 +default locale: ID: om_KE, Name: Oromo (Kenya) +display locale: ID: om_KE, Name: Oromo (Kenya) +format locale: ID: om_KE, Name: Oromo (Kenya) +default charset: ISO-8859-1 + +OS Locale: om_KE.utf8 +default locale: ID: om_KE, Name: Oromo (Kenya) +display locale: ID: om_KE, Name: Oromo (Kenya) +format locale: ID: om_KE, Name: Oromo (Kenya) +default charset: UTF-8 + +OS Locale: or_IN +default locale: ID: or_IN, Name: Oriya (India) +display locale: ID: or_IN, Name: Oriya (India) +format locale: ID: or_IN, Name: Oriya (India) +default charset: UTF-8 + +OS Locale: or_IN.utf8 +default locale: ID: or_IN, Name: Oriya (India) +display locale: ID: or_IN, Name: Oriya (India) +format locale: ID: or_IN, Name: Oriya (India) +default charset: UTF-8 + +OS Locale: pa_IN +default locale: ID: pa_IN, Name: Panjabi (India) +display locale: ID: pa_IN, Name: Panjabi (India) +format locale: ID: pa_IN, Name: Panjabi (India) +default charset: UTF-8 + +OS Locale: pa_IN.utf8 +default locale: ID: pa_IN, Name: Panjabi (India) +display locale: ID: pa_IN, Name: Panjabi (India) +format locale: ID: pa_IN, Name: Panjabi (India) +default charset: UTF-8 + +OS Locale: pa_PK +default locale: ID: pa_PK, Name: Panjabi (Pakistan) +display locale: ID: pa_PK, Name: Panjabi (Pakistan) +format locale: ID: pa_PK, Name: Panjabi (Pakistan) +default charset: UTF-8 + +OS Locale: pa_PK.utf8 +default locale: ID: pa_PK, Name: Panjabi (Pakistan) +display locale: ID: pa_PK, Name: Panjabi (Pakistan) +format locale: ID: pa_PK, Name: Panjabi (Pakistan) +default charset: UTF-8 + +OS Locale: pl_PL +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: ISO-8859-2 + +OS Locale: pl_PL.iso88592 +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: ISO-8859-2 + +OS Locale: pl_PL.utf8 +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: UTF-8 + +OS Locale: polish +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: ISO-8859-2 + +OS Locale: portuguese +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-1 + +OS Locale: pt_BR +default locale: ID: pt_BR, Name: Portuguese (Brazil) +display locale: ID: pt_BR, Name: Portuguese (Brazil) +format locale: ID: pt_BR, Name: Portuguese (Brazil) +default charset: ISO-8859-1 + +OS Locale: pt_BR.iso88591 +default locale: ID: pt_BR, Name: Portuguese (Brazil) +display locale: ID: pt_BR, Name: Portuguese (Brazil) +format locale: ID: pt_BR, Name: Portuguese (Brazil) +default charset: ISO-8859-1 + +OS Locale: pt_BR.utf8 +default locale: ID: pt_BR, Name: Portuguese (Brazil) +display locale: ID: pt_BR, Name: Portuguese (Brazil) +format locale: ID: pt_BR, Name: Portuguese (Brazil) +default charset: UTF-8 + +OS Locale: pt_PT +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-1 + +OS Locale: pt_PT.iso88591 +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-1 + +OS Locale: pt_PT.iso885915@euro +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-15 + +OS Locale: pt_PT.utf8 +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: UTF-8 + +OS Locale: pt_PT@euro +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-15 + +OS Locale: ro_RO +default locale: ID: ro_RO, Name: Romanian (Romania) +display locale: ID: ro_RO, Name: Romanian (Romania) +format locale: ID: ro_RO, Name: Romanian (Romania) +default charset: ISO-8859-2 + +OS Locale: ro_RO.iso88592 +default locale: ID: ro_RO, Name: Romanian (Romania) +display locale: ID: ro_RO, Name: Romanian (Romania) +format locale: ID: ro_RO, Name: Romanian (Romania) +default charset: ISO-8859-2 + +OS Locale: ro_RO.utf8 +default locale: ID: ro_RO, Name: Romanian (Romania) +display locale: ID: ro_RO, Name: Romanian (Romania) +format locale: ID: ro_RO, Name: Romanian (Romania) +default charset: UTF-8 + +OS Locale: romanian +default locale: ID: ro_RO, Name: Romanian (Romania) +display locale: ID: ro_RO, Name: Romanian (Romania) +format locale: ID: ro_RO, Name: Romanian (Romania) +default charset: ISO-8859-2 + +OS Locale: ru_RU +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: ISO-8859-5 + +OS Locale: ru_RU.iso88595 +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: ISO-8859-5 + +OS Locale: ru_RU.koi8r +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: KOI8-R + +OS Locale: ru_RU.utf8 +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: UTF-8 + +OS Locale: ru_UA +default locale: ID: ru_UA, Name: Russian (Ukraine) +display locale: ID: ru_UA, Name: Russian (Ukraine) +format locale: ID: ru_UA, Name: Russian (Ukraine) +default charset: KOI8-U + +OS Locale: ru_UA.koi8u +default locale: ID: ru_UA, Name: Russian (Ukraine) +display locale: ID: ru_UA, Name: Russian (Ukraine) +format locale: ID: ru_UA, Name: Russian (Ukraine) +default charset: KOI8-U + +OS Locale: ru_UA.utf8 +default locale: ID: ru_UA, Name: Russian (Ukraine) +display locale: ID: ru_UA, Name: Russian (Ukraine) +format locale: ID: ru_UA, Name: Russian (Ukraine) +default charset: UTF-8 + +OS Locale: russian +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: ISO-8859-5 + +OS Locale: rw_RW +default locale: ID: rw_RW, Name: Kinyarwanda (Rwanda) +display locale: ID: rw_RW, Name: Kinyarwanda (Rwanda) +format locale: ID: rw_RW, Name: Kinyarwanda (Rwanda) +default charset: UTF-8 + +OS Locale: rw_RW.utf8 +default locale: ID: rw_RW, Name: Kinyarwanda (Rwanda) +display locale: ID: rw_RW, Name: Kinyarwanda (Rwanda) +format locale: ID: rw_RW, Name: Kinyarwanda (Rwanda) +default charset: UTF-8 + +OS Locale: se_NO +default locale: ID: se_NO, Name: Northern Sami (Norway) +display locale: ID: se_NO, Name: Northern Sami (Norway) +format locale: ID: se_NO, Name: Northern Sami (Norway) +default charset: UTF-8 + +OS Locale: se_NO.utf8 +default locale: ID: se_NO, Name: Northern Sami (Norway) +display locale: ID: se_NO, Name: Northern Sami (Norway) +format locale: ID: se_NO, Name: Northern Sami (Norway) +default charset: UTF-8 + +OS Locale: si_LK +default locale: ID: si_LK, Name: Sinhalese (Sri Lanka) +display locale: ID: si_LK, Name: Sinhalese (Sri Lanka) +format locale: ID: si_LK, Name: Sinhalese (Sri Lanka) +default charset: UTF-8 + +OS Locale: si_LK.utf8 +default locale: ID: si_LK, Name: Sinhalese (Sri Lanka) +display locale: ID: si_LK, Name: Sinhalese (Sri Lanka) +format locale: ID: si_LK, Name: Sinhalese (Sri Lanka) +default charset: UTF-8 + +OS Locale: sid_ET +default locale: ID: en_ET, Name: English (Ethiopia) +display locale: ID: en_ET, Name: English (Ethiopia) +format locale: ID: en_ET, Name: English (Ethiopia) +default charset: UTF-8 + +OS Locale: sid_ET.utf8 +default locale: ID: en_ET, Name: English (Ethiopia) +display locale: ID: en_ET, Name: English (Ethiopia) +format locale: ID: en_ET, Name: English (Ethiopia) +default charset: UTF-8 + +OS Locale: sk_SK +default locale: ID: sk_SK, Name: Slovak (Slovakia) +display locale: ID: sk_SK, Name: Slovak (Slovakia) +format locale: ID: sk_SK, Name: Slovak (Slovakia) +default charset: ISO-8859-2 + +OS Locale: sk_SK.iso88592 +default locale: ID: sk_SK, Name: Slovak (Slovakia) +display locale: ID: sk_SK, Name: Slovak (Slovakia) +format locale: ID: sk_SK, Name: Slovak (Slovakia) +default charset: ISO-8859-2 + +OS Locale: sk_SK.utf8 +default locale: ID: sk_SK, Name: Slovak (Slovakia) +display locale: ID: sk_SK, Name: Slovak (Slovakia) +format locale: ID: sk_SK, Name: Slovak (Slovakia) +default charset: UTF-8 + +OS Locale: sl_SI +default locale: ID: sl_SI, Name: Slovenian (Slovenia) +display locale: ID: sl_SI, Name: Slovenian (Slovenia) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: ISO-8859-2 + +OS Locale: sl_SI.iso88592 +default locale: ID: sl_SI, Name: Slovenian (Slovenia) +display locale: ID: sl_SI, Name: Slovenian (Slovenia) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: ISO-8859-2 + +OS Locale: sl_SI.utf8 +default locale: ID: sl_SI, Name: Slovenian (Slovenia) +display locale: ID: sl_SI, Name: Slovenian (Slovenia) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: UTF-8 + +OS Locale: slovak +default locale: ID: sk_SK, Name: Slovak (Slovakia) +display locale: ID: sk_SK, Name: Slovak (Slovakia) +format locale: ID: sk_SK, Name: Slovak (Slovakia) +default charset: ISO-8859-2 + +OS Locale: slovene +default locale: ID: sl_SI, Name: Slovenian (Slovenia) +display locale: ID: sl_SI, Name: Slovenian (Slovenia) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: ISO-8859-2 + +OS Locale: slovenian +default locale: ID: sl_SI, Name: Slovenian (Slovenia) +display locale: ID: sl_SI, Name: Slovenian (Slovenia) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: ISO-8859-2 + +OS Locale: so_DJ +default locale: ID: so_DJ, Name: Somali (Djibouti) +display locale: ID: so_DJ, Name: Somali (Djibouti) +format locale: ID: so_DJ, Name: Somali (Djibouti) +default charset: ISO-8859-1 + +OS Locale: so_DJ.iso88591 +default locale: ID: so_DJ, Name: Somali (Djibouti) +display locale: ID: so_DJ, Name: Somali (Djibouti) +format locale: ID: so_DJ, Name: Somali (Djibouti) +default charset: ISO-8859-1 + +OS Locale: so_DJ.utf8 +default locale: ID: so_DJ, Name: Somali (Djibouti) +display locale: ID: so_DJ, Name: Somali (Djibouti) +format locale: ID: so_DJ, Name: Somali (Djibouti) +default charset: UTF-8 + +OS Locale: so_ET +default locale: ID: so_ET, Name: Somali (Ethiopia) +display locale: ID: so_ET, Name: Somali (Ethiopia) +format locale: ID: so_ET, Name: Somali (Ethiopia) +default charset: UTF-8 + +OS Locale: so_ET.utf8 +default locale: ID: so_ET, Name: Somali (Ethiopia) +display locale: ID: so_ET, Name: Somali (Ethiopia) +format locale: ID: so_ET, Name: Somali (Ethiopia) +default charset: UTF-8 + +OS Locale: so_KE +default locale: ID: so_KE, Name: Somali (Kenya) +display locale: ID: so_KE, Name: Somali (Kenya) +format locale: ID: so_KE, Name: Somali (Kenya) +default charset: ISO-8859-1 + +OS Locale: so_KE.iso88591 +default locale: ID: so_KE, Name: Somali (Kenya) +display locale: ID: so_KE, Name: Somali (Kenya) +format locale: ID: so_KE, Name: Somali (Kenya) +default charset: ISO-8859-1 + +OS Locale: so_KE.utf8 +default locale: ID: so_KE, Name: Somali (Kenya) +display locale: ID: so_KE, Name: Somali (Kenya) +format locale: ID: so_KE, Name: Somali (Kenya) +default charset: UTF-8 + +OS Locale: so_SO +default locale: ID: so_SO, Name: Somali (Somalia) +display locale: ID: so_SO, Name: Somali (Somalia) +format locale: ID: so_SO, Name: Somali (Somalia) +default charset: ISO-8859-1 + +OS Locale: so_SO.iso88591 +default locale: ID: so_SO, Name: Somali (Somalia) +display locale: ID: so_SO, Name: Somali (Somalia) +format locale: ID: so_SO, Name: Somali (Somalia) +default charset: ISO-8859-1 + +OS Locale: so_SO.utf8 +default locale: ID: so_SO, Name: Somali (Somalia) +display locale: ID: so_SO, Name: Somali (Somalia) +format locale: ID: so_SO, Name: Somali (Somalia) +default charset: UTF-8 + +OS Locale: spanish +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-1 + +OS Locale: sq_AL +default locale: ID: sq_AL, Name: Albanian (Albania) +display locale: ID: sq_AL, Name: Albanian (Albania) +format locale: ID: sq_AL, Name: Albanian (Albania) +default charset: ISO-8859-1 + +OS Locale: sq_AL.iso88591 +default locale: ID: sq_AL, Name: Albanian (Albania) +display locale: ID: sq_AL, Name: Albanian (Albania) +format locale: ID: sq_AL, Name: Albanian (Albania) +default charset: ISO-8859-1 + +OS Locale: sq_AL.utf8 +default locale: ID: sq_AL, Name: Albanian (Albania) +display locale: ID: sq_AL, Name: Albanian (Albania) +format locale: ID: sq_AL, Name: Albanian (Albania) +default charset: UTF-8 + +OS Locale: sr_CS +default locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +display locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +format locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +default charset: ISO-8859-5 + +OS Locale: sr_CS.iso88595 +default locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +display locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +format locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +default charset: ISO-8859-5 + +OS Locale: sr_CS.utf8 +default locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +display locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +format locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +default charset: UTF-8 + +OS Locale: sr_ME +default locale: ID: sr, Name: Serbian +display locale: ID: sr, Name: Serbian +format locale: ID: sr, Name: Serbian +default charset: UTF-8 + +OS Locale: sr_ME.utf8 +default locale: ID: sr, Name: Serbian +display locale: ID: sr, Name: Serbian +format locale: ID: sr, Name: Serbian +default charset: UTF-8 + +OS Locale: sr_RS +default locale: ID: sr, Name: Serbian +display locale: ID: sr, Name: Serbian +format locale: ID: sr, Name: Serbian +default charset: UTF-8 + +OS Locale: sr_RS.utf8 +default locale: ID: sr, Name: Serbian +display locale: ID: sr, Name: Serbian +format locale: ID: sr, Name: Serbian +default charset: UTF-8 + +OS Locale: sr_RS.utf8@latin +default locale: ID: sr, Name: Serbian +display locale: ID: sr, Name: Serbian +format locale: ID: sr, Name: Serbian +default charset: UTF-8 + +OS Locale: sr_RS@latin +default locale: ID: sr, Name: Serbian +display locale: ID: sr, Name: Serbian +format locale: ID: sr, Name: Serbian +default charset: UTF-8 + +OS Locale: ss_ZA +default locale: ID: ss_ZA, Name: Swati (South Africa) +display locale: ID: ss_ZA, Name: Swati (South Africa) +format locale: ID: ss_ZA, Name: Swati (South Africa) +default charset: UTF-8 + +OS Locale: ss_ZA.utf8 +default locale: ID: ss_ZA, Name: Swati (South Africa) +display locale: ID: ss_ZA, Name: Swati (South Africa) +format locale: ID: ss_ZA, Name: Swati (South Africa) +default charset: UTF-8 + +OS Locale: st_ZA +default locale: ID: st_ZA, Name: Southern Sotho (South Africa) +display locale: ID: st_ZA, Name: Southern Sotho (South Africa) +format locale: ID: st_ZA, Name: Southern Sotho (South Africa) +default charset: ISO-8859-1 + +OS Locale: st_ZA.iso88591 +default locale: ID: st_ZA, Name: Southern Sotho (South Africa) +display locale: ID: st_ZA, Name: Southern Sotho (South Africa) +format locale: ID: st_ZA, Name: Southern Sotho (South Africa) +default charset: ISO-8859-1 + +OS Locale: st_ZA.utf8 +default locale: ID: st_ZA, Name: Southern Sotho (South Africa) +display locale: ID: st_ZA, Name: Southern Sotho (South Africa) +format locale: ID: st_ZA, Name: Southern Sotho (South Africa) +default charset: UTF-8 + +OS Locale: sv_FI +default locale: ID: sv_FI, Name: Swedish (Finland) +display locale: ID: sv_FI, Name: Swedish (Finland) +format locale: ID: sv_FI, Name: Swedish (Finland) +default charset: ISO-8859-1 + +OS Locale: sv_FI.iso88591 +default locale: ID: sv_FI, Name: Swedish (Finland) +display locale: ID: sv_FI, Name: Swedish (Finland) +format locale: ID: sv_FI, Name: Swedish (Finland) +default charset: ISO-8859-1 + +OS Locale: sv_FI.iso885915@euro +default locale: ID: sv_FI, Name: Swedish (Finland) +display locale: ID: sv_FI, Name: Swedish (Finland) +format locale: ID: sv_FI, Name: Swedish (Finland) +default charset: ISO-8859-15 + +OS Locale: sv_FI.utf8 +default locale: ID: sv_FI, Name: Swedish (Finland) +display locale: ID: sv_FI, Name: Swedish (Finland) +format locale: ID: sv_FI, Name: Swedish (Finland) +default charset: UTF-8 + +OS Locale: sv_FI@euro +default locale: ID: sv_FI, Name: Swedish (Finland) +display locale: ID: sv_FI, Name: Swedish (Finland) +format locale: ID: sv_FI, Name: Swedish (Finland) +default charset: ISO-8859-15 + +OS Locale: sv_SE +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-1 + +OS Locale: sv_SE.iso88591 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-1 + +OS Locale: sv_SE.iso885915 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-15 + +OS Locale: sv_SE.utf8 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: UTF-8 + +OS Locale: swedish +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-1 + +OS Locale: ta_IN +default locale: ID: ta_IN, Name: Tamil (India) +display locale: ID: ta_IN, Name: Tamil (India) +format locale: ID: ta_IN, Name: Tamil (India) +default charset: UTF-8 + +OS Locale: ta_IN.utf8 +default locale: ID: ta_IN, Name: Tamil (India) +display locale: ID: ta_IN, Name: Tamil (India) +format locale: ID: ta_IN, Name: Tamil (India) +default charset: UTF-8 + +OS Locale: te_IN +default locale: ID: te_IN, Name: Telugu (India) +display locale: ID: te_IN, Name: Telugu (India) +format locale: ID: te_IN, Name: Telugu (India) +default charset: UTF-8 + +OS Locale: te_IN.utf8 +default locale: ID: te_IN, Name: Telugu (India) +display locale: ID: te_IN, Name: Telugu (India) +format locale: ID: te_IN, Name: Telugu (India) +default charset: UTF-8 + +OS Locale: tg_TJ +default locale: ID: tg_TJ, Name: Tajik (Tajikistan) +display locale: ID: tg_TJ, Name: Tajik (Tajikistan) +format locale: ID: tg_TJ, Name: Tajik (Tajikistan) +default charset: UTF-8 + +OS Locale: tg_TJ.koi8t +default locale: ID: tg_TJ, Name: Tajik (Tajikistan) +display locale: ID: tg_TJ, Name: Tajik (Tajikistan) +format locale: ID: tg_TJ, Name: Tajik (Tajikistan) +default charset: UTF-8 + +OS Locale: tg_TJ.utf8 +default locale: ID: tg_TJ, Name: Tajik (Tajikistan) +display locale: ID: tg_TJ, Name: Tajik (Tajikistan) +format locale: ID: tg_TJ, Name: Tajik (Tajikistan) +default charset: UTF-8 + +OS Locale: th_TH +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: TIS-620 + +OS Locale: th_TH.tis620 +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: TIS-620 + +OS Locale: th_TH.utf8 +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: UTF-8 + +OS Locale: thai +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: TIS-620 + +OS Locale: ti_ER +default locale: ID: ti_ER, Name: Tigrinya (Eritrea) +display locale: ID: ti_ER, Name: Tigrinya (Eritrea) +format locale: ID: ti_ER, Name: Tigrinya (Eritrea) +default charset: UTF-8 + +OS Locale: ti_ER.utf8 +default locale: ID: ti_ER, Name: Tigrinya (Eritrea) +display locale: ID: ti_ER, Name: Tigrinya (Eritrea) +format locale: ID: ti_ER, Name: Tigrinya (Eritrea) +default charset: UTF-8 + +OS Locale: ti_ET +default locale: ID: ti_ET, Name: Tigrinya (Ethiopia) +display locale: ID: ti_ET, Name: Tigrinya (Ethiopia) +format locale: ID: ti_ET, Name: Tigrinya (Ethiopia) +default charset: UTF-8 + +OS Locale: ti_ET.utf8 +default locale: ID: ti_ET, Name: Tigrinya (Ethiopia) +display locale: ID: ti_ET, Name: Tigrinya (Ethiopia) +format locale: ID: ti_ET, Name: Tigrinya (Ethiopia) +default charset: UTF-8 + +OS Locale: tig_ER +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: tig_ER.utf8 +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: tl_PH +default locale: ID: tl_PH, Name: Tagalog (Philippines) +display locale: ID: tl_PH, Name: Tagalog (Philippines) +format locale: ID: tl_PH, Name: Tagalog (Philippines) +default charset: ISO-8859-1 + +OS Locale: tl_PH.iso88591 +default locale: ID: tl_PH, Name: Tagalog (Philippines) +display locale: ID: tl_PH, Name: Tagalog (Philippines) +format locale: ID: tl_PH, Name: Tagalog (Philippines) +default charset: ISO-8859-1 + +OS Locale: tl_PH.utf8 +default locale: ID: tl_PH, Name: Tagalog (Philippines) +display locale: ID: tl_PH, Name: Tagalog (Philippines) +format locale: ID: tl_PH, Name: Tagalog (Philippines) +default charset: UTF-8 + +OS Locale: tn_ZA +default locale: ID: tn_ZA, Name: Tswana (South Africa) +display locale: ID: tn_ZA, Name: Tswana (South Africa) +format locale: ID: tn_ZA, Name: Tswana (South Africa) +default charset: UTF-8 + +OS Locale: tn_ZA.utf8 +default locale: ID: tn_ZA, Name: Tswana (South Africa) +display locale: ID: tn_ZA, Name: Tswana (South Africa) +format locale: ID: tn_ZA, Name: Tswana (South Africa) +default charset: UTF-8 + +OS Locale: tr_CY +default locale: ID: tr_CY, Name: Turkish (Cyprus) +display locale: ID: tr_CY, Name: Turkish (Cyprus) +format locale: ID: tr_CY, Name: Turkish (Cyprus) +default charset: ISO-8859-9 + +OS Locale: tr_CY.iso88599 +default locale: ID: tr_CY, Name: Turkish (Cyprus) +display locale: ID: tr_CY, Name: Turkish (Cyprus) +format locale: ID: tr_CY, Name: Turkish (Cyprus) +default charset: ISO-8859-9 + +OS Locale: tr_CY.utf8 +default locale: ID: tr_CY, Name: Turkish (Cyprus) +display locale: ID: tr_CY, Name: Turkish (Cyprus) +format locale: ID: tr_CY, Name: Turkish (Cyprus) +default charset: UTF-8 + +OS Locale: tr_TR +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: ISO-8859-9 + +OS Locale: tr_TR.iso88599 +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: ISO-8859-9 + +OS Locale: tr_TR.utf8 +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: UTF-8 + +OS Locale: ts_ZA +default locale: ID: ts_ZA, Name: Tsonga (South Africa) +display locale: ID: ts_ZA, Name: Tsonga (South Africa) +format locale: ID: ts_ZA, Name: Tsonga (South Africa) +default charset: UTF-8 + +OS Locale: ts_ZA.utf8 +default locale: ID: ts_ZA, Name: Tsonga (South Africa) +display locale: ID: ts_ZA, Name: Tsonga (South Africa) +format locale: ID: ts_ZA, Name: Tsonga (South Africa) +default charset: UTF-8 + +OS Locale: tt_RU.utf8 +default locale: ID: tt_RU, Name: Tatar (Russia) +display locale: ID: tt_RU, Name: Tatar (Russia) +format locale: ID: tt_RU, Name: Tatar (Russia) +default charset: UTF-8 + +OS Locale: turkish +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: ISO-8859-9 + +OS Locale: uk_UA +default locale: ID: uk_UA, Name: Ukrainian (Ukraine) +display locale: ID: uk_UA, Name: Ukrainian (Ukraine) +format locale: ID: uk_UA, Name: Ukrainian (Ukraine) +default charset: KOI8-U + +OS Locale: uk_UA.koi8u +default locale: ID: uk_UA, Name: Ukrainian (Ukraine) +display locale: ID: uk_UA, Name: Ukrainian (Ukraine) +format locale: ID: uk_UA, Name: Ukrainian (Ukraine) +default charset: KOI8-U + +OS Locale: uk_UA.utf8 +default locale: ID: uk_UA, Name: Ukrainian (Ukraine) +display locale: ID: uk_UA, Name: Ukrainian (Ukraine) +format locale: ID: uk_UA, Name: Ukrainian (Ukraine) +default charset: UTF-8 + +OS Locale: ur_PK +default locale: ID: ur_PK, Name: Urdu (Pakistan) +display locale: ID: ur_PK, Name: Urdu (Pakistan) +format locale: ID: ur_PK, Name: Urdu (Pakistan) +default charset: UTF-8 + +OS Locale: ur_PK.utf8 +default locale: ID: ur_PK, Name: Urdu (Pakistan) +display locale: ID: ur_PK, Name: Urdu (Pakistan) +format locale: ID: ur_PK, Name: Urdu (Pakistan) +default charset: UTF-8 + +OS Locale: uz_UZ +default locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +display locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: ISO-8859-1 + +OS Locale: uz_UZ.iso88591 +default locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +display locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: ISO-8859-1 + +OS Locale: uz_UZ.utf8@cyrillic +default locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +display locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: UTF-8 + +OS Locale: uz_UZ@cyrillic +default locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +display locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: UTF-8 + +OS Locale: ve_ZA +default locale: ID: ve_ZA, Name: Venda (South Africa) +display locale: ID: ve_ZA, Name: Venda (South Africa) +format locale: ID: ve_ZA, Name: Venda (South Africa) +default charset: UTF-8 + +OS Locale: ve_ZA.utf8 +default locale: ID: ve_ZA, Name: Venda (South Africa) +display locale: ID: ve_ZA, Name: Venda (South Africa) +format locale: ID: ve_ZA, Name: Venda (South Africa) +default charset: UTF-8 + +OS Locale: vi_VN +default locale: ID: vi_VN, Name: Vietnamese (Vietnam) +display locale: ID: vi_VN, Name: Vietnamese (Vietnam) +format locale: ID: vi_VN, Name: Vietnamese (Vietnam) +default charset: UTF-8 + +OS Locale: vi_VN.tcvn +default locale: ID: vi_VN, Name: Vietnamese (Vietnam) +display locale: ID: vi_VN, Name: Vietnamese (Vietnam) +format locale: ID: vi_VN, Name: Vietnamese (Vietnam) +default charset: UTF-8 + +OS Locale: vi_VN.utf8 +default locale: ID: vi_VN, Name: Vietnamese (Vietnam) +display locale: ID: vi_VN, Name: Vietnamese (Vietnam) +format locale: ID: vi_VN, Name: Vietnamese (Vietnam) +default charset: UTF-8 + +OS Locale: wa_BE +default locale: ID: wa_BE, Name: Walloon (Belgium) +display locale: ID: wa_BE, Name: Walloon (Belgium) +format locale: ID: wa_BE, Name: Walloon (Belgium) +default charset: ISO-8859-1 + +OS Locale: wa_BE.iso88591 +default locale: ID: wa_BE, Name: Walloon (Belgium) +display locale: ID: wa_BE, Name: Walloon (Belgium) +format locale: ID: wa_BE, Name: Walloon (Belgium) +default charset: ISO-8859-1 + +OS Locale: wa_BE.iso885915@euro +default locale: ID: wa_BE, Name: Walloon (Belgium) +display locale: ID: wa_BE, Name: Walloon (Belgium) +format locale: ID: wa_BE, Name: Walloon (Belgium) +default charset: ISO-8859-15 + +OS Locale: wa_BE.utf8 +default locale: ID: wa_BE, Name: Walloon (Belgium) +display locale: ID: wa_BE, Name: Walloon (Belgium) +format locale: ID: wa_BE, Name: Walloon (Belgium) +default charset: UTF-8 + +OS Locale: wa_BE@euro +default locale: ID: wa_BE, Name: Walloon (Belgium) +display locale: ID: wa_BE, Name: Walloon (Belgium) +format locale: ID: wa_BE, Name: Walloon (Belgium) +default charset: ISO-8859-15 + +OS Locale: xh_ZA +default locale: ID: xh_ZA, Name: Xhosa (South Africa) +display locale: ID: xh_ZA, Name: Xhosa (South Africa) +format locale: ID: xh_ZA, Name: Xhosa (South Africa) +default charset: ISO-8859-1 + +OS Locale: xh_ZA.iso88591 +default locale: ID: xh_ZA, Name: Xhosa (South Africa) +display locale: ID: xh_ZA, Name: Xhosa (South Africa) +format locale: ID: xh_ZA, Name: Xhosa (South Africa) +default charset: ISO-8859-1 + +OS Locale: xh_ZA.utf8 +default locale: ID: xh_ZA, Name: Xhosa (South Africa) +display locale: ID: xh_ZA, Name: Xhosa (South Africa) +format locale: ID: xh_ZA, Name: Xhosa (South Africa) +default charset: UTF-8 + +OS Locale: yi_US +default locale: ID: ji_US, Name: Yiddish (United States) +display locale: ID: ji_US, Name: Yiddish (United States) +format locale: ID: ji_US, Name: Yiddish (United States) +default charset: windows-1255 + +OS Locale: yi_US.cp1255 +default locale: ID: ji_US, Name: Yiddish (United States) +display locale: ID: ji_US, Name: Yiddish (United States) +format locale: ID: ji_US, Name: Yiddish (United States) +default charset: windows-1255 + +OS Locale: yi_US.utf8 +default locale: ID: ji_US, Name: Yiddish (United States) +display locale: ID: ji_US, Name: Yiddish (United States) +format locale: ID: ji_US, Name: Yiddish (United States) +default charset: UTF-8 + +OS Locale: zh_CN +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB2312 + +OS Locale: zh_CN.gb18030 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB18030 + +OS Locale: zh_CN.gb2312 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB2312 + +OS Locale: zh_CN.gbk +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GBK + +OS Locale: zh_CN.utf8 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 + +OS Locale: zh_HK +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: Big5-HKSCS + +OS Locale: zh_HK.big5hkscs +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: Big5-HKSCS + +OS Locale: zh_HK.utf8 +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: UTF-8 + +OS Locale: zh_SG +default locale: ID: zh_SG, Name: Chinese (Singapore) +display locale: ID: zh_SG, Name: Chinese (Singapore) +format locale: ID: zh_SG, Name: Chinese (Singapore) +default charset: GB2312 + +OS Locale: zh_SG.gb2312 +default locale: ID: zh_SG, Name: Chinese (Singapore) +display locale: ID: zh_SG, Name: Chinese (Singapore) +format locale: ID: zh_SG, Name: Chinese (Singapore) +default charset: GB2312 + +OS Locale: zh_SG.gbk +default locale: ID: zh_SG, Name: Chinese (Singapore) +display locale: ID: zh_SG, Name: Chinese (Singapore) +format locale: ID: zh_SG, Name: Chinese (Singapore) +default charset: GBK + +OS Locale: zh_SG.utf8 +default locale: ID: zh_SG, Name: Chinese (Singapore) +display locale: ID: zh_SG, Name: Chinese (Singapore) +format locale: ID: zh_SG, Name: Chinese (Singapore) +default charset: UTF-8 + +OS Locale: zh_TW +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: Big5 + +OS Locale: zh_TW.big5 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: Big5 + +OS Locale: zh_TW.euctw +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-EUC-TW + +OS Locale: zh_TW.utf8 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: UTF-8 + +OS Locale: zu_ZA +default locale: ID: zu_ZA, Name: Zulu (South Africa) +display locale: ID: zu_ZA, Name: Zulu (South Africa) +format locale: ID: zu_ZA, Name: Zulu (South Africa) +default charset: ISO-8859-1 + +OS Locale: zu_ZA.iso88591 +default locale: ID: zu_ZA, Name: Zulu (South Africa) +display locale: ID: zu_ZA, Name: Zulu (South Africa) +format locale: ID: zu_ZA, Name: Zulu (South Africa) +default charset: ISO-8859-1 + +OS Locale: zu_ZA.utf8 +default locale: ID: zu_ZA, Name: Zulu (South Africa) +display locale: ID: zu_ZA, Name: Zulu (South Africa) +format locale: ID: zu_ZA, Name: Zulu (South Africa) +default charset: UTF-8 + +Testing some typical combinations + + +OS Locale (LC_CTYPE: ja_JP.UTF-8, LC_MESSAGES: zh_CN.UTF-8) +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: UTF-8 + +OS Locale (LC_CTYPE: zh_CN.UTF-8, LC_MESSAGES: en_US.UTF-8) +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 + +OS Locale (LC_CTYPE: C, LC_MESSAGES: zh_CN.UTF-8) +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: en_US, Name: English (United States) +default charset: US-ASCII
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Locale/data/deflocale.rhel5.fmtasdefault Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,3924 @@ +Red Hat Enterprise Linux Server release 5.3 (Tikanga) +Linux localhost.localdomain 2.6.18-128.el5 #1 SMP Wed Dec 17 11:42:39 EST 2008 i686 i686 i386 GNU/Linux +Testing all available locales + +OS Locale: C +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: US-ASCII + +OS Locale: POSIX +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: US-ASCII + +OS Locale: aa_DJ +default locale: ID: aa_DJ, Name: Afar (Djibouti) +display locale: ID: aa_DJ, Name: Afar (Djibouti) +format locale: ID: aa_DJ, Name: Afar (Djibouti) +default charset: ISO-8859-1 + +OS Locale: aa_DJ.iso88591 +default locale: ID: aa_DJ, Name: Afar (Djibouti) +display locale: ID: aa_DJ, Name: Afar (Djibouti) +format locale: ID: aa_DJ, Name: Afar (Djibouti) +default charset: ISO-8859-1 + +OS Locale: aa_DJ.utf8 +default locale: ID: aa_DJ, Name: Afar (Djibouti) +display locale: ID: aa_DJ, Name: Afar (Djibouti) +format locale: ID: aa_DJ, Name: Afar (Djibouti) +default charset: UTF-8 + +OS Locale: aa_ER +default locale: ID: aa_ER, Name: Afar (Eritrea) +display locale: ID: aa_ER, Name: Afar (Eritrea) +format locale: ID: aa_ER, Name: Afar (Eritrea) +default charset: UTF-8 + +OS Locale: aa_ER.utf8 +default locale: ID: aa_ER, Name: Afar (Eritrea) +display locale: ID: aa_ER, Name: Afar (Eritrea) +format locale: ID: aa_ER, Name: Afar (Eritrea) +default charset: UTF-8 + +OS Locale: aa_ER.utf8@saaho +default locale: ID: aa_ER, Name: Afar (Eritrea) +display locale: ID: aa_ER, Name: Afar (Eritrea) +format locale: ID: aa_ER, Name: Afar (Eritrea) +default charset: UTF-8 + +OS Locale: aa_ER@saaho +default locale: ID: aa_ER, Name: Afar (Eritrea) +display locale: ID: aa_ER, Name: Afar (Eritrea) +format locale: ID: aa_ER, Name: Afar (Eritrea) +default charset: UTF-8 + +OS Locale: aa_ET +default locale: ID: aa_ET, Name: Afar (Ethiopia) +display locale: ID: aa_ET, Name: Afar (Ethiopia) +format locale: ID: aa_ET, Name: Afar (Ethiopia) +default charset: UTF-8 + +OS Locale: aa_ET.utf8 +default locale: ID: aa_ET, Name: Afar (Ethiopia) +display locale: ID: aa_ET, Name: Afar (Ethiopia) +format locale: ID: aa_ET, Name: Afar (Ethiopia) +default charset: UTF-8 + +OS Locale: af_ZA +default locale: ID: af_ZA, Name: Afrikaans (South Africa) +display locale: ID: af_ZA, Name: Afrikaans (South Africa) +format locale: ID: af_ZA, Name: Afrikaans (South Africa) +default charset: ISO-8859-1 + +OS Locale: af_ZA.iso88591 +default locale: ID: af_ZA, Name: Afrikaans (South Africa) +display locale: ID: af_ZA, Name: Afrikaans (South Africa) +format locale: ID: af_ZA, Name: Afrikaans (South Africa) +default charset: ISO-8859-1 + +OS Locale: af_ZA.utf8 +default locale: ID: af_ZA, Name: Afrikaans (South Africa) +display locale: ID: af_ZA, Name: Afrikaans (South Africa) +format locale: ID: af_ZA, Name: Afrikaans (South Africa) +default charset: UTF-8 + +OS Locale: am_ET +default locale: ID: am_ET, Name: Amharic (Ethiopia) +display locale: ID: am_ET, Name: Amharic (Ethiopia) +format locale: ID: am_ET, Name: Amharic (Ethiopia) +default charset: UTF-8 + +OS Locale: am_ET.utf8 +default locale: ID: am_ET, Name: Amharic (Ethiopia) +display locale: ID: am_ET, Name: Amharic (Ethiopia) +format locale: ID: am_ET, Name: Amharic (Ethiopia) +default charset: UTF-8 + +OS Locale: an_ES +default locale: ID: an_ES, Name: Aragonese (Spain) +display locale: ID: an_ES, Name: Aragonese (Spain) +format locale: ID: an_ES, Name: Aragonese (Spain) +default charset: ISO-8859-15 + +OS Locale: an_ES.iso885915 +default locale: ID: an_ES, Name: Aragonese (Spain) +display locale: ID: an_ES, Name: Aragonese (Spain) +format locale: ID: an_ES, Name: Aragonese (Spain) +default charset: ISO-8859-15 + +OS Locale: an_ES.utf8 +default locale: ID: an_ES, Name: Aragonese (Spain) +display locale: ID: an_ES, Name: Aragonese (Spain) +format locale: ID: an_ES, Name: Aragonese (Spain) +default charset: UTF-8 + +OS Locale: ar_AE +default locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +display locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +format locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +default charset: ISO-8859-6 + +OS Locale: ar_AE.iso88596 +default locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +display locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +format locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +default charset: ISO-8859-6 + +OS Locale: ar_AE.utf8 +default locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +display locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +format locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +default charset: UTF-8 + +OS Locale: ar_BH +default locale: ID: ar_BH, Name: Arabic (Bahrain) +display locale: ID: ar_BH, Name: Arabic (Bahrain) +format locale: ID: ar_BH, Name: Arabic (Bahrain) +default charset: ISO-8859-6 + +OS Locale: ar_BH.iso88596 +default locale: ID: ar_BH, Name: Arabic (Bahrain) +display locale: ID: ar_BH, Name: Arabic (Bahrain) +format locale: ID: ar_BH, Name: Arabic (Bahrain) +default charset: ISO-8859-6 + +OS Locale: ar_BH.utf8 +default locale: ID: ar_BH, Name: Arabic (Bahrain) +display locale: ID: ar_BH, Name: Arabic (Bahrain) +format locale: ID: ar_BH, Name: Arabic (Bahrain) +default charset: UTF-8 + +OS Locale: ar_DZ +default locale: ID: ar_DZ, Name: Arabic (Algeria) +display locale: ID: ar_DZ, Name: Arabic (Algeria) +format locale: ID: ar_DZ, Name: Arabic (Algeria) +default charset: ISO-8859-6 + +OS Locale: ar_DZ.iso88596 +default locale: ID: ar_DZ, Name: Arabic (Algeria) +display locale: ID: ar_DZ, Name: Arabic (Algeria) +format locale: ID: ar_DZ, Name: Arabic (Algeria) +default charset: ISO-8859-6 + +OS Locale: ar_DZ.utf8 +default locale: ID: ar_DZ, Name: Arabic (Algeria) +display locale: ID: ar_DZ, Name: Arabic (Algeria) +format locale: ID: ar_DZ, Name: Arabic (Algeria) +default charset: UTF-8 + +OS Locale: ar_EG +default locale: ID: ar_EG, Name: Arabic (Egypt) +display locale: ID: ar_EG, Name: Arabic (Egypt) +format locale: ID: ar_EG, Name: Arabic (Egypt) +default charset: ISO-8859-6 + +OS Locale: ar_EG.iso88596 +default locale: ID: ar_EG, Name: Arabic (Egypt) +display locale: ID: ar_EG, Name: Arabic (Egypt) +format locale: ID: ar_EG, Name: Arabic (Egypt) +default charset: ISO-8859-6 + +OS Locale: ar_EG.utf8 +default locale: ID: ar_EG, Name: Arabic (Egypt) +display locale: ID: ar_EG, Name: Arabic (Egypt) +format locale: ID: ar_EG, Name: Arabic (Egypt) +default charset: UTF-8 + +OS Locale: ar_IN +default locale: ID: ar_IN, Name: Arabic (India) +display locale: ID: ar_IN, Name: Arabic (India) +format locale: ID: ar_IN, Name: Arabic (India) +default charset: UTF-8 + +OS Locale: ar_IN.utf8 +default locale: ID: ar_IN, Name: Arabic (India) +display locale: ID: ar_IN, Name: Arabic (India) +format locale: ID: ar_IN, Name: Arabic (India) +default charset: UTF-8 + +OS Locale: ar_IQ +default locale: ID: ar_IQ, Name: Arabic (Iraq) +display locale: ID: ar_IQ, Name: Arabic (Iraq) +format locale: ID: ar_IQ, Name: Arabic (Iraq) +default charset: ISO-8859-6 + +OS Locale: ar_IQ.iso88596 +default locale: ID: ar_IQ, Name: Arabic (Iraq) +display locale: ID: ar_IQ, Name: Arabic (Iraq) +format locale: ID: ar_IQ, Name: Arabic (Iraq) +default charset: ISO-8859-6 + +OS Locale: ar_IQ.utf8 +default locale: ID: ar_IQ, Name: Arabic (Iraq) +display locale: ID: ar_IQ, Name: Arabic (Iraq) +format locale: ID: ar_IQ, Name: Arabic (Iraq) +default charset: UTF-8 + +OS Locale: ar_JO +default locale: ID: ar_JO, Name: Arabic (Jordan) +display locale: ID: ar_JO, Name: Arabic (Jordan) +format locale: ID: ar_JO, Name: Arabic (Jordan) +default charset: ISO-8859-6 + +OS Locale: ar_JO.iso88596 +default locale: ID: ar_JO, Name: Arabic (Jordan) +display locale: ID: ar_JO, Name: Arabic (Jordan) +format locale: ID: ar_JO, Name: Arabic (Jordan) +default charset: ISO-8859-6 + +OS Locale: ar_JO.utf8 +default locale: ID: ar_JO, Name: Arabic (Jordan) +display locale: ID: ar_JO, Name: Arabic (Jordan) +format locale: ID: ar_JO, Name: Arabic (Jordan) +default charset: UTF-8 + +OS Locale: ar_KW +default locale: ID: ar_KW, Name: Arabic (Kuwait) +display locale: ID: ar_KW, Name: Arabic (Kuwait) +format locale: ID: ar_KW, Name: Arabic (Kuwait) +default charset: ISO-8859-6 + +OS Locale: ar_KW.iso88596 +default locale: ID: ar_KW, Name: Arabic (Kuwait) +display locale: ID: ar_KW, Name: Arabic (Kuwait) +format locale: ID: ar_KW, Name: Arabic (Kuwait) +default charset: ISO-8859-6 + +OS Locale: ar_KW.utf8 +default locale: ID: ar_KW, Name: Arabic (Kuwait) +display locale: ID: ar_KW, Name: Arabic (Kuwait) +format locale: ID: ar_KW, Name: Arabic (Kuwait) +default charset: UTF-8 + +OS Locale: ar_LB +default locale: ID: ar_LB, Name: Arabic (Lebanon) +display locale: ID: ar_LB, Name: Arabic (Lebanon) +format locale: ID: ar_LB, Name: Arabic (Lebanon) +default charset: ISO-8859-6 + +OS Locale: ar_LB.iso88596 +default locale: ID: ar_LB, Name: Arabic (Lebanon) +display locale: ID: ar_LB, Name: Arabic (Lebanon) +format locale: ID: ar_LB, Name: Arabic (Lebanon) +default charset: ISO-8859-6 + +OS Locale: ar_LB.utf8 +default locale: ID: ar_LB, Name: Arabic (Lebanon) +display locale: ID: ar_LB, Name: Arabic (Lebanon) +format locale: ID: ar_LB, Name: Arabic (Lebanon) +default charset: UTF-8 + +OS Locale: ar_LY +default locale: ID: ar_LY, Name: Arabic (Libya) +display locale: ID: ar_LY, Name: Arabic (Libya) +format locale: ID: ar_LY, Name: Arabic (Libya) +default charset: ISO-8859-6 + +OS Locale: ar_LY.iso88596 +default locale: ID: ar_LY, Name: Arabic (Libya) +display locale: ID: ar_LY, Name: Arabic (Libya) +format locale: ID: ar_LY, Name: Arabic (Libya) +default charset: ISO-8859-6 + +OS Locale: ar_LY.utf8 +default locale: ID: ar_LY, Name: Arabic (Libya) +display locale: ID: ar_LY, Name: Arabic (Libya) +format locale: ID: ar_LY, Name: Arabic (Libya) +default charset: UTF-8 + +OS Locale: ar_MA +default locale: ID: ar_MA, Name: Arabic (Morocco) +display locale: ID: ar_MA, Name: Arabic (Morocco) +format locale: ID: ar_MA, Name: Arabic (Morocco) +default charset: ISO-8859-6 + +OS Locale: ar_MA.iso88596 +default locale: ID: ar_MA, Name: Arabic (Morocco) +display locale: ID: ar_MA, Name: Arabic (Morocco) +format locale: ID: ar_MA, Name: Arabic (Morocco) +default charset: ISO-8859-6 + +OS Locale: ar_MA.utf8 +default locale: ID: ar_MA, Name: Arabic (Morocco) +display locale: ID: ar_MA, Name: Arabic (Morocco) +format locale: ID: ar_MA, Name: Arabic (Morocco) +default charset: UTF-8 + +OS Locale: ar_OM +default locale: ID: ar_OM, Name: Arabic (Oman) +display locale: ID: ar_OM, Name: Arabic (Oman) +format locale: ID: ar_OM, Name: Arabic (Oman) +default charset: ISO-8859-6 + +OS Locale: ar_OM.iso88596 +default locale: ID: ar_OM, Name: Arabic (Oman) +display locale: ID: ar_OM, Name: Arabic (Oman) +format locale: ID: ar_OM, Name: Arabic (Oman) +default charset: ISO-8859-6 + +OS Locale: ar_OM.utf8 +default locale: ID: ar_OM, Name: Arabic (Oman) +display locale: ID: ar_OM, Name: Arabic (Oman) +format locale: ID: ar_OM, Name: Arabic (Oman) +default charset: UTF-8 + +OS Locale: ar_QA +default locale: ID: ar_QA, Name: Arabic (Qatar) +display locale: ID: ar_QA, Name: Arabic (Qatar) +format locale: ID: ar_QA, Name: Arabic (Qatar) +default charset: ISO-8859-6 + +OS Locale: ar_QA.iso88596 +default locale: ID: ar_QA, Name: Arabic (Qatar) +display locale: ID: ar_QA, Name: Arabic (Qatar) +format locale: ID: ar_QA, Name: Arabic (Qatar) +default charset: ISO-8859-6 + +OS Locale: ar_QA.utf8 +default locale: ID: ar_QA, Name: Arabic (Qatar) +display locale: ID: ar_QA, Name: Arabic (Qatar) +format locale: ID: ar_QA, Name: Arabic (Qatar) +default charset: UTF-8 + +OS Locale: ar_SA +default locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +display locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +format locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +default charset: ISO-8859-6 + +OS Locale: ar_SA.iso88596 +default locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +display locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +format locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +default charset: ISO-8859-6 + +OS Locale: ar_SA.utf8 +default locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +display locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +format locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +default charset: UTF-8 + +OS Locale: ar_SD +default locale: ID: ar_SD, Name: Arabic (Sudan) +display locale: ID: ar_SD, Name: Arabic (Sudan) +format locale: ID: ar_SD, Name: Arabic (Sudan) +default charset: ISO-8859-6 + +OS Locale: ar_SD.iso88596 +default locale: ID: ar_SD, Name: Arabic (Sudan) +display locale: ID: ar_SD, Name: Arabic (Sudan) +format locale: ID: ar_SD, Name: Arabic (Sudan) +default charset: ISO-8859-6 + +OS Locale: ar_SD.utf8 +default locale: ID: ar_SD, Name: Arabic (Sudan) +display locale: ID: ar_SD, Name: Arabic (Sudan) +format locale: ID: ar_SD, Name: Arabic (Sudan) +default charset: UTF-8 + +OS Locale: ar_SY +default locale: ID: ar_SY, Name: Arabic (Syria) +display locale: ID: ar_SY, Name: Arabic (Syria) +format locale: ID: ar_SY, Name: Arabic (Syria) +default charset: ISO-8859-6 + +OS Locale: ar_SY.iso88596 +default locale: ID: ar_SY, Name: Arabic (Syria) +display locale: ID: ar_SY, Name: Arabic (Syria) +format locale: ID: ar_SY, Name: Arabic (Syria) +default charset: ISO-8859-6 + +OS Locale: ar_SY.utf8 +default locale: ID: ar_SY, Name: Arabic (Syria) +display locale: ID: ar_SY, Name: Arabic (Syria) +format locale: ID: ar_SY, Name: Arabic (Syria) +default charset: UTF-8 + +OS Locale: ar_TN +default locale: ID: ar_TN, Name: Arabic (Tunisia) +display locale: ID: ar_TN, Name: Arabic (Tunisia) +format locale: ID: ar_TN, Name: Arabic (Tunisia) +default charset: ISO-8859-6 + +OS Locale: ar_TN.iso88596 +default locale: ID: ar_TN, Name: Arabic (Tunisia) +display locale: ID: ar_TN, Name: Arabic (Tunisia) +format locale: ID: ar_TN, Name: Arabic (Tunisia) +default charset: ISO-8859-6 + +OS Locale: ar_TN.utf8 +default locale: ID: ar_TN, Name: Arabic (Tunisia) +display locale: ID: ar_TN, Name: Arabic (Tunisia) +format locale: ID: ar_TN, Name: Arabic (Tunisia) +default charset: UTF-8 + +OS Locale: ar_YE +default locale: ID: ar_YE, Name: Arabic (Yemen) +display locale: ID: ar_YE, Name: Arabic (Yemen) +format locale: ID: ar_YE, Name: Arabic (Yemen) +default charset: ISO-8859-6 + +OS Locale: ar_YE.iso88596 +default locale: ID: ar_YE, Name: Arabic (Yemen) +display locale: ID: ar_YE, Name: Arabic (Yemen) +format locale: ID: ar_YE, Name: Arabic (Yemen) +default charset: ISO-8859-6 + +OS Locale: ar_YE.utf8 +default locale: ID: ar_YE, Name: Arabic (Yemen) +display locale: ID: ar_YE, Name: Arabic (Yemen) +format locale: ID: ar_YE, Name: Arabic (Yemen) +default charset: UTF-8 + +OS Locale: as_IN.utf8 +default locale: ID: as_IN, Name: Assamese (India) +display locale: ID: as_IN, Name: Assamese (India) +format locale: ID: as_IN, Name: Assamese (India) +default charset: UTF-8 + +OS Locale: az_AZ.utf8 +default locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +display locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +format locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +default charset: UTF-8 + +OS Locale: be_BY +default locale: ID: be_BY, Name: Belarusian (Belarus) +display locale: ID: be_BY, Name: Belarusian (Belarus) +format locale: ID: be_BY, Name: Belarusian (Belarus) +default charset: windows-1251 + +OS Locale: be_BY.cp1251 +default locale: ID: be_BY, Name: Belarusian (Belarus) +display locale: ID: be_BY, Name: Belarusian (Belarus) +format locale: ID: be_BY, Name: Belarusian (Belarus) +default charset: windows-1251 + +OS Locale: be_BY.utf8 +default locale: ID: be_BY, Name: Belarusian (Belarus) +display locale: ID: be_BY, Name: Belarusian (Belarus) +format locale: ID: be_BY, Name: Belarusian (Belarus) +default charset: UTF-8 + +OS Locale: be_BY.utf8@latin +default locale: ID: be_BY, Name: Belarusian (Belarus) +display locale: ID: be_BY, Name: Belarusian (Belarus) +format locale: ID: be_BY, Name: Belarusian (Belarus) +default charset: UTF-8 + +OS Locale: be_BY@latin +default locale: ID: be_BY, Name: Belarusian (Belarus) +display locale: ID: be_BY, Name: Belarusian (Belarus) +format locale: ID: be_BY, Name: Belarusian (Belarus) +default charset: UTF-8 + +OS Locale: bg_BG +default locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +display locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +format locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +default charset: windows-1251 + +OS Locale: bg_BG.cp1251 +default locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +display locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +format locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +default charset: windows-1251 + +OS Locale: bg_BG.utf8 +default locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +display locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +format locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +default charset: UTF-8 + +OS Locale: bn_BD +default locale: ID: bn_BD, Name: Bengali (Bangladesh) +display locale: ID: bn_BD, Name: Bengali (Bangladesh) +format locale: ID: bn_BD, Name: Bengali (Bangladesh) +default charset: UTF-8 + +OS Locale: bn_BD.utf8 +default locale: ID: bn_BD, Name: Bengali (Bangladesh) +display locale: ID: bn_BD, Name: Bengali (Bangladesh) +format locale: ID: bn_BD, Name: Bengali (Bangladesh) +default charset: UTF-8 + +OS Locale: bn_IN +default locale: ID: bn_IN, Name: Bengali (India) +display locale: ID: bn_IN, Name: Bengali (India) +format locale: ID: bn_IN, Name: Bengali (India) +default charset: UTF-8 + +OS Locale: bn_IN.utf8 +default locale: ID: bn_IN, Name: Bengali (India) +display locale: ID: bn_IN, Name: Bengali (India) +format locale: ID: bn_IN, Name: Bengali (India) +default charset: UTF-8 + +OS Locale: bokmål +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-1 + +OS Locale: bokmal +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-1 + +OS Locale: br_FR +default locale: ID: br_FR, Name: Breton (France) +display locale: ID: br_FR, Name: Breton (France) +format locale: ID: br_FR, Name: Breton (France) +default charset: ISO-8859-1 + +OS Locale: br_FR.iso88591 +default locale: ID: br_FR, Name: Breton (France) +display locale: ID: br_FR, Name: Breton (France) +format locale: ID: br_FR, Name: Breton (France) +default charset: ISO-8859-1 + +OS Locale: br_FR.iso885915@euro +default locale: ID: br_FR, Name: Breton (France) +display locale: ID: br_FR, Name: Breton (France) +format locale: ID: br_FR, Name: Breton (France) +default charset: ISO-8859-15 + +OS Locale: br_FR.utf8 +default locale: ID: br_FR, Name: Breton (France) +display locale: ID: br_FR, Name: Breton (France) +format locale: ID: br_FR, Name: Breton (France) +default charset: UTF-8 + +OS Locale: br_FR@euro +default locale: ID: br_FR, Name: Breton (France) +display locale: ID: br_FR, Name: Breton (France) +format locale: ID: br_FR, Name: Breton (France) +default charset: ISO-8859-15 + +OS Locale: bs_BA +default locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +display locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +format locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +default charset: ISO-8859-2 + +OS Locale: bs_BA.iso88592 +default locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +display locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +format locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +default charset: ISO-8859-2 + +OS Locale: bs_BA.utf8 +default locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +display locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +format locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +default charset: UTF-8 + +OS Locale: byn_ER +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: byn_ER.utf8 +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: ca_AD +default locale: ID: ca_AD, Name: Catalan (Andorra) +display locale: ID: ca_AD, Name: Catalan (Andorra) +format locale: ID: ca_AD, Name: Catalan (Andorra) +default charset: ISO-8859-15 + +OS Locale: ca_AD.iso885915 +default locale: ID: ca_AD, Name: Catalan (Andorra) +display locale: ID: ca_AD, Name: Catalan (Andorra) +format locale: ID: ca_AD, Name: Catalan (Andorra) +default charset: ISO-8859-15 + +OS Locale: ca_AD.utf8 +default locale: ID: ca_AD, Name: Catalan (Andorra) +display locale: ID: ca_AD, Name: Catalan (Andorra) +format locale: ID: ca_AD, Name: Catalan (Andorra) +default charset: UTF-8 + +OS Locale: ca_ES +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-1 + +OS Locale: ca_ES.iso88591 +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-1 + +OS Locale: ca_ES.iso885915@euro +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-15 + +OS Locale: ca_ES.utf8 +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: UTF-8 + +OS Locale: ca_ES@euro +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-15 + +OS Locale: ca_FR +default locale: ID: ca_FR, Name: Catalan (France) +display locale: ID: ca_FR, Name: Catalan (France) +format locale: ID: ca_FR, Name: Catalan (France) +default charset: ISO-8859-15 + +OS Locale: ca_FR.iso885915 +default locale: ID: ca_FR, Name: Catalan (France) +display locale: ID: ca_FR, Name: Catalan (France) +format locale: ID: ca_FR, Name: Catalan (France) +default charset: ISO-8859-15 + +OS Locale: ca_FR.utf8 +default locale: ID: ca_FR, Name: Catalan (France) +display locale: ID: ca_FR, Name: Catalan (France) +format locale: ID: ca_FR, Name: Catalan (France) +default charset: UTF-8 + +OS Locale: ca_IT +default locale: ID: ca_IT, Name: Catalan (Italy) +display locale: ID: ca_IT, Name: Catalan (Italy) +format locale: ID: ca_IT, Name: Catalan (Italy) +default charset: ISO-8859-15 + +OS Locale: ca_IT.iso885915 +default locale: ID: ca_IT, Name: Catalan (Italy) +display locale: ID: ca_IT, Name: Catalan (Italy) +format locale: ID: ca_IT, Name: Catalan (Italy) +default charset: ISO-8859-15 + +OS Locale: ca_IT.utf8 +default locale: ID: ca_IT, Name: Catalan (Italy) +display locale: ID: ca_IT, Name: Catalan (Italy) +format locale: ID: ca_IT, Name: Catalan (Italy) +default charset: UTF-8 + +OS Locale: catalan +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-1 + +OS Locale: croatian +default locale: ID: hr_HR, Name: Croatian (Croatia) +display locale: ID: hr_HR, Name: Croatian (Croatia) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: ISO-8859-2 + +OS Locale: cs_CZ +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: ISO-8859-2 + +OS Locale: cs_CZ.iso88592 +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: ISO-8859-2 + +OS Locale: cs_CZ.utf8 +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: UTF-8 + +OS Locale: csb_PL +default locale: ID: en_PL, Name: English (Poland) +display locale: ID: en_PL, Name: English (Poland) +format locale: ID: en_PL, Name: English (Poland) +default charset: UTF-8 + +OS Locale: csb_PL.utf8 +default locale: ID: en_PL, Name: English (Poland) +display locale: ID: en_PL, Name: English (Poland) +format locale: ID: en_PL, Name: English (Poland) +default charset: UTF-8 + +OS Locale: cy_GB +default locale: ID: cy_GB, Name: Welsh (United Kingdom) +display locale: ID: cy_GB, Name: Welsh (United Kingdom) +format locale: ID: cy_GB, Name: Welsh (United Kingdom) +default charset: UTF-8 + +OS Locale: cy_GB.iso885914 +default locale: ID: cy_GB, Name: Welsh (United Kingdom) +display locale: ID: cy_GB, Name: Welsh (United Kingdom) +format locale: ID: cy_GB, Name: Welsh (United Kingdom) +default charset: UTF-8 + +OS Locale: cy_GB.utf8 +default locale: ID: cy_GB, Name: Welsh (United Kingdom) +display locale: ID: cy_GB, Name: Welsh (United Kingdom) +format locale: ID: cy_GB, Name: Welsh (United Kingdom) +default charset: UTF-8 + +OS Locale: czech +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: ISO-8859-2 + +OS Locale: da_DK +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-1 + +OS Locale: da_DK.iso88591 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-1 + +OS Locale: da_DK.iso885915 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-15 + +OS Locale: da_DK.utf8 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: UTF-8 + +OS Locale: danish +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-1 + +OS Locale: dansk +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-1 + +OS Locale: de_AT +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-1 + +OS Locale: de_AT.iso88591 +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-1 + +OS Locale: de_AT.iso885915@euro +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-15 + +OS Locale: de_AT.utf8 +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: UTF-8 + +OS Locale: de_AT@euro +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-15 + +OS Locale: de_BE +default locale: ID: de_BE, Name: German (Belgium) +display locale: ID: de_BE, Name: German (Belgium) +format locale: ID: de_BE, Name: German (Belgium) +default charset: ISO-8859-1 + +OS Locale: de_BE.iso88591 +default locale: ID: de_BE, Name: German (Belgium) +display locale: ID: de_BE, Name: German (Belgium) +format locale: ID: de_BE, Name: German (Belgium) +default charset: ISO-8859-1 + +OS Locale: de_BE.iso885915@euro +default locale: ID: de_BE, Name: German (Belgium) +display locale: ID: de_BE, Name: German (Belgium) +format locale: ID: de_BE, Name: German (Belgium) +default charset: ISO-8859-15 + +OS Locale: de_BE.utf8 +default locale: ID: de_BE, Name: German (Belgium) +display locale: ID: de_BE, Name: German (Belgium) +format locale: ID: de_BE, Name: German (Belgium) +default charset: UTF-8 + +OS Locale: de_BE@euro +default locale: ID: de_BE, Name: German (Belgium) +display locale: ID: de_BE, Name: German (Belgium) +format locale: ID: de_BE, Name: German (Belgium) +default charset: ISO-8859-15 + +OS Locale: de_CH +default locale: ID: de_CH, Name: German (Switzerland) +display locale: ID: de_CH, Name: German (Switzerland) +format locale: ID: de_CH, Name: German (Switzerland) +default charset: ISO-8859-1 + +OS Locale: de_CH.iso88591 +default locale: ID: de_CH, Name: German (Switzerland) +display locale: ID: de_CH, Name: German (Switzerland) +format locale: ID: de_CH, Name: German (Switzerland) +default charset: ISO-8859-1 + +OS Locale: de_CH.utf8 +default locale: ID: de_CH, Name: German (Switzerland) +display locale: ID: de_CH, Name: German (Switzerland) +format locale: ID: de_CH, Name: German (Switzerland) +default charset: UTF-8 + +OS Locale: de_DE +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-1 + +OS Locale: de_DE.iso88591 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-1 + +OS Locale: de_DE.iso885915@euro +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-15 + +OS Locale: de_DE.utf8 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: UTF-8 + +OS Locale: de_DE@euro +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-15 + +OS Locale: de_LU +default locale: ID: de_LU, Name: German (Luxembourg) +display locale: ID: de_LU, Name: German (Luxembourg) +format locale: ID: de_LU, Name: German (Luxembourg) +default charset: ISO-8859-1 + +OS Locale: de_LU.iso88591 +default locale: ID: de_LU, Name: German (Luxembourg) +display locale: ID: de_LU, Name: German (Luxembourg) +format locale: ID: de_LU, Name: German (Luxembourg) +default charset: ISO-8859-1 + +OS Locale: de_LU.iso885915@euro +default locale: ID: de_LU, Name: German (Luxembourg) +display locale: ID: de_LU, Name: German (Luxembourg) +format locale: ID: de_LU, Name: German (Luxembourg) +default charset: ISO-8859-15 + +OS Locale: de_LU.utf8 +default locale: ID: de_LU, Name: German (Luxembourg) +display locale: ID: de_LU, Name: German (Luxembourg) +format locale: ID: de_LU, Name: German (Luxembourg) +default charset: UTF-8 + +OS Locale: de_LU@euro +default locale: ID: de_LU, Name: German (Luxembourg) +display locale: ID: de_LU, Name: German (Luxembourg) +format locale: ID: de_LU, Name: German (Luxembourg) +default charset: ISO-8859-15 + +OS Locale: deutsch +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-1 + +OS Locale: dutch +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-1 + +OS Locale: dz_BT +default locale: ID: dz_BT, Name: Dzongkha (Bhutan) +display locale: ID: dz_BT, Name: Dzongkha (Bhutan) +format locale: ID: dz_BT, Name: Dzongkha (Bhutan) +default charset: UTF-8 + +OS Locale: dz_BT.utf8 +default locale: ID: dz_BT, Name: Dzongkha (Bhutan) +display locale: ID: dz_BT, Name: Dzongkha (Bhutan) +format locale: ID: dz_BT, Name: Dzongkha (Bhutan) +default charset: UTF-8 + +OS Locale: eesti +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-1 + +OS Locale: el_CY +default locale: ID: el_CY, Name: Greek (Cyprus) +display locale: ID: el_CY, Name: Greek (Cyprus) +format locale: ID: el_CY, Name: Greek (Cyprus) +default charset: ISO-8859-7 + +OS Locale: el_CY.iso88597 +default locale: ID: el_CY, Name: Greek (Cyprus) +display locale: ID: el_CY, Name: Greek (Cyprus) +format locale: ID: el_CY, Name: Greek (Cyprus) +default charset: ISO-8859-7 + +OS Locale: el_CY.utf8 +default locale: ID: el_CY, Name: Greek (Cyprus) +display locale: ID: el_CY, Name: Greek (Cyprus) +format locale: ID: el_CY, Name: Greek (Cyprus) +default charset: UTF-8 + +OS Locale: el_GR +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 + +OS Locale: el_GR.iso88597 +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 + +OS Locale: el_GR.utf8 +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: UTF-8 + +OS Locale: en_AU +default locale: ID: en_AU, Name: English (Australia) +display locale: ID: en_AU, Name: English (Australia) +format locale: ID: en_AU, Name: English (Australia) +default charset: ISO-8859-1 + +OS Locale: en_AU.iso88591 +default locale: ID: en_AU, Name: English (Australia) +display locale: ID: en_AU, Name: English (Australia) +format locale: ID: en_AU, Name: English (Australia) +default charset: ISO-8859-1 + +OS Locale: en_AU.utf8 +default locale: ID: en_AU, Name: English (Australia) +display locale: ID: en_AU, Name: English (Australia) +format locale: ID: en_AU, Name: English (Australia) +default charset: UTF-8 + +OS Locale: en_BW +default locale: ID: en_BW, Name: English (Botswana) +display locale: ID: en_BW, Name: English (Botswana) +format locale: ID: en_BW, Name: English (Botswana) +default charset: ISO-8859-1 + +OS Locale: en_BW.iso88591 +default locale: ID: en_BW, Name: English (Botswana) +display locale: ID: en_BW, Name: English (Botswana) +format locale: ID: en_BW, Name: English (Botswana) +default charset: ISO-8859-1 + +OS Locale: en_BW.utf8 +default locale: ID: en_BW, Name: English (Botswana) +display locale: ID: en_BW, Name: English (Botswana) +format locale: ID: en_BW, Name: English (Botswana) +default charset: UTF-8 + +OS Locale: en_CA +default locale: ID: en_CA, Name: English (Canada) +display locale: ID: en_CA, Name: English (Canada) +format locale: ID: en_CA, Name: English (Canada) +default charset: ISO-8859-1 + +OS Locale: en_CA.iso88591 +default locale: ID: en_CA, Name: English (Canada) +display locale: ID: en_CA, Name: English (Canada) +format locale: ID: en_CA, Name: English (Canada) +default charset: ISO-8859-1 + +OS Locale: en_CA.utf8 +default locale: ID: en_CA, Name: English (Canada) +display locale: ID: en_CA, Name: English (Canada) +format locale: ID: en_CA, Name: English (Canada) +default charset: UTF-8 + +OS Locale: en_DK +default locale: ID: en_DK, Name: English (Denmark) +display locale: ID: en_DK, Name: English (Denmark) +format locale: ID: en_DK, Name: English (Denmark) +default charset: ISO-8859-1 + +OS Locale: en_DK.iso88591 +default locale: ID: en_DK, Name: English (Denmark) +display locale: ID: en_DK, Name: English (Denmark) +format locale: ID: en_DK, Name: English (Denmark) +default charset: ISO-8859-1 + +OS Locale: en_DK.utf8 +default locale: ID: en_DK, Name: English (Denmark) +display locale: ID: en_DK, Name: English (Denmark) +format locale: ID: en_DK, Name: English (Denmark) +default charset: UTF-8 + +OS Locale: en_GB +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: ISO-8859-1 + +OS Locale: en_GB.iso88591 +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: ISO-8859-1 + +OS Locale: en_GB.iso885915 +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: ISO-8859-15 + +OS Locale: en_GB.utf8 +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: UTF-8 + +OS Locale: en_HK +default locale: ID: en_HK, Name: English (Hong Kong) +display locale: ID: en_HK, Name: English (Hong Kong) +format locale: ID: en_HK, Name: English (Hong Kong) +default charset: ISO-8859-1 + +OS Locale: en_HK.iso88591 +default locale: ID: en_HK, Name: English (Hong Kong) +display locale: ID: en_HK, Name: English (Hong Kong) +format locale: ID: en_HK, Name: English (Hong Kong) +default charset: ISO-8859-1 + +OS Locale: en_HK.utf8 +default locale: ID: en_HK, Name: English (Hong Kong) +display locale: ID: en_HK, Name: English (Hong Kong) +format locale: ID: en_HK, Name: English (Hong Kong) +default charset: UTF-8 + +OS Locale: en_IE +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-1 + +OS Locale: en_IE.iso88591 +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-1 + +OS Locale: en_IE.iso885915@euro +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-15 + +OS Locale: en_IE.utf8 +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: UTF-8 + +OS Locale: en_IE@euro +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-15 + +OS Locale: en_IN +default locale: ID: en_IN, Name: English (India) +display locale: ID: en_IN, Name: English (India) +format locale: ID: en_IN, Name: English (India) +default charset: UTF-8 + +OS Locale: en_IN.utf8 +default locale: ID: en_IN, Name: English (India) +display locale: ID: en_IN, Name: English (India) +format locale: ID: en_IN, Name: English (India) +default charset: UTF-8 + +OS Locale: en_NZ +default locale: ID: en_NZ, Name: English (New Zealand) +display locale: ID: en_NZ, Name: English (New Zealand) +format locale: ID: en_NZ, Name: English (New Zealand) +default charset: ISO-8859-1 + +OS Locale: en_NZ.iso88591 +default locale: ID: en_NZ, Name: English (New Zealand) +display locale: ID: en_NZ, Name: English (New Zealand) +format locale: ID: en_NZ, Name: English (New Zealand) +default charset: ISO-8859-1 + +OS Locale: en_NZ.utf8 +default locale: ID: en_NZ, Name: English (New Zealand) +display locale: ID: en_NZ, Name: English (New Zealand) +format locale: ID: en_NZ, Name: English (New Zealand) +default charset: UTF-8 + +OS Locale: en_PH +default locale: ID: en_PH, Name: English (Philippines) +display locale: ID: en_PH, Name: English (Philippines) +format locale: ID: en_PH, Name: English (Philippines) +default charset: ISO-8859-1 + +OS Locale: en_PH.iso88591 +default locale: ID: en_PH, Name: English (Philippines) +display locale: ID: en_PH, Name: English (Philippines) +format locale: ID: en_PH, Name: English (Philippines) +default charset: ISO-8859-1 + +OS Locale: en_PH.utf8 +default locale: ID: en_PH, Name: English (Philippines) +display locale: ID: en_PH, Name: English (Philippines) +format locale: ID: en_PH, Name: English (Philippines) +default charset: UTF-8 + +OS Locale: en_SG +default locale: ID: en_SG, Name: English (Singapore) +display locale: ID: en_SG, Name: English (Singapore) +format locale: ID: en_SG, Name: English (Singapore) +default charset: ISO-8859-1 + +OS Locale: en_SG.iso88591 +default locale: ID: en_SG, Name: English (Singapore) +display locale: ID: en_SG, Name: English (Singapore) +format locale: ID: en_SG, Name: English (Singapore) +default charset: ISO-8859-1 + +OS Locale: en_SG.utf8 +default locale: ID: en_SG, Name: English (Singapore) +display locale: ID: en_SG, Name: English (Singapore) +format locale: ID: en_SG, Name: English (Singapore) +default charset: UTF-8 + +OS Locale: en_US +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: ISO-8859-1 + +OS Locale: en_US.iso88591 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: ISO-8859-1 + +OS Locale: en_US.iso885915 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: ISO-8859-15 + +OS Locale: en_US.utf8 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: UTF-8 + +OS Locale: en_ZA +default locale: ID: en_ZA, Name: English (South Africa) +display locale: ID: en_ZA, Name: English (South Africa) +format locale: ID: en_ZA, Name: English (South Africa) +default charset: ISO-8859-1 + +OS Locale: en_ZA.iso88591 +default locale: ID: en_ZA, Name: English (South Africa) +display locale: ID: en_ZA, Name: English (South Africa) +format locale: ID: en_ZA, Name: English (South Africa) +default charset: ISO-8859-1 + +OS Locale: en_ZA.utf8 +default locale: ID: en_ZA, Name: English (South Africa) +display locale: ID: en_ZA, Name: English (South Africa) +format locale: ID: en_ZA, Name: English (South Africa) +default charset: UTF-8 + +OS Locale: en_ZW +default locale: ID: en_ZW, Name: English (Zimbabwe) +display locale: ID: en_ZW, Name: English (Zimbabwe) +format locale: ID: en_ZW, Name: English (Zimbabwe) +default charset: ISO-8859-1 + +OS Locale: en_ZW.iso88591 +default locale: ID: en_ZW, Name: English (Zimbabwe) +display locale: ID: en_ZW, Name: English (Zimbabwe) +format locale: ID: en_ZW, Name: English (Zimbabwe) +default charset: ISO-8859-1 + +OS Locale: en_ZW.utf8 +default locale: ID: en_ZW, Name: English (Zimbabwe) +display locale: ID: en_ZW, Name: English (Zimbabwe) +format locale: ID: en_ZW, Name: English (Zimbabwe) +default charset: UTF-8 + +OS Locale: es_AR +default locale: ID: es_AR, Name: Spanish (Argentina) +display locale: ID: es_AR, Name: Spanish (Argentina) +format locale: ID: es_AR, Name: Spanish (Argentina) +default charset: ISO-8859-1 + +OS Locale: es_AR.iso88591 +default locale: ID: es_AR, Name: Spanish (Argentina) +display locale: ID: es_AR, Name: Spanish (Argentina) +format locale: ID: es_AR, Name: Spanish (Argentina) +default charset: ISO-8859-1 + +OS Locale: es_AR.utf8 +default locale: ID: es_AR, Name: Spanish (Argentina) +display locale: ID: es_AR, Name: Spanish (Argentina) +format locale: ID: es_AR, Name: Spanish (Argentina) +default charset: UTF-8 + +OS Locale: es_BO +default locale: ID: es_BO, Name: Spanish (Bolivia) +display locale: ID: es_BO, Name: Spanish (Bolivia) +format locale: ID: es_BO, Name: Spanish (Bolivia) +default charset: ISO-8859-1 + +OS Locale: es_BO.iso88591 +default locale: ID: es_BO, Name: Spanish (Bolivia) +display locale: ID: es_BO, Name: Spanish (Bolivia) +format locale: ID: es_BO, Name: Spanish (Bolivia) +default charset: ISO-8859-1 + +OS Locale: es_BO.utf8 +default locale: ID: es_BO, Name: Spanish (Bolivia) +display locale: ID: es_BO, Name: Spanish (Bolivia) +format locale: ID: es_BO, Name: Spanish (Bolivia) +default charset: UTF-8 + +OS Locale: es_CL +default locale: ID: es_CL, Name: Spanish (Chile) +display locale: ID: es_CL, Name: Spanish (Chile) +format locale: ID: es_CL, Name: Spanish (Chile) +default charset: ISO-8859-1 + +OS Locale: es_CL.iso88591 +default locale: ID: es_CL, Name: Spanish (Chile) +display locale: ID: es_CL, Name: Spanish (Chile) +format locale: ID: es_CL, Name: Spanish (Chile) +default charset: ISO-8859-1 + +OS Locale: es_CL.utf8 +default locale: ID: es_CL, Name: Spanish (Chile) +display locale: ID: es_CL, Name: Spanish (Chile) +format locale: ID: es_CL, Name: Spanish (Chile) +default charset: UTF-8 + +OS Locale: es_CO +default locale: ID: es_CO, Name: Spanish (Colombia) +display locale: ID: es_CO, Name: Spanish (Colombia) +format locale: ID: es_CO, Name: Spanish (Colombia) +default charset: ISO-8859-1 + +OS Locale: es_CO.iso88591 +default locale: ID: es_CO, Name: Spanish (Colombia) +display locale: ID: es_CO, Name: Spanish (Colombia) +format locale: ID: es_CO, Name: Spanish (Colombia) +default charset: ISO-8859-1 + +OS Locale: es_CO.utf8 +default locale: ID: es_CO, Name: Spanish (Colombia) +display locale: ID: es_CO, Name: Spanish (Colombia) +format locale: ID: es_CO, Name: Spanish (Colombia) +default charset: UTF-8 + +OS Locale: es_CR +default locale: ID: es_CR, Name: Spanish (Costa Rica) +display locale: ID: es_CR, Name: Spanish (Costa Rica) +format locale: ID: es_CR, Name: Spanish (Costa Rica) +default charset: ISO-8859-1 + +OS Locale: es_CR.iso88591 +default locale: ID: es_CR, Name: Spanish (Costa Rica) +display locale: ID: es_CR, Name: Spanish (Costa Rica) +format locale: ID: es_CR, Name: Spanish (Costa Rica) +default charset: ISO-8859-1 + +OS Locale: es_CR.utf8 +default locale: ID: es_CR, Name: Spanish (Costa Rica) +display locale: ID: es_CR, Name: Spanish (Costa Rica) +format locale: ID: es_CR, Name: Spanish (Costa Rica) +default charset: UTF-8 + +OS Locale: es_DO +default locale: ID: es_DO, Name: Spanish (Dominican Republic) +display locale: ID: es_DO, Name: Spanish (Dominican Republic) +format locale: ID: es_DO, Name: Spanish (Dominican Republic) +default charset: ISO-8859-1 + +OS Locale: es_DO.iso88591 +default locale: ID: es_DO, Name: Spanish (Dominican Republic) +display locale: ID: es_DO, Name: Spanish (Dominican Republic) +format locale: ID: es_DO, Name: Spanish (Dominican Republic) +default charset: ISO-8859-1 + +OS Locale: es_DO.utf8 +default locale: ID: es_DO, Name: Spanish (Dominican Republic) +display locale: ID: es_DO, Name: Spanish (Dominican Republic) +format locale: ID: es_DO, Name: Spanish (Dominican Republic) +default charset: UTF-8 + +OS Locale: es_EC +default locale: ID: es_EC, Name: Spanish (Ecuador) +display locale: ID: es_EC, Name: Spanish (Ecuador) +format locale: ID: es_EC, Name: Spanish (Ecuador) +default charset: ISO-8859-1 + +OS Locale: es_EC.iso88591 +default locale: ID: es_EC, Name: Spanish (Ecuador) +display locale: ID: es_EC, Name: Spanish (Ecuador) +format locale: ID: es_EC, Name: Spanish (Ecuador) +default charset: ISO-8859-1 + +OS Locale: es_EC.utf8 +default locale: ID: es_EC, Name: Spanish (Ecuador) +display locale: ID: es_EC, Name: Spanish (Ecuador) +format locale: ID: es_EC, Name: Spanish (Ecuador) +default charset: UTF-8 + +OS Locale: es_ES +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-1 + +OS Locale: es_ES.iso88591 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-1 + +OS Locale: es_ES.iso885915@euro +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-15 + +OS Locale: es_ES.utf8 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: UTF-8 + +OS Locale: es_ES@euro +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-15 + +OS Locale: es_GT +default locale: ID: es_GT, Name: Spanish (Guatemala) +display locale: ID: es_GT, Name: Spanish (Guatemala) +format locale: ID: es_GT, Name: Spanish (Guatemala) +default charset: ISO-8859-1 + +OS Locale: es_GT.iso88591 +default locale: ID: es_GT, Name: Spanish (Guatemala) +display locale: ID: es_GT, Name: Spanish (Guatemala) +format locale: ID: es_GT, Name: Spanish (Guatemala) +default charset: ISO-8859-1 + +OS Locale: es_GT.utf8 +default locale: ID: es_GT, Name: Spanish (Guatemala) +display locale: ID: es_GT, Name: Spanish (Guatemala) +format locale: ID: es_GT, Name: Spanish (Guatemala) +default charset: UTF-8 + +OS Locale: es_HN +default locale: ID: es_HN, Name: Spanish (Honduras) +display locale: ID: es_HN, Name: Spanish (Honduras) +format locale: ID: es_HN, Name: Spanish (Honduras) +default charset: ISO-8859-1 + +OS Locale: es_HN.iso88591 +default locale: ID: es_HN, Name: Spanish (Honduras) +display locale: ID: es_HN, Name: Spanish (Honduras) +format locale: ID: es_HN, Name: Spanish (Honduras) +default charset: ISO-8859-1 + +OS Locale: es_HN.utf8 +default locale: ID: es_HN, Name: Spanish (Honduras) +display locale: ID: es_HN, Name: Spanish (Honduras) +format locale: ID: es_HN, Name: Spanish (Honduras) +default charset: UTF-8 + +OS Locale: es_MX +default locale: ID: es_MX, Name: Spanish (Mexico) +display locale: ID: es_MX, Name: Spanish (Mexico) +format locale: ID: es_MX, Name: Spanish (Mexico) +default charset: ISO-8859-1 + +OS Locale: es_MX.iso88591 +default locale: ID: es_MX, Name: Spanish (Mexico) +display locale: ID: es_MX, Name: Spanish (Mexico) +format locale: ID: es_MX, Name: Spanish (Mexico) +default charset: ISO-8859-1 + +OS Locale: es_MX.utf8 +default locale: ID: es_MX, Name: Spanish (Mexico) +display locale: ID: es_MX, Name: Spanish (Mexico) +format locale: ID: es_MX, Name: Spanish (Mexico) +default charset: UTF-8 + +OS Locale: es_NI +default locale: ID: es_NI, Name: Spanish (Nicaragua) +display locale: ID: es_NI, Name: Spanish (Nicaragua) +format locale: ID: es_NI, Name: Spanish (Nicaragua) +default charset: ISO-8859-1 + +OS Locale: es_NI.iso88591 +default locale: ID: es_NI, Name: Spanish (Nicaragua) +display locale: ID: es_NI, Name: Spanish (Nicaragua) +format locale: ID: es_NI, Name: Spanish (Nicaragua) +default charset: ISO-8859-1 + +OS Locale: es_NI.utf8 +default locale: ID: es_NI, Name: Spanish (Nicaragua) +display locale: ID: es_NI, Name: Spanish (Nicaragua) +format locale: ID: es_NI, Name: Spanish (Nicaragua) +default charset: UTF-8 + +OS Locale: es_PA +default locale: ID: es_PA, Name: Spanish (Panama) +display locale: ID: es_PA, Name: Spanish (Panama) +format locale: ID: es_PA, Name: Spanish (Panama) +default charset: ISO-8859-1 + +OS Locale: es_PA.iso88591 +default locale: ID: es_PA, Name: Spanish (Panama) +display locale: ID: es_PA, Name: Spanish (Panama) +format locale: ID: es_PA, Name: Spanish (Panama) +default charset: ISO-8859-1 + +OS Locale: es_PA.utf8 +default locale: ID: es_PA, Name: Spanish (Panama) +display locale: ID: es_PA, Name: Spanish (Panama) +format locale: ID: es_PA, Name: Spanish (Panama) +default charset: UTF-8 + +OS Locale: es_PE +default locale: ID: es_PE, Name: Spanish (Peru) +display locale: ID: es_PE, Name: Spanish (Peru) +format locale: ID: es_PE, Name: Spanish (Peru) +default charset: ISO-8859-1 + +OS Locale: es_PE.iso88591 +default locale: ID: es_PE, Name: Spanish (Peru) +display locale: ID: es_PE, Name: Spanish (Peru) +format locale: ID: es_PE, Name: Spanish (Peru) +default charset: ISO-8859-1 + +OS Locale: es_PE.utf8 +default locale: ID: es_PE, Name: Spanish (Peru) +display locale: ID: es_PE, Name: Spanish (Peru) +format locale: ID: es_PE, Name: Spanish (Peru) +default charset: UTF-8 + +OS Locale: es_PR +default locale: ID: es_PR, Name: Spanish (Puerto Rico) +display locale: ID: es_PR, Name: Spanish (Puerto Rico) +format locale: ID: es_PR, Name: Spanish (Puerto Rico) +default charset: ISO-8859-1 + +OS Locale: es_PR.iso88591 +default locale: ID: es_PR, Name: Spanish (Puerto Rico) +display locale: ID: es_PR, Name: Spanish (Puerto Rico) +format locale: ID: es_PR, Name: Spanish (Puerto Rico) +default charset: ISO-8859-1 + +OS Locale: es_PR.utf8 +default locale: ID: es_PR, Name: Spanish (Puerto Rico) +display locale: ID: es_PR, Name: Spanish (Puerto Rico) +format locale: ID: es_PR, Name: Spanish (Puerto Rico) +default charset: UTF-8 + +OS Locale: es_PY +default locale: ID: es_PY, Name: Spanish (Paraguay) +display locale: ID: es_PY, Name: Spanish (Paraguay) +format locale: ID: es_PY, Name: Spanish (Paraguay) +default charset: ISO-8859-1 + +OS Locale: es_PY.iso88591 +default locale: ID: es_PY, Name: Spanish (Paraguay) +display locale: ID: es_PY, Name: Spanish (Paraguay) +format locale: ID: es_PY, Name: Spanish (Paraguay) +default charset: ISO-8859-1 + +OS Locale: es_PY.utf8 +default locale: ID: es_PY, Name: Spanish (Paraguay) +display locale: ID: es_PY, Name: Spanish (Paraguay) +format locale: ID: es_PY, Name: Spanish (Paraguay) +default charset: UTF-8 + +OS Locale: es_SV +default locale: ID: es_SV, Name: Spanish (El Salvador) +display locale: ID: es_SV, Name: Spanish (El Salvador) +format locale: ID: es_SV, Name: Spanish (El Salvador) +default charset: ISO-8859-1 + +OS Locale: es_SV.iso88591 +default locale: ID: es_SV, Name: Spanish (El Salvador) +display locale: ID: es_SV, Name: Spanish (El Salvador) +format locale: ID: es_SV, Name: Spanish (El Salvador) +default charset: ISO-8859-1 + +OS Locale: es_SV.utf8 +default locale: ID: es_SV, Name: Spanish (El Salvador) +display locale: ID: es_SV, Name: Spanish (El Salvador) +format locale: ID: es_SV, Name: Spanish (El Salvador) +default charset: UTF-8 + +OS Locale: es_US +default locale: ID: es_US, Name: Spanish (United States) +display locale: ID: es_US, Name: Spanish (United States) +format locale: ID: es_US, Name: Spanish (United States) +default charset: ISO-8859-1 + +OS Locale: es_US.iso88591 +default locale: ID: es_US, Name: Spanish (United States) +display locale: ID: es_US, Name: Spanish (United States) +format locale: ID: es_US, Name: Spanish (United States) +default charset: ISO-8859-1 + +OS Locale: es_US.utf8 +default locale: ID: es_US, Name: Spanish (United States) +display locale: ID: es_US, Name: Spanish (United States) +format locale: ID: es_US, Name: Spanish (United States) +default charset: UTF-8 + +OS Locale: es_UY +default locale: ID: es_UY, Name: Spanish (Uruguay) +display locale: ID: es_UY, Name: Spanish (Uruguay) +format locale: ID: es_UY, Name: Spanish (Uruguay) +default charset: ISO-8859-1 + +OS Locale: es_UY.iso88591 +default locale: ID: es_UY, Name: Spanish (Uruguay) +display locale: ID: es_UY, Name: Spanish (Uruguay) +format locale: ID: es_UY, Name: Spanish (Uruguay) +default charset: ISO-8859-1 + +OS Locale: es_UY.utf8 +default locale: ID: es_UY, Name: Spanish (Uruguay) +display locale: ID: es_UY, Name: Spanish (Uruguay) +format locale: ID: es_UY, Name: Spanish (Uruguay) +default charset: UTF-8 + +OS Locale: es_VE +default locale: ID: es_VE, Name: Spanish (Venezuela) +display locale: ID: es_VE, Name: Spanish (Venezuela) +format locale: ID: es_VE, Name: Spanish (Venezuela) +default charset: ISO-8859-1 + +OS Locale: es_VE.iso88591 +default locale: ID: es_VE, Name: Spanish (Venezuela) +display locale: ID: es_VE, Name: Spanish (Venezuela) +format locale: ID: es_VE, Name: Spanish (Venezuela) +default charset: ISO-8859-1 + +OS Locale: es_VE.utf8 +default locale: ID: es_VE, Name: Spanish (Venezuela) +display locale: ID: es_VE, Name: Spanish (Venezuela) +format locale: ID: es_VE, Name: Spanish (Venezuela) +default charset: UTF-8 + +OS Locale: estonian +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-1 + +OS Locale: et_EE +default locale: ID: et_EE, Name: Estonian (Estonia) +display locale: ID: et_EE, Name: Estonian (Estonia) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: ISO-8859-1 + +OS Locale: et_EE.iso88591 +default locale: ID: et_EE, Name: Estonian (Estonia) +display locale: ID: et_EE, Name: Estonian (Estonia) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: ISO-8859-1 + +OS Locale: et_EE.iso885915 +default locale: ID: et_EE, Name: Estonian (Estonia) +display locale: ID: et_EE, Name: Estonian (Estonia) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: ISO-8859-15 + +OS Locale: et_EE.utf8 +default locale: ID: et_EE, Name: Estonian (Estonia) +display locale: ID: et_EE, Name: Estonian (Estonia) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: UTF-8 + +OS Locale: eu_ES +default locale: ID: eu_ES, Name: Basque (Spain) +display locale: ID: eu_ES, Name: Basque (Spain) +format locale: ID: eu_ES, Name: Basque (Spain) +default charset: ISO-8859-1 + +OS Locale: eu_ES.iso88591 +default locale: ID: eu_ES, Name: Basque (Spain) +display locale: ID: eu_ES, Name: Basque (Spain) +format locale: ID: eu_ES, Name: Basque (Spain) +default charset: ISO-8859-1 + +OS Locale: eu_ES.iso885915@euro +default locale: ID: eu_ES, Name: Basque (Spain) +display locale: ID: eu_ES, Name: Basque (Spain) +format locale: ID: eu_ES, Name: Basque (Spain) +default charset: ISO-8859-15 + +OS Locale: eu_ES.utf8 +default locale: ID: eu_ES, Name: Basque (Spain) +display locale: ID: eu_ES, Name: Basque (Spain) +format locale: ID: eu_ES, Name: Basque (Spain) +default charset: UTF-8 + +OS Locale: eu_ES@euro +default locale: ID: eu_ES, Name: Basque (Spain) +display locale: ID: eu_ES, Name: Basque (Spain) +format locale: ID: eu_ES, Name: Basque (Spain) +default charset: ISO-8859-15 + +OS Locale: fa_IR +default locale: ID: fa_IR, Name: Persian (Iran) +display locale: ID: fa_IR, Name: Persian (Iran) +format locale: ID: fa_IR, Name: Persian (Iran) +default charset: UTF-8 + +OS Locale: fa_IR.utf8 +default locale: ID: fa_IR, Name: Persian (Iran) +display locale: ID: fa_IR, Name: Persian (Iran) +format locale: ID: fa_IR, Name: Persian (Iran) +default charset: UTF-8 + +OS Locale: fi_FI +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-1 + +OS Locale: fi_FI.iso88591 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-1 + +OS Locale: fi_FI.iso885915@euro +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-15 + +OS Locale: fi_FI.utf8 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: UTF-8 + +OS Locale: fi_FI@euro +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-15 + +OS Locale: finnish +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-1 + +OS Locale: fo_FO +default locale: ID: fo_FO, Name: Faroese (Faroe Islands) +display locale: ID: fo_FO, Name: Faroese (Faroe Islands) +format locale: ID: fo_FO, Name: Faroese (Faroe Islands) +default charset: ISO-8859-1 + +OS Locale: fo_FO.iso88591 +default locale: ID: fo_FO, Name: Faroese (Faroe Islands) +display locale: ID: fo_FO, Name: Faroese (Faroe Islands) +format locale: ID: fo_FO, Name: Faroese (Faroe Islands) +default charset: ISO-8859-1 + +OS Locale: fo_FO.utf8 +default locale: ID: fo_FO, Name: Faroese (Faroe Islands) +display locale: ID: fo_FO, Name: Faroese (Faroe Islands) +format locale: ID: fo_FO, Name: Faroese (Faroe Islands) +default charset: UTF-8 + +OS Locale: fr_BE +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-1 + +OS Locale: fr_BE.iso88591 +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-1 + +OS Locale: fr_BE.iso885915@euro +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-15 + +OS Locale: fr_BE.utf8 +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: UTF-8 + +OS Locale: fr_BE@euro +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-15 + +OS Locale: fr_CA +default locale: ID: fr_CA, Name: French (Canada) +display locale: ID: fr_CA, Name: French (Canada) +format locale: ID: fr_CA, Name: French (Canada) +default charset: ISO-8859-1 + +OS Locale: fr_CA.iso88591 +default locale: ID: fr_CA, Name: French (Canada) +display locale: ID: fr_CA, Name: French (Canada) +format locale: ID: fr_CA, Name: French (Canada) +default charset: ISO-8859-1 + +OS Locale: fr_CA.utf8 +default locale: ID: fr_CA, Name: French (Canada) +display locale: ID: fr_CA, Name: French (Canada) +format locale: ID: fr_CA, Name: French (Canada) +default charset: UTF-8 + +OS Locale: fr_CH +default locale: ID: fr_CH, Name: French (Switzerland) +display locale: ID: fr_CH, Name: French (Switzerland) +format locale: ID: fr_CH, Name: French (Switzerland) +default charset: ISO-8859-1 + +OS Locale: fr_CH.iso88591 +default locale: ID: fr_CH, Name: French (Switzerland) +display locale: ID: fr_CH, Name: French (Switzerland) +format locale: ID: fr_CH, Name: French (Switzerland) +default charset: ISO-8859-1 + +OS Locale: fr_CH.utf8 +default locale: ID: fr_CH, Name: French (Switzerland) +display locale: ID: fr_CH, Name: French (Switzerland) +format locale: ID: fr_CH, Name: French (Switzerland) +default charset: UTF-8 + +OS Locale: fr_FR +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-1 + +OS Locale: fr_FR.iso88591 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-1 + +OS Locale: fr_FR.iso885915@euro +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-15 + +OS Locale: fr_FR.utf8 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: UTF-8 + +OS Locale: fr_FR@euro +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-15 + +OS Locale: fr_LU +default locale: ID: fr_LU, Name: French (Luxembourg) +display locale: ID: fr_LU, Name: French (Luxembourg) +format locale: ID: fr_LU, Name: French (Luxembourg) +default charset: ISO-8859-1 + +OS Locale: fr_LU.iso88591 +default locale: ID: fr_LU, Name: French (Luxembourg) +display locale: ID: fr_LU, Name: French (Luxembourg) +format locale: ID: fr_LU, Name: French (Luxembourg) +default charset: ISO-8859-1 + +OS Locale: fr_LU.iso885915@euro +default locale: ID: fr_LU, Name: French (Luxembourg) +display locale: ID: fr_LU, Name: French (Luxembourg) +format locale: ID: fr_LU, Name: French (Luxembourg) +default charset: ISO-8859-15 + +OS Locale: fr_LU.utf8 +default locale: ID: fr_LU, Name: French (Luxembourg) +display locale: ID: fr_LU, Name: French (Luxembourg) +format locale: ID: fr_LU, Name: French (Luxembourg) +default charset: UTF-8 + +OS Locale: fr_LU@euro +default locale: ID: fr_LU, Name: French (Luxembourg) +display locale: ID: fr_LU, Name: French (Luxembourg) +format locale: ID: fr_LU, Name: French (Luxembourg) +default charset: ISO-8859-15 + +OS Locale: français +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-1 + +OS Locale: french +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-1 + +OS Locale: fy_NL +default locale: ID: fy_NL, Name: Frisian (Netherlands) +display locale: ID: fy_NL, Name: Frisian (Netherlands) +format locale: ID: fy_NL, Name: Frisian (Netherlands) +default charset: UTF-8 + +OS Locale: fy_NL.utf8 +default locale: ID: fy_NL, Name: Frisian (Netherlands) +display locale: ID: fy_NL, Name: Frisian (Netherlands) +format locale: ID: fy_NL, Name: Frisian (Netherlands) +default charset: UTF-8 + +OS Locale: ga_IE +default locale: ID: ga_IE, Name: Irish (Ireland) +display locale: ID: ga_IE, Name: Irish (Ireland) +format locale: ID: ga_IE, Name: Irish (Ireland) +default charset: ISO-8859-1 + +OS Locale: ga_IE.iso88591 +default locale: ID: ga_IE, Name: Irish (Ireland) +display locale: ID: ga_IE, Name: Irish (Ireland) +format locale: ID: ga_IE, Name: Irish (Ireland) +default charset: ISO-8859-1 + +OS Locale: ga_IE.iso885915@euro +default locale: ID: ga_IE, Name: Irish (Ireland) +display locale: ID: ga_IE, Name: Irish (Ireland) +format locale: ID: ga_IE, Name: Irish (Ireland) +default charset: ISO-8859-15 + +OS Locale: ga_IE.utf8 +default locale: ID: ga_IE, Name: Irish (Ireland) +display locale: ID: ga_IE, Name: Irish (Ireland) +format locale: ID: ga_IE, Name: Irish (Ireland) +default charset: UTF-8 + +OS Locale: ga_IE@euro +default locale: ID: ga_IE, Name: Irish (Ireland) +display locale: ID: ga_IE, Name: Irish (Ireland) +format locale: ID: ga_IE, Name: Irish (Ireland) +default charset: ISO-8859-15 + +OS Locale: galego +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-1 + +OS Locale: galician +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-1 + +OS Locale: gd_GB +default locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +display locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +format locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +default charset: ISO-8859-15 + +OS Locale: gd_GB.iso885915 +default locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +display locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +format locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +default charset: ISO-8859-15 + +OS Locale: gd_GB.utf8 +default locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +display locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +format locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +default charset: UTF-8 + +OS Locale: german +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-1 + +OS Locale: gez_ER +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: gez_ER.utf8 +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: gez_ER.utf8@abegede +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: gez_ER@abegede +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: gez_ET +default locale: ID: en_ET, Name: English (Ethiopia) +display locale: ID: en_ET, Name: English (Ethiopia) +format locale: ID: en_ET, Name: English (Ethiopia) +default charset: UTF-8 + +OS Locale: gez_ET.utf8 +default locale: ID: en_ET, Name: English (Ethiopia) +display locale: ID: en_ET, Name: English (Ethiopia) +format locale: ID: en_ET, Name: English (Ethiopia) +default charset: UTF-8 + +OS Locale: gez_ET.utf8@abegede +default locale: ID: en_ET, Name: English (Ethiopia) +display locale: ID: en_ET, Name: English (Ethiopia) +format locale: ID: en_ET, Name: English (Ethiopia) +default charset: UTF-8 + +OS Locale: gez_ET@abegede +default locale: ID: en_ET, Name: English (Ethiopia) +display locale: ID: en_ET, Name: English (Ethiopia) +format locale: ID: en_ET, Name: English (Ethiopia) +default charset: UTF-8 + +OS Locale: gl_ES +default locale: ID: gl_ES, Name: Gallegan (Spain) +display locale: ID: gl_ES, Name: Gallegan (Spain) +format locale: ID: gl_ES, Name: Gallegan (Spain) +default charset: ISO-8859-1 + +OS Locale: gl_ES.iso88591 +default locale: ID: gl_ES, Name: Gallegan (Spain) +display locale: ID: gl_ES, Name: Gallegan (Spain) +format locale: ID: gl_ES, Name: Gallegan (Spain) +default charset: ISO-8859-1 + +OS Locale: gl_ES.iso885915@euro +default locale: ID: gl_ES, Name: Gallegan (Spain) +display locale: ID: gl_ES, Name: Gallegan (Spain) +format locale: ID: gl_ES, Name: Gallegan (Spain) +default charset: ISO-8859-15 + +OS Locale: gl_ES.utf8 +default locale: ID: gl_ES, Name: Gallegan (Spain) +display locale: ID: gl_ES, Name: Gallegan (Spain) +format locale: ID: gl_ES, Name: Gallegan (Spain) +default charset: UTF-8 + +OS Locale: gl_ES@euro +default locale: ID: gl_ES, Name: Gallegan (Spain) +display locale: ID: gl_ES, Name: Gallegan (Spain) +format locale: ID: gl_ES, Name: Gallegan (Spain) +default charset: ISO-8859-15 + +OS Locale: greek +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 + +OS Locale: gu_IN +default locale: ID: gu_IN, Name: Gujarati (India) +display locale: ID: gu_IN, Name: Gujarati (India) +format locale: ID: gu_IN, Name: Gujarati (India) +default charset: UTF-8 + +OS Locale: gu_IN.utf8 +default locale: ID: gu_IN, Name: Gujarati (India) +display locale: ID: gu_IN, Name: Gujarati (India) +format locale: ID: gu_IN, Name: Gujarati (India) +default charset: UTF-8 + +OS Locale: gv_GB +default locale: ID: gv_GB, Name: Manx (United Kingdom) +display locale: ID: gv_GB, Name: Manx (United Kingdom) +format locale: ID: gv_GB, Name: Manx (United Kingdom) +default charset: ISO-8859-1 + +OS Locale: gv_GB.iso88591 +default locale: ID: gv_GB, Name: Manx (United Kingdom) +display locale: ID: gv_GB, Name: Manx (United Kingdom) +format locale: ID: gv_GB, Name: Manx (United Kingdom) +default charset: ISO-8859-1 + +OS Locale: gv_GB.utf8 +default locale: ID: gv_GB, Name: Manx (United Kingdom) +display locale: ID: gv_GB, Name: Manx (United Kingdom) +format locale: ID: gv_GB, Name: Manx (United Kingdom) +default charset: UTF-8 + +OS Locale: he_IL +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: ISO-8859-8 + +OS Locale: he_IL.iso88598 +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: ISO-8859-8 + +OS Locale: he_IL.utf8 +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: UTF-8 + +OS Locale: hebrew +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: ISO-8859-8 + +OS Locale: hi_IN +default locale: ID: hi_IN, Name: Hindi (India) +display locale: ID: hi_IN, Name: Hindi (India) +format locale: ID: hi_IN, Name: Hindi (India) +default charset: UTF-8 + +OS Locale: hi_IN.utf8 +default locale: ID: hi_IN, Name: Hindi (India) +display locale: ID: hi_IN, Name: Hindi (India) +format locale: ID: hi_IN, Name: Hindi (India) +default charset: UTF-8 + +OS Locale: hr_HR +default locale: ID: hr_HR, Name: Croatian (Croatia) +display locale: ID: hr_HR, Name: Croatian (Croatia) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: ISO-8859-2 + +OS Locale: hr_HR.iso88592 +default locale: ID: hr_HR, Name: Croatian (Croatia) +display locale: ID: hr_HR, Name: Croatian (Croatia) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: ISO-8859-2 + +OS Locale: hr_HR.utf8 +default locale: ID: hr_HR, Name: Croatian (Croatia) +display locale: ID: hr_HR, Name: Croatian (Croatia) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: UTF-8 + +OS Locale: hrvatski +default locale: ID: hr_HR, Name: Croatian (Croatia) +display locale: ID: hr_HR, Name: Croatian (Croatia) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: ISO-8859-2 + +OS Locale: hsb_DE +default locale: ID: en_DE, Name: English (Germany) +display locale: ID: en_DE, Name: English (Germany) +format locale: ID: en_DE, Name: English (Germany) +default charset: ISO-8859-2 + +OS Locale: hsb_DE.iso88592 +default locale: ID: en_DE, Name: English (Germany) +display locale: ID: en_DE, Name: English (Germany) +format locale: ID: en_DE, Name: English (Germany) +default charset: ISO-8859-2 + +OS Locale: hsb_DE.utf8 +default locale: ID: en_DE, Name: English (Germany) +display locale: ID: en_DE, Name: English (Germany) +format locale: ID: en_DE, Name: English (Germany) +default charset: UTF-8 + +OS Locale: hu_HU +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: ISO-8859-2 + +OS Locale: hu_HU.iso88592 +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: ISO-8859-2 + +OS Locale: hu_HU.utf8 +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: UTF-8 + +OS Locale: hungarian +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: ISO-8859-2 + +OS Locale: hy_AM +default locale: ID: hy_AM, Name: Armenian (Armenia) +display locale: ID: hy_AM, Name: Armenian (Armenia) +format locale: ID: hy_AM, Name: Armenian (Armenia) +default charset: UTF-8 + +OS Locale: hy_AM.armscii8 +default locale: ID: hy_AM, Name: Armenian (Armenia) +display locale: ID: hy_AM, Name: Armenian (Armenia) +format locale: ID: hy_AM, Name: Armenian (Armenia) +default charset: UTF-8 + +OS Locale: hy_AM.utf8 +default locale: ID: hy_AM, Name: Armenian (Armenia) +display locale: ID: hy_AM, Name: Armenian (Armenia) +format locale: ID: hy_AM, Name: Armenian (Armenia) +default charset: UTF-8 + +OS Locale: icelandic +default locale: ID: is_IS, Name: Icelandic (Iceland) +display locale: ID: is_IS, Name: Icelandic (Iceland) +format locale: ID: is_IS, Name: Icelandic (Iceland) +default charset: ISO-8859-1 + +OS Locale: id_ID +default locale: ID: in_ID, Name: Indonesian (Indonesia) +display locale: ID: in_ID, Name: Indonesian (Indonesia) +format locale: ID: in_ID, Name: Indonesian (Indonesia) +default charset: ISO-8859-1 + +OS Locale: id_ID.iso88591 +default locale: ID: in_ID, Name: Indonesian (Indonesia) +display locale: ID: in_ID, Name: Indonesian (Indonesia) +format locale: ID: in_ID, Name: Indonesian (Indonesia) +default charset: ISO-8859-1 + +OS Locale: id_ID.utf8 +default locale: ID: in_ID, Name: Indonesian (Indonesia) +display locale: ID: in_ID, Name: Indonesian (Indonesia) +format locale: ID: in_ID, Name: Indonesian (Indonesia) +default charset: UTF-8 + +OS Locale: is_IS +default locale: ID: is_IS, Name: Icelandic (Iceland) +display locale: ID: is_IS, Name: Icelandic (Iceland) +format locale: ID: is_IS, Name: Icelandic (Iceland) +default charset: ISO-8859-1 + +OS Locale: is_IS.iso88591 +default locale: ID: is_IS, Name: Icelandic (Iceland) +display locale: ID: is_IS, Name: Icelandic (Iceland) +format locale: ID: is_IS, Name: Icelandic (Iceland) +default charset: ISO-8859-1 + +OS Locale: is_IS.utf8 +default locale: ID: is_IS, Name: Icelandic (Iceland) +display locale: ID: is_IS, Name: Icelandic (Iceland) +format locale: ID: is_IS, Name: Icelandic (Iceland) +default charset: UTF-8 + +OS Locale: it_CH +default locale: ID: it_CH, Name: Italian (Switzerland) +display locale: ID: it_CH, Name: Italian (Switzerland) +format locale: ID: it_CH, Name: Italian (Switzerland) +default charset: ISO-8859-1 + +OS Locale: it_CH.iso88591 +default locale: ID: it_CH, Name: Italian (Switzerland) +display locale: ID: it_CH, Name: Italian (Switzerland) +format locale: ID: it_CH, Name: Italian (Switzerland) +default charset: ISO-8859-1 + +OS Locale: it_CH.utf8 +default locale: ID: it_CH, Name: Italian (Switzerland) +display locale: ID: it_CH, Name: Italian (Switzerland) +format locale: ID: it_CH, Name: Italian (Switzerland) +default charset: UTF-8 + +OS Locale: it_IT +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-1 + +OS Locale: it_IT.iso88591 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-1 + +OS Locale: it_IT.iso885915@euro +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-15 + +OS Locale: it_IT.utf8 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: UTF-8 + +OS Locale: it_IT@euro +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-15 + +OS Locale: italian +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-1 + +OS Locale: iw_IL +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: ISO-8859-8 + +OS Locale: iw_IL.iso88598 +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: ISO-8859-8 + +OS Locale: iw_IL.utf8 +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: UTF-8 + +OS Locale: ja_JP +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-euc-jp-linux + +OS Locale: ja_JP.eucjp +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-euc-jp-linux + +OS Locale: ja_JP.ujis +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-euc-jp-linux + +OS Locale: ja_JP.utf8 +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: UTF-8 + +OS Locale: japanese +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-euc-jp-linux + +OS Locale: japanese.euc +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-euc-jp-linux + +OS Locale: ka_GE +default locale: ID: ka_GE, Name: Georgian (Georgia) +display locale: ID: ka_GE, Name: Georgian (Georgia) +format locale: ID: ka_GE, Name: Georgian (Georgia) +default charset: UTF-8 + +OS Locale: ka_GE.georgianps +default locale: ID: ka_GE, Name: Georgian (Georgia) +display locale: ID: ka_GE, Name: Georgian (Georgia) +format locale: ID: ka_GE, Name: Georgian (Georgia) +default charset: UTF-8 + +OS Locale: ka_GE.utf8 +default locale: ID: ka_GE, Name: Georgian (Georgia) +display locale: ID: ka_GE, Name: Georgian (Georgia) +format locale: ID: ka_GE, Name: Georgian (Georgia) +default charset: UTF-8 + +OS Locale: kk_KZ +default locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +display locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +format locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +default charset: UTF-8 + +OS Locale: kk_KZ.pt154 +default locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +display locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +format locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +default charset: UTF-8 + +OS Locale: kk_KZ.utf8 +default locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +display locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +format locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +default charset: UTF-8 + +OS Locale: kl_GL +default locale: ID: kl_GL, Name: Greenlandic (Greenland) +display locale: ID: kl_GL, Name: Greenlandic (Greenland) +format locale: ID: kl_GL, Name: Greenlandic (Greenland) +default charset: ISO-8859-1 + +OS Locale: kl_GL.iso88591 +default locale: ID: kl_GL, Name: Greenlandic (Greenland) +display locale: ID: kl_GL, Name: Greenlandic (Greenland) +format locale: ID: kl_GL, Name: Greenlandic (Greenland) +default charset: ISO-8859-1 + +OS Locale: kl_GL.utf8 +default locale: ID: kl_GL, Name: Greenlandic (Greenland) +display locale: ID: kl_GL, Name: Greenlandic (Greenland) +format locale: ID: kl_GL, Name: Greenlandic (Greenland) +default charset: UTF-8 + +OS Locale: km_KH +default locale: ID: km_KH, Name: Khmer (Cambodia) +display locale: ID: km_KH, Name: Khmer (Cambodia) +format locale: ID: km_KH, Name: Khmer (Cambodia) +default charset: UTF-8 + +OS Locale: km_KH.utf8 +default locale: ID: km_KH, Name: Khmer (Cambodia) +display locale: ID: km_KH, Name: Khmer (Cambodia) +format locale: ID: km_KH, Name: Khmer (Cambodia) +default charset: UTF-8 + +OS Locale: kn_IN +default locale: ID: kn_IN, Name: Kannada (India) +display locale: ID: kn_IN, Name: Kannada (India) +format locale: ID: kn_IN, Name: Kannada (India) +default charset: UTF-8 + +OS Locale: kn_IN.utf8 +default locale: ID: kn_IN, Name: Kannada (India) +display locale: ID: kn_IN, Name: Kannada (India) +format locale: ID: kn_IN, Name: Kannada (India) +default charset: UTF-8 + +OS Locale: ko_KR +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: EUC-KR + +OS Locale: ko_KR.euckr +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: EUC-KR + +OS Locale: ko_KR.utf8 +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: UTF-8 + +OS Locale: korean +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: EUC-KR + +OS Locale: korean.euc +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: EUC-KR + +OS Locale: ku_TR +default locale: ID: ku_TR, Name: Kurdish (Turkey) +display locale: ID: ku_TR, Name: Kurdish (Turkey) +format locale: ID: ku_TR, Name: Kurdish (Turkey) +default charset: ISO-8859-9 + +OS Locale: ku_TR.iso88599 +default locale: ID: ku_TR, Name: Kurdish (Turkey) +display locale: ID: ku_TR, Name: Kurdish (Turkey) +format locale: ID: ku_TR, Name: Kurdish (Turkey) +default charset: ISO-8859-9 + +OS Locale: ku_TR.utf8 +default locale: ID: ku_TR, Name: Kurdish (Turkey) +display locale: ID: ku_TR, Name: Kurdish (Turkey) +format locale: ID: ku_TR, Name: Kurdish (Turkey) +default charset: UTF-8 + +OS Locale: kw_GB +default locale: ID: kw_GB, Name: Cornish (United Kingdom) +display locale: ID: kw_GB, Name: Cornish (United Kingdom) +format locale: ID: kw_GB, Name: Cornish (United Kingdom) +default charset: ISO-8859-1 + +OS Locale: kw_GB.iso88591 +default locale: ID: kw_GB, Name: Cornish (United Kingdom) +display locale: ID: kw_GB, Name: Cornish (United Kingdom) +format locale: ID: kw_GB, Name: Cornish (United Kingdom) +default charset: ISO-8859-1 + +OS Locale: kw_GB.utf8 +default locale: ID: kw_GB, Name: Cornish (United Kingdom) +display locale: ID: kw_GB, Name: Cornish (United Kingdom) +format locale: ID: kw_GB, Name: Cornish (United Kingdom) +default charset: UTF-8 + +OS Locale: ky_KG +default locale: ID: ky_KG, Name: Kirghiz (Kyrgyzstan) +display locale: ID: ky_KG, Name: Kirghiz (Kyrgyzstan) +format locale: ID: ky_KG, Name: Kirghiz (Kyrgyzstan) +default charset: UTF-8 + +OS Locale: ky_KG.utf8 +default locale: ID: ky_KG, Name: Kirghiz (Kyrgyzstan) +display locale: ID: ky_KG, Name: Kirghiz (Kyrgyzstan) +format locale: ID: ky_KG, Name: Kirghiz (Kyrgyzstan) +default charset: UTF-8 + +OS Locale: lg_UG +default locale: ID: lg_UG, Name: Ganda (Uganda) +display locale: ID: lg_UG, Name: Ganda (Uganda) +format locale: ID: lg_UG, Name: Ganda (Uganda) +default charset: UTF-8 + +OS Locale: lg_UG.iso885910 +default locale: ID: lg_UG, Name: Ganda (Uganda) +display locale: ID: lg_UG, Name: Ganda (Uganda) +format locale: ID: lg_UG, Name: Ganda (Uganda) +default charset: UTF-8 + +OS Locale: lg_UG.utf8 +default locale: ID: lg_UG, Name: Ganda (Uganda) +display locale: ID: lg_UG, Name: Ganda (Uganda) +format locale: ID: lg_UG, Name: Ganda (Uganda) +default charset: UTF-8 + +OS Locale: lithuanian +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-13 + +OS Locale: lo_LA +default locale: ID: lo_LA, Name: Lao (Laos) +display locale: ID: lo_LA, Name: Lao (Laos) +format locale: ID: lo_LA, Name: Lao (Laos) +default charset: UTF-8 + +OS Locale: lo_LA.utf8 +default locale: ID: lo_LA, Name: Lao (Laos) +display locale: ID: lo_LA, Name: Lao (Laos) +format locale: ID: lo_LA, Name: Lao (Laos) +default charset: UTF-8 + +OS Locale: lt_LT +default locale: ID: lt_LT, Name: Lithuanian (Lithuania) +display locale: ID: lt_LT, Name: Lithuanian (Lithuania) +format locale: ID: lt_LT, Name: Lithuanian (Lithuania) +default charset: ISO-8859-13 + +OS Locale: lt_LT.iso885913 +default locale: ID: lt_LT, Name: Lithuanian (Lithuania) +display locale: ID: lt_LT, Name: Lithuanian (Lithuania) +format locale: ID: lt_LT, Name: Lithuanian (Lithuania) +default charset: ISO-8859-13 + +OS Locale: lt_LT.utf8 +default locale: ID: lt_LT, Name: Lithuanian (Lithuania) +display locale: ID: lt_LT, Name: Lithuanian (Lithuania) +format locale: ID: lt_LT, Name: Lithuanian (Lithuania) +default charset: UTF-8 + +OS Locale: lv_LV +default locale: ID: lv_LV, Name: Latvian (Latvia) +display locale: ID: lv_LV, Name: Latvian (Latvia) +format locale: ID: lv_LV, Name: Latvian (Latvia) +default charset: ISO-8859-13 + +OS Locale: lv_LV.iso885913 +default locale: ID: lv_LV, Name: Latvian (Latvia) +display locale: ID: lv_LV, Name: Latvian (Latvia) +format locale: ID: lv_LV, Name: Latvian (Latvia) +default charset: ISO-8859-13 + +OS Locale: lv_LV.utf8 +default locale: ID: lv_LV, Name: Latvian (Latvia) +display locale: ID: lv_LV, Name: Latvian (Latvia) +format locale: ID: lv_LV, Name: Latvian (Latvia) +default charset: UTF-8 + +OS Locale: mai_IN +default locale: ID: en_IN, Name: English (India) +display locale: ID: en_IN, Name: English (India) +format locale: ID: en_IN, Name: English (India) +default charset: UTF-8 + +OS Locale: mai_IN.utf8 +default locale: ID: en_IN, Name: English (India) +display locale: ID: en_IN, Name: English (India) +format locale: ID: en_IN, Name: English (India) +default charset: UTF-8 + +OS Locale: mg_MG +default locale: ID: mg_MG, Name: Malagasy (Madagascar) +display locale: ID: mg_MG, Name: Malagasy (Madagascar) +format locale: ID: mg_MG, Name: Malagasy (Madagascar) +default charset: ISO-8859-15 + +OS Locale: mg_MG.iso885915 +default locale: ID: mg_MG, Name: Malagasy (Madagascar) +display locale: ID: mg_MG, Name: Malagasy (Madagascar) +format locale: ID: mg_MG, Name: Malagasy (Madagascar) +default charset: ISO-8859-15 + +OS Locale: mg_MG.utf8 +default locale: ID: mg_MG, Name: Malagasy (Madagascar) +display locale: ID: mg_MG, Name: Malagasy (Madagascar) +format locale: ID: mg_MG, Name: Malagasy (Madagascar) +default charset: UTF-8 + +OS Locale: mi_NZ +default locale: ID: mi_NZ, Name: Maori (New Zealand) +display locale: ID: mi_NZ, Name: Maori (New Zealand) +format locale: ID: mi_NZ, Name: Maori (New Zealand) +default charset: ISO-8859-13 + +OS Locale: mi_NZ.iso885913 +default locale: ID: mi_NZ, Name: Maori (New Zealand) +display locale: ID: mi_NZ, Name: Maori (New Zealand) +format locale: ID: mi_NZ, Name: Maori (New Zealand) +default charset: ISO-8859-13 + +OS Locale: mi_NZ.utf8 +default locale: ID: mi_NZ, Name: Maori (New Zealand) +display locale: ID: mi_NZ, Name: Maori (New Zealand) +format locale: ID: mi_NZ, Name: Maori (New Zealand) +default charset: UTF-8 + +OS Locale: mk_MK +default locale: ID: mk_MK, Name: Macedonian (Macedonia) +display locale: ID: mk_MK, Name: Macedonian (Macedonia) +format locale: ID: mk_MK, Name: Macedonian (Macedonia) +default charset: ISO-8859-5 + +OS Locale: mk_MK.iso88595 +default locale: ID: mk_MK, Name: Macedonian (Macedonia) +display locale: ID: mk_MK, Name: Macedonian (Macedonia) +format locale: ID: mk_MK, Name: Macedonian (Macedonia) +default charset: ISO-8859-5 + +OS Locale: mk_MK.utf8 +default locale: ID: mk_MK, Name: Macedonian (Macedonia) +display locale: ID: mk_MK, Name: Macedonian (Macedonia) +format locale: ID: mk_MK, Name: Macedonian (Macedonia) +default charset: UTF-8 + +OS Locale: ml_IN +default locale: ID: ml_IN, Name: Malayalam (India) +display locale: ID: ml_IN, Name: Malayalam (India) +format locale: ID: ml_IN, Name: Malayalam (India) +default charset: UTF-8 + +OS Locale: ml_IN.utf8 +default locale: ID: ml_IN, Name: Malayalam (India) +display locale: ID: ml_IN, Name: Malayalam (India) +format locale: ID: ml_IN, Name: Malayalam (India) +default charset: UTF-8 + +OS Locale: mn_MN +default locale: ID: mn_MN, Name: Mongolian (Mongolia) +display locale: ID: mn_MN, Name: Mongolian (Mongolia) +format locale: ID: mn_MN, Name: Mongolian (Mongolia) +default charset: UTF-8 + +OS Locale: mn_MN.utf8 +default locale: ID: mn_MN, Name: Mongolian (Mongolia) +display locale: ID: mn_MN, Name: Mongolian (Mongolia) +format locale: ID: mn_MN, Name: Mongolian (Mongolia) +default charset: UTF-8 + +OS Locale: mr_IN +default locale: ID: mr_IN, Name: Marathi (India) +display locale: ID: mr_IN, Name: Marathi (India) +format locale: ID: mr_IN, Name: Marathi (India) +default charset: UTF-8 + +OS Locale: mr_IN.utf8 +default locale: ID: mr_IN, Name: Marathi (India) +display locale: ID: mr_IN, Name: Marathi (India) +format locale: ID: mr_IN, Name: Marathi (India) +default charset: UTF-8 + +OS Locale: ms_MY +default locale: ID: ms_MY, Name: Malay (Malaysia) +display locale: ID: ms_MY, Name: Malay (Malaysia) +format locale: ID: ms_MY, Name: Malay (Malaysia) +default charset: ISO-8859-1 + +OS Locale: ms_MY.iso88591 +default locale: ID: ms_MY, Name: Malay (Malaysia) +display locale: ID: ms_MY, Name: Malay (Malaysia) +format locale: ID: ms_MY, Name: Malay (Malaysia) +default charset: ISO-8859-1 + +OS Locale: ms_MY.utf8 +default locale: ID: ms_MY, Name: Malay (Malaysia) +display locale: ID: ms_MY, Name: Malay (Malaysia) +format locale: ID: ms_MY, Name: Malay (Malaysia) +default charset: UTF-8 + +OS Locale: mt_MT +default locale: ID: mt_MT, Name: Maltese (Malta) +display locale: ID: mt_MT, Name: Maltese (Malta) +format locale: ID: mt_MT, Name: Maltese (Malta) +default charset: ISO-8859-3 + +OS Locale: mt_MT.iso88593 +default locale: ID: mt_MT, Name: Maltese (Malta) +display locale: ID: mt_MT, Name: Maltese (Malta) +format locale: ID: mt_MT, Name: Maltese (Malta) +default charset: ISO-8859-3 + +OS Locale: mt_MT.utf8 +default locale: ID: mt_MT, Name: Maltese (Malta) +display locale: ID: mt_MT, Name: Maltese (Malta) +format locale: ID: mt_MT, Name: Maltese (Malta) +default charset: UTF-8 + +OS Locale: nb_NO +default locale: ID: nb_NO, Name: Norwegian Bokmål (Norway) +display locale: ID: nb_NO, Name: Norwegian Bokmål (Norway) +format locale: ID: nb_NO, Name: Norwegian Bokmål (Norway) +default charset: ISO-8859-1 + +OS Locale: nb_NO.iso88591 +default locale: ID: nb_NO, Name: Norwegian Bokmål (Norway) +display locale: ID: nb_NO, Name: Norwegian Bokmål (Norway) +format locale: ID: nb_NO, Name: Norwegian Bokmål (Norway) +default charset: ISO-8859-1 + +OS Locale: nb_NO.utf8 +default locale: ID: nb_NO, Name: Norwegian BokmÃ¥l (Norway) +display locale: ID: nb_NO, Name: Norwegian BokmÃ¥l (Norway) +format locale: ID: nb_NO, Name: Norwegian BokmÃ¥l (Norway) +default charset: UTF-8 + +OS Locale: ne_NP +default locale: ID: ne_NP, Name: Nepali (Nepal) +display locale: ID: ne_NP, Name: Nepali (Nepal) +format locale: ID: ne_NP, Name: Nepali (Nepal) +default charset: UTF-8 + +OS Locale: ne_NP.utf8 +default locale: ID: ne_NP, Name: Nepali (Nepal) +display locale: ID: ne_NP, Name: Nepali (Nepal) +format locale: ID: ne_NP, Name: Nepali (Nepal) +default charset: UTF-8 + +OS Locale: nl_BE +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-1 + +OS Locale: nl_BE.iso88591 +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-1 + +OS Locale: nl_BE.iso885915@euro +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-15 + +OS Locale: nl_BE.utf8 +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: UTF-8 + +OS Locale: nl_BE@euro +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-15 + +OS Locale: nl_NL +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-1 + +OS Locale: nl_NL.iso88591 +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-1 + +OS Locale: nl_NL.iso885915@euro +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-15 + +OS Locale: nl_NL.utf8 +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: UTF-8 + +OS Locale: nl_NL@euro +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-15 + +OS Locale: nn_NO +default locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +display locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +format locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +default charset: ISO-8859-1 + +OS Locale: nn_NO.iso88591 +default locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +display locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +format locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +default charset: ISO-8859-1 + +OS Locale: nn_NO.utf8 +default locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +display locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +format locale: ID: nn_NO, Name: Norwegian Nynorsk (Norway) +default charset: UTF-8 + +OS Locale: no_NO +default locale: ID: no_NO, Name: Norwegian (Norway) +display locale: ID: no_NO, Name: Norwegian (Norway) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: ISO-8859-1 + +OS Locale: no_NO.iso88591 +default locale: ID: no_NO, Name: Norwegian (Norway) +display locale: ID: no_NO, Name: Norwegian (Norway) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: ISO-8859-1 + +OS Locale: no_NO.utf8 +default locale: ID: no_NO, Name: Norwegian (Norway) +display locale: ID: no_NO, Name: Norwegian (Norway) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: UTF-8 + +OS Locale: norwegian +default locale: ID: no_NO, Name: Norwegian (Norway) +display locale: ID: no_NO, Name: Norwegian (Norway) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: ISO-8859-1 + +OS Locale: nr_ZA +default locale: ID: nr_ZA, Name: South Ndebele (South Africa) +display locale: ID: nr_ZA, Name: South Ndebele (South Africa) +format locale: ID: nr_ZA, Name: South Ndebele (South Africa) +default charset: UTF-8 + +OS Locale: nr_ZA.utf8 +default locale: ID: nr_ZA, Name: South Ndebele (South Africa) +display locale: ID: nr_ZA, Name: South Ndebele (South Africa) +format locale: ID: nr_ZA, Name: South Ndebele (South Africa) +default charset: UTF-8 + +OS Locale: nso_ZA +default locale: ID: en_ZA, Name: English (South Africa) +display locale: ID: en_ZA, Name: English (South Africa) +format locale: ID: en_ZA, Name: English (South Africa) +default charset: UTF-8 + +OS Locale: nso_ZA.utf8 +default locale: ID: en_ZA, Name: English (South Africa) +display locale: ID: en_ZA, Name: English (South Africa) +format locale: ID: en_ZA, Name: English (South Africa) +default charset: UTF-8 + +OS Locale: nynorsk +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: ISO-8859-1 + +OS Locale: oc_FR +default locale: ID: oc_FR, Name: Occitan (France) +display locale: ID: oc_FR, Name: Occitan (France) +format locale: ID: oc_FR, Name: Occitan (France) +default charset: ISO-8859-1 + +OS Locale: oc_FR.iso88591 +default locale: ID: oc_FR, Name: Occitan (France) +display locale: ID: oc_FR, Name: Occitan (France) +format locale: ID: oc_FR, Name: Occitan (France) +default charset: ISO-8859-1 + +OS Locale: oc_FR.utf8 +default locale: ID: oc_FR, Name: Occitan (France) +display locale: ID: oc_FR, Name: Occitan (France) +format locale: ID: oc_FR, Name: Occitan (France) +default charset: UTF-8 + +OS Locale: om_ET +default locale: ID: om_ET, Name: Oromo (Ethiopia) +display locale: ID: om_ET, Name: Oromo (Ethiopia) +format locale: ID: om_ET, Name: Oromo (Ethiopia) +default charset: UTF-8 + +OS Locale: om_ET.utf8 +default locale: ID: om_ET, Name: Oromo (Ethiopia) +display locale: ID: om_ET, Name: Oromo (Ethiopia) +format locale: ID: om_ET, Name: Oromo (Ethiopia) +default charset: UTF-8 + +OS Locale: om_KE +default locale: ID: om_KE, Name: Oromo (Kenya) +display locale: ID: om_KE, Name: Oromo (Kenya) +format locale: ID: om_KE, Name: Oromo (Kenya) +default charset: ISO-8859-1 + +OS Locale: om_KE.iso88591 +default locale: ID: om_KE, Name: Oromo (Kenya) +display locale: ID: om_KE, Name: Oromo (Kenya) +format locale: ID: om_KE, Name: Oromo (Kenya) +default charset: ISO-8859-1 + +OS Locale: om_KE.utf8 +default locale: ID: om_KE, Name: Oromo (Kenya) +display locale: ID: om_KE, Name: Oromo (Kenya) +format locale: ID: om_KE, Name: Oromo (Kenya) +default charset: UTF-8 + +OS Locale: or_IN +default locale: ID: or_IN, Name: Oriya (India) +display locale: ID: or_IN, Name: Oriya (India) +format locale: ID: or_IN, Name: Oriya (India) +default charset: UTF-8 + +OS Locale: or_IN.utf8 +default locale: ID: or_IN, Name: Oriya (India) +display locale: ID: or_IN, Name: Oriya (India) +format locale: ID: or_IN, Name: Oriya (India) +default charset: UTF-8 + +OS Locale: pa_IN +default locale: ID: pa_IN, Name: Panjabi (India) +display locale: ID: pa_IN, Name: Panjabi (India) +format locale: ID: pa_IN, Name: Panjabi (India) +default charset: UTF-8 + +OS Locale: pa_IN.utf8 +default locale: ID: pa_IN, Name: Panjabi (India) +display locale: ID: pa_IN, Name: Panjabi (India) +format locale: ID: pa_IN, Name: Panjabi (India) +default charset: UTF-8 + +OS Locale: pa_PK +default locale: ID: pa_PK, Name: Panjabi (Pakistan) +display locale: ID: pa_PK, Name: Panjabi (Pakistan) +format locale: ID: pa_PK, Name: Panjabi (Pakistan) +default charset: UTF-8 + +OS Locale: pa_PK.utf8 +default locale: ID: pa_PK, Name: Panjabi (Pakistan) +display locale: ID: pa_PK, Name: Panjabi (Pakistan) +format locale: ID: pa_PK, Name: Panjabi (Pakistan) +default charset: UTF-8 + +OS Locale: pl_PL +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: ISO-8859-2 + +OS Locale: pl_PL.iso88592 +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: ISO-8859-2 + +OS Locale: pl_PL.utf8 +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: UTF-8 + +OS Locale: polish +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: ISO-8859-2 + +OS Locale: portuguese +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-1 + +OS Locale: pt_BR +default locale: ID: pt_BR, Name: Portuguese (Brazil) +display locale: ID: pt_BR, Name: Portuguese (Brazil) +format locale: ID: pt_BR, Name: Portuguese (Brazil) +default charset: ISO-8859-1 + +OS Locale: pt_BR.iso88591 +default locale: ID: pt_BR, Name: Portuguese (Brazil) +display locale: ID: pt_BR, Name: Portuguese (Brazil) +format locale: ID: pt_BR, Name: Portuguese (Brazil) +default charset: ISO-8859-1 + +OS Locale: pt_BR.utf8 +default locale: ID: pt_BR, Name: Portuguese (Brazil) +display locale: ID: pt_BR, Name: Portuguese (Brazil) +format locale: ID: pt_BR, Name: Portuguese (Brazil) +default charset: UTF-8 + +OS Locale: pt_PT +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-1 + +OS Locale: pt_PT.iso88591 +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-1 + +OS Locale: pt_PT.iso885915@euro +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-15 + +OS Locale: pt_PT.utf8 +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: UTF-8 + +OS Locale: pt_PT@euro +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-15 + +OS Locale: ro_RO +default locale: ID: ro_RO, Name: Romanian (Romania) +display locale: ID: ro_RO, Name: Romanian (Romania) +format locale: ID: ro_RO, Name: Romanian (Romania) +default charset: ISO-8859-2 + +OS Locale: ro_RO.iso88592 +default locale: ID: ro_RO, Name: Romanian (Romania) +display locale: ID: ro_RO, Name: Romanian (Romania) +format locale: ID: ro_RO, Name: Romanian (Romania) +default charset: ISO-8859-2 + +OS Locale: ro_RO.utf8 +default locale: ID: ro_RO, Name: Romanian (Romania) +display locale: ID: ro_RO, Name: Romanian (Romania) +format locale: ID: ro_RO, Name: Romanian (Romania) +default charset: UTF-8 + +OS Locale: romanian +default locale: ID: ro_RO, Name: Romanian (Romania) +display locale: ID: ro_RO, Name: Romanian (Romania) +format locale: ID: ro_RO, Name: Romanian (Romania) +default charset: ISO-8859-2 + +OS Locale: ru_RU +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: ISO-8859-5 + +OS Locale: ru_RU.iso88595 +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: ISO-8859-5 + +OS Locale: ru_RU.koi8r +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: KOI8-R + +OS Locale: ru_RU.utf8 +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: UTF-8 + +OS Locale: ru_UA +default locale: ID: ru_UA, Name: Russian (Ukraine) +display locale: ID: ru_UA, Name: Russian (Ukraine) +format locale: ID: ru_UA, Name: Russian (Ukraine) +default charset: KOI8-U + +OS Locale: ru_UA.koi8u +default locale: ID: ru_UA, Name: Russian (Ukraine) +display locale: ID: ru_UA, Name: Russian (Ukraine) +format locale: ID: ru_UA, Name: Russian (Ukraine) +default charset: KOI8-U + +OS Locale: ru_UA.utf8 +default locale: ID: ru_UA, Name: Russian (Ukraine) +display locale: ID: ru_UA, Name: Russian (Ukraine) +format locale: ID: ru_UA, Name: Russian (Ukraine) +default charset: UTF-8 + +OS Locale: russian +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: ISO-8859-5 + +OS Locale: rw_RW +default locale: ID: rw_RW, Name: Kinyarwanda (Rwanda) +display locale: ID: rw_RW, Name: Kinyarwanda (Rwanda) +format locale: ID: rw_RW, Name: Kinyarwanda (Rwanda) +default charset: UTF-8 + +OS Locale: rw_RW.utf8 +default locale: ID: rw_RW, Name: Kinyarwanda (Rwanda) +display locale: ID: rw_RW, Name: Kinyarwanda (Rwanda) +format locale: ID: rw_RW, Name: Kinyarwanda (Rwanda) +default charset: UTF-8 + +OS Locale: se_NO +default locale: ID: se_NO, Name: Northern Sami (Norway) +display locale: ID: se_NO, Name: Northern Sami (Norway) +format locale: ID: se_NO, Name: Northern Sami (Norway) +default charset: UTF-8 + +OS Locale: se_NO.utf8 +default locale: ID: se_NO, Name: Northern Sami (Norway) +display locale: ID: se_NO, Name: Northern Sami (Norway) +format locale: ID: se_NO, Name: Northern Sami (Norway) +default charset: UTF-8 + +OS Locale: si_LK +default locale: ID: si_LK, Name: Sinhalese (Sri Lanka) +display locale: ID: si_LK, Name: Sinhalese (Sri Lanka) +format locale: ID: si_LK, Name: Sinhalese (Sri Lanka) +default charset: UTF-8 + +OS Locale: si_LK.utf8 +default locale: ID: si_LK, Name: Sinhalese (Sri Lanka) +display locale: ID: si_LK, Name: Sinhalese (Sri Lanka) +format locale: ID: si_LK, Name: Sinhalese (Sri Lanka) +default charset: UTF-8 + +OS Locale: sid_ET +default locale: ID: en_ET, Name: English (Ethiopia) +display locale: ID: en_ET, Name: English (Ethiopia) +format locale: ID: en_ET, Name: English (Ethiopia) +default charset: UTF-8 + +OS Locale: sid_ET.utf8 +default locale: ID: en_ET, Name: English (Ethiopia) +display locale: ID: en_ET, Name: English (Ethiopia) +format locale: ID: en_ET, Name: English (Ethiopia) +default charset: UTF-8 + +OS Locale: sk_SK +default locale: ID: sk_SK, Name: Slovak (Slovakia) +display locale: ID: sk_SK, Name: Slovak (Slovakia) +format locale: ID: sk_SK, Name: Slovak (Slovakia) +default charset: ISO-8859-2 + +OS Locale: sk_SK.iso88592 +default locale: ID: sk_SK, Name: Slovak (Slovakia) +display locale: ID: sk_SK, Name: Slovak (Slovakia) +format locale: ID: sk_SK, Name: Slovak (Slovakia) +default charset: ISO-8859-2 + +OS Locale: sk_SK.utf8 +default locale: ID: sk_SK, Name: Slovak (Slovakia) +display locale: ID: sk_SK, Name: Slovak (Slovakia) +format locale: ID: sk_SK, Name: Slovak (Slovakia) +default charset: UTF-8 + +OS Locale: sl_SI +default locale: ID: sl_SI, Name: Slovenian (Slovenia) +display locale: ID: sl_SI, Name: Slovenian (Slovenia) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: ISO-8859-2 + +OS Locale: sl_SI.iso88592 +default locale: ID: sl_SI, Name: Slovenian (Slovenia) +display locale: ID: sl_SI, Name: Slovenian (Slovenia) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: ISO-8859-2 + +OS Locale: sl_SI.utf8 +default locale: ID: sl_SI, Name: Slovenian (Slovenia) +display locale: ID: sl_SI, Name: Slovenian (Slovenia) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: UTF-8 + +OS Locale: slovak +default locale: ID: sk_SK, Name: Slovak (Slovakia) +display locale: ID: sk_SK, Name: Slovak (Slovakia) +format locale: ID: sk_SK, Name: Slovak (Slovakia) +default charset: ISO-8859-2 + +OS Locale: slovene +default locale: ID: sl_SI, Name: Slovenian (Slovenia) +display locale: ID: sl_SI, Name: Slovenian (Slovenia) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: ISO-8859-2 + +OS Locale: slovenian +default locale: ID: sl_SI, Name: Slovenian (Slovenia) +display locale: ID: sl_SI, Name: Slovenian (Slovenia) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: ISO-8859-2 + +OS Locale: so_DJ +default locale: ID: so_DJ, Name: Somali (Djibouti) +display locale: ID: so_DJ, Name: Somali (Djibouti) +format locale: ID: so_DJ, Name: Somali (Djibouti) +default charset: ISO-8859-1 + +OS Locale: so_DJ.iso88591 +default locale: ID: so_DJ, Name: Somali (Djibouti) +display locale: ID: so_DJ, Name: Somali (Djibouti) +format locale: ID: so_DJ, Name: Somali (Djibouti) +default charset: ISO-8859-1 + +OS Locale: so_DJ.utf8 +default locale: ID: so_DJ, Name: Somali (Djibouti) +display locale: ID: so_DJ, Name: Somali (Djibouti) +format locale: ID: so_DJ, Name: Somali (Djibouti) +default charset: UTF-8 + +OS Locale: so_ET +default locale: ID: so_ET, Name: Somali (Ethiopia) +display locale: ID: so_ET, Name: Somali (Ethiopia) +format locale: ID: so_ET, Name: Somali (Ethiopia) +default charset: UTF-8 + +OS Locale: so_ET.utf8 +default locale: ID: so_ET, Name: Somali (Ethiopia) +display locale: ID: so_ET, Name: Somali (Ethiopia) +format locale: ID: so_ET, Name: Somali (Ethiopia) +default charset: UTF-8 + +OS Locale: so_KE +default locale: ID: so_KE, Name: Somali (Kenya) +display locale: ID: so_KE, Name: Somali (Kenya) +format locale: ID: so_KE, Name: Somali (Kenya) +default charset: ISO-8859-1 + +OS Locale: so_KE.iso88591 +default locale: ID: so_KE, Name: Somali (Kenya) +display locale: ID: so_KE, Name: Somali (Kenya) +format locale: ID: so_KE, Name: Somali (Kenya) +default charset: ISO-8859-1 + +OS Locale: so_KE.utf8 +default locale: ID: so_KE, Name: Somali (Kenya) +display locale: ID: so_KE, Name: Somali (Kenya) +format locale: ID: so_KE, Name: Somali (Kenya) +default charset: UTF-8 + +OS Locale: so_SO +default locale: ID: so_SO, Name: Somali (Somalia) +display locale: ID: so_SO, Name: Somali (Somalia) +format locale: ID: so_SO, Name: Somali (Somalia) +default charset: ISO-8859-1 + +OS Locale: so_SO.iso88591 +default locale: ID: so_SO, Name: Somali (Somalia) +display locale: ID: so_SO, Name: Somali (Somalia) +format locale: ID: so_SO, Name: Somali (Somalia) +default charset: ISO-8859-1 + +OS Locale: so_SO.utf8 +default locale: ID: so_SO, Name: Somali (Somalia) +display locale: ID: so_SO, Name: Somali (Somalia) +format locale: ID: so_SO, Name: Somali (Somalia) +default charset: UTF-8 + +OS Locale: spanish +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-1 + +OS Locale: sq_AL +default locale: ID: sq_AL, Name: Albanian (Albania) +display locale: ID: sq_AL, Name: Albanian (Albania) +format locale: ID: sq_AL, Name: Albanian (Albania) +default charset: ISO-8859-1 + +OS Locale: sq_AL.iso88591 +default locale: ID: sq_AL, Name: Albanian (Albania) +display locale: ID: sq_AL, Name: Albanian (Albania) +format locale: ID: sq_AL, Name: Albanian (Albania) +default charset: ISO-8859-1 + +OS Locale: sq_AL.utf8 +default locale: ID: sq_AL, Name: Albanian (Albania) +display locale: ID: sq_AL, Name: Albanian (Albania) +format locale: ID: sq_AL, Name: Albanian (Albania) +default charset: UTF-8 + +OS Locale: sr_CS +default locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +display locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +format locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +default charset: ISO-8859-5 + +OS Locale: sr_CS.iso88595 +default locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +display locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +format locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +default charset: ISO-8859-5 + +OS Locale: sr_CS.utf8 +default locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +display locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +format locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +default charset: UTF-8 + +OS Locale: sr_ME +default locale: ID: sr, Name: Serbian +display locale: ID: sr, Name: Serbian +format locale: ID: sr, Name: Serbian +default charset: UTF-8 + +OS Locale: sr_ME.utf8 +default locale: ID: sr, Name: Serbian +display locale: ID: sr, Name: Serbian +format locale: ID: sr, Name: Serbian +default charset: UTF-8 + +OS Locale: sr_RS +default locale: ID: sr, Name: Serbian +display locale: ID: sr, Name: Serbian +format locale: ID: sr, Name: Serbian +default charset: UTF-8 + +OS Locale: sr_RS.utf8 +default locale: ID: sr, Name: Serbian +display locale: ID: sr, Name: Serbian +format locale: ID: sr, Name: Serbian +default charset: UTF-8 + +OS Locale: sr_RS.utf8@latin +default locale: ID: sr, Name: Serbian +display locale: ID: sr, Name: Serbian +format locale: ID: sr, Name: Serbian +default charset: UTF-8 + +OS Locale: sr_RS@latin +default locale: ID: sr, Name: Serbian +display locale: ID: sr, Name: Serbian +format locale: ID: sr, Name: Serbian +default charset: UTF-8 + +OS Locale: ss_ZA +default locale: ID: ss_ZA, Name: Swati (South Africa) +display locale: ID: ss_ZA, Name: Swati (South Africa) +format locale: ID: ss_ZA, Name: Swati (South Africa) +default charset: UTF-8 + +OS Locale: ss_ZA.utf8 +default locale: ID: ss_ZA, Name: Swati (South Africa) +display locale: ID: ss_ZA, Name: Swati (South Africa) +format locale: ID: ss_ZA, Name: Swati (South Africa) +default charset: UTF-8 + +OS Locale: st_ZA +default locale: ID: st_ZA, Name: Southern Sotho (South Africa) +display locale: ID: st_ZA, Name: Southern Sotho (South Africa) +format locale: ID: st_ZA, Name: Southern Sotho (South Africa) +default charset: ISO-8859-1 + +OS Locale: st_ZA.iso88591 +default locale: ID: st_ZA, Name: Southern Sotho (South Africa) +display locale: ID: st_ZA, Name: Southern Sotho (South Africa) +format locale: ID: st_ZA, Name: Southern Sotho (South Africa) +default charset: ISO-8859-1 + +OS Locale: st_ZA.utf8 +default locale: ID: st_ZA, Name: Southern Sotho (South Africa) +display locale: ID: st_ZA, Name: Southern Sotho (South Africa) +format locale: ID: st_ZA, Name: Southern Sotho (South Africa) +default charset: UTF-8 + +OS Locale: sv_FI +default locale: ID: sv_FI, Name: Swedish (Finland) +display locale: ID: sv_FI, Name: Swedish (Finland) +format locale: ID: sv_FI, Name: Swedish (Finland) +default charset: ISO-8859-1 + +OS Locale: sv_FI.iso88591 +default locale: ID: sv_FI, Name: Swedish (Finland) +display locale: ID: sv_FI, Name: Swedish (Finland) +format locale: ID: sv_FI, Name: Swedish (Finland) +default charset: ISO-8859-1 + +OS Locale: sv_FI.iso885915@euro +default locale: ID: sv_FI, Name: Swedish (Finland) +display locale: ID: sv_FI, Name: Swedish (Finland) +format locale: ID: sv_FI, Name: Swedish (Finland) +default charset: ISO-8859-15 + +OS Locale: sv_FI.utf8 +default locale: ID: sv_FI, Name: Swedish (Finland) +display locale: ID: sv_FI, Name: Swedish (Finland) +format locale: ID: sv_FI, Name: Swedish (Finland) +default charset: UTF-8 + +OS Locale: sv_FI@euro +default locale: ID: sv_FI, Name: Swedish (Finland) +display locale: ID: sv_FI, Name: Swedish (Finland) +format locale: ID: sv_FI, Name: Swedish (Finland) +default charset: ISO-8859-15 + +OS Locale: sv_SE +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-1 + +OS Locale: sv_SE.iso88591 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-1 + +OS Locale: sv_SE.iso885915 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-15 + +OS Locale: sv_SE.utf8 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: UTF-8 + +OS Locale: swedish +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-1 + +OS Locale: ta_IN +default locale: ID: ta_IN, Name: Tamil (India) +display locale: ID: ta_IN, Name: Tamil (India) +format locale: ID: ta_IN, Name: Tamil (India) +default charset: UTF-8 + +OS Locale: ta_IN.utf8 +default locale: ID: ta_IN, Name: Tamil (India) +display locale: ID: ta_IN, Name: Tamil (India) +format locale: ID: ta_IN, Name: Tamil (India) +default charset: UTF-8 + +OS Locale: te_IN +default locale: ID: te_IN, Name: Telugu (India) +display locale: ID: te_IN, Name: Telugu (India) +format locale: ID: te_IN, Name: Telugu (India) +default charset: UTF-8 + +OS Locale: te_IN.utf8 +default locale: ID: te_IN, Name: Telugu (India) +display locale: ID: te_IN, Name: Telugu (India) +format locale: ID: te_IN, Name: Telugu (India) +default charset: UTF-8 + +OS Locale: tg_TJ +default locale: ID: tg_TJ, Name: Tajik (Tajikistan) +display locale: ID: tg_TJ, Name: Tajik (Tajikistan) +format locale: ID: tg_TJ, Name: Tajik (Tajikistan) +default charset: UTF-8 + +OS Locale: tg_TJ.koi8t +default locale: ID: tg_TJ, Name: Tajik (Tajikistan) +display locale: ID: tg_TJ, Name: Tajik (Tajikistan) +format locale: ID: tg_TJ, Name: Tajik (Tajikistan) +default charset: UTF-8 + +OS Locale: tg_TJ.utf8 +default locale: ID: tg_TJ, Name: Tajik (Tajikistan) +display locale: ID: tg_TJ, Name: Tajik (Tajikistan) +format locale: ID: tg_TJ, Name: Tajik (Tajikistan) +default charset: UTF-8 + +OS Locale: th_TH +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: TIS-620 + +OS Locale: th_TH.tis620 +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: TIS-620 + +OS Locale: th_TH.utf8 +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: UTF-8 + +OS Locale: thai +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: TIS-620 + +OS Locale: ti_ER +default locale: ID: ti_ER, Name: Tigrinya (Eritrea) +display locale: ID: ti_ER, Name: Tigrinya (Eritrea) +format locale: ID: ti_ER, Name: Tigrinya (Eritrea) +default charset: UTF-8 + +OS Locale: ti_ER.utf8 +default locale: ID: ti_ER, Name: Tigrinya (Eritrea) +display locale: ID: ti_ER, Name: Tigrinya (Eritrea) +format locale: ID: ti_ER, Name: Tigrinya (Eritrea) +default charset: UTF-8 + +OS Locale: ti_ET +default locale: ID: ti_ET, Name: Tigrinya (Ethiopia) +display locale: ID: ti_ET, Name: Tigrinya (Ethiopia) +format locale: ID: ti_ET, Name: Tigrinya (Ethiopia) +default charset: UTF-8 + +OS Locale: ti_ET.utf8 +default locale: ID: ti_ET, Name: Tigrinya (Ethiopia) +display locale: ID: ti_ET, Name: Tigrinya (Ethiopia) +format locale: ID: ti_ET, Name: Tigrinya (Ethiopia) +default charset: UTF-8 + +OS Locale: tig_ER +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: tig_ER.utf8 +default locale: ID: en_ER, Name: English (Eritrea) +display locale: ID: en_ER, Name: English (Eritrea) +format locale: ID: en_ER, Name: English (Eritrea) +default charset: UTF-8 + +OS Locale: tl_PH +default locale: ID: tl_PH, Name: Tagalog (Philippines) +display locale: ID: tl_PH, Name: Tagalog (Philippines) +format locale: ID: tl_PH, Name: Tagalog (Philippines) +default charset: ISO-8859-1 + +OS Locale: tl_PH.iso88591 +default locale: ID: tl_PH, Name: Tagalog (Philippines) +display locale: ID: tl_PH, Name: Tagalog (Philippines) +format locale: ID: tl_PH, Name: Tagalog (Philippines) +default charset: ISO-8859-1 + +OS Locale: tl_PH.utf8 +default locale: ID: tl_PH, Name: Tagalog (Philippines) +display locale: ID: tl_PH, Name: Tagalog (Philippines) +format locale: ID: tl_PH, Name: Tagalog (Philippines) +default charset: UTF-8 + +OS Locale: tn_ZA +default locale: ID: tn_ZA, Name: Tswana (South Africa) +display locale: ID: tn_ZA, Name: Tswana (South Africa) +format locale: ID: tn_ZA, Name: Tswana (South Africa) +default charset: UTF-8 + +OS Locale: tn_ZA.utf8 +default locale: ID: tn_ZA, Name: Tswana (South Africa) +display locale: ID: tn_ZA, Name: Tswana (South Africa) +format locale: ID: tn_ZA, Name: Tswana (South Africa) +default charset: UTF-8 + +OS Locale: tr_CY +default locale: ID: tr_CY, Name: Turkish (Cyprus) +display locale: ID: tr_CY, Name: Turkish (Cyprus) +format locale: ID: tr_CY, Name: Turkish (Cyprus) +default charset: ISO-8859-9 + +OS Locale: tr_CY.iso88599 +default locale: ID: tr_CY, Name: Turkish (Cyprus) +display locale: ID: tr_CY, Name: Turkish (Cyprus) +format locale: ID: tr_CY, Name: Turkish (Cyprus) +default charset: ISO-8859-9 + +OS Locale: tr_CY.utf8 +default locale: ID: tr_CY, Name: Turkish (Cyprus) +display locale: ID: tr_CY, Name: Turkish (Cyprus) +format locale: ID: tr_CY, Name: Turkish (Cyprus) +default charset: UTF-8 + +OS Locale: tr_TR +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: ISO-8859-9 + +OS Locale: tr_TR.iso88599 +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: ISO-8859-9 + +OS Locale: tr_TR.utf8 +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: UTF-8 + +OS Locale: ts_ZA +default locale: ID: ts_ZA, Name: Tsonga (South Africa) +display locale: ID: ts_ZA, Name: Tsonga (South Africa) +format locale: ID: ts_ZA, Name: Tsonga (South Africa) +default charset: UTF-8 + +OS Locale: ts_ZA.utf8 +default locale: ID: ts_ZA, Name: Tsonga (South Africa) +display locale: ID: ts_ZA, Name: Tsonga (South Africa) +format locale: ID: ts_ZA, Name: Tsonga (South Africa) +default charset: UTF-8 + +OS Locale: tt_RU.utf8 +default locale: ID: tt_RU, Name: Tatar (Russia) +display locale: ID: tt_RU, Name: Tatar (Russia) +format locale: ID: tt_RU, Name: Tatar (Russia) +default charset: UTF-8 + +OS Locale: turkish +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: ISO-8859-9 + +OS Locale: uk_UA +default locale: ID: uk_UA, Name: Ukrainian (Ukraine) +display locale: ID: uk_UA, Name: Ukrainian (Ukraine) +format locale: ID: uk_UA, Name: Ukrainian (Ukraine) +default charset: KOI8-U + +OS Locale: uk_UA.koi8u +default locale: ID: uk_UA, Name: Ukrainian (Ukraine) +display locale: ID: uk_UA, Name: Ukrainian (Ukraine) +format locale: ID: uk_UA, Name: Ukrainian (Ukraine) +default charset: KOI8-U + +OS Locale: uk_UA.utf8 +default locale: ID: uk_UA, Name: Ukrainian (Ukraine) +display locale: ID: uk_UA, Name: Ukrainian (Ukraine) +format locale: ID: uk_UA, Name: Ukrainian (Ukraine) +default charset: UTF-8 + +OS Locale: ur_PK +default locale: ID: ur_PK, Name: Urdu (Pakistan) +display locale: ID: ur_PK, Name: Urdu (Pakistan) +format locale: ID: ur_PK, Name: Urdu (Pakistan) +default charset: UTF-8 + +OS Locale: ur_PK.utf8 +default locale: ID: ur_PK, Name: Urdu (Pakistan) +display locale: ID: ur_PK, Name: Urdu (Pakistan) +format locale: ID: ur_PK, Name: Urdu (Pakistan) +default charset: UTF-8 + +OS Locale: uz_UZ +default locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +display locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: ISO-8859-1 + +OS Locale: uz_UZ.iso88591 +default locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +display locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: ISO-8859-1 + +OS Locale: uz_UZ.utf8@cyrillic +default locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +display locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: UTF-8 + +OS Locale: uz_UZ@cyrillic +default locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +display locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: UTF-8 + +OS Locale: ve_ZA +default locale: ID: ve_ZA, Name: Venda (South Africa) +display locale: ID: ve_ZA, Name: Venda (South Africa) +format locale: ID: ve_ZA, Name: Venda (South Africa) +default charset: UTF-8 + +OS Locale: ve_ZA.utf8 +default locale: ID: ve_ZA, Name: Venda (South Africa) +display locale: ID: ve_ZA, Name: Venda (South Africa) +format locale: ID: ve_ZA, Name: Venda (South Africa) +default charset: UTF-8 + +OS Locale: vi_VN +default locale: ID: vi_VN, Name: Vietnamese (Vietnam) +display locale: ID: vi_VN, Name: Vietnamese (Vietnam) +format locale: ID: vi_VN, Name: Vietnamese (Vietnam) +default charset: UTF-8 + +OS Locale: vi_VN.tcvn +default locale: ID: vi_VN, Name: Vietnamese (Vietnam) +display locale: ID: vi_VN, Name: Vietnamese (Vietnam) +format locale: ID: vi_VN, Name: Vietnamese (Vietnam) +default charset: UTF-8 + +OS Locale: vi_VN.utf8 +default locale: ID: vi_VN, Name: Vietnamese (Vietnam) +display locale: ID: vi_VN, Name: Vietnamese (Vietnam) +format locale: ID: vi_VN, Name: Vietnamese (Vietnam) +default charset: UTF-8 + +OS Locale: wa_BE +default locale: ID: wa_BE, Name: Walloon (Belgium) +display locale: ID: wa_BE, Name: Walloon (Belgium) +format locale: ID: wa_BE, Name: Walloon (Belgium) +default charset: ISO-8859-1 + +OS Locale: wa_BE.iso88591 +default locale: ID: wa_BE, Name: Walloon (Belgium) +display locale: ID: wa_BE, Name: Walloon (Belgium) +format locale: ID: wa_BE, Name: Walloon (Belgium) +default charset: ISO-8859-1 + +OS Locale: wa_BE.iso885915@euro +default locale: ID: wa_BE, Name: Walloon (Belgium) +display locale: ID: wa_BE, Name: Walloon (Belgium) +format locale: ID: wa_BE, Name: Walloon (Belgium) +default charset: ISO-8859-15 + +OS Locale: wa_BE.utf8 +default locale: ID: wa_BE, Name: Walloon (Belgium) +display locale: ID: wa_BE, Name: Walloon (Belgium) +format locale: ID: wa_BE, Name: Walloon (Belgium) +default charset: UTF-8 + +OS Locale: wa_BE@euro +default locale: ID: wa_BE, Name: Walloon (Belgium) +display locale: ID: wa_BE, Name: Walloon (Belgium) +format locale: ID: wa_BE, Name: Walloon (Belgium) +default charset: ISO-8859-15 + +OS Locale: xh_ZA +default locale: ID: xh_ZA, Name: Xhosa (South Africa) +display locale: ID: xh_ZA, Name: Xhosa (South Africa) +format locale: ID: xh_ZA, Name: Xhosa (South Africa) +default charset: ISO-8859-1 + +OS Locale: xh_ZA.iso88591 +default locale: ID: xh_ZA, Name: Xhosa (South Africa) +display locale: ID: xh_ZA, Name: Xhosa (South Africa) +format locale: ID: xh_ZA, Name: Xhosa (South Africa) +default charset: ISO-8859-1 + +OS Locale: xh_ZA.utf8 +default locale: ID: xh_ZA, Name: Xhosa (South Africa) +display locale: ID: xh_ZA, Name: Xhosa (South Africa) +format locale: ID: xh_ZA, Name: Xhosa (South Africa) +default charset: UTF-8 + +OS Locale: yi_US +default locale: ID: ji_US, Name: Yiddish (United States) +display locale: ID: ji_US, Name: Yiddish (United States) +format locale: ID: ji_US, Name: Yiddish (United States) +default charset: windows-1255 + +OS Locale: yi_US.cp1255 +default locale: ID: ji_US, Name: Yiddish (United States) +display locale: ID: ji_US, Name: Yiddish (United States) +format locale: ID: ji_US, Name: Yiddish (United States) +default charset: windows-1255 + +OS Locale: yi_US.utf8 +default locale: ID: ji_US, Name: Yiddish (United States) +display locale: ID: ji_US, Name: Yiddish (United States) +format locale: ID: ji_US, Name: Yiddish (United States) +default charset: UTF-8 + +OS Locale: zh_CN +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB2312 + +OS Locale: zh_CN.gb18030 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB18030 + +OS Locale: zh_CN.gb2312 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB2312 + +OS Locale: zh_CN.gbk +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GBK + +OS Locale: zh_CN.utf8 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 + +OS Locale: zh_HK +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: Big5-HKSCS + +OS Locale: zh_HK.big5hkscs +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: Big5-HKSCS + +OS Locale: zh_HK.utf8 +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: UTF-8 + +OS Locale: zh_SG +default locale: ID: zh_SG, Name: Chinese (Singapore) +display locale: ID: zh_SG, Name: Chinese (Singapore) +format locale: ID: zh_SG, Name: Chinese (Singapore) +default charset: GB2312 + +OS Locale: zh_SG.gb2312 +default locale: ID: zh_SG, Name: Chinese (Singapore) +display locale: ID: zh_SG, Name: Chinese (Singapore) +format locale: ID: zh_SG, Name: Chinese (Singapore) +default charset: GB2312 + +OS Locale: zh_SG.gbk +default locale: ID: zh_SG, Name: Chinese (Singapore) +display locale: ID: zh_SG, Name: Chinese (Singapore) +format locale: ID: zh_SG, Name: Chinese (Singapore) +default charset: GBK + +OS Locale: zh_SG.utf8 +default locale: ID: zh_SG, Name: Chinese (Singapore) +display locale: ID: zh_SG, Name: Chinese (Singapore) +format locale: ID: zh_SG, Name: Chinese (Singapore) +default charset: UTF-8 + +OS Locale: zh_TW +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: Big5 + +OS Locale: zh_TW.big5 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: Big5 + +OS Locale: zh_TW.euctw +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-EUC-TW + +OS Locale: zh_TW.utf8 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: UTF-8 + +OS Locale: zu_ZA +default locale: ID: zu_ZA, Name: Zulu (South Africa) +display locale: ID: zu_ZA, Name: Zulu (South Africa) +format locale: ID: zu_ZA, Name: Zulu (South Africa) +default charset: ISO-8859-1 + +OS Locale: zu_ZA.iso88591 +default locale: ID: zu_ZA, Name: Zulu (South Africa) +display locale: ID: zu_ZA, Name: Zulu (South Africa) +format locale: ID: zu_ZA, Name: Zulu (South Africa) +default charset: ISO-8859-1 + +OS Locale: zu_ZA.utf8 +default locale: ID: zu_ZA, Name: Zulu (South Africa) +display locale: ID: zu_ZA, Name: Zulu (South Africa) +format locale: ID: zu_ZA, Name: Zulu (South Africa) +default charset: UTF-8 + +Testing some typical combinations + + +OS Locale (LC_CTYPE: ja_JP.UTF-8, LC_MESSAGES: zh_CN.UTF-8) +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: UTF-8 + +OS Locale (LC_CTYPE: zh_CN.UTF-8, LC_MESSAGES: en_US.UTF-8) +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 + +OS Locale (LC_CTYPE: C, LC_MESSAGES: zh_CN.UTF-8) +default locale: ID: en_US, Name: English (United States) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: en_US, Name: English (United States) +default charset: US-ASCII
--- a/test/java/util/Locale/data/deflocale.sh Thu Sep 16 11:16:02 2010 -0700 +++ b/test/java/util/Locale/data/deflocale.sh Thu Sep 16 11:17:32 2010 -0700 @@ -31,8 +31,21 @@ # cat /etc/*release uname -a -env LC_COLLATE=C ls /usr/lib/locale | while read line; do +echo "Testing all available locales" +/usr/bin/locale -a | while read line; do echo "" echo "OS Locale: " $line - env LANG=$line LC_ALL=$line $1 PrintDefaultLocale + env LC_ALL= LC_CTYPE= LC_MESSAGES= LANG=$line $1 $2 $3 $4 $5 $6 $7 $8 $9 PrintDefaultLocale done + +echo "" +echo "Testing some typical combinations" +echo "" +while read lcctype lcmessages; do + if [ "$lcctype" = "#" -o "$lcctype" = "" ]; then + continue + fi + echo "" + echo "OS Locale (LC_CTYPE: "$lcctype", LC_MESSAGES: "$lcmessages")" + env LC_ALL= LC_CTYPE=$lcctype LC_MESSAGES=$lcmessages $1 $2 $3 $4 $5 $6 $7 $8 $9 PrintDefaultLocale +done < deflocale.input
--- a/test/java/util/Locale/data/deflocale.sol10 Thu Sep 16 11:16:02 2010 -0700 +++ b/test/java/util/Locale/data/deflocale.sol10 Thu Sep 16 11:17:32 2010 -0700 @@ -2,1449 +2,1724 @@ (copyright from `uname -a` goes here) -SunOS deltas4 5.10 Generic_118833-03 sun4u sparc SUNW,Sun-Blade-2500 +SunOS deltas4 5.10 Generic_142900-03 sun4u sparc SUNW,Sun-Blade-2500 +Testing all available locales OS Locale: C -en -English -US-ASCII +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: US-ASCII OS Locale: POSIX -en -English -US-ASCII +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: US-ASCII OS Locale: ar -ar_EG -Arabic (Egypt) -ISO-8859-6 +default locale: ID: ar_EG, Name: Arabic (Egypt) +display locale: ID: ar_EG, Name: Arabic (Egypt) +format locale: ID: ar_EG, Name: Arabic (Egypt) +default charset: ISO-8859-6 OS Locale: ar_EG.UTF-8 -ar_EG -Arabic (Egypt) -UTF-8 +default locale: ID: ar_EG, Name: Arabic (Egypt) +display locale: ID: ar_EG, Name: Arabic (Egypt) +format locale: ID: ar_EG, Name: Arabic (Egypt) +default charset: UTF-8 OS Locale: ar_SA.UTF-8 -ar_SA -Arabic (Saudi Arabia) -UTF-8 +default locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +display locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +format locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +default charset: UTF-8 OS Locale: bg_BG -bg_BG -Bulgarian (Bulgaria) -ISO-8859-5 +default locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +display locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +format locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +default charset: ISO-8859-5 OS Locale: bg_BG.ISO8859-5 -bg_BG -Bulgarian (Bulgaria) -ISO-8859-5 +default locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +display locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +format locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +default charset: ISO-8859-5 OS Locale: ca -ca_ES -Catalan (Spain) -ISO-8859-1 +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-1 OS Locale: ca_ES -ca_ES -Catalan (Spain) -ISO-8859-1 +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-1 OS Locale: ca_ES.ISO8859-1 -ca_ES -Catalan (Spain) -ISO-8859-1 +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-1 OS Locale: ca_ES.ISO8859-15 -ca_ES -Catalan (Spain) -ISO-8859-15 +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-15 OS Locale: ca_ES.ISO8859-15@euro -ca_ES -Catalan (Spain) -ISO-8859-15 - -OS Locale: common -en -English -ISO-8859-1 +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-15 OS Locale: cs_CZ -cs_CZ -Czech (Czech Republic) -ISO-8859-2 +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: ISO-8859-2 OS Locale: cs_CZ.ISO8859-2 -cs_CZ -Czech (Czech Republic) -ISO-8859-2 +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: ISO-8859-2 OS Locale: cs_CZ.UTF-8 -cs_CZ -Czech (Czech Republic) -UTF-8 +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: UTF-8 OS Locale: cs_CZ.UTF-8@euro -cs_CZ -Czech (Czech Republic) -UTF-8 +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: UTF-8 OS Locale: cz -cs_CZ -Czech (Czech Republic) -ISO-8859-2 +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: ISO-8859-2 OS Locale: da -da_DK -Danish (Denmark) -ISO-8859-1 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-1 OS Locale: da.ISO8859-15 -da_DK -Danish (Denmark) -ISO-8859-15 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-15 OS Locale: da_DK -da_DK -Danish (Denmark) -ISO-8859-1 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-1 OS Locale: da_DK.ISO8859-1 -da_DK -Danish (Denmark) -ISO-8859-1 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-1 OS Locale: da_DK.ISO8859-15 -da_DK -Danish (Denmark) -ISO-8859-15 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-15 OS Locale: da_DK.ISO8859-15@euro -da_DK -Danish (Denmark) -ISO-8859-15 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-15 OS Locale: de -de_DE -German (Germany) -ISO-8859-1 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-1 OS Locale: de.ISO8859-15 -de_DE -German (Germany) -ISO-8859-15 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-15 OS Locale: de.UTF-8 -de_DE -German (Germany) -UTF-8 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: UTF-8 OS Locale: de_AT -de_AT -German (Austria) -ISO-8859-1 +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-1 OS Locale: de_AT.ISO8859-1 -de_AT -German (Austria) -ISO-8859-1 +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-1 OS Locale: de_AT.ISO8859-15 -de_AT -German (Austria) -ISO-8859-15 +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-15 OS Locale: de_AT.ISO8859-15@euro -de_AT -German (Austria) -ISO-8859-15 +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-15 OS Locale: de_CH -de_CH -German (Switzerland) -ISO-8859-1 +default locale: ID: de_CH, Name: German (Switzerland) +display locale: ID: de_CH, Name: German (Switzerland) +format locale: ID: de_CH, Name: German (Switzerland) +default charset: ISO-8859-1 OS Locale: de_CH.ISO8859-1 -de_CH -German (Switzerland) -ISO-8859-1 +default locale: ID: de_CH, Name: German (Switzerland) +display locale: ID: de_CH, Name: German (Switzerland) +format locale: ID: de_CH, Name: German (Switzerland) +default charset: ISO-8859-1 OS Locale: de_DE -de_DE -German (Germany) -ISO-8859-1 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-1 OS Locale: de_DE.ISO8859-1 -de_DE -German (Germany) -ISO-8859-1 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-1 OS Locale: de_DE.ISO8859-15 -de_DE -German (Germany) -ISO-8859-15 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-15 OS Locale: de_DE.ISO8859-15@euro -de_DE -German (Germany) -ISO-8859-15 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-15 OS Locale: de_DE.UTF-8 -de_DE -German (Germany) -UTF-8 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: UTF-8 OS Locale: de_DE.UTF-8@euro -de_DE -German (Germany) -UTF-8 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: UTF-8 OS Locale: el -el_GR -Greek (Greece) -ISO-8859-7 +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 OS Locale: el.sun_eu_greek -el_GR -Greek (Greece) -ISO-8859-7 +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 OS Locale: el_GR -el_GR -Greek (Greece) -ISO-8859-7 +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 OS Locale: el_GR.ISO8859-7 -el_GR -Greek (Greece) -ISO-8859-7 +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 OS Locale: el_GR.ISO8859-7@euro -el_GR -Greek (Greece) -ISO-8859-7 +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 OS Locale: en_AU -en_AU -English (Australia) -ISO-8859-1 +default locale: ID: en_AU, Name: English (Australia) +display locale: ID: en_AU, Name: English (Australia) +format locale: ID: en_AU, Name: English (Australia) +default charset: ISO-8859-1 OS Locale: en_AU.ISO8859-1 -en_AU -English (Australia) -ISO-8859-1 +default locale: ID: en_AU, Name: English (Australia) +display locale: ID: en_AU, Name: English (Australia) +format locale: ID: en_AU, Name: English (Australia) +default charset: ISO-8859-1 OS Locale: en_CA -en_CA -English (Canada) -ISO-8859-1 +default locale: ID: en_CA, Name: English (Canada) +display locale: ID: en_CA, Name: English (Canada) +format locale: ID: en_CA, Name: English (Canada) +default charset: ISO-8859-1 OS Locale: en_CA.ISO8859-1 -en_CA -English (Canada) -ISO-8859-1 +default locale: ID: en_CA, Name: English (Canada) +display locale: ID: en_CA, Name: English (Canada) +format locale: ID: en_CA, Name: English (Canada) +default charset: ISO-8859-1 + +OS Locale: en_CA.UTF-8 +default locale: ID: en_CA, Name: English (Canada) +display locale: ID: en_CA, Name: English (Canada) +format locale: ID: en_CA, Name: English (Canada) +default charset: UTF-8 OS Locale: en_GB -en_GB -English (United Kingdom) -ISO-8859-1 +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: ISO-8859-1 OS Locale: en_GB.ISO8859-1 -en_GB -English (United Kingdom) -ISO-8859-1 +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: ISO-8859-1 OS Locale: en_GB.ISO8859-15 -en_GB -English (United Kingdom) -ISO-8859-15 +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: ISO-8859-15 OS Locale: en_GB.ISO8859-15@euro -en_GB -English (United Kingdom) -ISO-8859-15 +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: ISO-8859-15 OS Locale: en_IE -en_IE -English (Ireland) -ISO-8859-1 +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-1 OS Locale: en_IE.ISO8859-1 -en_IE -English (Ireland) -ISO-8859-1 +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-1 OS Locale: en_IE.ISO8859-15 -en_IE -English (Ireland) -ISO-8859-15 +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-15 OS Locale: en_IE.ISO8859-15@euro -en_IE -English (Ireland) -ISO-8859-15 +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-15 OS Locale: en_NZ -en_NZ -English (New Zealand) -ISO-8859-1 +default locale: ID: en_NZ, Name: English (New Zealand) +display locale: ID: en_NZ, Name: English (New Zealand) +format locale: ID: en_NZ, Name: English (New Zealand) +default charset: ISO-8859-1 OS Locale: en_NZ.ISO8859-1 -en_NZ -English (New Zealand) -ISO-8859-1 +default locale: ID: en_NZ, Name: English (New Zealand) +display locale: ID: en_NZ, Name: English (New Zealand) +format locale: ID: en_NZ, Name: English (New Zealand) +default charset: ISO-8859-1 OS Locale: en_US -en_US -English (United States) -ISO-8859-1 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: ISO-8859-1 OS Locale: en_US.ISO8859-1 -en_US -English (United States) -ISO-8859-1 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: ISO-8859-1 OS Locale: en_US.ISO8859-15 -en_US -English (United States) -ISO-8859-15 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: ISO-8859-15 OS Locale: en_US.ISO8859-15@euro -en_US -English (United States) -ISO-8859-15 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: ISO-8859-15 OS Locale: en_US.UTF-8 -en_US -English (United States) -UTF-8 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: UTF-8 OS Locale: es -es_ES -Spanish (Spain) -ISO-8859-1 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-1 OS Locale: es.ISO8859-15 -es_ES -Spanish (Spain) -ISO-8859-15 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-15 OS Locale: es.UTF-8 -es_ES -Spanish (Spain) -UTF-8 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: UTF-8 OS Locale: es_AR -es_AR -Spanish (Argentina) -ISO-8859-1 +default locale: ID: es_AR, Name: Spanish (Argentina) +display locale: ID: es_AR, Name: Spanish (Argentina) +format locale: ID: es_AR, Name: Spanish (Argentina) +default charset: ISO-8859-1 OS Locale: es_AR.ISO8859-1 -es_AR -Spanish (Argentina) -ISO-8859-1 +default locale: ID: es_AR, Name: Spanish (Argentina) +display locale: ID: es_AR, Name: Spanish (Argentina) +format locale: ID: es_AR, Name: Spanish (Argentina) +default charset: ISO-8859-1 OS Locale: es_BO -es_BO -Spanish (Bolivia) -ISO-8859-1 +default locale: ID: es_BO, Name: Spanish (Bolivia) +display locale: ID: es_BO, Name: Spanish (Bolivia) +format locale: ID: es_BO, Name: Spanish (Bolivia) +default charset: ISO-8859-1 OS Locale: es_BO.ISO8859-1 -es_BO -Spanish (Bolivia) -ISO-8859-1 +default locale: ID: es_BO, Name: Spanish (Bolivia) +display locale: ID: es_BO, Name: Spanish (Bolivia) +format locale: ID: es_BO, Name: Spanish (Bolivia) +default charset: ISO-8859-1 OS Locale: es_CL -es_CL -Spanish (Chile) -ISO-8859-1 +default locale: ID: es_CL, Name: Spanish (Chile) +display locale: ID: es_CL, Name: Spanish (Chile) +format locale: ID: es_CL, Name: Spanish (Chile) +default charset: ISO-8859-1 OS Locale: es_CL.ISO8859-1 -es_CL -Spanish (Chile) -ISO-8859-1 +default locale: ID: es_CL, Name: Spanish (Chile) +display locale: ID: es_CL, Name: Spanish (Chile) +format locale: ID: es_CL, Name: Spanish (Chile) +default charset: ISO-8859-1 OS Locale: es_CO -es_CO -Spanish (Colombia) -ISO-8859-1 +default locale: ID: es_CO, Name: Spanish (Colombia) +display locale: ID: es_CO, Name: Spanish (Colombia) +format locale: ID: es_CO, Name: Spanish (Colombia) +default charset: ISO-8859-1 OS Locale: es_CO.ISO8859-1 -es_CO -Spanish (Colombia) -ISO-8859-1 +default locale: ID: es_CO, Name: Spanish (Colombia) +display locale: ID: es_CO, Name: Spanish (Colombia) +format locale: ID: es_CO, Name: Spanish (Colombia) +default charset: ISO-8859-1 OS Locale: es_CR -es_CR -Spanish (Costa Rica) -ISO-8859-1 +default locale: ID: es_CR, Name: Spanish (Costa Rica) +display locale: ID: es_CR, Name: Spanish (Costa Rica) +format locale: ID: es_CR, Name: Spanish (Costa Rica) +default charset: ISO-8859-1 OS Locale: es_CR.ISO8859-1 -es_CR -Spanish (Costa Rica) -ISO-8859-1 +default locale: ID: es_CR, Name: Spanish (Costa Rica) +display locale: ID: es_CR, Name: Spanish (Costa Rica) +format locale: ID: es_CR, Name: Spanish (Costa Rica) +default charset: ISO-8859-1 OS Locale: es_EC -es_EC -Spanish (Ecuador) -ISO-8859-1 +default locale: ID: es_EC, Name: Spanish (Ecuador) +display locale: ID: es_EC, Name: Spanish (Ecuador) +format locale: ID: es_EC, Name: Spanish (Ecuador) +default charset: ISO-8859-1 OS Locale: es_EC.ISO8859-1 -es_EC -Spanish (Ecuador) -ISO-8859-1 +default locale: ID: es_EC, Name: Spanish (Ecuador) +display locale: ID: es_EC, Name: Spanish (Ecuador) +format locale: ID: es_EC, Name: Spanish (Ecuador) +default charset: ISO-8859-1 OS Locale: es_ES -es_ES -Spanish (Spain) -ISO-8859-1 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-1 OS Locale: es_ES.ISO8859-1 -es_ES -Spanish (Spain) -ISO-8859-1 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-1 OS Locale: es_ES.ISO8859-15 -es_ES -Spanish (Spain) -ISO-8859-15 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-15 OS Locale: es_ES.ISO8859-15@euro -es_ES -Spanish (Spain) -ISO-8859-15 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-15 OS Locale: es_ES.UTF-8 -es_ES -Spanish (Spain) -UTF-8 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: UTF-8 OS Locale: es_ES.UTF-8@euro -es_ES -Spanish (Spain) -UTF-8 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: UTF-8 OS Locale: es_GT -es_GT -Spanish (Guatemala) -ISO-8859-1 +default locale: ID: es_GT, Name: Spanish (Guatemala) +display locale: ID: es_GT, Name: Spanish (Guatemala) +format locale: ID: es_GT, Name: Spanish (Guatemala) +default charset: ISO-8859-1 OS Locale: es_GT.ISO8859-1 -es_GT -Spanish (Guatemala) -ISO-8859-1 +default locale: ID: es_GT, Name: Spanish (Guatemala) +display locale: ID: es_GT, Name: Spanish (Guatemala) +format locale: ID: es_GT, Name: Spanish (Guatemala) +default charset: ISO-8859-1 OS Locale: es_MX -es_MX -Spanish (Mexico) -ISO-8859-1 +default locale: ID: es_MX, Name: Spanish (Mexico) +display locale: ID: es_MX, Name: Spanish (Mexico) +format locale: ID: es_MX, Name: Spanish (Mexico) +default charset: ISO-8859-1 OS Locale: es_MX.ISO8859-1 -es_MX -Spanish (Mexico) -ISO-8859-1 +default locale: ID: es_MX, Name: Spanish (Mexico) +display locale: ID: es_MX, Name: Spanish (Mexico) +format locale: ID: es_MX, Name: Spanish (Mexico) +default charset: ISO-8859-1 + +OS Locale: es_MX.UTF-8 +default locale: ID: es_MX, Name: Spanish (Mexico) +display locale: ID: es_MX, Name: Spanish (Mexico) +format locale: ID: es_MX, Name: Spanish (Mexico) +default charset: UTF-8 OS Locale: es_NI -es_NI -Spanish (Nicaragua) -ISO-8859-1 +default locale: ID: es_NI, Name: Spanish (Nicaragua) +display locale: ID: es_NI, Name: Spanish (Nicaragua) +format locale: ID: es_NI, Name: Spanish (Nicaragua) +default charset: ISO-8859-1 OS Locale: es_NI.ISO8859-1 -es_NI -Spanish (Nicaragua) -ISO-8859-1 +default locale: ID: es_NI, Name: Spanish (Nicaragua) +display locale: ID: es_NI, Name: Spanish (Nicaragua) +format locale: ID: es_NI, Name: Spanish (Nicaragua) +default charset: ISO-8859-1 OS Locale: es_PA -es_PA -Spanish (Panama) -ISO-8859-1 +default locale: ID: es_PA, Name: Spanish (Panama) +display locale: ID: es_PA, Name: Spanish (Panama) +format locale: ID: es_PA, Name: Spanish (Panama) +default charset: ISO-8859-1 OS Locale: es_PA.ISO8859-1 -es_PA -Spanish (Panama) -ISO-8859-1 +default locale: ID: es_PA, Name: Spanish (Panama) +display locale: ID: es_PA, Name: Spanish (Panama) +format locale: ID: es_PA, Name: Spanish (Panama) +default charset: ISO-8859-1 OS Locale: es_PE -es_PE -Spanish (Peru) -ISO-8859-1 +default locale: ID: es_PE, Name: Spanish (Peru) +display locale: ID: es_PE, Name: Spanish (Peru) +format locale: ID: es_PE, Name: Spanish (Peru) +default charset: ISO-8859-1 OS Locale: es_PE.ISO8859-1 -es_PE -Spanish (Peru) -ISO-8859-1 +default locale: ID: es_PE, Name: Spanish (Peru) +display locale: ID: es_PE, Name: Spanish (Peru) +format locale: ID: es_PE, Name: Spanish (Peru) +default charset: ISO-8859-1 OS Locale: es_PY -es_PY -Spanish (Paraguay) -ISO-8859-1 +default locale: ID: es_PY, Name: Spanish (Paraguay) +display locale: ID: es_PY, Name: Spanish (Paraguay) +format locale: ID: es_PY, Name: Spanish (Paraguay) +default charset: ISO-8859-1 OS Locale: es_PY.ISO8859-1 -es_PY -Spanish (Paraguay) -ISO-8859-1 +default locale: ID: es_PY, Name: Spanish (Paraguay) +display locale: ID: es_PY, Name: Spanish (Paraguay) +format locale: ID: es_PY, Name: Spanish (Paraguay) +default charset: ISO-8859-1 OS Locale: es_SV -es_SV -Spanish (El Salvador) -ISO-8859-1 +default locale: ID: es_SV, Name: Spanish (El Salvador) +display locale: ID: es_SV, Name: Spanish (El Salvador) +format locale: ID: es_SV, Name: Spanish (El Salvador) +default charset: ISO-8859-1 OS Locale: es_SV.ISO8859-1 -es_SV -Spanish (El Salvador) -ISO-8859-1 +default locale: ID: es_SV, Name: Spanish (El Salvador) +display locale: ID: es_SV, Name: Spanish (El Salvador) +format locale: ID: es_SV, Name: Spanish (El Salvador) +default charset: ISO-8859-1 OS Locale: es_UY -es_UY -Spanish (Uruguay) -ISO-8859-1 +default locale: ID: es_UY, Name: Spanish (Uruguay) +display locale: ID: es_UY, Name: Spanish (Uruguay) +format locale: ID: es_UY, Name: Spanish (Uruguay) +default charset: ISO-8859-1 OS Locale: es_UY.ISO8859-1 -es_UY -Spanish (Uruguay) -ISO-8859-1 +default locale: ID: es_UY, Name: Spanish (Uruguay) +display locale: ID: es_UY, Name: Spanish (Uruguay) +format locale: ID: es_UY, Name: Spanish (Uruguay) +default charset: ISO-8859-1 OS Locale: es_VE -es_VE -Spanish (Venezuela) -ISO-8859-1 +default locale: ID: es_VE, Name: Spanish (Venezuela) +display locale: ID: es_VE, Name: Spanish (Venezuela) +format locale: ID: es_VE, Name: Spanish (Venezuela) +default charset: ISO-8859-1 OS Locale: es_VE.ISO8859-1 -es_VE -Spanish (Venezuela) -ISO-8859-1 +default locale: ID: es_VE, Name: Spanish (Venezuela) +display locale: ID: es_VE, Name: Spanish (Venezuela) +format locale: ID: es_VE, Name: Spanish (Venezuela) +default charset: ISO-8859-1 OS Locale: et -et_EE -Estonian (Estonia) -ISO-8859-15 +default locale: ID: et_EE, Name: Estonian (Estonia) +display locale: ID: et_EE, Name: Estonian (Estonia) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: ISO-8859-15 OS Locale: et_EE -et_EE -Estonian (Estonia) -ISO-8859-15 +default locale: ID: et_EE, Name: Estonian (Estonia) +display locale: ID: et_EE, Name: Estonian (Estonia) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: ISO-8859-15 OS Locale: et_EE.ISO8859-15 -et_EE -Estonian (Estonia) -ISO-8859-15 +default locale: ID: et_EE, Name: Estonian (Estonia) +display locale: ID: et_EE, Name: Estonian (Estonia) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: ISO-8859-15 OS Locale: fi -fi_FI -Finnish (Finland) -ISO-8859-1 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-1 OS Locale: fi.ISO8859-15 -fi_FI -Finnish (Finland) -ISO-8859-15 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-15 OS Locale: fi_FI -fi_FI -Finnish (Finland) -ISO-8859-1 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-1 OS Locale: fi_FI.ISO8859-1 -fi_FI -Finnish (Finland) -ISO-8859-1 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-1 OS Locale: fi_FI.ISO8859-15 -fi_FI -Finnish (Finland) -ISO-8859-15 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-15 OS Locale: fi_FI.ISO8859-15@euro -fi_FI -Finnish (Finland) -ISO-8859-15 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-15 OS Locale: fi_FI.UTF-8 -fi_FI -Finnish (Finland) -UTF-8 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: UTF-8 OS Locale: fr -fr_FR -French (France) -ISO-8859-1 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-1 OS Locale: fr.ISO8859-15 -fr_FR -French (France) -ISO-8859-15 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-15 OS Locale: fr.UTF-8 -fr_FR -French (France) -UTF-8 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: UTF-8 OS Locale: fr_BE -fr_BE -French (Belgium) -ISO-8859-1 +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-1 OS Locale: fr_BE.ISO8859-1 -fr_BE -French (Belgium) -ISO-8859-1 +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-1 OS Locale: fr_BE.ISO8859-15 -fr_BE -French (Belgium) -ISO-8859-15 +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-15 OS Locale: fr_BE.ISO8859-15@euro -fr_BE -French (Belgium) -ISO-8859-15 +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-15 OS Locale: fr_BE.UTF-8 -fr_BE -French (Belgium) -UTF-8 +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: UTF-8 OS Locale: fr_BE.UTF-8@euro -fr_BE -French (Belgium) -UTF-8 +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: UTF-8 OS Locale: fr_CA -fr_CA -French (Canada) -ISO-8859-1 +default locale: ID: fr_CA, Name: French (Canada) +display locale: ID: fr_CA, Name: French (Canada) +format locale: ID: fr_CA, Name: French (Canada) +default charset: ISO-8859-1 OS Locale: fr_CA.ISO8859-1 -fr_CA -French (Canada) -ISO-8859-1 +default locale: ID: fr_CA, Name: French (Canada) +display locale: ID: fr_CA, Name: French (Canada) +format locale: ID: fr_CA, Name: French (Canada) +default charset: ISO-8859-1 + +OS Locale: fr_CA.UTF-8 +default locale: ID: fr_CA, Name: French (Canada) +display locale: ID: fr_CA, Name: French (Canada) +format locale: ID: fr_CA, Name: French (Canada) +default charset: UTF-8 OS Locale: fr_CH -fr_CH -French (Switzerland) -ISO-8859-1 +default locale: ID: fr_CH, Name: French (Switzerland) +display locale: ID: fr_CH, Name: French (Switzerland) +format locale: ID: fr_CH, Name: French (Switzerland) +default charset: ISO-8859-1 OS Locale: fr_CH.ISO8859-1 -fr_CH -French (Switzerland) -ISO-8859-1 +default locale: ID: fr_CH, Name: French (Switzerland) +display locale: ID: fr_CH, Name: French (Switzerland) +format locale: ID: fr_CH, Name: French (Switzerland) +default charset: ISO-8859-1 OS Locale: fr_FR -fr_FR -French (France) -ISO-8859-1 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-1 OS Locale: fr_FR.ISO8859-1 -fr_FR -French (France) -ISO-8859-1 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-1 OS Locale: fr_FR.ISO8859-15 -fr_FR -French (France) -ISO-8859-15 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-15 OS Locale: fr_FR.ISO8859-15@euro -fr_FR -French (France) -ISO-8859-15 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-15 OS Locale: fr_FR.UTF-8 -fr_FR -French (France) -UTF-8 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: UTF-8 OS Locale: fr_FR.UTF-8@euro -fr_FR -French (France) -UTF-8 - -OS Locale: geo -en -English -ISO-8859-1 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: UTF-8 OS Locale: he -iw_IL -Hebrew (Israel) -ISO-8859-8 +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: ISO-8859-8 OS Locale: he_IL -iw_IL -Hebrew (Israel) -ISO-8859-8 +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: ISO-8859-8 OS Locale: he_IL.UTF-8 -iw_IL -Hebrew (Israel) -UTF-8 +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: UTF-8 OS Locale: hi_IN.UTF-8 -hi_IN -Hindi (India) -UTF-8 +default locale: ID: hi_IN, Name: Hindi (India) +display locale: ID: hi_IN, Name: Hindi (India) +format locale: ID: hi_IN, Name: Hindi (India) +default charset: UTF-8 OS Locale: hr_HR -hr_HR -Croatian (Croatia) -ISO-8859-2 +default locale: ID: hr_HR, Name: Croatian (Croatia) +display locale: ID: hr_HR, Name: Croatian (Croatia) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: ISO-8859-2 OS Locale: hr_HR.ISO8859-2 -hr_HR -Croatian (Croatia) -ISO-8859-2 +default locale: ID: hr_HR, Name: Croatian (Croatia) +display locale: ID: hr_HR, Name: Croatian (Croatia) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: ISO-8859-2 OS Locale: hu -hu_HU -Hungarian (Hungary) -ISO-8859-2 +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: ISO-8859-2 OS Locale: hu_HU -hu_HU -Hungarian (Hungary) -ISO-8859-2 +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: ISO-8859-2 OS Locale: hu_HU.ISO8859-2 -hu_HU -Hungarian (Hungary) -ISO-8859-2 +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: ISO-8859-2 OS Locale: hu_HU.UTF-8 -hu_HU -Hungarian (Hungary) -UTF-8 +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: UTF-8 OS Locale: is_IS -is_IS -Icelandic (Iceland) -ISO-8859-1 +default locale: ID: is_IS, Name: Icelandic (Iceland) +display locale: ID: is_IS, Name: Icelandic (Iceland) +format locale: ID: is_IS, Name: Icelandic (Iceland) +default charset: ISO-8859-1 OS Locale: is_IS.ISO8859-1 -is_IS -Icelandic (Iceland) -ISO-8859-1 +default locale: ID: is_IS, Name: Icelandic (Iceland) +display locale: ID: is_IS, Name: Icelandic (Iceland) +format locale: ID: is_IS, Name: Icelandic (Iceland) +default charset: ISO-8859-1 OS Locale: iso_8859_1 -en_8859_1 -English (8859_1) -ISO-8859-1 - -OS Locale: iso_8859_13 -en -English -ISO-8859-1 - -OS Locale: iso_8859_15 -en -English -ISO-8859-1 - -OS Locale: iso_8859_2 -en -English -ISO-8859-1 - -OS Locale: iso_8859_5 -en -English -ISO-8859-1 - -OS Locale: iso_8859_7 -en -English -ISO-8859-1 - -OS Locale: iso_8859_9 -en -English -ISO-8859-1 +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: US-ASCII OS Locale: it -it_IT -Italian (Italy) -ISO-8859-1 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-1 OS Locale: it.ISO8859-15 -it_IT -Italian (Italy) -ISO-8859-15 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-15 OS Locale: it.UTF-8 -it_IT -Italian (Italy) -UTF-8 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: UTF-8 OS Locale: it_IT -it_IT -Italian (Italy) -ISO-8859-1 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-1 OS Locale: it_IT.ISO8859-1 -it_IT -Italian (Italy) -ISO-8859-1 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-1 OS Locale: it_IT.ISO8859-15 -it_IT -Italian (Italy) -ISO-8859-15 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-15 OS Locale: it_IT.ISO8859-15@euro -it_IT -Italian (Italy) -ISO-8859-15 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-15 OS Locale: it_IT.UTF-8 -it_IT -Italian (Italy) -UTF-8 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: UTF-8 OS Locale: it_IT.UTF-8@euro -it_IT -Italian (Italy) -UTF-8 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: UTF-8 OS Locale: ja -ja_JP -Japanese (Japan) -x-eucJP-Open +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-eucJP-Open OS Locale: ja_JP.PCK -ja_JP -Japanese (Japan) -x-PCK +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-PCK OS Locale: ja_JP.UTF-8 -ja_JP -Japanese (Japan) -UTF-8 +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: UTF-8 OS Locale: ja_JP.eucJP -ja_JP -Japanese (Japan) -x-eucJP-Open +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-eucJP-Open OS Locale: ko -ko_KR -Korean (South Korea) -EUC-KR +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: EUC-KR OS Locale: ko.UTF-8 -ko_KR -Korean (South Korea) -UTF-8 +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: UTF-8 OS Locale: ko_KR.EUC -ko_KR -Korean (South Korea) -EUC-KR +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: EUC-KR OS Locale: ko_KR.EUC@dict -ko_KR -Korean (South Korea) -EUC-KR +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: EUC-KR OS Locale: ko_KR.UTF-8 -ko_KR -Korean (South Korea) -UTF-8 +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: UTF-8 OS Locale: ko_KR.UTF-8@dict -ko_KR -Korean (South Korea) -UTF-8 - -OS Locale: lcttab -en -English -ISO-8859-1 +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: UTF-8 OS Locale: lt -lt_LT -Lithuanian (Lithuania) -ISO-8859-13 +default locale: ID: lt_LT, Name: Lithuanian (Lithuania) +display locale: ID: lt_LT, Name: Lithuanian (Lithuania) +format locale: ID: lt_LT, Name: Lithuanian (Lithuania) +default charset: ISO-8859-13 OS Locale: lt_LT -lt_LT -Lithuanian (Lithuania) -ISO-8859-13 +default locale: ID: lt_LT, Name: Lithuanian (Lithuania) +display locale: ID: lt_LT, Name: Lithuanian (Lithuania) +format locale: ID: lt_LT, Name: Lithuanian (Lithuania) +default charset: ISO-8859-13 OS Locale: lt_LT.ISO8859-13 -lt_LT -Lithuanian (Lithuania) -ISO-8859-13 +default locale: ID: lt_LT, Name: Lithuanian (Lithuania) +display locale: ID: lt_LT, Name: Lithuanian (Lithuania) +format locale: ID: lt_LT, Name: Lithuanian (Lithuania) +default charset: ISO-8859-13 OS Locale: lv -lv_LV -Latvian (Latvia) -ISO-8859-13 +default locale: ID: lv_LV, Name: Latvian (Latvia) +display locale: ID: lv_LV, Name: Latvian (Latvia) +format locale: ID: lv_LV, Name: Latvian (Latvia) +default charset: ISO-8859-13 OS Locale: lv_LV -lv_LV -Latvian (Latvia) -ISO-8859-13 +default locale: ID: lv_LV, Name: Latvian (Latvia) +display locale: ID: lv_LV, Name: Latvian (Latvia) +format locale: ID: lv_LV, Name: Latvian (Latvia) +default charset: ISO-8859-13 OS Locale: lv_LV.ISO8859-13 -lv_LV -Latvian (Latvia) -ISO-8859-13 +default locale: ID: lv_LV, Name: Latvian (Latvia) +display locale: ID: lv_LV, Name: Latvian (Latvia) +format locale: ID: lv_LV, Name: Latvian (Latvia) +default charset: ISO-8859-13 OS Locale: mk_MK -mk_MK -Macedonian (Macedonia) -ISO-8859-5 +default locale: ID: mk_MK, Name: Macedonian (Macedonia) +display locale: ID: mk_MK, Name: Macedonian (Macedonia) +format locale: ID: mk_MK, Name: Macedonian (Macedonia) +default charset: ISO-8859-5 OS Locale: mk_MK.ISO8859-5 -mk_MK -Macedonian (Macedonia) -ISO-8859-5 +default locale: ID: mk_MK, Name: Macedonian (Macedonia) +display locale: ID: mk_MK, Name: Macedonian (Macedonia) +format locale: ID: mk_MK, Name: Macedonian (Macedonia) +default charset: ISO-8859-5 OS Locale: nl -nl_NL -Dutch (Netherlands) -ISO-8859-1 +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-1 OS Locale: nl.ISO8859-15 -nl_NL -Dutch (Netherlands) -ISO-8859-15 +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-15 OS Locale: nl_BE -nl_BE -Dutch (Belgium) -ISO-8859-1 +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-1 OS Locale: nl_BE.ISO8859-1 -nl_BE -Dutch (Belgium) -ISO-8859-1 +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-1 OS Locale: nl_BE.ISO8859-15 -nl_BE -Dutch (Belgium) -ISO-8859-15 +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-15 OS Locale: nl_BE.ISO8859-15@euro -nl_BE -Dutch (Belgium) -ISO-8859-15 +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-15 OS Locale: nl_NL -nl_NL -Dutch (Netherlands) -ISO-8859-1 +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-1 OS Locale: nl_NL.ISO8859-1 -nl_NL -Dutch (Netherlands) -ISO-8859-1 +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-1 OS Locale: nl_NL.ISO8859-15 -nl_NL -Dutch (Netherlands) -ISO-8859-15 +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-15 OS Locale: nl_NL.ISO8859-15@euro -nl_NL -Dutch (Netherlands) -ISO-8859-15 +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-15 OS Locale: no -no_NO -Norwegian (Norway) -ISO-8859-1 +default locale: ID: no_NO, Name: Norwegian (Norway) +display locale: ID: no_NO, Name: Norwegian (Norway) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: ISO-8859-1 OS Locale: no_NO -no_NO -Norwegian (Norway) -ISO-8859-1 +default locale: ID: no_NO, Name: Norwegian (Norway) +display locale: ID: no_NO, Name: Norwegian (Norway) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: ISO-8859-1 OS Locale: no_NO.ISO8859-1@bokmal -no_NO -Norwegian (Norway) -ISO-8859-1 +default locale: ID: no_NO, Name: Norwegian (Norway) +display locale: ID: no_NO, Name: Norwegian (Norway) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: ISO-8859-1 OS Locale: no_NO.ISO8859-1@nynorsk -no_NO_NY -Norwegian (Norway,Nynorsk) -ISO-8859-1 +default locale: ID: no_NO_NY, Name: Norwegian (Norway,Nynorsk) +display locale: ID: no_NO_NY, Name: Norwegian (Norway,Nynorsk) +format locale: ID: no_NO_NY, Name: Norwegian (Norway,Nynorsk) +default charset: ISO-8859-1 OS Locale: no_NY -no_NY -Norwegian (NY) -ISO-8859-1 +default locale: ID: no_, Name: Norwegian () +display locale: ID: no_, Name: Norwegian () +format locale: ID: no_, Name: Norwegian () +default charset: ISO-8859-1 OS Locale: nr -nr -South Ndebele -ISO-8859-2 +default locale: ID: nr, Name: South Ndebele +display locale: ID: nr, Name: South Ndebele +format locale: ID: nr, Name: South Ndebele +default charset: ISO-8859-2 OS Locale: pl -pl_PL -Polish (Poland) -ISO-8859-2 +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: ISO-8859-2 OS Locale: pl.UTF-8 -pl_PL -Polish (Poland) -UTF-8 +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: UTF-8 OS Locale: pl_PL -pl_PL -Polish (Poland) -ISO-8859-2 +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: ISO-8859-2 OS Locale: pl_PL.ISO8859-2 -pl_PL -Polish (Poland) -ISO-8859-2 +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: ISO-8859-2 OS Locale: pl_PL.UTF-8 -pl_PL -Polish (Poland) -UTF-8 +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: UTF-8 OS Locale: pt -pt_PT -Portuguese (Portugal) -ISO-8859-1 +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-1 OS Locale: pt.ISO8859-15 -pt_PT -Portuguese (Portugal) -ISO-8859-15 +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-15 OS Locale: pt_BR -pt_BR -Portuguese (Brazil) -ISO-8859-1 +default locale: ID: pt_BR, Name: Portuguese (Brazil) +display locale: ID: pt_BR, Name: Portuguese (Brazil) +format locale: ID: pt_BR, Name: Portuguese (Brazil) +default charset: ISO-8859-1 OS Locale: pt_BR.ISO8859-1 -pt_BR -Portuguese (Brazil) -ISO-8859-1 +default locale: ID: pt_BR, Name: Portuguese (Brazil) +display locale: ID: pt_BR, Name: Portuguese (Brazil) +format locale: ID: pt_BR, Name: Portuguese (Brazil) +default charset: ISO-8859-1 OS Locale: pt_BR.UTF-8 -pt_BR -Portuguese (Brazil) -UTF-8 +default locale: ID: pt_BR, Name: Portuguese (Brazil) +display locale: ID: pt_BR, Name: Portuguese (Brazil) +format locale: ID: pt_BR, Name: Portuguese (Brazil) +default charset: UTF-8 OS Locale: pt_PT -pt_PT -Portuguese (Portugal) -ISO-8859-1 +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-1 OS Locale: pt_PT.ISO8859-1 -pt_PT -Portuguese (Portugal) -ISO-8859-1 +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-1 OS Locale: pt_PT.ISO8859-15 -pt_PT -Portuguese (Portugal) -ISO-8859-15 +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-15 OS Locale: pt_PT.ISO8859-15@euro -pt_PT -Portuguese (Portugal) -ISO-8859-15 +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-15 OS Locale: ro_RO -ro_RO -Romanian (Romania) -ISO-8859-2 +default locale: ID: ro_RO, Name: Romanian (Romania) +display locale: ID: ro_RO, Name: Romanian (Romania) +format locale: ID: ro_RO, Name: Romanian (Romania) +default charset: ISO-8859-2 OS Locale: ro_RO.ISO8859-2 -ro_RO -Romanian (Romania) -ISO-8859-2 +default locale: ID: ro_RO, Name: Romanian (Romania) +display locale: ID: ro_RO, Name: Romanian (Romania) +format locale: ID: ro_RO, Name: Romanian (Romania) +default charset: ISO-8859-2 OS Locale: ru -ru_RU -Russian (Russia) -ISO-8859-5 +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: ISO-8859-5 OS Locale: ru.UTF-8 -ru_RU -Russian (Russia) -UTF-8 +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: UTF-8 OS Locale: ru.koi8-r -ru_RU -Russian (Russia) -KOI8-R +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: KOI8-R OS Locale: ru_RU -ru_RU -Russian (Russia) -ISO-8859-5 +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: ISO-8859-5 OS Locale: ru_RU.ANSI1251 -ru_RU -Russian (Russia) -windows-1251 +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: windows-1251 OS Locale: ru_RU.ISO8859-5 -ru_RU -Russian (Russia) -ISO-8859-5 +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: ISO-8859-5 OS Locale: ru_RU.KOI8-R -ru_RU -Russian (Russia) -KOI8-R +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: KOI8-R OS Locale: ru_RU.UTF-8 -ru_RU -Russian (Russia) -UTF-8 +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: UTF-8 OS Locale: sh_BA -sr_BA -Serbian (Bosnia and Herzegovina) -ISO-8859-2 +default locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +display locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +format locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +default charset: ISO-8859-2 OS Locale: sh_BA.ISO8859-2@bosnia -sr_BA -Serbian (Bosnia and Herzegovina) -ISO-8859-2 +default locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +display locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +format locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +default charset: ISO-8859-2 OS Locale: sk_SK -sk_SK -Slovak (Slovakia) -ISO-8859-2 +default locale: ID: sk_SK, Name: Slovak (Slovakia) +display locale: ID: sk_SK, Name: Slovak (Slovakia) +format locale: ID: sk_SK, Name: Slovak (Slovakia) +default charset: ISO-8859-2 OS Locale: sk_SK.ISO8859-2 -sk_SK -Slovak (Slovakia) -ISO-8859-2 +default locale: ID: sk_SK, Name: Slovak (Slovakia) +display locale: ID: sk_SK, Name: Slovak (Slovakia) +format locale: ID: sk_SK, Name: Slovak (Slovakia) +default charset: ISO-8859-2 OS Locale: sl_SI -sl_SI -Slovenian (Slovenia) -ISO-8859-2 +default locale: ID: sl_SI, Name: Slovenian (Slovenia) +display locale: ID: sl_SI, Name: Slovenian (Slovenia) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: ISO-8859-2 OS Locale: sl_SI.ISO8859-2 -sl_SI -Slovenian (Slovenia) -ISO-8859-2 +default locale: ID: sl_SI, Name: Slovenian (Slovenia) +display locale: ID: sl_SI, Name: Slovenian (Slovenia) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: ISO-8859-2 OS Locale: sq_AL -sq_AL -Albanian (Albania) -ISO-8859-2 +default locale: ID: sq_AL, Name: Albanian (Albania) +display locale: ID: sq_AL, Name: Albanian (Albania) +format locale: ID: sq_AL, Name: Albanian (Albania) +default charset: ISO-8859-2 OS Locale: sq_AL.ISO8859-2 -sq_AL -Albanian (Albania) -ISO-8859-2 +default locale: ID: sq_AL, Name: Albanian (Albania) +display locale: ID: sq_AL, Name: Albanian (Albania) +format locale: ID: sq_AL, Name: Albanian (Albania) +default charset: ISO-8859-2 OS Locale: sr_SP -sr_SP -Serbian (SP) -ISO-8859-5 +default locale: ID: sr, Name: Serbian +display locale: ID: sr, Name: Serbian +format locale: ID: sr, Name: Serbian +default charset: ISO-8859-5 OS Locale: sr_YU -sr_CS -Serbian (Serbia and Montenegro) -ISO-8859-5 +default locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +display locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +format locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +default charset: ISO-8859-5 OS Locale: sr_YU.ISO8859-5 -sr_CS -Serbian (Serbia and Montenegro) -ISO-8859-5 +default locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +display locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +format locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +default charset: ISO-8859-5 OS Locale: sv -sv_SE -Swedish (Sweden) -ISO-8859-1 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-1 OS Locale: sv.ISO8859-15 -sv_SE -Swedish (Sweden) -ISO-8859-15 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-15 OS Locale: sv.UTF-8 -sv_SE -Swedish (Sweden) -UTF-8 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: UTF-8 OS Locale: sv_SE -sv_SE -Swedish (Sweden) -ISO-8859-1 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-1 OS Locale: sv_SE.ISO8859-1 -sv_SE -Swedish (Sweden) -ISO-8859-1 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-1 OS Locale: sv_SE.ISO8859-15 -sv_SE -Swedish (Sweden) -ISO-8859-15 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-15 OS Locale: sv_SE.ISO8859-15@euro -sv_SE -Swedish (Sweden) -ISO-8859-15 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-15 OS Locale: sv_SE.UTF-8 -sv_SE -Swedish (Sweden) -UTF-8 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: UTF-8 OS Locale: sv_SE.UTF-8@euro -sv_SE -Swedish (Sweden) -UTF-8 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: UTF-8 OS Locale: th -th_TH -Thai (Thailand) -TIS-620 +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: TIS-620 OS Locale: th_TH -th_TH -Thai (Thailand) -TIS-620 +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: TIS-620 OS Locale: th_TH.ISO8859-11 -th_TH -Thai (Thailand) -TIS-620 +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: TIS-620 OS Locale: th_TH.TIS620 -th_TH -Thai (Thailand) -TIS-620 +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: TIS-620 OS Locale: th_TH.UTF-8 -th_TH -Thai (Thailand) -UTF-8 +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: UTF-8 OS Locale: tr -tr_TR -Turkish (Turkey) -ISO-8859-9 +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: ISO-8859-9 OS Locale: tr_TR -tr_TR -Turkish (Turkey) -ISO-8859-9 +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: ISO-8859-9 OS Locale: tr_TR.ISO8859-9 -tr_TR -Turkish (Turkey) -ISO-8859-9 +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: ISO-8859-9 OS Locale: tr_TR.UTF-8 -tr_TR -Turkish (Turkey) -UTF-8 +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: UTF-8 OS Locale: zh -zh_CN -Chinese (China) -GB2312 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB2312 OS Locale: zh.GBK -zh_CN -Chinese (China) -GBK +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GBK OS Locale: zh.UTF-8 -zh_CN -Chinese (China) -UTF-8 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 OS Locale: zh_CN.EUC -zh_CN -Chinese (China) -GB2312 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB2312 OS Locale: zh_CN.EUC@pinyin -zh_CN -Chinese (China) -GB2312 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB2312 OS Locale: zh_CN.EUC@radical -zh_CN -Chinese (China) -GB2312 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB2312 OS Locale: zh_CN.EUC@stroke -zh_CN -Chinese (China) -GB2312 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB2312 OS Locale: zh_CN.GB18030 -zh_CN -Chinese (China) -GB18030 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB18030 OS Locale: zh_CN.GB18030@pinyin -zh_CN -Chinese (China) -GB18030 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB18030 OS Locale: zh_CN.GB18030@radical -zh_CN -Chinese (China) -GB18030 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB18030 OS Locale: zh_CN.GB18030@stroke -zh_CN -Chinese (China) -GB18030 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB18030 OS Locale: zh_CN.GBK -zh_CN -Chinese (China) -GBK +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GBK OS Locale: zh_CN.GBK@pinyin -zh_CN -Chinese (China) -GBK +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GBK OS Locale: zh_CN.GBK@radical -zh_CN -Chinese (China) -GBK +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GBK OS Locale: zh_CN.GBK@stroke -zh_CN -Chinese (China) -GBK +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GBK OS Locale: zh_CN.UTF-8 -zh_CN -Chinese (China) -UTF-8 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 OS Locale: zh_CN.UTF-8@pinyin -zh_CN -Chinese (China) -UTF-8 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 OS Locale: zh_CN.UTF-8@radical -zh_CN -Chinese (China) -UTF-8 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 OS Locale: zh_CN.UTF-8@stroke -zh_CN -Chinese (China) -UTF-8 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 OS Locale: zh_HK.BIG5HK -zh_HK -Chinese (Hong Kong) -Big5-HKSCS +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: x-Big5-HKSCS-2001 OS Locale: zh_HK.BIG5HK@radical -zh_HK -Chinese (Hong Kong) -Big5-HKSCS +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: x-Big5-HKSCS-2001 OS Locale: zh_HK.BIG5HK@stroke -zh_HK -Chinese (Hong Kong) -Big5-HKSCS +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: x-Big5-HKSCS-2001 OS Locale: zh_HK.UTF-8 -zh_HK -Chinese (Hong Kong) -UTF-8 +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: UTF-8 OS Locale: zh_HK.UTF-8@radical -zh_HK -Chinese (Hong Kong) -UTF-8 +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: UTF-8 OS Locale: zh_HK.UTF-8@stroke -zh_HK -Chinese (Hong Kong) -UTF-8 +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: UTF-8 OS Locale: zh_TW -zh_TW -Chinese (Taiwan) -x-EUC-TW +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-EUC-TW OS Locale: zh_TW.BIG5 -zh_TW -Chinese (Taiwan) -Big5 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-Big5-Solaris OS Locale: zh_TW.BIG5@pinyin -zh_TW -Chinese (Taiwan) -Big5 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-Big5-Solaris OS Locale: zh_TW.BIG5@radical -zh_TW -Chinese (Taiwan) -Big5 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-Big5-Solaris OS Locale: zh_TW.BIG5@stroke -zh_TW -Chinese (Taiwan) -Big5 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-Big5-Solaris OS Locale: zh_TW.BIG5@zhuyin -zh_TW -Chinese (Taiwan) -Big5 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-Big5-Solaris OS Locale: zh_TW.EUC -zh_TW -Chinese (Taiwan) -x-EUC-TW +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-EUC-TW OS Locale: zh_TW.EUC@pinyin -zh_TW -Chinese (Taiwan) -x-EUC-TW +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-EUC-TW OS Locale: zh_TW.EUC@radical -zh_TW -Chinese (Taiwan) -x-EUC-TW +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-EUC-TW OS Locale: zh_TW.EUC@stroke -zh_TW -Chinese (Taiwan) -x-EUC-TW +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-EUC-TW OS Locale: zh_TW.EUC@zhuyin -zh_TW -Chinese (Taiwan) -x-EUC-TW +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-EUC-TW OS Locale: zh_TW.UTF-8 -zh_TW -Chinese (Taiwan) -UTF-8 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: UTF-8 OS Locale: zh_TW.UTF-8@pinyin -zh_TW -Chinese (Taiwan) -UTF-8 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: UTF-8 OS Locale: zh_TW.UTF-8@radical -zh_TW -Chinese (Taiwan) -UTF-8 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: UTF-8 OS Locale: zh_TW.UTF-8@stroke -zh_TW -Chinese (Taiwan) -UTF-8 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: UTF-8 OS Locale: zh_TW.UTF-8@zhuyin -zh_TW -Chinese (Taiwan) -UTF-8 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: UTF-8 + +Testing some typical combinations + + +OS Locale (LC_CTYPE: ja_JP.UTF-8, LC_MESSAGES: zh_CN.UTF-8) +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: UTF-8 + +OS Locale (LC_CTYPE: zh_CN.UTF-8, LC_MESSAGES: en_US.UTF-8) +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 + +OS Locale (LC_CTYPE: C, LC_MESSAGES: zh_CN.UTF-8) +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: en, Name: English +default charset: US-ASCII
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Locale/data/deflocale.sol10.fmtasdefault Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,1725 @@ + Solaris 10 3/05 s10_74L2a SPARC + + (copyright from `uname -a` goes here) + +SunOS deltas4 5.10 Generic_142900-03 sun4u sparc SUNW,Sun-Blade-2500 +Testing all available locales + +OS Locale: C +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: US-ASCII + +OS Locale: POSIX +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: US-ASCII + +OS Locale: ar +default locale: ID: ar_EG, Name: Arabic (Egypt) +display locale: ID: ar_EG, Name: Arabic (Egypt) +format locale: ID: ar_EG, Name: Arabic (Egypt) +default charset: ISO-8859-6 + +OS Locale: ar_EG.UTF-8 +default locale: ID: ar_EG, Name: Arabic (Egypt) +display locale: ID: ar_EG, Name: Arabic (Egypt) +format locale: ID: ar_EG, Name: Arabic (Egypt) +default charset: UTF-8 + +OS Locale: ar_SA.UTF-8 +default locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +display locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +format locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +default charset: UTF-8 + +OS Locale: bg_BG +default locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +display locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +format locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +default charset: ISO-8859-5 + +OS Locale: bg_BG.ISO8859-5 +default locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +display locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +format locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +default charset: ISO-8859-5 + +OS Locale: ca +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-1 + +OS Locale: ca_ES +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-1 + +OS Locale: ca_ES.ISO8859-1 +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-1 + +OS Locale: ca_ES.ISO8859-15 +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-15 + +OS Locale: ca_ES.ISO8859-15@euro +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: ca_ES, Name: Catalan (Spain) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: ISO-8859-15 + +OS Locale: cs_CZ +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: ISO-8859-2 + +OS Locale: cs_CZ.ISO8859-2 +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: ISO-8859-2 + +OS Locale: cs_CZ.UTF-8 +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: UTF-8 + +OS Locale: cs_CZ.UTF-8@euro +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: UTF-8 + +OS Locale: cz +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: cs_CZ, Name: Czech (Czech Republic) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: ISO-8859-2 + +OS Locale: da +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-1 + +OS Locale: da.ISO8859-15 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-15 + +OS Locale: da_DK +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-1 + +OS Locale: da_DK.ISO8859-1 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-1 + +OS Locale: da_DK.ISO8859-15 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-15 + +OS Locale: da_DK.ISO8859-15@euro +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: da_DK, Name: Danish (Denmark) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: ISO-8859-15 + +OS Locale: de +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-1 + +OS Locale: de.ISO8859-15 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-15 + +OS Locale: de.UTF-8 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: UTF-8 + +OS Locale: de_AT +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-1 + +OS Locale: de_AT.ISO8859-1 +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-1 + +OS Locale: de_AT.ISO8859-15 +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-15 + +OS Locale: de_AT.ISO8859-15@euro +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: de_AT, Name: German (Austria) +format locale: ID: de_AT, Name: German (Austria) +default charset: ISO-8859-15 + +OS Locale: de_CH +default locale: ID: de_CH, Name: German (Switzerland) +display locale: ID: de_CH, Name: German (Switzerland) +format locale: ID: de_CH, Name: German (Switzerland) +default charset: ISO-8859-1 + +OS Locale: de_CH.ISO8859-1 +default locale: ID: de_CH, Name: German (Switzerland) +display locale: ID: de_CH, Name: German (Switzerland) +format locale: ID: de_CH, Name: German (Switzerland) +default charset: ISO-8859-1 + +OS Locale: de_DE +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-1 + +OS Locale: de_DE.ISO8859-1 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-1 + +OS Locale: de_DE.ISO8859-15 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-15 + +OS Locale: de_DE.ISO8859-15@euro +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: ISO-8859-15 + +OS Locale: de_DE.UTF-8 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: UTF-8 + +OS Locale: de_DE.UTF-8@euro +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: de_DE, Name: German (Germany) +format locale: ID: de_DE, Name: German (Germany) +default charset: UTF-8 + +OS Locale: el +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 + +OS Locale: el.sun_eu_greek +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 + +OS Locale: el_GR +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 + +OS Locale: el_GR.ISO8859-7 +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 + +OS Locale: el_GR.ISO8859-7@euro +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: el_GR, Name: Greek (Greece) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: ISO-8859-7 + +OS Locale: en_AU +default locale: ID: en_AU, Name: English (Australia) +display locale: ID: en_AU, Name: English (Australia) +format locale: ID: en_AU, Name: English (Australia) +default charset: ISO-8859-1 + +OS Locale: en_AU.ISO8859-1 +default locale: ID: en_AU, Name: English (Australia) +display locale: ID: en_AU, Name: English (Australia) +format locale: ID: en_AU, Name: English (Australia) +default charset: ISO-8859-1 + +OS Locale: en_CA +default locale: ID: en_CA, Name: English (Canada) +display locale: ID: en_CA, Name: English (Canada) +format locale: ID: en_CA, Name: English (Canada) +default charset: ISO-8859-1 + +OS Locale: en_CA.ISO8859-1 +default locale: ID: en_CA, Name: English (Canada) +display locale: ID: en_CA, Name: English (Canada) +format locale: ID: en_CA, Name: English (Canada) +default charset: ISO-8859-1 + +OS Locale: en_CA.UTF-8 +default locale: ID: en_CA, Name: English (Canada) +display locale: ID: en_CA, Name: English (Canada) +format locale: ID: en_CA, Name: English (Canada) +default charset: UTF-8 + +OS Locale: en_GB +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: ISO-8859-1 + +OS Locale: en_GB.ISO8859-1 +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: ISO-8859-1 + +OS Locale: en_GB.ISO8859-15 +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: ISO-8859-15 + +OS Locale: en_GB.ISO8859-15@euro +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: ISO-8859-15 + +OS Locale: en_IE +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-1 + +OS Locale: en_IE.ISO8859-1 +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-1 + +OS Locale: en_IE.ISO8859-15 +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-15 + +OS Locale: en_IE.ISO8859-15@euro +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: ISO-8859-15 + +OS Locale: en_NZ +default locale: ID: en_NZ, Name: English (New Zealand) +display locale: ID: en_NZ, Name: English (New Zealand) +format locale: ID: en_NZ, Name: English (New Zealand) +default charset: ISO-8859-1 + +OS Locale: en_NZ.ISO8859-1 +default locale: ID: en_NZ, Name: English (New Zealand) +display locale: ID: en_NZ, Name: English (New Zealand) +format locale: ID: en_NZ, Name: English (New Zealand) +default charset: ISO-8859-1 + +OS Locale: en_US +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: ISO-8859-1 + +OS Locale: en_US.ISO8859-1 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: ISO-8859-1 + +OS Locale: en_US.ISO8859-15 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: ISO-8859-15 + +OS Locale: en_US.ISO8859-15@euro +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: ISO-8859-15 + +OS Locale: en_US.UTF-8 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: UTF-8 + +OS Locale: es +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-1 + +OS Locale: es.ISO8859-15 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-15 + +OS Locale: es.UTF-8 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: UTF-8 + +OS Locale: es_AR +default locale: ID: es_AR, Name: Spanish (Argentina) +display locale: ID: es_AR, Name: Spanish (Argentina) +format locale: ID: es_AR, Name: Spanish (Argentina) +default charset: ISO-8859-1 + +OS Locale: es_AR.ISO8859-1 +default locale: ID: es_AR, Name: Spanish (Argentina) +display locale: ID: es_AR, Name: Spanish (Argentina) +format locale: ID: es_AR, Name: Spanish (Argentina) +default charset: ISO-8859-1 + +OS Locale: es_BO +default locale: ID: es_BO, Name: Spanish (Bolivia) +display locale: ID: es_BO, Name: Spanish (Bolivia) +format locale: ID: es_BO, Name: Spanish (Bolivia) +default charset: ISO-8859-1 + +OS Locale: es_BO.ISO8859-1 +default locale: ID: es_BO, Name: Spanish (Bolivia) +display locale: ID: es_BO, Name: Spanish (Bolivia) +format locale: ID: es_BO, Name: Spanish (Bolivia) +default charset: ISO-8859-1 + +OS Locale: es_CL +default locale: ID: es_CL, Name: Spanish (Chile) +display locale: ID: es_CL, Name: Spanish (Chile) +format locale: ID: es_CL, Name: Spanish (Chile) +default charset: ISO-8859-1 + +OS Locale: es_CL.ISO8859-1 +default locale: ID: es_CL, Name: Spanish (Chile) +display locale: ID: es_CL, Name: Spanish (Chile) +format locale: ID: es_CL, Name: Spanish (Chile) +default charset: ISO-8859-1 + +OS Locale: es_CO +default locale: ID: es_CO, Name: Spanish (Colombia) +display locale: ID: es_CO, Name: Spanish (Colombia) +format locale: ID: es_CO, Name: Spanish (Colombia) +default charset: ISO-8859-1 + +OS Locale: es_CO.ISO8859-1 +default locale: ID: es_CO, Name: Spanish (Colombia) +display locale: ID: es_CO, Name: Spanish (Colombia) +format locale: ID: es_CO, Name: Spanish (Colombia) +default charset: ISO-8859-1 + +OS Locale: es_CR +default locale: ID: es_CR, Name: Spanish (Costa Rica) +display locale: ID: es_CR, Name: Spanish (Costa Rica) +format locale: ID: es_CR, Name: Spanish (Costa Rica) +default charset: ISO-8859-1 + +OS Locale: es_CR.ISO8859-1 +default locale: ID: es_CR, Name: Spanish (Costa Rica) +display locale: ID: es_CR, Name: Spanish (Costa Rica) +format locale: ID: es_CR, Name: Spanish (Costa Rica) +default charset: ISO-8859-1 + +OS Locale: es_EC +default locale: ID: es_EC, Name: Spanish (Ecuador) +display locale: ID: es_EC, Name: Spanish (Ecuador) +format locale: ID: es_EC, Name: Spanish (Ecuador) +default charset: ISO-8859-1 + +OS Locale: es_EC.ISO8859-1 +default locale: ID: es_EC, Name: Spanish (Ecuador) +display locale: ID: es_EC, Name: Spanish (Ecuador) +format locale: ID: es_EC, Name: Spanish (Ecuador) +default charset: ISO-8859-1 + +OS Locale: es_ES +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-1 + +OS Locale: es_ES.ISO8859-1 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-1 + +OS Locale: es_ES.ISO8859-15 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-15 + +OS Locale: es_ES.ISO8859-15@euro +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: ISO-8859-15 + +OS Locale: es_ES.UTF-8 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: UTF-8 + +OS Locale: es_ES.UTF-8@euro +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: es_ES, Name: Spanish (Spain) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: UTF-8 + +OS Locale: es_GT +default locale: ID: es_GT, Name: Spanish (Guatemala) +display locale: ID: es_GT, Name: Spanish (Guatemala) +format locale: ID: es_GT, Name: Spanish (Guatemala) +default charset: ISO-8859-1 + +OS Locale: es_GT.ISO8859-1 +default locale: ID: es_GT, Name: Spanish (Guatemala) +display locale: ID: es_GT, Name: Spanish (Guatemala) +format locale: ID: es_GT, Name: Spanish (Guatemala) +default charset: ISO-8859-1 + +OS Locale: es_MX +default locale: ID: es_MX, Name: Spanish (Mexico) +display locale: ID: es_MX, Name: Spanish (Mexico) +format locale: ID: es_MX, Name: Spanish (Mexico) +default charset: ISO-8859-1 + +OS Locale: es_MX.ISO8859-1 +default locale: ID: es_MX, Name: Spanish (Mexico) +display locale: ID: es_MX, Name: Spanish (Mexico) +format locale: ID: es_MX, Name: Spanish (Mexico) +default charset: ISO-8859-1 + +OS Locale: es_MX.UTF-8 +default locale: ID: es_MX, Name: Spanish (Mexico) +display locale: ID: es_MX, Name: Spanish (Mexico) +format locale: ID: es_MX, Name: Spanish (Mexico) +default charset: UTF-8 + +OS Locale: es_NI +default locale: ID: es_NI, Name: Spanish (Nicaragua) +display locale: ID: es_NI, Name: Spanish (Nicaragua) +format locale: ID: es_NI, Name: Spanish (Nicaragua) +default charset: ISO-8859-1 + +OS Locale: es_NI.ISO8859-1 +default locale: ID: es_NI, Name: Spanish (Nicaragua) +display locale: ID: es_NI, Name: Spanish (Nicaragua) +format locale: ID: es_NI, Name: Spanish (Nicaragua) +default charset: ISO-8859-1 + +OS Locale: es_PA +default locale: ID: es_PA, Name: Spanish (Panama) +display locale: ID: es_PA, Name: Spanish (Panama) +format locale: ID: es_PA, Name: Spanish (Panama) +default charset: ISO-8859-1 + +OS Locale: es_PA.ISO8859-1 +default locale: ID: es_PA, Name: Spanish (Panama) +display locale: ID: es_PA, Name: Spanish (Panama) +format locale: ID: es_PA, Name: Spanish (Panama) +default charset: ISO-8859-1 + +OS Locale: es_PE +default locale: ID: es_PE, Name: Spanish (Peru) +display locale: ID: es_PE, Name: Spanish (Peru) +format locale: ID: es_PE, Name: Spanish (Peru) +default charset: ISO-8859-1 + +OS Locale: es_PE.ISO8859-1 +default locale: ID: es_PE, Name: Spanish (Peru) +display locale: ID: es_PE, Name: Spanish (Peru) +format locale: ID: es_PE, Name: Spanish (Peru) +default charset: ISO-8859-1 + +OS Locale: es_PY +default locale: ID: es_PY, Name: Spanish (Paraguay) +display locale: ID: es_PY, Name: Spanish (Paraguay) +format locale: ID: es_PY, Name: Spanish (Paraguay) +default charset: ISO-8859-1 + +OS Locale: es_PY.ISO8859-1 +default locale: ID: es_PY, Name: Spanish (Paraguay) +display locale: ID: es_PY, Name: Spanish (Paraguay) +format locale: ID: es_PY, Name: Spanish (Paraguay) +default charset: ISO-8859-1 + +OS Locale: es_SV +default locale: ID: es_SV, Name: Spanish (El Salvador) +display locale: ID: es_SV, Name: Spanish (El Salvador) +format locale: ID: es_SV, Name: Spanish (El Salvador) +default charset: ISO-8859-1 + +OS Locale: es_SV.ISO8859-1 +default locale: ID: es_SV, Name: Spanish (El Salvador) +display locale: ID: es_SV, Name: Spanish (El Salvador) +format locale: ID: es_SV, Name: Spanish (El Salvador) +default charset: ISO-8859-1 + +OS Locale: es_UY +default locale: ID: es_UY, Name: Spanish (Uruguay) +display locale: ID: es_UY, Name: Spanish (Uruguay) +format locale: ID: es_UY, Name: Spanish (Uruguay) +default charset: ISO-8859-1 + +OS Locale: es_UY.ISO8859-1 +default locale: ID: es_UY, Name: Spanish (Uruguay) +display locale: ID: es_UY, Name: Spanish (Uruguay) +format locale: ID: es_UY, Name: Spanish (Uruguay) +default charset: ISO-8859-1 + +OS Locale: es_VE +default locale: ID: es_VE, Name: Spanish (Venezuela) +display locale: ID: es_VE, Name: Spanish (Venezuela) +format locale: ID: es_VE, Name: Spanish (Venezuela) +default charset: ISO-8859-1 + +OS Locale: es_VE.ISO8859-1 +default locale: ID: es_VE, Name: Spanish (Venezuela) +display locale: ID: es_VE, Name: Spanish (Venezuela) +format locale: ID: es_VE, Name: Spanish (Venezuela) +default charset: ISO-8859-1 + +OS Locale: et +default locale: ID: et_EE, Name: Estonian (Estonia) +display locale: ID: et_EE, Name: Estonian (Estonia) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: ISO-8859-15 + +OS Locale: et_EE +default locale: ID: et_EE, Name: Estonian (Estonia) +display locale: ID: et_EE, Name: Estonian (Estonia) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: ISO-8859-15 + +OS Locale: et_EE.ISO8859-15 +default locale: ID: et_EE, Name: Estonian (Estonia) +display locale: ID: et_EE, Name: Estonian (Estonia) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: ISO-8859-15 + +OS Locale: fi +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-1 + +OS Locale: fi.ISO8859-15 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-15 + +OS Locale: fi_FI +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-1 + +OS Locale: fi_FI.ISO8859-1 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-1 + +OS Locale: fi_FI.ISO8859-15 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-15 + +OS Locale: fi_FI.ISO8859-15@euro +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: ISO-8859-15 + +OS Locale: fi_FI.UTF-8 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: fi_FI, Name: Finnish (Finland) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: UTF-8 + +OS Locale: fr +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-1 + +OS Locale: fr.ISO8859-15 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-15 + +OS Locale: fr.UTF-8 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: UTF-8 + +OS Locale: fr_BE +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-1 + +OS Locale: fr_BE.ISO8859-1 +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-1 + +OS Locale: fr_BE.ISO8859-15 +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-15 + +OS Locale: fr_BE.ISO8859-15@euro +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: ISO-8859-15 + +OS Locale: fr_BE.UTF-8 +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: UTF-8 + +OS Locale: fr_BE.UTF-8@euro +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: fr_BE, Name: French (Belgium) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: UTF-8 + +OS Locale: fr_CA +default locale: ID: fr_CA, Name: French (Canada) +display locale: ID: fr_CA, Name: French (Canada) +format locale: ID: fr_CA, Name: French (Canada) +default charset: ISO-8859-1 + +OS Locale: fr_CA.ISO8859-1 +default locale: ID: fr_CA, Name: French (Canada) +display locale: ID: fr_CA, Name: French (Canada) +format locale: ID: fr_CA, Name: French (Canada) +default charset: ISO-8859-1 + +OS Locale: fr_CA.UTF-8 +default locale: ID: fr_CA, Name: French (Canada) +display locale: ID: fr_CA, Name: French (Canada) +format locale: ID: fr_CA, Name: French (Canada) +default charset: UTF-8 + +OS Locale: fr_CH +default locale: ID: fr_CH, Name: French (Switzerland) +display locale: ID: fr_CH, Name: French (Switzerland) +format locale: ID: fr_CH, Name: French (Switzerland) +default charset: ISO-8859-1 + +OS Locale: fr_CH.ISO8859-1 +default locale: ID: fr_CH, Name: French (Switzerland) +display locale: ID: fr_CH, Name: French (Switzerland) +format locale: ID: fr_CH, Name: French (Switzerland) +default charset: ISO-8859-1 + +OS Locale: fr_FR +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-1 + +OS Locale: fr_FR.ISO8859-1 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-1 + +OS Locale: fr_FR.ISO8859-15 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-15 + +OS Locale: fr_FR.ISO8859-15@euro +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: ISO-8859-15 + +OS Locale: fr_FR.UTF-8 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: UTF-8 + +OS Locale: fr_FR.UTF-8@euro +default locale: ID: fr_FR, Name: French (France) +display locale: ID: fr_FR, Name: French (France) +format locale: ID: fr_FR, Name: French (France) +default charset: UTF-8 + +OS Locale: he +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: ISO-8859-8 + +OS Locale: he_IL +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: ISO-8859-8 + +OS Locale: he_IL.UTF-8 +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: iw_IL, Name: Hebrew (Israel) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: UTF-8 + +OS Locale: hi_IN.UTF-8 +default locale: ID: hi_IN, Name: Hindi (India) +display locale: ID: hi_IN, Name: Hindi (India) +format locale: ID: hi_IN, Name: Hindi (India) +default charset: UTF-8 + +OS Locale: hr_HR +default locale: ID: hr_HR, Name: Croatian (Croatia) +display locale: ID: hr_HR, Name: Croatian (Croatia) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: ISO-8859-2 + +OS Locale: hr_HR.ISO8859-2 +default locale: ID: hr_HR, Name: Croatian (Croatia) +display locale: ID: hr_HR, Name: Croatian (Croatia) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: ISO-8859-2 + +OS Locale: hu +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: ISO-8859-2 + +OS Locale: hu_HU +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: ISO-8859-2 + +OS Locale: hu_HU.ISO8859-2 +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: ISO-8859-2 + +OS Locale: hu_HU.UTF-8 +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: hu_HU, Name: Hungarian (Hungary) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: UTF-8 + +OS Locale: is_IS +default locale: ID: is_IS, Name: Icelandic (Iceland) +display locale: ID: is_IS, Name: Icelandic (Iceland) +format locale: ID: is_IS, Name: Icelandic (Iceland) +default charset: ISO-8859-1 + +OS Locale: is_IS.ISO8859-1 +default locale: ID: is_IS, Name: Icelandic (Iceland) +display locale: ID: is_IS, Name: Icelandic (Iceland) +format locale: ID: is_IS, Name: Icelandic (Iceland) +default charset: ISO-8859-1 + +OS Locale: iso_8859_1 +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: US-ASCII + +OS Locale: it +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-1 + +OS Locale: it.ISO8859-15 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-15 + +OS Locale: it.UTF-8 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: UTF-8 + +OS Locale: it_IT +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-1 + +OS Locale: it_IT.ISO8859-1 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-1 + +OS Locale: it_IT.ISO8859-15 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-15 + +OS Locale: it_IT.ISO8859-15@euro +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: ISO-8859-15 + +OS Locale: it_IT.UTF-8 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: UTF-8 + +OS Locale: it_IT.UTF-8@euro +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: it_IT, Name: Italian (Italy) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: UTF-8 + +OS Locale: ja +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-eucJP-Open + +OS Locale: ja_JP.PCK +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-PCK + +OS Locale: ja_JP.UTF-8 +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: UTF-8 + +OS Locale: ja_JP.eucJP +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: x-eucJP-Open + +OS Locale: ko +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: EUC-KR + +OS Locale: ko.UTF-8 +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: UTF-8 + +OS Locale: ko_KR.EUC +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: EUC-KR + +OS Locale: ko_KR.EUC@dict +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: EUC-KR + +OS Locale: ko_KR.UTF-8 +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: UTF-8 + +OS Locale: ko_KR.UTF-8@dict +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: ko_KR, Name: Korean (South Korea) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: UTF-8 + +OS Locale: lt +default locale: ID: lt_LT, Name: Lithuanian (Lithuania) +display locale: ID: lt_LT, Name: Lithuanian (Lithuania) +format locale: ID: lt_LT, Name: Lithuanian (Lithuania) +default charset: ISO-8859-13 + +OS Locale: lt_LT +default locale: ID: lt_LT, Name: Lithuanian (Lithuania) +display locale: ID: lt_LT, Name: Lithuanian (Lithuania) +format locale: ID: lt_LT, Name: Lithuanian (Lithuania) +default charset: ISO-8859-13 + +OS Locale: lt_LT.ISO8859-13 +default locale: ID: lt_LT, Name: Lithuanian (Lithuania) +display locale: ID: lt_LT, Name: Lithuanian (Lithuania) +format locale: ID: lt_LT, Name: Lithuanian (Lithuania) +default charset: ISO-8859-13 + +OS Locale: lv +default locale: ID: lv_LV, Name: Latvian (Latvia) +display locale: ID: lv_LV, Name: Latvian (Latvia) +format locale: ID: lv_LV, Name: Latvian (Latvia) +default charset: ISO-8859-13 + +OS Locale: lv_LV +default locale: ID: lv_LV, Name: Latvian (Latvia) +display locale: ID: lv_LV, Name: Latvian (Latvia) +format locale: ID: lv_LV, Name: Latvian (Latvia) +default charset: ISO-8859-13 + +OS Locale: lv_LV.ISO8859-13 +default locale: ID: lv_LV, Name: Latvian (Latvia) +display locale: ID: lv_LV, Name: Latvian (Latvia) +format locale: ID: lv_LV, Name: Latvian (Latvia) +default charset: ISO-8859-13 + +OS Locale: mk_MK +default locale: ID: mk_MK, Name: Macedonian (Macedonia) +display locale: ID: mk_MK, Name: Macedonian (Macedonia) +format locale: ID: mk_MK, Name: Macedonian (Macedonia) +default charset: ISO-8859-5 + +OS Locale: mk_MK.ISO8859-5 +default locale: ID: mk_MK, Name: Macedonian (Macedonia) +display locale: ID: mk_MK, Name: Macedonian (Macedonia) +format locale: ID: mk_MK, Name: Macedonian (Macedonia) +default charset: ISO-8859-5 + +OS Locale: nl +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-1 + +OS Locale: nl.ISO8859-15 +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-15 + +OS Locale: nl_BE +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-1 + +OS Locale: nl_BE.ISO8859-1 +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-1 + +OS Locale: nl_BE.ISO8859-15 +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-15 + +OS Locale: nl_BE.ISO8859-15@euro +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: nl_BE, Name: Dutch (Belgium) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: ISO-8859-15 + +OS Locale: nl_NL +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-1 + +OS Locale: nl_NL.ISO8859-1 +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-1 + +OS Locale: nl_NL.ISO8859-15 +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-15 + +OS Locale: nl_NL.ISO8859-15@euro +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: nl_NL, Name: Dutch (Netherlands) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: ISO-8859-15 + +OS Locale: no +default locale: ID: no_NO, Name: Norwegian (Norway) +display locale: ID: no_NO, Name: Norwegian (Norway) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: ISO-8859-1 + +OS Locale: no_NO +default locale: ID: no_NO, Name: Norwegian (Norway) +display locale: ID: no_NO, Name: Norwegian (Norway) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: ISO-8859-1 + +OS Locale: no_NO.ISO8859-1@bokmal +default locale: ID: no_NO, Name: Norwegian (Norway) +display locale: ID: no_NO, Name: Norwegian (Norway) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: ISO-8859-1 + +OS Locale: no_NO.ISO8859-1@nynorsk +default locale: ID: no_NO_NY, Name: Norwegian (Norway,Nynorsk) +display locale: ID: no_NO_NY, Name: Norwegian (Norway,Nynorsk) +format locale: ID: no_NO_NY, Name: Norwegian (Norway,Nynorsk) +default charset: ISO-8859-1 + +OS Locale: no_NY +default locale: ID: no_, Name: Norwegian () +display locale: ID: no_, Name: Norwegian () +format locale: ID: no_, Name: Norwegian () +default charset: ISO-8859-1 + +OS Locale: nr +default locale: ID: nr, Name: South Ndebele +display locale: ID: nr, Name: South Ndebele +format locale: ID: nr, Name: South Ndebele +default charset: ISO-8859-2 + +OS Locale: pl +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: ISO-8859-2 + +OS Locale: pl.UTF-8 +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: UTF-8 + +OS Locale: pl_PL +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: ISO-8859-2 + +OS Locale: pl_PL.ISO8859-2 +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: ISO-8859-2 + +OS Locale: pl_PL.UTF-8 +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: pl_PL, Name: Polish (Poland) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: UTF-8 + +OS Locale: pt +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-1 + +OS Locale: pt.ISO8859-15 +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-15 + +OS Locale: pt_BR +default locale: ID: pt_BR, Name: Portuguese (Brazil) +display locale: ID: pt_BR, Name: Portuguese (Brazil) +format locale: ID: pt_BR, Name: Portuguese (Brazil) +default charset: ISO-8859-1 + +OS Locale: pt_BR.ISO8859-1 +default locale: ID: pt_BR, Name: Portuguese (Brazil) +display locale: ID: pt_BR, Name: Portuguese (Brazil) +format locale: ID: pt_BR, Name: Portuguese (Brazil) +default charset: ISO-8859-1 + +OS Locale: pt_BR.UTF-8 +default locale: ID: pt_BR, Name: Portuguese (Brazil) +display locale: ID: pt_BR, Name: Portuguese (Brazil) +format locale: ID: pt_BR, Name: Portuguese (Brazil) +default charset: UTF-8 + +OS Locale: pt_PT +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-1 + +OS Locale: pt_PT.ISO8859-1 +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-1 + +OS Locale: pt_PT.ISO8859-15 +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-15 + +OS Locale: pt_PT.ISO8859-15@euro +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: pt_PT, Name: Portuguese (Portugal) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: ISO-8859-15 + +OS Locale: ro_RO +default locale: ID: ro_RO, Name: Romanian (Romania) +display locale: ID: ro_RO, Name: Romanian (Romania) +format locale: ID: ro_RO, Name: Romanian (Romania) +default charset: ISO-8859-2 + +OS Locale: ro_RO.ISO8859-2 +default locale: ID: ro_RO, Name: Romanian (Romania) +display locale: ID: ro_RO, Name: Romanian (Romania) +format locale: ID: ro_RO, Name: Romanian (Romania) +default charset: ISO-8859-2 + +OS Locale: ru +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: ISO-8859-5 + +OS Locale: ru.UTF-8 +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: UTF-8 + +OS Locale: ru.koi8-r +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: KOI8-R + +OS Locale: ru_RU +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: ISO-8859-5 + +OS Locale: ru_RU.ANSI1251 +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: windows-1251 + +OS Locale: ru_RU.ISO8859-5 +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: ISO-8859-5 + +OS Locale: ru_RU.KOI8-R +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: KOI8-R + +OS Locale: ru_RU.UTF-8 +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: ru_RU, Name: Russian (Russia) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: UTF-8 + +OS Locale: sh_BA +default locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +display locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +format locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +default charset: ISO-8859-2 + +OS Locale: sh_BA.ISO8859-2@bosnia +default locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +display locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +format locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +default charset: ISO-8859-2 + +OS Locale: sk_SK +default locale: ID: sk_SK, Name: Slovak (Slovakia) +display locale: ID: sk_SK, Name: Slovak (Slovakia) +format locale: ID: sk_SK, Name: Slovak (Slovakia) +default charset: ISO-8859-2 + +OS Locale: sk_SK.ISO8859-2 +default locale: ID: sk_SK, Name: Slovak (Slovakia) +display locale: ID: sk_SK, Name: Slovak (Slovakia) +format locale: ID: sk_SK, Name: Slovak (Slovakia) +default charset: ISO-8859-2 + +OS Locale: sl_SI +default locale: ID: sl_SI, Name: Slovenian (Slovenia) +display locale: ID: sl_SI, Name: Slovenian (Slovenia) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: ISO-8859-2 + +OS Locale: sl_SI.ISO8859-2 +default locale: ID: sl_SI, Name: Slovenian (Slovenia) +display locale: ID: sl_SI, Name: Slovenian (Slovenia) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: ISO-8859-2 + +OS Locale: sq_AL +default locale: ID: sq_AL, Name: Albanian (Albania) +display locale: ID: sq_AL, Name: Albanian (Albania) +format locale: ID: sq_AL, Name: Albanian (Albania) +default charset: ISO-8859-2 + +OS Locale: sq_AL.ISO8859-2 +default locale: ID: sq_AL, Name: Albanian (Albania) +display locale: ID: sq_AL, Name: Albanian (Albania) +format locale: ID: sq_AL, Name: Albanian (Albania) +default charset: ISO-8859-2 + +OS Locale: sr_SP +default locale: ID: sr, Name: Serbian +display locale: ID: sr, Name: Serbian +format locale: ID: sr, Name: Serbian +default charset: ISO-8859-5 + +OS Locale: sr_YU +default locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +display locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +format locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +default charset: ISO-8859-5 + +OS Locale: sr_YU.ISO8859-5 +default locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +display locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +format locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +default charset: ISO-8859-5 + +OS Locale: sv +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-1 + +OS Locale: sv.ISO8859-15 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-15 + +OS Locale: sv.UTF-8 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: UTF-8 + +OS Locale: sv_SE +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-1 + +OS Locale: sv_SE.ISO8859-1 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-1 + +OS Locale: sv_SE.ISO8859-15 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-15 + +OS Locale: sv_SE.ISO8859-15@euro +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: ISO-8859-15 + +OS Locale: sv_SE.UTF-8 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: UTF-8 + +OS Locale: sv_SE.UTF-8@euro +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: sv_SE, Name: Swedish (Sweden) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: UTF-8 + +OS Locale: th +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: TIS-620 + +OS Locale: th_TH +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: TIS-620 + +OS Locale: th_TH.ISO8859-11 +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: TIS-620 + +OS Locale: th_TH.TIS620 +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: TIS-620 + +OS Locale: th_TH.UTF-8 +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: th_TH, Name: Thai (Thailand) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: UTF-8 + +OS Locale: tr +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: ISO-8859-9 + +OS Locale: tr_TR +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: ISO-8859-9 + +OS Locale: tr_TR.ISO8859-9 +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: ISO-8859-9 + +OS Locale: tr_TR.UTF-8 +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: tr_TR, Name: Turkish (Turkey) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: UTF-8 + +OS Locale: zh +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB2312 + +OS Locale: zh.GBK +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GBK + +OS Locale: zh.UTF-8 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 + +OS Locale: zh_CN.EUC +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB2312 + +OS Locale: zh_CN.EUC@pinyin +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB2312 + +OS Locale: zh_CN.EUC@radical +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB2312 + +OS Locale: zh_CN.EUC@stroke +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB2312 + +OS Locale: zh_CN.GB18030 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB18030 + +OS Locale: zh_CN.GB18030@pinyin +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB18030 + +OS Locale: zh_CN.GB18030@radical +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB18030 + +OS Locale: zh_CN.GB18030@stroke +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GB18030 + +OS Locale: zh_CN.GBK +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GBK + +OS Locale: zh_CN.GBK@pinyin +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GBK + +OS Locale: zh_CN.GBK@radical +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GBK + +OS Locale: zh_CN.GBK@stroke +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GBK + +OS Locale: zh_CN.UTF-8 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 + +OS Locale: zh_CN.UTF-8@pinyin +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 + +OS Locale: zh_CN.UTF-8@radical +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 + +OS Locale: zh_CN.UTF-8@stroke +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 + +OS Locale: zh_HK.BIG5HK +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: x-Big5-HKSCS-2001 + +OS Locale: zh_HK.BIG5HK@radical +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: x-Big5-HKSCS-2001 + +OS Locale: zh_HK.BIG5HK@stroke +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: x-Big5-HKSCS-2001 + +OS Locale: zh_HK.UTF-8 +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: UTF-8 + +OS Locale: zh_HK.UTF-8@radical +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: UTF-8 + +OS Locale: zh_HK.UTF-8@stroke +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: zh_HK, Name: Chinese (Hong Kong) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: UTF-8 + +OS Locale: zh_TW +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-EUC-TW + +OS Locale: zh_TW.BIG5 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-Big5-Solaris + +OS Locale: zh_TW.BIG5@pinyin +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-Big5-Solaris + +OS Locale: zh_TW.BIG5@radical +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-Big5-Solaris + +OS Locale: zh_TW.BIG5@stroke +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-Big5-Solaris + +OS Locale: zh_TW.BIG5@zhuyin +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-Big5-Solaris + +OS Locale: zh_TW.EUC +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-EUC-TW + +OS Locale: zh_TW.EUC@pinyin +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-EUC-TW + +OS Locale: zh_TW.EUC@radical +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-EUC-TW + +OS Locale: zh_TW.EUC@stroke +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-EUC-TW + +OS Locale: zh_TW.EUC@zhuyin +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-EUC-TW + +OS Locale: zh_TW.UTF-8 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: UTF-8 + +OS Locale: zh_TW.UTF-8@pinyin +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: UTF-8 + +OS Locale: zh_TW.UTF-8@radical +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: UTF-8 + +OS Locale: zh_TW.UTF-8@stroke +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: UTF-8 + +OS Locale: zh_TW.UTF-8@zhuyin +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: zh_TW, Name: Chinese (Taiwan) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: UTF-8 + +Testing some typical combinations + + +OS Locale (LC_CTYPE: ja_JP.UTF-8, LC_MESSAGES: zh_CN.UTF-8) +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: UTF-8 + +OS Locale (LC_CTYPE: zh_CN.UTF-8, LC_MESSAGES: en_US.UTF-8) +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: UTF-8 + +OS Locale (LC_CTYPE: C, LC_MESSAGES: zh_CN.UTF-8) +default locale: ID: en, Name: English +display locale: ID: zh_CN, Name: Chinese (China) +format locale: ID: en, Name: English +default charset: US-ASCII
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Locale/data/deflocale.win7 Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,1494 @@ +# OSVersionInfo +# MajorVersion: 6 +# MinorVersion: 1 +# BuildNumber: 7600 +# CSDVersion: + + +OS Locale (lcid: 7f, name: ): Invariant Language (Invariant Country) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 401, name: ar-SA): Arabic (Saudi Arabia) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +default charset: windows-1252 + +OS Locale (lcid: 402, name: bg-BG): Bulgarian (Bulgaria) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +default charset: windows-1252 + +OS Locale (lcid: 403, name: ca-ES): Catalan (Spain) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: windows-1252 + +OS Locale (lcid: 404, name: zh-TW): Chinese (Traditional) (Taiwan) - 950 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: windows-1252 + +OS Locale (lcid: 405, name: cs-CZ): Czech (Czech Republic) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: windows-1252 + +OS Locale (lcid: 406, name: da-DK): Danish (Denmark) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: windows-1252 + +OS Locale (lcid: 407, name: de-DE): German (Germany) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: de_DE, Name: German (Germany) +default charset: windows-1252 + +OS Locale (lcid: 408, name: el-GR): Greek (Greece) - 1253 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: windows-1252 + +OS Locale (lcid: 409, name: en-US): English (United States) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 40b, name: fi-FI): Finnish (Finland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: windows-1252 + +OS Locale (lcid: 40c, name: fr-FR): French (France) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fr_FR, Name: French (France) +default charset: windows-1252 + +OS Locale (lcid: 40d, name: he-IL): Hebrew (Israel) - 1255 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: windows-1252 + +OS Locale (lcid: 40e, name: hu-HU): Hungarian (Hungary) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: windows-1252 + +OS Locale (lcid: 40f, name: is-IS): Icelandic (Iceland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: is_IS, Name: Icelandic (Iceland) +default charset: windows-1252 + +OS Locale (lcid: 410, name: it-IT): Italian (Italy) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: windows-1252 + +OS Locale (lcid: 411, name: ja-JP): Japanese (Japan) - 932 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: windows-1252 + +OS Locale (lcid: 412, name: ko-KR): Korean (Korea) - 949 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: windows-1252 + +OS Locale (lcid: 413, name: nl-NL): Dutch (Netherlands) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: windows-1252 + +OS Locale (lcid: 414, name: nb-NO): Norwegian (Bokmål) (Norway) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: windows-1252 + +OS Locale (lcid: 415, name: pl-PL): Polish (Poland) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: windows-1252 + +OS Locale (lcid: 416, name: pt-BR): Portuguese (Brazil) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: pt_BR, Name: Portuguese (Brazil) +default charset: windows-1252 + +OS Locale (lcid: 417, name: rm-CH): Romansh (Switzerland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: rm_CH, Name: Raeto-Romance (Switzerland) +default charset: windows-1252 + +OS Locale (lcid: 418, name: ro-RO): Romanian (Romania) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ro_RO, Name: Romanian (Romania) +default charset: windows-1252 + +OS Locale (lcid: 419, name: ru-RU): Russian (Russia) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: windows-1252 + +OS Locale (lcid: 41a, name: hr-HR): Croatian (Croatia) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: windows-1252 + +OS Locale (lcid: 41b, name: sk-SK): Slovak (Slovakia) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sk_SK, Name: Slovak (Slovakia) +default charset: windows-1252 + +OS Locale (lcid: 41c, name: sq-AL): Albanian (Albania) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sq_AL, Name: Albanian (Albania) +default charset: windows-1252 + +OS Locale (lcid: 41d, name: sv-SE): Swedish (Sweden) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: windows-1252 + +OS Locale (lcid: 41e, name: th-TH): Thai (Thailand) - 874 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: windows-1252 + +OS Locale (lcid: 41f, name: tr-TR): Turkish (Turkey) - 1254 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: windows-1252 + +OS Locale (lcid: 420, name: ur-PK): Urdu (Islamic Republic of Pakistan) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ur_PK, Name: Urdu (Pakistan) +default charset: windows-1252 + +OS Locale (lcid: 421, name: id-ID): Indonesian (Indonesia) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: in_ID, Name: Indonesian (Indonesia) +default charset: windows-1252 + +OS Locale (lcid: 422, name: uk-UA): Ukrainian (Ukraine) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: uk_UA, Name: Ukrainian (Ukraine) +default charset: windows-1252 + +OS Locale (lcid: 423, name: be-BY): Belarusian (Belarus) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: be_BY, Name: Belarusian (Belarus) +default charset: windows-1252 + +OS Locale (lcid: 424, name: sl-SI): Slovenian (Slovenia) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: windows-1252 + +OS Locale (lcid: 425, name: et-EE): Estonian (Estonia) - 1257 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: windows-1252 + +OS Locale (lcid: 426, name: lv-LV): Latvian (Latvia) - 1257 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: lv_LV, Name: Latvian (Latvia) +default charset: windows-1252 + +OS Locale (lcid: 427, name: lt-LT): Lithuanian (Lithuania) - 1257 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: lt_LT, Name: Lithuanian (Lithuania) +default charset: windows-1252 + +OS Locale (lcid: 428, name: tg-Cyrl-TJ): Tajik (Cyrillic) (Tajikistan) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: tg_TJ, Name: Tajik (Tajikistan) +default charset: windows-1252 + +OS Locale (lcid: 428, name: tg-Cyrl): Tajik (Cyrillic) (Tajikistan) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: tg_TJ, Name: Tajik (Tajikistan) +default charset: windows-1252 + +OS Locale (lcid: 429, name: fa-IR): Persian (Iran) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fa_IR, Name: Persian (Iran) +default charset: windows-1252 + +OS Locale (lcid: 42a, name: vi-VN): Vietnamese (Vietnam) - 1258 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: vi_VN, Name: Vietnamese (Vietnam) +default charset: windows-1252 + +OS Locale (lcid: 42b, name: hy-AM): Armenian (Armenia) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: hy_AM, Name: Armenian (Armenia) +default charset: windows-1252 + +OS Locale (lcid: 42c, name: az-Latn-AZ): Azeri (Latin) (Azerbaijan) - 1254 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +default charset: windows-1252 + +OS Locale (lcid: 42c, name: az-Latn): Azeri (Latin) (Azerbaijan) - 1254 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +default charset: windows-1252 + +OS Locale (lcid: 42d, name: eu-ES): Basque (Spain) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: eu_ES, Name: Basque (Spain) +default charset: windows-1252 + +OS Locale (lcid: 42e, name: hsb-DE): Upper Sorbian (Germany) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 42e, name: hsb): Upper Sorbian (Germany) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 42f, name: mk-MK): Macedonian (FYROM) (Macedonia (FYROM)) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mk_MK, Name: Macedonian (Macedonia) +default charset: windows-1252 + +OS Locale (lcid: 432, name: tn-ZA): Setswana (South Africa) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: tn_ZA, Name: Tswana (South Africa) +default charset: windows-1252 + +OS Locale (lcid: 434, name: xh-ZA): isiXhosa (South Africa) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: xh_ZA, Name: Xhosa (South Africa) +default charset: windows-1252 + +OS Locale (lcid: 435, name: zu-ZA): isiZulu (South Africa) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zu_ZA, Name: Zulu (South Africa) +default charset: windows-1252 + +OS Locale (lcid: 436, name: af-ZA): Afrikaans (South Africa) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: af_ZA, Name: Afrikaans (South Africa) +default charset: windows-1252 + +OS Locale (lcid: 437, name: ka-GE): Georgian (Georgia) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ka_GE, Name: Georgian (Georgia) +default charset: windows-1252 + +OS Locale (lcid: 438, name: fo-FO): Faroese (Faroe Islands) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fo_FO, Name: Faroese (Faroe Islands) +default charset: windows-1252 + +OS Locale (lcid: 439, name: hi-IN): Hindi (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: hi_IN, Name: Hindi (India) +default charset: windows-1252 + +OS Locale (lcid: 43a, name: mt-MT): Maltese (Malta) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mt_MT, Name: Maltese (Malta) +default charset: windows-1252 + +OS Locale (lcid: 43b, name: se-NO): Sami (Northern) (Norway) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: se_NO, Name: Northern Sami (Norway) +default charset: windows-1252 + +OS Locale (lcid: 43e, name: ms-MY): Malay (Malaysia) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ms_MY, Name: Malay (Malaysia) +default charset: windows-1252 + +OS Locale (lcid: 43f, name: kk-KZ): Kazakh (Kazakhstan) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +default charset: windows-1252 + +OS Locale (lcid: 440, name: ky-KG): Kyrgyz (Kyrgyzstan) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ky_KG, Name: Kirghiz (Kyrgyzstan) +default charset: windows-1252 + +OS Locale (lcid: 441, name: sw-KE): Kiswahili (Kenya) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sw_KE, Name: Swahili (Kenya) +default charset: windows-1252 + +OS Locale (lcid: 442, name: tk-TM): Turkmen (Turkmenistan) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: tk_TM, Name: Turkmen (Turkmenistan) +default charset: windows-1252 + +OS Locale (lcid: 443, name: uz-Latn): Uzbek (Latin) (Uzbekistan) - 1254 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: windows-1252 + +OS Locale (lcid: 443, name: uz-Latn-UZ): Uzbek (Latin) (Uzbekistan) - 1254 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: windows-1252 + +OS Locale (lcid: 444, name: tt-RU): Tatar (Russia) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: tt_RU, Name: Tatar (Russia) +default charset: windows-1252 + +OS Locale (lcid: 445, name: bn-IN): Bengali (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bn_IN, Name: Bengali (India) +default charset: windows-1252 + +OS Locale (lcid: 446, name: pa-IN): Punjabi (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: pa_IN, Name: Panjabi (India) +default charset: windows-1252 + +OS Locale (lcid: 447, name: gu-IN): Gujarati (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: gu_IN, Name: Gujarati (India) +default charset: windows-1252 + +OS Locale (lcid: 448, name: or-IN): Oriya (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: or_IN, Name: Oriya (India) +default charset: windows-1252 + +OS Locale (lcid: 449, name: ta-IN): Tamil (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ta_IN, Name: Tamil (India) +default charset: windows-1252 + +OS Locale (lcid: 44a, name: te-IN): Telugu (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: te_IN, Name: Telugu (India) +default charset: windows-1252 + +OS Locale (lcid: 44b, name: kn-IN): Kannada (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: kn_IN, Name: Kannada (India) +default charset: windows-1252 + +OS Locale (lcid: 44c, name: ml-IN): Malayalam (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ml_IN, Name: Malayalam (India) +default charset: windows-1252 + +OS Locale (lcid: 44d, name: as-IN): Assamese (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: as_IN, Name: Assamese (India) +default charset: windows-1252 + +OS Locale (lcid: 44e, name: mr-IN): Marathi (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mr_IN, Name: Marathi (India) +default charset: windows-1252 + +OS Locale (lcid: 44f, name: sa-IN): Sanskrit (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sa_IN, Name: Sanskrit (India) +default charset: windows-1252 + +OS Locale (lcid: 450, name: mn-MN): Mongolian (Cyrillic) (Mongolia) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mn_MN, Name: Mongolian (Mongolia) +default charset: windows-1252 + +OS Locale (lcid: 450, name: mn-Cyrl): Mongolian (Cyrillic) (Mongolia) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mn_MN, Name: Mongolian (Mongolia) +default charset: windows-1252 + +OS Locale (lcid: 451, name: bo-CN): Tibetan (People's Republic of China) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bo_CN, Name: Tibetan (China) +default charset: windows-1252 + +OS Locale (lcid: 452, name: cy-GB): Welsh (United Kingdom) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: cy_GB, Name: Welsh (United Kingdom) +default charset: windows-1252 + +OS Locale (lcid: 453, name: km-KH): Khmer (Cambodia) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: km_KH, Name: Khmer (Cambodia) +default charset: windows-1252 + +OS Locale (lcid: 454, name: lo-LA): Lao (Lao P.D.R.) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: lo_LA, Name: Lao (Laos) +default charset: windows-1252 + +OS Locale (lcid: 456, name: gl-ES): Galician (Spain) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: gl_ES, Name: Gallegan (Spain) +default charset: windows-1252 + +OS Locale (lcid: 457, name: kok-IN): Konkani (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 457, name: kok): Konkani (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 45a, name: syr): Syriac (Syria) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 45a, name: syr-SY): Syriac (Syria) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 45b, name: si-LK): Sinhala (Sri Lanka) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: si_LK, Name: Sinhalese (Sri Lanka) +default charset: windows-1252 + +OS Locale (lcid: 45d, name: iu-Cans-CA): Inuktitut (Syllabics) (Canada) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: iu_CA, Name: Inuktitut (Canada) +default charset: windows-1252 + +OS Locale (lcid: 45d, name: iu-Cans): Inuktitut (Syllabics) (Canada) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: iu_CA, Name: Inuktitut (Canada) +default charset: windows-1252 + +OS Locale (lcid: 45e, name: am-ET): Amharic (Ethiopia) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: am_ET, Name: Amharic (Ethiopia) +default charset: windows-1252 + +OS Locale (lcid: 461, name: ne-NP): Nepali (Nepal) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ne_NP, Name: Nepali (Nepal) +default charset: windows-1252 + +OS Locale (lcid: 462, name: fy-NL): Frisian (Netherlands) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fy_NL, Name: Frisian (Netherlands) +default charset: windows-1252 + +OS Locale (lcid: 463, name: ps-AF): Pashto (Afghanistan) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ps_AF, Name: Pushto (Afghanistan) +default charset: windows-1252 + +OS Locale (lcid: 464, name: fil-PH): Filipino (Philippines) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 464, name: fil): Filipino (Philippines) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 465, name: dv-MV): Divehi (Maldives) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: dv_MV, Name: Divehi (Maldives) +default charset: windows-1252 + +OS Locale (lcid: 468, name: ha-Latn-NG): Hausa (Latin) (Nigeria) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ha_NG, Name: Hausa (Nigeria) +default charset: windows-1252 + +OS Locale (lcid: 468, name: ha-Latn): Hausa (Latin) (Nigeria) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ha_NG, Name: Hausa (Nigeria) +default charset: windows-1252 + +OS Locale (lcid: 46a, name: yo-NG): Yoruba (Nigeria) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: yo_NG, Name: Yoruba (Nigeria) +default charset: windows-1252 + +OS Locale (lcid: 46b, name: quz): Quechua (Bolivia) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 46b, name: quz-BO): Quechua (Bolivia) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 46c, name: nso): Sesotho sa Leboa (South Africa) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 46c, name: nso-ZA): Sesotho sa Leboa (South Africa) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 46d, name: ba-RU): Bashkir (Russia) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ba_RU, Name: Bashkir (Russia) +default charset: windows-1252 + +OS Locale (lcid: 46e, name: lb-LU): Luxembourgish (Luxembourg) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: lb_LU, Name: Luxembourgish (Luxembourg) +default charset: windows-1252 + +OS Locale (lcid: 46f, name: kl-GL): Greenlandic (Greenland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: kl_GL, Name: Greenlandic (Greenland) +default charset: windows-1252 + +OS Locale (lcid: 470, name: ig-NG): Igbo (Nigeria) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ig_NG, Name: Igbo (Nigeria) +default charset: windows-1252 + +OS Locale (lcid: 478, name: ii-CN): Yi (People's Republic of China) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ii_CN, Name: Sichuan Yi (China) +default charset: windows-1252 + +OS Locale (lcid: 47a, name: arn): Mapudungun (Chile) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 47a, name: arn-CL): Mapudungun (Chile) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 47c, name: moh): Mohawk (Canada) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 47c, name: moh-CA): Mohawk (Canada) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 47e, name: br-FR): Breton (France) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: br_FR, Name: Breton (France) +default charset: windows-1252 + +OS Locale (lcid: 480, name: ug-CN): Uyghur (People's Republic of China) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ug_CN, Name: Uighur (China) +default charset: windows-1252 + +OS Locale (lcid: 481, name: mi-NZ): Maori (New Zealand) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mi_NZ, Name: Maori (New Zealand) +default charset: windows-1252 + +OS Locale (lcid: 482, name: oc-FR): Occitan (France) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: oc_FR, Name: Occitan (France) +default charset: windows-1252 + +OS Locale (lcid: 483, name: co-FR): Corsican (France) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: co_FR, Name: Corsican (France) +default charset: windows-1252 + +OS Locale (lcid: 484, name: gsw): Alsatian (France) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 484, name: gsw-FR): Alsatian (France) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 485, name: sah): Yakut (Russia) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 485, name: sah-RU): Yakut (Russia) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 486, name: qut): K'iche (Guatemala) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 486, name: qut-GT): K'iche (Guatemala) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 487, name: rw-RW): Kinyarwanda (Rwanda) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: rw_RW, Name: Kinyarwanda (Rwanda) +default charset: windows-1252 + +OS Locale (lcid: 488, name: wo-SN): Wolof (Senegal) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: wo_SN, Name: Wolof (Senegal) +default charset: windows-1252 + +OS Locale (lcid: 48c, name: prs): Dari (Afghanistan) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 48c, name: prs-AF): Dari (Afghanistan) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 491, name: gd-GB): Scottish Gaelic (United Kingdom) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +default charset: windows-1252 + +OS Locale (lcid: 801, name: ar-IQ): Arabic (Iraq) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_IQ, Name: Arabic (Iraq) +default charset: windows-1252 + +OS Locale (lcid: 804, name: zh-Hans): Chinese (Simplified) (People's Republic of China) - 936 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: windows-1252 + +OS Locale (lcid: 804, name: zh-CN): Chinese (Simplified) (People's Republic of China) - 936 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: windows-1252 + +OS Locale (lcid: 807, name: de-CH): German (Switzerland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: de_CH, Name: German (Switzerland) +default charset: windows-1252 + +OS Locale (lcid: 809, name: en-GB): English (United Kingdom) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 80a, name: es-MX): Spanish (Mexico) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_MX, Name: Spanish (Mexico) +default charset: windows-1252 + +OS Locale (lcid: 80c, name: fr-BE): French (Belgium) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: windows-1252 + +OS Locale (lcid: 810, name: it-CH): Italian (Switzerland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: it_CH, Name: Italian (Switzerland) +default charset: windows-1252 + +OS Locale (lcid: 813, name: nl-BE): Dutch (Belgium) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: windows-1252 + +OS Locale (lcid: 814, name: nn-NO): Norwegian (Nynorsk) (Norway) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: no_NO_NY, Name: Norwegian (Norway,Nynorsk) +default charset: windows-1252 + +OS Locale (lcid: 816, name: pt-PT): Portuguese (Portugal) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: windows-1252 + +OS Locale (lcid: 81a, name: sr-Latn-CS): Serbian (Latin) (Serbia and Montenegro (Former)) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +default charset: windows-1252 + +OS Locale (lcid: 81d, name: sv-FI): Swedish (Finland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sv_FI, Name: Swedish (Finland) +default charset: windows-1252 + +OS Locale (lcid: 82c, name: az-Cyrl-AZ): Azeri (Cyrillic) (Azerbaijan) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +default charset: windows-1252 + +OS Locale (lcid: 82c, name: az-Cyrl): Azeri (Cyrillic) (Azerbaijan) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +default charset: windows-1252 + +OS Locale (lcid: 82e, name: dsb): Lower Sorbian (Germany) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 82e, name: dsb-DE): Lower Sorbian (Germany) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 83b, name: se-SE): Sami (Northern) (Sweden) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: se_SE, Name: Northern Sami (Sweden) +default charset: windows-1252 + +OS Locale (lcid: 83c, name: ga-IE): Irish (Ireland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ga_IE, Name: Irish (Ireland) +default charset: windows-1252 + +OS Locale (lcid: 83e, name: ms-BN): Malay (Brunei Darussalam) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ms_BN, Name: Malay (Brunei) +default charset: windows-1252 + +OS Locale (lcid: 843, name: uz-Cyrl-UZ): Uzbek (Cyrillic) (Uzbekistan) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: windows-1252 + +OS Locale (lcid: 843, name: uz-Cyrl): Uzbek (Cyrillic) (Uzbekistan) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: windows-1252 + +OS Locale (lcid: 845, name: bn-BD): Bengali (Bangladesh) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bn_BD, Name: Bengali (Bangladesh) +default charset: windows-1252 + +OS Locale (lcid: 850, name: mn-Mong-CN): Mongolian (Traditional Mongolian) (People's Republic of China) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mn_CN, Name: Mongolian (China) +default charset: windows-1252 + +OS Locale (lcid: 850, name: mn-Mong): Mongolian (Traditional Mongolian) (People's Republic of China) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mn_CN, Name: Mongolian (China) +default charset: windows-1252 + +OS Locale (lcid: 85d, name: iu-Latn): Inuktitut (Latin) (Canada) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: iu_CA, Name: Inuktitut (Canada) +default charset: windows-1252 + +OS Locale (lcid: 85d, name: iu-Latn-CA): Inuktitut (Latin) (Canada) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: iu_CA, Name: Inuktitut (Canada) +default charset: windows-1252 + +OS Locale (lcid: 85f, name: tzm): Tamazight (Latin) (Algeria) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 85f, name: tzm-Latn-DZ): Tamazight (Latin) (Algeria) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 85f, name: tzm-Latn): Tamazight (Latin) (Algeria) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 86b, name: quz-EC): Quechua (Ecuador) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: c01, name: ar-EG): Arabic (Egypt) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_EG, Name: Arabic (Egypt) +default charset: windows-1252 + +OS Locale (lcid: c04, name: zh-HK): Chinese (Traditional) (Hong Kong S.A.R.) - 950 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: x-MS950-HKSCS + +OS Locale (lcid: c04, name: zh-Hant): Chinese (Traditional) (Hong Kong S.A.R.) - 950 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: windows-1252 + +OS Locale (lcid: c07, name: de-AT): German (Austria) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: de_AT, Name: German (Austria) +default charset: windows-1252 + +OS Locale (lcid: c09, name: en-AU): English (Australia) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: c0a, name: es-ES): Spanish (Spain) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: windows-1252 + +OS Locale (lcid: c0c, name: fr-CA): French (Canada) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fr_CA, Name: French (Canada) +default charset: windows-1252 + +OS Locale (lcid: c1a, name: sr-Cyrl-CS): Serbian (Cyrillic) (Serbia and Montenegro (Former)) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +default charset: windows-1252 + +OS Locale (lcid: c3b, name: se-FI): Sami (Northern) (Finland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: se_FI, Name: Northern Sami (Finland) +default charset: windows-1252 + +OS Locale (lcid: c6b, name: quz-PE): Quechua (Peru) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 1001, name: ar-LY): Arabic (Libya) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_LY, Name: Arabic (Libya) +default charset: windows-1252 + +OS Locale (lcid: 1004, name: zh-SG): Chinese (Simplified) (Singapore) - 936 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_SG, Name: Chinese (Singapore) +default charset: windows-1252 + +OS Locale (lcid: 1007, name: de-LU): German (Luxembourg) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: de_LU, Name: German (Luxembourg) +default charset: windows-1252 + +OS Locale (lcid: 1009, name: en-CA): English (Canada) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 100a, name: es-GT): Spanish (Guatemala) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_GT, Name: Spanish (Guatemala) +default charset: windows-1252 + +OS Locale (lcid: 100c, name: fr-CH): French (Switzerland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fr_CH, Name: French (Switzerland) +default charset: windows-1252 + +OS Locale (lcid: 101a, name: hr-BA): Croatian (Latin) (Bosnia and Herzegovina) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: hr_BA, Name: Croatian (Bosnia and Herzegovina) +default charset: windows-1252 + +OS Locale (lcid: 103b, name: smj-NO): Sami (Lule) (Norway) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 1401, name: ar-DZ): Arabic (Algeria) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_DZ, Name: Arabic (Algeria) +default charset: windows-1252 + +OS Locale (lcid: 1404, name: zh-MO): Chinese (Traditional) (Macao S.A.R.) - 950 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_MO, Name: Chinese (Macao) +default charset: windows-1252 + +OS Locale (lcid: 1407, name: de-LI): German (Liechtenstein) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: de_LI, Name: German (Liechtenstein) +default charset: windows-1252 + +OS Locale (lcid: 1409, name: en-NZ): English (New Zealand) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 140a, name: es-CR): Spanish (Costa Rica) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_CR, Name: Spanish (Costa Rica) +default charset: windows-1252 + +OS Locale (lcid: 140c, name: fr-LU): French (Luxembourg) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fr_LU, Name: French (Luxembourg) +default charset: windows-1252 + +OS Locale (lcid: 141a, name: bs-Latn): Bosnian (Latin) (Bosnia and Herzegovina) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +default charset: windows-1252 + +OS Locale (lcid: 141a, name: bs-Latn-BA): Bosnian (Latin) (Bosnia and Herzegovina) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +default charset: windows-1252 + +OS Locale (lcid: 143b, name: smj-SE): Sami (Lule) (Sweden) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 143b, name: smj): Sami (Lule) (Sweden) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 1801, name: ar-MA): Arabic (Morocco) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_MA, Name: Arabic (Morocco) +default charset: windows-1252 + +OS Locale (lcid: 1809, name: en-IE): English (Ireland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 180a, name: es-PA): Spanish (Panama) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_PA, Name: Spanish (Panama) +default charset: windows-1252 + +OS Locale (lcid: 180c, name: fr-MC): French (Principality of Monaco) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fr_MC, Name: French (Monaco) +default charset: windows-1252 + +OS Locale (lcid: 181a, name: sr-Latn-BA): Serbian (Latin) (Bosnia and Herzegovina) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +default charset: windows-1252 + +OS Locale (lcid: 183b, name: sma-NO): Sami (Southern) (Norway) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 1c01, name: ar-TN): Arabic (Tunisia) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_TN, Name: Arabic (Tunisia) +default charset: windows-1252 + +OS Locale (lcid: 1c09, name: en-ZA): English (South Africa) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 1c0a, name: es-DO): Spanish (Dominican Republic) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_DO, Name: Spanish (Dominican Republic) +default charset: windows-1252 + +OS Locale (lcid: 1c1a, name: sr-Cyrl-BA): Serbian (Cyrillic) (Bosnia and Herzegovina) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +default charset: windows-1252 + +OS Locale (lcid: 1c3b, name: sma): Sami (Southern) (Sweden) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 1c3b, name: sma-SE): Sami (Southern) (Sweden) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 2001, name: ar-OM): Arabic (Oman) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_OM, Name: Arabic (Oman) +default charset: windows-1252 + +OS Locale (lcid: 2009, name: en-JM): English (Jamaica) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 200a, name: es-VE): Spanish (Bolivarian Republic of Venezuela) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_VE, Name: Spanish (Venezuela) +default charset: windows-1252 + +OS Locale (lcid: 201a, name: bs-Cyrl-BA): Bosnian (Cyrillic) (Bosnia and Herzegovina) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +default charset: windows-1252 + +OS Locale (lcid: 201a, name: bs-Cyrl): Bosnian (Cyrillic) (Bosnia and Herzegovina) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +default charset: windows-1252 + +OS Locale (lcid: 203b, name: sms-FI): Sami (Skolt) (Finland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 203b, name: sms): Sami (Skolt) (Finland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 2401, name: ar-YE): Arabic (Yemen) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_YE, Name: Arabic (Yemen) +default charset: windows-1252 + +OS Locale (lcid: 2409, name: en-029): English (Caribbean) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 240a, name: es-CO): Spanish (Colombia) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_CO, Name: Spanish (Colombia) +default charset: windows-1252 + +OS Locale (lcid: 241a, name: sr-Latn-RS): Serbian (Latin) (Serbia) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_RS, Name: Serbian (Serbia) +default charset: windows-1252 + +OS Locale (lcid: 241a, name: sr-Latn): Serbian (Latin) (Serbia) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_RS, Name: Serbian (Serbia) +default charset: windows-1252 + +OS Locale (lcid: 243b, name: smn): Sami (Inari) (Finland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 243b, name: smn-FI): Sami (Inari) (Finland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 2801, name: ar-SY): Arabic (Syria) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_SY, Name: Arabic (Syria) +default charset: windows-1252 + +OS Locale (lcid: 2809, name: en-BZ): English (Belize) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 280a, name: es-PE): Spanish (Peru) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_PE, Name: Spanish (Peru) +default charset: windows-1252 + +OS Locale (lcid: 281a, name: sr-Cyrl-RS): Serbian (Cyrillic) (Serbia) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_RS, Name: Serbian (Serbia) +default charset: windows-1252 + +OS Locale (lcid: 281a, name: sr-Cyrl): Serbian (Cyrillic) (Serbia) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_RS, Name: Serbian (Serbia) +default charset: windows-1252 + +OS Locale (lcid: 2c01, name: ar-JO): Arabic (Jordan) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_JO, Name: Arabic (Jordan) +default charset: windows-1252 + +OS Locale (lcid: 2c09, name: en-TT): English (Trinidad and Tobago) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 2c0a, name: es-AR): Spanish (Argentina) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_AR, Name: Spanish (Argentina) +default charset: windows-1252 + +OS Locale (lcid: 2c1a, name: sr-Latn-ME): Serbian (Latin) (Montenegro) - 1250 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_ME, Name: Serbian (Montenegro) +default charset: windows-1252 + +OS Locale (lcid: 3001, name: ar-LB): Arabic (Lebanon) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_LB, Name: Arabic (Lebanon) +default charset: windows-1252 + +OS Locale (lcid: 3009, name: en-ZW): English (Zimbabwe) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 300a, name: es-EC): Spanish (Ecuador) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_EC, Name: Spanish (Ecuador) +default charset: windows-1252 + +OS Locale (lcid: 301a, name: sr-Cyrl-ME): Serbian (Cyrillic) (Montenegro) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_ME, Name: Serbian (Montenegro) +default charset: windows-1252 + +OS Locale (lcid: 3401, name: ar-KW): Arabic (Kuwait) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_KW, Name: Arabic (Kuwait) +default charset: windows-1252 + +OS Locale (lcid: 3409, name: en-PH): English (Republic of the Philippines) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 340a, name: es-CL): Spanish (Chile) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_CL, Name: Spanish (Chile) +default charset: windows-1252 + +OS Locale (lcid: 3801, name: ar-AE): Arabic (U.A.E.) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +default charset: windows-1252 + +OS Locale (lcid: 380a, name: es-UY): Spanish (Uruguay) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_UY, Name: Spanish (Uruguay) +default charset: windows-1252 + +OS Locale (lcid: 3c01, name: ar-BH): Arabic (Bahrain) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_BH, Name: Arabic (Bahrain) +default charset: windows-1252 + +OS Locale (lcid: 3c0a, name: es-PY): Spanish (Paraguay) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_PY, Name: Spanish (Paraguay) +default charset: windows-1252 + +OS Locale (lcid: 4001, name: ar-QA): Arabic (Qatar) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_QA, Name: Arabic (Qatar) +default charset: windows-1252 + +OS Locale (lcid: 4009, name: en-IN): English (India) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 400a, name: es-BO): Spanish (Bolivia) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_BO, Name: Spanish (Bolivia) +default charset: windows-1252 + +OS Locale (lcid: 4409, name: en-MY): English (Malaysia) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 440a, name: es-SV): Spanish (El Salvador) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_SV, Name: Spanish (El Salvador) +default charset: windows-1252 + +OS Locale (lcid: 4809, name: en-SG): English (Singapore) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 480a, name: es-HN): Spanish (Honduras) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_HN, Name: Spanish (Honduras) +default charset: windows-1252 + +OS Locale (lcid: 4c0a, name: es-NI): Spanish (Nicaragua) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_NI, Name: Spanish (Nicaragua) +default charset: windows-1252 + +OS Locale (lcid: 500a, name: es-PR): Spanish (Puerto Rico) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_PR, Name: Spanish (Puerto Rico) +default charset: windows-1252 + +OS Locale (lcid: 540a, name: es-US): Spanish (United States) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es, Name: Spanish +default charset: windows-1252 + +OS UI Language (name: en-US) +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS UI Language (name: ja-JP) +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Locale/data/deflocale.win7.fmtasdefault Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,1494 @@ +# OSVersionInfo +# MajorVersion: 6 +# MinorVersion: 1 +# BuildNumber: 7600 +# CSDVersion: + + +OS Locale (lcid: 7f, name: ): Invariant Language (Invariant Country) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 401, name: ar-SA): Arabic (Saudi Arabia) - 1256 +default locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_SA, Name: Arabic (Saudi Arabia) +default charset: windows-1256 + +OS Locale (lcid: 402, name: bg-BG): Bulgarian (Bulgaria) - 1251 +default locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bg_BG, Name: Bulgarian (Bulgaria) +default charset: windows-1251 + +OS Locale (lcid: 403, name: ca-ES): Catalan (Spain) - 1252 +default locale: ID: ca_ES, Name: Catalan (Spain) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ca_ES, Name: Catalan (Spain) +default charset: windows-1252 + +OS Locale (lcid: 404, name: zh-TW): Chinese (Traditional) (Taiwan) - 950 +default locale: ID: zh_TW, Name: Chinese (Taiwan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_TW, Name: Chinese (Taiwan) +default charset: x-windows-950 + +OS Locale (lcid: 405, name: cs-CZ): Czech (Czech Republic) - 1250 +default locale: ID: cs_CZ, Name: Czech (Czech Republic) +display locale: ID: en_US, Name: English (United States) +format locale: ID: cs_CZ, Name: Czech (Czech Republic) +default charset: windows-1250 + +OS Locale (lcid: 406, name: da-DK): Danish (Denmark) - 1252 +default locale: ID: da_DK, Name: Danish (Denmark) +display locale: ID: en_US, Name: English (United States) +format locale: ID: da_DK, Name: Danish (Denmark) +default charset: windows-1252 + +OS Locale (lcid: 407, name: de-DE): German (Germany) - 1252 +default locale: ID: de_DE, Name: German (Germany) +display locale: ID: en_US, Name: English (United States) +format locale: ID: de_DE, Name: German (Germany) +default charset: windows-1252 + +OS Locale (lcid: 408, name: el-GR): Greek (Greece) - 1253 +default locale: ID: el_GR, Name: Greek (Greece) +display locale: ID: en_US, Name: English (United States) +format locale: ID: el_GR, Name: Greek (Greece) +default charset: windows-1253 + +OS Locale (lcid: 409, name: en-US): English (United States) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 40b, name: fi-FI): Finnish (Finland) - 1252 +default locale: ID: fi_FI, Name: Finnish (Finland) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fi_FI, Name: Finnish (Finland) +default charset: windows-1252 + +OS Locale (lcid: 40c, name: fr-FR): French (France) - 1252 +default locale: ID: fr_FR, Name: French (France) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fr_FR, Name: French (France) +default charset: windows-1252 + +OS Locale (lcid: 40d, name: he-IL): Hebrew (Israel) - 1255 +default locale: ID: iw_IL, Name: Hebrew (Israel) +display locale: ID: en_US, Name: English (United States) +format locale: ID: iw_IL, Name: Hebrew (Israel) +default charset: windows-1255 + +OS Locale (lcid: 40e, name: hu-HU): Hungarian (Hungary) - 1250 +default locale: ID: hu_HU, Name: Hungarian (Hungary) +display locale: ID: en_US, Name: English (United States) +format locale: ID: hu_HU, Name: Hungarian (Hungary) +default charset: windows-1250 + +OS Locale (lcid: 40f, name: is-IS): Icelandic (Iceland) - 1252 +default locale: ID: is_IS, Name: Icelandic (Iceland) +display locale: ID: en_US, Name: English (United States) +format locale: ID: is_IS, Name: Icelandic (Iceland) +default charset: windows-1252 + +OS Locale (lcid: 410, name: it-IT): Italian (Italy) - 1252 +default locale: ID: it_IT, Name: Italian (Italy) +display locale: ID: en_US, Name: English (United States) +format locale: ID: it_IT, Name: Italian (Italy) +default charset: windows-1252 + +OS Locale (lcid: 411, name: ja-JP): Japanese (Japan) - 932 +default locale: ID: ja_JP, Name: Japanese (Japan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ja_JP, Name: Japanese (Japan) +default charset: windows-31j + +OS Locale (lcid: 412, name: ko-KR): Korean (Korea) - 949 +default locale: ID: ko_KR, Name: Korean (South Korea) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ko_KR, Name: Korean (South Korea) +default charset: x-windows-949 + +OS Locale (lcid: 413, name: nl-NL): Dutch (Netherlands) - 1252 +default locale: ID: nl_NL, Name: Dutch (Netherlands) +display locale: ID: en_US, Name: English (United States) +format locale: ID: nl_NL, Name: Dutch (Netherlands) +default charset: windows-1252 + +OS Locale (lcid: 414, name: nb-NO): Norwegian (Bokmål) (Norway) - 1252 +default locale: ID: no_NO, Name: Norwegian (Norway) +display locale: ID: en_US, Name: English (United States) +format locale: ID: no_NO, Name: Norwegian (Norway) +default charset: windows-1252 + +OS Locale (lcid: 415, name: pl-PL): Polish (Poland) - 1250 +default locale: ID: pl_PL, Name: Polish (Poland) +display locale: ID: en_US, Name: English (United States) +format locale: ID: pl_PL, Name: Polish (Poland) +default charset: windows-1250 + +OS Locale (lcid: 416, name: pt-BR): Portuguese (Brazil) - 1252 +default locale: ID: pt_BR, Name: Portuguese (Brazil) +display locale: ID: en_US, Name: English (United States) +format locale: ID: pt_BR, Name: Portuguese (Brazil) +default charset: windows-1252 + +OS Locale (lcid: 417, name: rm-CH): Romansh (Switzerland) - 1252 +default locale: ID: rm_CH, Name: Raeto-Romance (Switzerland) +display locale: ID: en_US, Name: English (United States) +format locale: ID: rm_CH, Name: Raeto-Romance (Switzerland) +default charset: windows-1252 + +OS Locale (lcid: 418, name: ro-RO): Romanian (Romania) - 1250 +default locale: ID: ro_RO, Name: Romanian (Romania) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ro_RO, Name: Romanian (Romania) +default charset: windows-1250 + +OS Locale (lcid: 419, name: ru-RU): Russian (Russia) - 1251 +default locale: ID: ru_RU, Name: Russian (Russia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ru_RU, Name: Russian (Russia) +default charset: windows-1251 + +OS Locale (lcid: 41a, name: hr-HR): Croatian (Croatia) - 1250 +default locale: ID: hr_HR, Name: Croatian (Croatia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: hr_HR, Name: Croatian (Croatia) +default charset: windows-1250 + +OS Locale (lcid: 41b, name: sk-SK): Slovak (Slovakia) - 1250 +default locale: ID: sk_SK, Name: Slovak (Slovakia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sk_SK, Name: Slovak (Slovakia) +default charset: windows-1250 + +OS Locale (lcid: 41c, name: sq-AL): Albanian (Albania) - 1250 +default locale: ID: sq_AL, Name: Albanian (Albania) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sq_AL, Name: Albanian (Albania) +default charset: windows-1250 + +OS Locale (lcid: 41d, name: sv-SE): Swedish (Sweden) - 1252 +default locale: ID: sv_SE, Name: Swedish (Sweden) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sv_SE, Name: Swedish (Sweden) +default charset: windows-1252 + +OS Locale (lcid: 41e, name: th-TH): Thai (Thailand) - 874 +default locale: ID: th_TH, Name: Thai (Thailand) +display locale: ID: en_US, Name: English (United States) +format locale: ID: th_TH, Name: Thai (Thailand) +default charset: x-windows-874 + +OS Locale (lcid: 41f, name: tr-TR): Turkish (Turkey) - 1254 +default locale: ID: tr_TR, Name: Turkish (Turkey) +display locale: ID: en_US, Name: English (United States) +format locale: ID: tr_TR, Name: Turkish (Turkey) +default charset: windows-1254 + +OS Locale (lcid: 420, name: ur-PK): Urdu (Islamic Republic of Pakistan) - 1256 +default locale: ID: ur_PK, Name: Urdu (Pakistan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ur_PK, Name: Urdu (Pakistan) +default charset: windows-1256 + +OS Locale (lcid: 421, name: id-ID): Indonesian (Indonesia) - 1252 +default locale: ID: in_ID, Name: Indonesian (Indonesia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: in_ID, Name: Indonesian (Indonesia) +default charset: windows-1252 + +OS Locale (lcid: 422, name: uk-UA): Ukrainian (Ukraine) - 1251 +default locale: ID: uk_UA, Name: Ukrainian (Ukraine) +display locale: ID: en_US, Name: English (United States) +format locale: ID: uk_UA, Name: Ukrainian (Ukraine) +default charset: windows-1251 + +OS Locale (lcid: 423, name: be-BY): Belarusian (Belarus) - 1251 +default locale: ID: be_BY, Name: Belarusian (Belarus) +display locale: ID: en_US, Name: English (United States) +format locale: ID: be_BY, Name: Belarusian (Belarus) +default charset: windows-1251 + +OS Locale (lcid: 424, name: sl-SI): Slovenian (Slovenia) - 1250 +default locale: ID: sl_SI, Name: Slovenian (Slovenia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sl_SI, Name: Slovenian (Slovenia) +default charset: windows-1250 + +OS Locale (lcid: 425, name: et-EE): Estonian (Estonia) - 1257 +default locale: ID: et_EE, Name: Estonian (Estonia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: et_EE, Name: Estonian (Estonia) +default charset: windows-1257 + +OS Locale (lcid: 426, name: lv-LV): Latvian (Latvia) - 1257 +default locale: ID: lv_LV, Name: Latvian (Latvia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: lv_LV, Name: Latvian (Latvia) +default charset: windows-1257 + +OS Locale (lcid: 427, name: lt-LT): Lithuanian (Lithuania) - 1257 +default locale: ID: lt_LT, Name: Lithuanian (Lithuania) +display locale: ID: en_US, Name: English (United States) +format locale: ID: lt_LT, Name: Lithuanian (Lithuania) +default charset: windows-1257 + +OS Locale (lcid: 428, name: tg-Cyrl-TJ): Tajik (Cyrillic) (Tajikistan) - 1251 +default locale: ID: tg_TJ, Name: Tajik (Tajikistan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: tg_TJ, Name: Tajik (Tajikistan) +default charset: windows-1251 + +OS Locale (lcid: 428, name: tg-Cyrl): Tajik (Cyrillic) (Tajikistan) - 1251 +default locale: ID: tg_TJ, Name: Tajik (Tajikistan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: tg_TJ, Name: Tajik (Tajikistan) +default charset: windows-1251 + +OS Locale (lcid: 429, name: fa-IR): Persian (Iran) - 1256 +default locale: ID: fa_IR, Name: Persian (Iran) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fa_IR, Name: Persian (Iran) +default charset: windows-1256 + +OS Locale (lcid: 42a, name: vi-VN): Vietnamese (Vietnam) - 1258 +default locale: ID: vi_VN, Name: Vietnamese (Vietnam) +display locale: ID: en_US, Name: English (United States) +format locale: ID: vi_VN, Name: Vietnamese (Vietnam) +default charset: windows-1258 + +OS Locale (lcid: 42b, name: hy-AM): Armenian (Armenia) - 0 +default locale: ID: hy_AM, Name: Armenian (Armenia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: hy_AM, Name: Armenian (Armenia) +default charset: UTF-8 + +OS Locale (lcid: 42c, name: az-Latn-AZ): Azeri (Latin) (Azerbaijan) - 1254 +default locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +default charset: windows-1254 + +OS Locale (lcid: 42c, name: az-Latn): Azeri (Latin) (Azerbaijan) - 1254 +default locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +default charset: windows-1254 + +OS Locale (lcid: 42d, name: eu-ES): Basque (Spain) - 1252 +default locale: ID: eu_ES, Name: Basque (Spain) +display locale: ID: en_US, Name: English (United States) +format locale: ID: eu_ES, Name: Basque (Spain) +default charset: windows-1252 + +OS Locale (lcid: 42e, name: hsb-DE): Upper Sorbian (Germany) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 42e, name: hsb): Upper Sorbian (Germany) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 42f, name: mk-MK): Macedonian (FYROM) (Macedonia (FYROM)) - 1251 +default locale: ID: mk_MK, Name: Macedonian (Macedonia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mk_MK, Name: Macedonian (Macedonia) +default charset: windows-1251 + +OS Locale (lcid: 432, name: tn-ZA): Setswana (South Africa) - 1252 +default locale: ID: tn_ZA, Name: Tswana (South Africa) +display locale: ID: en_US, Name: English (United States) +format locale: ID: tn_ZA, Name: Tswana (South Africa) +default charset: windows-1252 + +OS Locale (lcid: 434, name: xh-ZA): isiXhosa (South Africa) - 1252 +default locale: ID: xh_ZA, Name: Xhosa (South Africa) +display locale: ID: en_US, Name: English (United States) +format locale: ID: xh_ZA, Name: Xhosa (South Africa) +default charset: windows-1252 + +OS Locale (lcid: 435, name: zu-ZA): isiZulu (South Africa) - 1252 +default locale: ID: zu_ZA, Name: Zulu (South Africa) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zu_ZA, Name: Zulu (South Africa) +default charset: windows-1252 + +OS Locale (lcid: 436, name: af-ZA): Afrikaans (South Africa) - 1252 +default locale: ID: af_ZA, Name: Afrikaans (South Africa) +display locale: ID: en_US, Name: English (United States) +format locale: ID: af_ZA, Name: Afrikaans (South Africa) +default charset: windows-1252 + +OS Locale (lcid: 437, name: ka-GE): Georgian (Georgia) - 0 +default locale: ID: ka_GE, Name: Georgian (Georgia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ka_GE, Name: Georgian (Georgia) +default charset: UTF-8 + +OS Locale (lcid: 438, name: fo-FO): Faroese (Faroe Islands) - 1252 +default locale: ID: fo_FO, Name: Faroese (Faroe Islands) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fo_FO, Name: Faroese (Faroe Islands) +default charset: windows-1252 + +OS Locale (lcid: 439, name: hi-IN): Hindi (India) - 0 +default locale: ID: hi_IN, Name: Hindi (India) +display locale: ID: en_US, Name: English (United States) +format locale: ID: hi_IN, Name: Hindi (India) +default charset: UTF-8 + +OS Locale (lcid: 43a, name: mt-MT): Maltese (Malta) - 0 +default locale: ID: mt_MT, Name: Maltese (Malta) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mt_MT, Name: Maltese (Malta) +default charset: UTF-8 + +OS Locale (lcid: 43b, name: se-NO): Sami (Northern) (Norway) - 1252 +default locale: ID: se_NO, Name: Northern Sami (Norway) +display locale: ID: en_US, Name: English (United States) +format locale: ID: se_NO, Name: Northern Sami (Norway) +default charset: windows-1252 + +OS Locale (lcid: 43e, name: ms-MY): Malay (Malaysia) - 1252 +default locale: ID: ms_MY, Name: Malay (Malaysia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ms_MY, Name: Malay (Malaysia) +default charset: windows-1252 + +OS Locale (lcid: 43f, name: kk-KZ): Kazakh (Kazakhstan) - 0 +default locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: kk_KZ, Name: Kazakh (Kazakhstan) +default charset: UTF-8 + +OS Locale (lcid: 440, name: ky-KG): Kyrgyz (Kyrgyzstan) - 1251 +default locale: ID: ky_KG, Name: Kirghiz (Kyrgyzstan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ky_KG, Name: Kirghiz (Kyrgyzstan) +default charset: windows-1251 + +OS Locale (lcid: 441, name: sw-KE): Kiswahili (Kenya) - 1252 +default locale: ID: sw_KE, Name: Swahili (Kenya) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sw_KE, Name: Swahili (Kenya) +default charset: windows-1252 + +OS Locale (lcid: 442, name: tk-TM): Turkmen (Turkmenistan) - 1250 +default locale: ID: tk_TM, Name: Turkmen (Turkmenistan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: tk_TM, Name: Turkmen (Turkmenistan) +default charset: windows-1250 + +OS Locale (lcid: 443, name: uz-Latn): Uzbek (Latin) (Uzbekistan) - 1254 +default locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: windows-1254 + +OS Locale (lcid: 443, name: uz-Latn-UZ): Uzbek (Latin) (Uzbekistan) - 1254 +default locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: windows-1254 + +OS Locale (lcid: 444, name: tt-RU): Tatar (Russia) - 1251 +default locale: ID: tt_RU, Name: Tatar (Russia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: tt_RU, Name: Tatar (Russia) +default charset: windows-1251 + +OS Locale (lcid: 445, name: bn-IN): Bengali (India) - 0 +default locale: ID: bn_IN, Name: Bengali (India) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bn_IN, Name: Bengali (India) +default charset: UTF-8 + +OS Locale (lcid: 446, name: pa-IN): Punjabi (India) - 0 +default locale: ID: pa_IN, Name: Panjabi (India) +display locale: ID: en_US, Name: English (United States) +format locale: ID: pa_IN, Name: Panjabi (India) +default charset: UTF-8 + +OS Locale (lcid: 447, name: gu-IN): Gujarati (India) - 0 +default locale: ID: gu_IN, Name: Gujarati (India) +display locale: ID: en_US, Name: English (United States) +format locale: ID: gu_IN, Name: Gujarati (India) +default charset: UTF-8 + +OS Locale (lcid: 448, name: or-IN): Oriya (India) - 0 +default locale: ID: or_IN, Name: Oriya (India) +display locale: ID: en_US, Name: English (United States) +format locale: ID: or_IN, Name: Oriya (India) +default charset: UTF-8 + +OS Locale (lcid: 449, name: ta-IN): Tamil (India) - 0 +default locale: ID: ta_IN, Name: Tamil (India) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ta_IN, Name: Tamil (India) +default charset: UTF-8 + +OS Locale (lcid: 44a, name: te-IN): Telugu (India) - 0 +default locale: ID: te_IN, Name: Telugu (India) +display locale: ID: en_US, Name: English (United States) +format locale: ID: te_IN, Name: Telugu (India) +default charset: UTF-8 + +OS Locale (lcid: 44b, name: kn-IN): Kannada (India) - 0 +default locale: ID: kn_IN, Name: Kannada (India) +display locale: ID: en_US, Name: English (United States) +format locale: ID: kn_IN, Name: Kannada (India) +default charset: UTF-8 + +OS Locale (lcid: 44c, name: ml-IN): Malayalam (India) - 0 +default locale: ID: ml_IN, Name: Malayalam (India) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ml_IN, Name: Malayalam (India) +default charset: UTF-8 + +OS Locale (lcid: 44d, name: as-IN): Assamese (India) - 0 +default locale: ID: as_IN, Name: Assamese (India) +display locale: ID: en_US, Name: English (United States) +format locale: ID: as_IN, Name: Assamese (India) +default charset: UTF-8 + +OS Locale (lcid: 44e, name: mr-IN): Marathi (India) - 0 +default locale: ID: mr_IN, Name: Marathi (India) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mr_IN, Name: Marathi (India) +default charset: UTF-8 + +OS Locale (lcid: 44f, name: sa-IN): Sanskrit (India) - 0 +default locale: ID: sa_IN, Name: Sanskrit (India) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sa_IN, Name: Sanskrit (India) +default charset: UTF-8 + +OS Locale (lcid: 450, name: mn-MN): Mongolian (Cyrillic) (Mongolia) - 1251 +default locale: ID: mn_MN, Name: Mongolian (Mongolia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mn_MN, Name: Mongolian (Mongolia) +default charset: windows-1251 + +OS Locale (lcid: 450, name: mn-Cyrl): Mongolian (Cyrillic) (Mongolia) - 1251 +default locale: ID: mn_MN, Name: Mongolian (Mongolia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mn_MN, Name: Mongolian (Mongolia) +default charset: windows-1251 + +OS Locale (lcid: 451, name: bo-CN): Tibetan (People's Republic of China) - 0 +default locale: ID: bo_CN, Name: Tibetan (China) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bo_CN, Name: Tibetan (China) +default charset: UTF-8 + +OS Locale (lcid: 452, name: cy-GB): Welsh (United Kingdom) - 1252 +default locale: ID: cy_GB, Name: Welsh (United Kingdom) +display locale: ID: en_US, Name: English (United States) +format locale: ID: cy_GB, Name: Welsh (United Kingdom) +default charset: windows-1252 + +OS Locale (lcid: 453, name: km-KH): Khmer (Cambodia) - 0 +default locale: ID: km_KH, Name: Khmer (Cambodia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: km_KH, Name: Khmer (Cambodia) +default charset: UTF-8 + +OS Locale (lcid: 454, name: lo-LA): Lao (Lao P.D.R.) - 0 +default locale: ID: lo_LA, Name: Lao (Laos) +display locale: ID: en_US, Name: English (United States) +format locale: ID: lo_LA, Name: Lao (Laos) +default charset: UTF-8 + +OS Locale (lcid: 456, name: gl-ES): Galician (Spain) - 1252 +default locale: ID: gl_ES, Name: Gallegan (Spain) +display locale: ID: en_US, Name: English (United States) +format locale: ID: gl_ES, Name: Gallegan (Spain) +default charset: windows-1252 + +OS Locale (lcid: 457, name: kok-IN): Konkani (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: UTF-8 + +OS Locale (lcid: 457, name: kok): Konkani (India) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: UTF-8 + +OS Locale (lcid: 45a, name: syr): Syriac (Syria) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: UTF-8 + +OS Locale (lcid: 45a, name: syr-SY): Syriac (Syria) - 0 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: UTF-8 + +OS Locale (lcid: 45b, name: si-LK): Sinhala (Sri Lanka) - 0 +default locale: ID: si_LK, Name: Sinhalese (Sri Lanka) +display locale: ID: en_US, Name: English (United States) +format locale: ID: si_LK, Name: Sinhalese (Sri Lanka) +default charset: UTF-8 + +OS Locale (lcid: 45d, name: iu-Cans-CA): Inuktitut (Syllabics) (Canada) - 0 +default locale: ID: iu_CA, Name: Inuktitut (Canada) +display locale: ID: en_US, Name: English (United States) +format locale: ID: iu_CA, Name: Inuktitut (Canada) +default charset: UTF-8 + +OS Locale (lcid: 45d, name: iu-Cans): Inuktitut (Syllabics) (Canada) - 0 +default locale: ID: iu_CA, Name: Inuktitut (Canada) +display locale: ID: en_US, Name: English (United States) +format locale: ID: iu_CA, Name: Inuktitut (Canada) +default charset: UTF-8 + +OS Locale (lcid: 45e, name: am-ET): Amharic (Ethiopia) - 0 +default locale: ID: am_ET, Name: Amharic (Ethiopia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: am_ET, Name: Amharic (Ethiopia) +default charset: UTF-8 + +OS Locale (lcid: 461, name: ne-NP): Nepali (Nepal) - 0 +default locale: ID: ne_NP, Name: Nepali (Nepal) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ne_NP, Name: Nepali (Nepal) +default charset: UTF-8 + +OS Locale (lcid: 462, name: fy-NL): Frisian (Netherlands) - 1252 +default locale: ID: fy_NL, Name: Frisian (Netherlands) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fy_NL, Name: Frisian (Netherlands) +default charset: windows-1252 + +OS Locale (lcid: 463, name: ps-AF): Pashto (Afghanistan) - 0 +default locale: ID: ps_AF, Name: Pushto (Afghanistan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ps_AF, Name: Pushto (Afghanistan) +default charset: UTF-8 + +OS Locale (lcid: 464, name: fil-PH): Filipino (Philippines) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 464, name: fil): Filipino (Philippines) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 465, name: dv-MV): Divehi (Maldives) - 0 +default locale: ID: dv_MV, Name: Divehi (Maldives) +display locale: ID: en_US, Name: English (United States) +format locale: ID: dv_MV, Name: Divehi (Maldives) +default charset: UTF-8 + +OS Locale (lcid: 468, name: ha-Latn-NG): Hausa (Latin) (Nigeria) - 1252 +default locale: ID: ha_NG, Name: Hausa (Nigeria) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ha_NG, Name: Hausa (Nigeria) +default charset: windows-1252 + +OS Locale (lcid: 468, name: ha-Latn): Hausa (Latin) (Nigeria) - 1252 +default locale: ID: ha_NG, Name: Hausa (Nigeria) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ha_NG, Name: Hausa (Nigeria) +default charset: windows-1252 + +OS Locale (lcid: 46a, name: yo-NG): Yoruba (Nigeria) - 1252 +default locale: ID: yo_NG, Name: Yoruba (Nigeria) +display locale: ID: en_US, Name: English (United States) +format locale: ID: yo_NG, Name: Yoruba (Nigeria) +default charset: windows-1252 + +OS Locale (lcid: 46b, name: quz): Quechua (Bolivia) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 46b, name: quz-BO): Quechua (Bolivia) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 46c, name: nso): Sesotho sa Leboa (South Africa) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 46c, name: nso-ZA): Sesotho sa Leboa (South Africa) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 46d, name: ba-RU): Bashkir (Russia) - 1251 +default locale: ID: ba_RU, Name: Bashkir (Russia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ba_RU, Name: Bashkir (Russia) +default charset: windows-1251 + +OS Locale (lcid: 46e, name: lb-LU): Luxembourgish (Luxembourg) - 1252 +default locale: ID: lb_LU, Name: Luxembourgish (Luxembourg) +display locale: ID: en_US, Name: English (United States) +format locale: ID: lb_LU, Name: Luxembourgish (Luxembourg) +default charset: windows-1252 + +OS Locale (lcid: 46f, name: kl-GL): Greenlandic (Greenland) - 1252 +default locale: ID: kl_GL, Name: Greenlandic (Greenland) +display locale: ID: en_US, Name: English (United States) +format locale: ID: kl_GL, Name: Greenlandic (Greenland) +default charset: windows-1252 + +OS Locale (lcid: 470, name: ig-NG): Igbo (Nigeria) - 1252 +default locale: ID: ig_NG, Name: Igbo (Nigeria) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ig_NG, Name: Igbo (Nigeria) +default charset: windows-1252 + +OS Locale (lcid: 478, name: ii-CN): Yi (People's Republic of China) - 0 +default locale: ID: ii_CN, Name: Sichuan Yi (China) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ii_CN, Name: Sichuan Yi (China) +default charset: UTF-8 + +OS Locale (lcid: 47a, name: arn): Mapudungun (Chile) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 47a, name: arn-CL): Mapudungun (Chile) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 47c, name: moh): Mohawk (Canada) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 47c, name: moh-CA): Mohawk (Canada) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 47e, name: br-FR): Breton (France) - 1252 +default locale: ID: br_FR, Name: Breton (France) +display locale: ID: en_US, Name: English (United States) +format locale: ID: br_FR, Name: Breton (France) +default charset: windows-1252 + +OS Locale (lcid: 480, name: ug-CN): Uyghur (People's Republic of China) - 1256 +default locale: ID: ug_CN, Name: Uighur (China) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ug_CN, Name: Uighur (China) +default charset: windows-1256 + +OS Locale (lcid: 481, name: mi-NZ): Maori (New Zealand) - 0 +default locale: ID: mi_NZ, Name: Maori (New Zealand) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mi_NZ, Name: Maori (New Zealand) +default charset: UTF-8 + +OS Locale (lcid: 482, name: oc-FR): Occitan (France) - 1252 +default locale: ID: oc_FR, Name: Occitan (France) +display locale: ID: en_US, Name: English (United States) +format locale: ID: oc_FR, Name: Occitan (France) +default charset: windows-1252 + +OS Locale (lcid: 483, name: co-FR): Corsican (France) - 1252 +default locale: ID: co_FR, Name: Corsican (France) +display locale: ID: en_US, Name: English (United States) +format locale: ID: co_FR, Name: Corsican (France) +default charset: windows-1252 + +OS Locale (lcid: 484, name: gsw): Alsatian (France) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 484, name: gsw-FR): Alsatian (France) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 485, name: sah): Yakut (Russia) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1251 + +OS Locale (lcid: 485, name: sah-RU): Yakut (Russia) - 1251 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1251 + +OS Locale (lcid: 486, name: qut): K'iche (Guatemala) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 486, name: qut-GT): K'iche (Guatemala) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 487, name: rw-RW): Kinyarwanda (Rwanda) - 1252 +default locale: ID: rw_RW, Name: Kinyarwanda (Rwanda) +display locale: ID: en_US, Name: English (United States) +format locale: ID: rw_RW, Name: Kinyarwanda (Rwanda) +default charset: windows-1252 + +OS Locale (lcid: 488, name: wo-SN): Wolof (Senegal) - 1252 +default locale: ID: wo_SN, Name: Wolof (Senegal) +display locale: ID: en_US, Name: English (United States) +format locale: ID: wo_SN, Name: Wolof (Senegal) +default charset: windows-1252 + +OS Locale (lcid: 48c, name: prs): Dari (Afghanistan) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1256 + +OS Locale (lcid: 48c, name: prs-AF): Dari (Afghanistan) - 1256 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1256 + +OS Locale (lcid: 491, name: gd-GB): Scottish Gaelic (United Kingdom) - 1252 +default locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +display locale: ID: en_US, Name: English (United States) +format locale: ID: gd_GB, Name: Scottish Gaelic (United Kingdom) +default charset: windows-1252 + +OS Locale (lcid: 801, name: ar-IQ): Arabic (Iraq) - 1256 +default locale: ID: ar_IQ, Name: Arabic (Iraq) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_IQ, Name: Arabic (Iraq) +default charset: windows-1256 + +OS Locale (lcid: 804, name: zh-Hans): Chinese (Simplified) (People's Republic of China) - 936 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GBK + +OS Locale (lcid: 804, name: zh-CN): Chinese (Simplified) (People's Republic of China) - 936 +default locale: ID: zh_CN, Name: Chinese (China) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_CN, Name: Chinese (China) +default charset: GBK + +OS Locale (lcid: 807, name: de-CH): German (Switzerland) - 1252 +default locale: ID: de_CH, Name: German (Switzerland) +display locale: ID: en_US, Name: English (United States) +format locale: ID: de_CH, Name: German (Switzerland) +default charset: windows-1252 + +OS Locale (lcid: 809, name: en-GB): English (United Kingdom) - 1252 +default locale: ID: en_GB, Name: English (United Kingdom) +display locale: ID: en_GB, Name: English (United Kingdom) +format locale: ID: en_GB, Name: English (United Kingdom) +default charset: windows-1252 + +OS Locale (lcid: 80a, name: es-MX): Spanish (Mexico) - 1252 +default locale: ID: es_MX, Name: Spanish (Mexico) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_MX, Name: Spanish (Mexico) +default charset: windows-1252 + +OS Locale (lcid: 80c, name: fr-BE): French (Belgium) - 1252 +default locale: ID: fr_BE, Name: French (Belgium) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fr_BE, Name: French (Belgium) +default charset: windows-1252 + +OS Locale (lcid: 810, name: it-CH): Italian (Switzerland) - 1252 +default locale: ID: it_CH, Name: Italian (Switzerland) +display locale: ID: en_US, Name: English (United States) +format locale: ID: it_CH, Name: Italian (Switzerland) +default charset: windows-1252 + +OS Locale (lcid: 813, name: nl-BE): Dutch (Belgium) - 1252 +default locale: ID: nl_BE, Name: Dutch (Belgium) +display locale: ID: en_US, Name: English (United States) +format locale: ID: nl_BE, Name: Dutch (Belgium) +default charset: windows-1252 + +OS Locale (lcid: 814, name: nn-NO): Norwegian (Nynorsk) (Norway) - 1252 +default locale: ID: no_NO_NY, Name: Norwegian (Norway,Nynorsk) +display locale: ID: en_US, Name: English (United States) +format locale: ID: no_NO_NY, Name: Norwegian (Norway,Nynorsk) +default charset: windows-1252 + +OS Locale (lcid: 816, name: pt-PT): Portuguese (Portugal) - 1252 +default locale: ID: pt_PT, Name: Portuguese (Portugal) +display locale: ID: en_US, Name: English (United States) +format locale: ID: pt_PT, Name: Portuguese (Portugal) +default charset: windows-1252 + +OS Locale (lcid: 81a, name: sr-Latn-CS): Serbian (Latin) (Serbia and Montenegro (Former)) - 1250 +default locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +default charset: windows-1250 + +OS Locale (lcid: 81d, name: sv-FI): Swedish (Finland) - 1252 +default locale: ID: sv_FI, Name: Swedish (Finland) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sv_FI, Name: Swedish (Finland) +default charset: windows-1252 + +OS Locale (lcid: 82c, name: az-Cyrl-AZ): Azeri (Cyrillic) (Azerbaijan) - 1251 +default locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +default charset: windows-1251 + +OS Locale (lcid: 82c, name: az-Cyrl): Azeri (Cyrillic) (Azerbaijan) - 1251 +default locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: az_AZ, Name: Azerbaijani (Azerbaijan) +default charset: windows-1251 + +OS Locale (lcid: 82e, name: dsb): Lower Sorbian (Germany) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 82e, name: dsb-DE): Lower Sorbian (Germany) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 83b, name: se-SE): Sami (Northern) (Sweden) - 1252 +default locale: ID: se_SE, Name: Northern Sami (Sweden) +display locale: ID: en_US, Name: English (United States) +format locale: ID: se_SE, Name: Northern Sami (Sweden) +default charset: windows-1252 + +OS Locale (lcid: 83c, name: ga-IE): Irish (Ireland) - 1252 +default locale: ID: ga_IE, Name: Irish (Ireland) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ga_IE, Name: Irish (Ireland) +default charset: windows-1252 + +OS Locale (lcid: 83e, name: ms-BN): Malay (Brunei Darussalam) - 1252 +default locale: ID: ms_BN, Name: Malay (Brunei) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ms_BN, Name: Malay (Brunei) +default charset: windows-1252 + +OS Locale (lcid: 843, name: uz-Cyrl-UZ): Uzbek (Cyrillic) (Uzbekistan) - 1251 +default locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: windows-1251 + +OS Locale (lcid: 843, name: uz-Cyrl): Uzbek (Cyrillic) (Uzbekistan) - 1251 +default locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: uz_UZ, Name: Uzbek (Uzbekistan) +default charset: windows-1251 + +OS Locale (lcid: 845, name: bn-BD): Bengali (Bangladesh) - 0 +default locale: ID: bn_BD, Name: Bengali (Bangladesh) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bn_BD, Name: Bengali (Bangladesh) +default charset: UTF-8 + +OS Locale (lcid: 850, name: mn-Mong-CN): Mongolian (Traditional Mongolian) (People's Republic of China) - 0 +default locale: ID: mn_CN, Name: Mongolian (China) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mn_CN, Name: Mongolian (China) +default charset: UTF-8 + +OS Locale (lcid: 850, name: mn-Mong): Mongolian (Traditional Mongolian) (People's Republic of China) - 0 +default locale: ID: mn_CN, Name: Mongolian (China) +display locale: ID: en_US, Name: English (United States) +format locale: ID: mn_CN, Name: Mongolian (China) +default charset: UTF-8 + +OS Locale (lcid: 85d, name: iu-Latn): Inuktitut (Latin) (Canada) - 1252 +default locale: ID: iu_CA, Name: Inuktitut (Canada) +display locale: ID: en_US, Name: English (United States) +format locale: ID: iu_CA, Name: Inuktitut (Canada) +default charset: windows-1252 + +OS Locale (lcid: 85d, name: iu-Latn-CA): Inuktitut (Latin) (Canada) - 1252 +default locale: ID: iu_CA, Name: Inuktitut (Canada) +display locale: ID: en_US, Name: English (United States) +format locale: ID: iu_CA, Name: Inuktitut (Canada) +default charset: windows-1252 + +OS Locale (lcid: 85f, name: tzm): Tamazight (Latin) (Algeria) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 85f, name: tzm-Latn-DZ): Tamazight (Latin) (Algeria) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 85f, name: tzm-Latn): Tamazight (Latin) (Algeria) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 86b, name: quz-EC): Quechua (Ecuador) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: c01, name: ar-EG): Arabic (Egypt) - 1256 +default locale: ID: ar_EG, Name: Arabic (Egypt) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_EG, Name: Arabic (Egypt) +default charset: windows-1256 + +OS Locale (lcid: c04, name: zh-HK): Chinese (Traditional) (Hong Kong S.A.R.) - 950 +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: x-MS950-HKSCS + +OS Locale (lcid: c04, name: zh-Hant): Chinese (Traditional) (Hong Kong S.A.R.) - 950 +default locale: ID: zh_HK, Name: Chinese (Hong Kong) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_HK, Name: Chinese (Hong Kong) +default charset: x-windows-950 + +OS Locale (lcid: c07, name: de-AT): German (Austria) - 1252 +default locale: ID: de_AT, Name: German (Austria) +display locale: ID: en_US, Name: English (United States) +format locale: ID: de_AT, Name: German (Austria) +default charset: windows-1252 + +OS Locale (lcid: c09, name: en-AU): English (Australia) - 1252 +default locale: ID: en_AU, Name: English (Australia) +display locale: ID: en_AU, Name: English (Australia) +format locale: ID: en_AU, Name: English (Australia) +default charset: windows-1252 + +OS Locale (lcid: c0a, name: es-ES): Spanish (Spain) - 1252 +default locale: ID: es_ES, Name: Spanish (Spain) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_ES, Name: Spanish (Spain) +default charset: windows-1252 + +OS Locale (lcid: c0c, name: fr-CA): French (Canada) - 1252 +default locale: ID: fr_CA, Name: French (Canada) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fr_CA, Name: French (Canada) +default charset: windows-1252 + +OS Locale (lcid: c1a, name: sr-Cyrl-CS): Serbian (Cyrillic) (Serbia and Montenegro (Former)) - 1251 +default locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_CS, Name: Serbian (Serbia and Montenegro) +default charset: windows-1251 + +OS Locale (lcid: c3b, name: se-FI): Sami (Northern) (Finland) - 1252 +default locale: ID: se_FI, Name: Northern Sami (Finland) +display locale: ID: en_US, Name: English (United States) +format locale: ID: se_FI, Name: Northern Sami (Finland) +default charset: windows-1252 + +OS Locale (lcid: c6b, name: quz-PE): Quechua (Peru) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 1001, name: ar-LY): Arabic (Libya) - 1256 +default locale: ID: ar_LY, Name: Arabic (Libya) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_LY, Name: Arabic (Libya) +default charset: windows-1256 + +OS Locale (lcid: 1004, name: zh-SG): Chinese (Simplified) (Singapore) - 936 +default locale: ID: zh_SG, Name: Chinese (Singapore) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_SG, Name: Chinese (Singapore) +default charset: GBK + +OS Locale (lcid: 1007, name: de-LU): German (Luxembourg) - 1252 +default locale: ID: de_LU, Name: German (Luxembourg) +display locale: ID: en_US, Name: English (United States) +format locale: ID: de_LU, Name: German (Luxembourg) +default charset: windows-1252 + +OS Locale (lcid: 1009, name: en-CA): English (Canada) - 1252 +default locale: ID: en_CA, Name: English (Canada) +display locale: ID: en_CA, Name: English (Canada) +format locale: ID: en_CA, Name: English (Canada) +default charset: windows-1252 + +OS Locale (lcid: 100a, name: es-GT): Spanish (Guatemala) - 1252 +default locale: ID: es_GT, Name: Spanish (Guatemala) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_GT, Name: Spanish (Guatemala) +default charset: windows-1252 + +OS Locale (lcid: 100c, name: fr-CH): French (Switzerland) - 1252 +default locale: ID: fr_CH, Name: French (Switzerland) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fr_CH, Name: French (Switzerland) +default charset: windows-1252 + +OS Locale (lcid: 101a, name: hr-BA): Croatian (Latin) (Bosnia and Herzegovina) - 1250 +default locale: ID: hr_BA, Name: Croatian (Bosnia and Herzegovina) +display locale: ID: en_US, Name: English (United States) +format locale: ID: hr_BA, Name: Croatian (Bosnia and Herzegovina) +default charset: windows-1250 + +OS Locale (lcid: 103b, name: smj-NO): Sami (Lule) (Norway) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 1401, name: ar-DZ): Arabic (Algeria) - 1256 +default locale: ID: ar_DZ, Name: Arabic (Algeria) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_DZ, Name: Arabic (Algeria) +default charset: windows-1256 + +OS Locale (lcid: 1404, name: zh-MO): Chinese (Traditional) (Macao S.A.R.) - 950 +default locale: ID: zh_MO, Name: Chinese (Macao) +display locale: ID: en_US, Name: English (United States) +format locale: ID: zh_MO, Name: Chinese (Macao) +default charset: x-windows-950 + +OS Locale (lcid: 1407, name: de-LI): German (Liechtenstein) - 1252 +default locale: ID: de_LI, Name: German (Liechtenstein) +display locale: ID: en_US, Name: English (United States) +format locale: ID: de_LI, Name: German (Liechtenstein) +default charset: windows-1252 + +OS Locale (lcid: 1409, name: en-NZ): English (New Zealand) - 1252 +default locale: ID: en_NZ, Name: English (New Zealand) +display locale: ID: en_NZ, Name: English (New Zealand) +format locale: ID: en_NZ, Name: English (New Zealand) +default charset: windows-1252 + +OS Locale (lcid: 140a, name: es-CR): Spanish (Costa Rica) - 1252 +default locale: ID: es_CR, Name: Spanish (Costa Rica) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_CR, Name: Spanish (Costa Rica) +default charset: windows-1252 + +OS Locale (lcid: 140c, name: fr-LU): French (Luxembourg) - 1252 +default locale: ID: fr_LU, Name: French (Luxembourg) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fr_LU, Name: French (Luxembourg) +default charset: windows-1252 + +OS Locale (lcid: 141a, name: bs-Latn): Bosnian (Latin) (Bosnia and Herzegovina) - 1250 +default locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +default charset: windows-1250 + +OS Locale (lcid: 141a, name: bs-Latn-BA): Bosnian (Latin) (Bosnia and Herzegovina) - 1250 +default locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +default charset: windows-1250 + +OS Locale (lcid: 143b, name: smj-SE): Sami (Lule) (Sweden) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 143b, name: smj): Sami (Lule) (Sweden) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 1801, name: ar-MA): Arabic (Morocco) - 1256 +default locale: ID: ar_MA, Name: Arabic (Morocco) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_MA, Name: Arabic (Morocco) +default charset: windows-1256 + +OS Locale (lcid: 1809, name: en-IE): English (Ireland) - 1252 +default locale: ID: en_IE, Name: English (Ireland) +display locale: ID: en_IE, Name: English (Ireland) +format locale: ID: en_IE, Name: English (Ireland) +default charset: windows-1252 + +OS Locale (lcid: 180a, name: es-PA): Spanish (Panama) - 1252 +default locale: ID: es_PA, Name: Spanish (Panama) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_PA, Name: Spanish (Panama) +default charset: windows-1252 + +OS Locale (lcid: 180c, name: fr-MC): French (Principality of Monaco) - 1252 +default locale: ID: fr_MC, Name: French (Monaco) +display locale: ID: en_US, Name: English (United States) +format locale: ID: fr_MC, Name: French (Monaco) +default charset: windows-1252 + +OS Locale (lcid: 181a, name: sr-Latn-BA): Serbian (Latin) (Bosnia and Herzegovina) - 1250 +default locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +default charset: windows-1250 + +OS Locale (lcid: 183b, name: sma-NO): Sami (Southern) (Norway) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 1c01, name: ar-TN): Arabic (Tunisia) - 1256 +default locale: ID: ar_TN, Name: Arabic (Tunisia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_TN, Name: Arabic (Tunisia) +default charset: windows-1256 + +OS Locale (lcid: 1c09, name: en-ZA): English (South Africa) - 1252 +default locale: ID: en_ZA, Name: English (South Africa) +display locale: ID: en_ZA, Name: English (South Africa) +format locale: ID: en_ZA, Name: English (South Africa) +default charset: windows-1252 + +OS Locale (lcid: 1c0a, name: es-DO): Spanish (Dominican Republic) - 1252 +default locale: ID: es_DO, Name: Spanish (Dominican Republic) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_DO, Name: Spanish (Dominican Republic) +default charset: windows-1252 + +OS Locale (lcid: 1c1a, name: sr-Cyrl-BA): Serbian (Cyrillic) (Bosnia and Herzegovina) - 1251 +default locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_BA, Name: Serbian (Bosnia and Herzegovina) +default charset: windows-1251 + +OS Locale (lcid: 1c3b, name: sma): Sami (Southern) (Sweden) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 1c3b, name: sma-SE): Sami (Southern) (Sweden) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 2001, name: ar-OM): Arabic (Oman) - 1256 +default locale: ID: ar_OM, Name: Arabic (Oman) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_OM, Name: Arabic (Oman) +default charset: windows-1256 + +OS Locale (lcid: 2009, name: en-JM): English (Jamaica) - 1252 +default locale: ID: en_JM, Name: English (Jamaica) +display locale: ID: en_JM, Name: English (Jamaica) +format locale: ID: en_JM, Name: English (Jamaica) +default charset: windows-1252 + +OS Locale (lcid: 200a, name: es-VE): Spanish (Bolivarian Republic of Venezuela) - 1252 +default locale: ID: es_VE, Name: Spanish (Venezuela) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_VE, Name: Spanish (Venezuela) +default charset: windows-1252 + +OS Locale (lcid: 201a, name: bs-Cyrl-BA): Bosnian (Cyrillic) (Bosnia and Herzegovina) - 1251 +default locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +default charset: windows-1251 + +OS Locale (lcid: 201a, name: bs-Cyrl): Bosnian (Cyrillic) (Bosnia and Herzegovina) - 1251 +default locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +display locale: ID: en_US, Name: English (United States) +format locale: ID: bs_BA, Name: Bosnian (Bosnia and Herzegovina) +default charset: windows-1251 + +OS Locale (lcid: 203b, name: sms-FI): Sami (Skolt) (Finland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 203b, name: sms): Sami (Skolt) (Finland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 2401, name: ar-YE): Arabic (Yemen) - 1256 +default locale: ID: ar_YE, Name: Arabic (Yemen) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_YE, Name: Arabic (Yemen) +default charset: windows-1256 + +OS Locale (lcid: 2409, name: en-029): English (Caribbean) - 1252 +default locale: ID: en, Name: English +display locale: ID: en, Name: English +format locale: ID: en, Name: English +default charset: windows-1252 + +OS Locale (lcid: 240a, name: es-CO): Spanish (Colombia) - 1252 +default locale: ID: es_CO, Name: Spanish (Colombia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_CO, Name: Spanish (Colombia) +default charset: windows-1252 + +OS Locale (lcid: 241a, name: sr-Latn-RS): Serbian (Latin) (Serbia) - 1250 +default locale: ID: sr_RS, Name: Serbian (Serbia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_RS, Name: Serbian (Serbia) +default charset: windows-1250 + +OS Locale (lcid: 241a, name: sr-Latn): Serbian (Latin) (Serbia) - 1250 +default locale: ID: sr_RS, Name: Serbian (Serbia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_RS, Name: Serbian (Serbia) +default charset: windows-1250 + +OS Locale (lcid: 243b, name: smn): Sami (Inari) (Finland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 243b, name: smn-FI): Sami (Inari) (Finland) - 1252 +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS Locale (lcid: 2801, name: ar-SY): Arabic (Syria) - 1256 +default locale: ID: ar_SY, Name: Arabic (Syria) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_SY, Name: Arabic (Syria) +default charset: windows-1256 + +OS Locale (lcid: 2809, name: en-BZ): English (Belize) - 1252 +default locale: ID: en_BZ, Name: English (Belize) +display locale: ID: en_BZ, Name: English (Belize) +format locale: ID: en_BZ, Name: English (Belize) +default charset: windows-1252 + +OS Locale (lcid: 280a, name: es-PE): Spanish (Peru) - 1252 +default locale: ID: es_PE, Name: Spanish (Peru) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_PE, Name: Spanish (Peru) +default charset: windows-1252 + +OS Locale (lcid: 281a, name: sr-Cyrl-RS): Serbian (Cyrillic) (Serbia) - 1251 +default locale: ID: sr_RS, Name: Serbian (Serbia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_RS, Name: Serbian (Serbia) +default charset: windows-1251 + +OS Locale (lcid: 281a, name: sr-Cyrl): Serbian (Cyrillic) (Serbia) - 1251 +default locale: ID: sr_RS, Name: Serbian (Serbia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_RS, Name: Serbian (Serbia) +default charset: windows-1251 + +OS Locale (lcid: 2c01, name: ar-JO): Arabic (Jordan) - 1256 +default locale: ID: ar_JO, Name: Arabic (Jordan) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_JO, Name: Arabic (Jordan) +default charset: windows-1256 + +OS Locale (lcid: 2c09, name: en-TT): English (Trinidad and Tobago) - 1252 +default locale: ID: en_TT, Name: English (Trinidad and Tobago) +display locale: ID: en_TT, Name: English (Trinidad and Tobago) +format locale: ID: en_TT, Name: English (Trinidad and Tobago) +default charset: windows-1252 + +OS Locale (lcid: 2c0a, name: es-AR): Spanish (Argentina) - 1252 +default locale: ID: es_AR, Name: Spanish (Argentina) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_AR, Name: Spanish (Argentina) +default charset: windows-1252 + +OS Locale (lcid: 2c1a, name: sr-Latn-ME): Serbian (Latin) (Montenegro) - 1250 +default locale: ID: sr_ME, Name: Serbian (Montenegro) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_ME, Name: Serbian (Montenegro) +default charset: windows-1250 + +OS Locale (lcid: 3001, name: ar-LB): Arabic (Lebanon) - 1256 +default locale: ID: ar_LB, Name: Arabic (Lebanon) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_LB, Name: Arabic (Lebanon) +default charset: windows-1256 + +OS Locale (lcid: 3009, name: en-ZW): English (Zimbabwe) - 1252 +default locale: ID: en_ZW, Name: English (Zimbabwe) +display locale: ID: en_ZW, Name: English (Zimbabwe) +format locale: ID: en_ZW, Name: English (Zimbabwe) +default charset: windows-1252 + +OS Locale (lcid: 300a, name: es-EC): Spanish (Ecuador) - 1252 +default locale: ID: es_EC, Name: Spanish (Ecuador) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_EC, Name: Spanish (Ecuador) +default charset: windows-1252 + +OS Locale (lcid: 301a, name: sr-Cyrl-ME): Serbian (Cyrillic) (Montenegro) - 1251 +default locale: ID: sr_ME, Name: Serbian (Montenegro) +display locale: ID: en_US, Name: English (United States) +format locale: ID: sr_ME, Name: Serbian (Montenegro) +default charset: windows-1251 + +OS Locale (lcid: 3401, name: ar-KW): Arabic (Kuwait) - 1256 +default locale: ID: ar_KW, Name: Arabic (Kuwait) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_KW, Name: Arabic (Kuwait) +default charset: windows-1256 + +OS Locale (lcid: 3409, name: en-PH): English (Republic of the Philippines) - 1252 +default locale: ID: en_PH, Name: English (Philippines) +display locale: ID: en_PH, Name: English (Philippines) +format locale: ID: en_PH, Name: English (Philippines) +default charset: windows-1252 + +OS Locale (lcid: 340a, name: es-CL): Spanish (Chile) - 1252 +default locale: ID: es_CL, Name: Spanish (Chile) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_CL, Name: Spanish (Chile) +default charset: windows-1252 + +OS Locale (lcid: 3801, name: ar-AE): Arabic (U.A.E.) - 1256 +default locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_AE, Name: Arabic (United Arab Emirates) +default charset: windows-1256 + +OS Locale (lcid: 380a, name: es-UY): Spanish (Uruguay) - 1252 +default locale: ID: es_UY, Name: Spanish (Uruguay) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_UY, Name: Spanish (Uruguay) +default charset: windows-1252 + +OS Locale (lcid: 3c01, name: ar-BH): Arabic (Bahrain) - 1256 +default locale: ID: ar_BH, Name: Arabic (Bahrain) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_BH, Name: Arabic (Bahrain) +default charset: windows-1256 + +OS Locale (lcid: 3c0a, name: es-PY): Spanish (Paraguay) - 1252 +default locale: ID: es_PY, Name: Spanish (Paraguay) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_PY, Name: Spanish (Paraguay) +default charset: windows-1252 + +OS Locale (lcid: 4001, name: ar-QA): Arabic (Qatar) - 1256 +default locale: ID: ar_QA, Name: Arabic (Qatar) +display locale: ID: en_US, Name: English (United States) +format locale: ID: ar_QA, Name: Arabic (Qatar) +default charset: windows-1256 + +OS Locale (lcid: 4009, name: en-IN): English (India) - 1252 +default locale: ID: en_IN, Name: English (India) +display locale: ID: en_IN, Name: English (India) +format locale: ID: en_IN, Name: English (India) +default charset: windows-1252 + +OS Locale (lcid: 400a, name: es-BO): Spanish (Bolivia) - 1252 +default locale: ID: es_BO, Name: Spanish (Bolivia) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_BO, Name: Spanish (Bolivia) +default charset: windows-1252 + +OS Locale (lcid: 4409, name: en-MY): English (Malaysia) - 1252 +default locale: ID: en_MY, Name: English (Malaysia) +display locale: ID: en_MY, Name: English (Malaysia) +format locale: ID: en_MY, Name: English (Malaysia) +default charset: windows-1252 + +OS Locale (lcid: 440a, name: es-SV): Spanish (El Salvador) - 1252 +default locale: ID: es_SV, Name: Spanish (El Salvador) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_SV, Name: Spanish (El Salvador) +default charset: windows-1252 + +OS Locale (lcid: 4809, name: en-SG): English (Singapore) - 1252 +default locale: ID: en_SG, Name: English (Singapore) +display locale: ID: en_SG, Name: English (Singapore) +format locale: ID: en_SG, Name: English (Singapore) +default charset: windows-1252 + +OS Locale (lcid: 480a, name: es-HN): Spanish (Honduras) - 1252 +default locale: ID: es_HN, Name: Spanish (Honduras) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_HN, Name: Spanish (Honduras) +default charset: windows-1252 + +OS Locale (lcid: 4c0a, name: es-NI): Spanish (Nicaragua) - 1252 +default locale: ID: es_NI, Name: Spanish (Nicaragua) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_NI, Name: Spanish (Nicaragua) +default charset: windows-1252 + +OS Locale (lcid: 500a, name: es-PR): Spanish (Puerto Rico) - 1252 +default locale: ID: es_PR, Name: Spanish (Puerto Rico) +display locale: ID: en_US, Name: English (United States) +format locale: ID: es_PR, Name: Spanish (Puerto Rico) +default charset: windows-1252 + +OS Locale (lcid: 540a, name: es-US): Spanish (United States) - 1252 +default locale: ID: es_US, Name: Spanish (United States) +display locale: ID: en, Name: English +format locale: ID: es_US, Name: Spanish (United States) +default charset: windows-1252 + +OS UI Language (name: en-US) +default locale: ID: en_US, Name: English (United States) +display locale: ID: en_US, Name: English (United States) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252 + +OS UI Language (name: ja-JP) +default locale: ID: en_US, Name: English (United States) +display locale: ID: ja_JP, Name: Japanese (Japan) +format locale: ID: en_US, Name: English (United States) +default charset: windows-1252
--- a/test/java/util/Locale/data/deflocale.winvista Thu Sep 16 11:16:02 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1031 +0,0 @@ -# OSVersionInfo -# MajorVersion: 6 -# MinorVersion: 0 -# BuildNumber: 5456 -# CSDVersion: Service Pack 0 v. - - -OS Locale (lcid: 401): Arabic (Saudi Arabia) - 1256 -ar_SA -Arabic (Saudi Arabia) -windows-1256 - -OS Locale (lcid: 402): Bulgarian (Bulgaria) - 1251 -bg_BG -Bulgarian (Bulgaria) -windows-1251 - -OS Locale (lcid: 403): Catalan (Spain) - 1252 -ca_ES -Catalan (Spain) -windows-1252 - -OS Locale (lcid: 404): Chinese (Taiwan) - 950 -zh_TW -Chinese (Taiwan) -x-windows-950 - -OS Locale (lcid: 405): Czech (Czech Republic) - 1250 -cs_CZ -Czech (Czech Republic) -windows-1250 - -OS Locale (lcid: 406): Danish (Denmark) - 1252 -da_DK -Danish (Denmark) -windows-1252 - -OS Locale (lcid: 407): German (Germany) - 1252 -de_DE -German (Germany) -windows-1252 - -OS Locale (lcid: 408): Greek (Greece) - 1253 -el_GR -Greek (Greece) -windows-1253 - -OS Locale (lcid: 409): English (United States) - 1252 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 40b): Finnish (Finland) - 1252 -fi_FI -Finnish (Finland) -windows-1252 - -OS Locale (lcid: 40c): French (France) - 1252 -fr_FR -French (France) -windows-1252 - -OS Locale (lcid: 40d): Hebrew (Israel) - 1255 -iw_IL -Hebrew (Israel) -windows-1255 - -OS Locale (lcid: 40e): Hungarian (Hungary) - 1250 -hu_HU -Hungarian (Hungary) -windows-1250 - -OS Locale (lcid: 40f): Icelandic (Iceland) - 1252 -is_IS -Icelandic (Iceland) -windows-1252 - -OS Locale (lcid: 410): Italian (Italy) - 1252 -it_IT -Italian (Italy) -windows-1252 - -OS Locale (lcid: 411): Japanese (Japan) - 932 -ja_JP -Japanese (Japan) -windows-31j - -OS Locale (lcid: 412): Korean (Korea) - 949 -ko_KR -Korean (South Korea) -x-windows-949 - -OS Locale (lcid: 413): Dutch (Netherlands) - 1252 -nl_NL -Dutch (Netherlands) -windows-1252 - -OS Locale (lcid: 414): Norwegian (Bokmål) (Norway) - 1252 -no_NO -Norwegian (Norway) -windows-1252 - -OS Locale (lcid: 415): Polish (Poland) - 1250 -pl_PL -Polish (Poland) -windows-1250 - -OS Locale (lcid: 416): Portuguese (Brazil) - 1252 -pt_BR -Portuguese (Brazil) -windows-1252 - -OS Locale (lcid: 417): Romansh (Switzerland) - 1252 -rm_CH -Raeto-Romance (Switzerland) -windows-1252 - -OS Locale (lcid: 418): Romanian (Romania) - 1250 -ro_RO -Romanian (Romania) -windows-1250 - -OS Locale (lcid: 419): Russian (Russia) - 1251 -ru_RU -Russian (Russia) -windows-1251 - -OS Locale (lcid: 41a): Croatian (Croatia) - 1250 -hr_HR -Croatian (Croatia) -windows-1250 - -OS Locale (lcid: 41b): Slovak (Slovakia) - 1250 -sk_SK -Slovak (Slovakia) -windows-1250 - -OS Locale (lcid: 41c): Albanian (Albania) - 1250 -sq_AL -Albanian (Albania) -windows-1250 - -OS Locale (lcid: 41d): Swedish (Sweden) - 1252 -sv_SE -Swedish (Sweden) -windows-1252 - -OS Locale (lcid: 41e): Thai (Thailand) - 874 -th_TH -Thai (Thailand) -x-windows-874 - -OS Locale (lcid: 41f): Turkish (Turkey) - 1254 -tr_TR -Turkish (Turkey) -windows-1254 - -OS Locale (lcid: 420): Urdu (Islamic Republic of Pakistan) - 0 -ur_PK -Urdu (Pakistan) -windows-1256 - -OS Locale (lcid: 421): Indonesian (Indonesia) - 1252 -in_ID -Indonesian (Indonesia) -windows-1252 - -OS Locale (lcid: 422): Ukrainian (Ukraine) - 1251 -uk_UA -Ukrainian (Ukraine) -windows-1251 - -OS Locale (lcid: 423): Belarusian (Belarus) - 1251 -be_BY -Belarusian (Belarus) -windows-1251 - -OS Locale (lcid: 424): Slovenian (Slovenia) - 1250 -sl_SI -Slovenian (Slovenia) -windows-1250 - -OS Locale (lcid: 425): Estonian (Estonia) - 1257 -et_EE -Estonian (Estonia) -windows-1257 - -OS Locale (lcid: 426): Latvian (Latvia) - 1257 -lv_LV -Latvian (Latvia) -windows-1257 - -OS Locale (lcid: 427): Lithuanian (Lithuania) - 1257 -lt_LT -Lithuanian (Lithuania) -windows-1257 - -OS Locale (lcid: 428): Tajik (Cyrillic) (Tajikistan) - 1251 -tg_TJ -Tajik (Tajikistan) -windows-1251 - -OS Locale (lcid: 429): Persian (Iran) - 1256 -fa_IR -Persian (Iran) -windows-1256 - -OS Locale (lcid: 42a): Vietnamese (Vietnam) - 1258 -vi_VN -Vietnamese (Vietnam) -windows-1258 - -OS Locale (lcid: 42b): Armenian (Armenia) - 0 -hy_AM -Armenian (Armenia) -UTF-8 - -OS Locale (lcid: 42c): Azeri (Latin) (Azerbaijan) - 1254 -az_AZ -Azerbaijani (Azerbaijan) -windows-1254 - -OS Locale (lcid: 42d): Basque (Spain) - 1252 -eu_ES -Basque (Spain) -windows-1252 - -OS Locale (lcid: 42e): Upper Sorbian (Germany) - 1252 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 42f): Macedonian (FYROM) (Macedonia (FYROM)) - 1251 -mk_MK -Macedonian (Macedonia) -windows-1251 - -OS Locale (lcid: 432): Setswana (South Africa) - 1252 -tn_ZA -Tswana (South Africa) -windows-1252 - -OS Locale (lcid: 434): isiXhosa (South Africa) - 1252 -xh_ZA -Xhosa (South Africa) -windows-1252 - -OS Locale (lcid: 435): isiZulu (South Africa) - 1252 -zu_ZA -Zulu (South Africa) -windows-1252 - -OS Locale (lcid: 436): Afrikaans (South Africa) - 1252 -af_ZA -Afrikaans (South Africa) -windows-1252 - -OS Locale (lcid: 437): Georgian (Georgia) - 0 -ka_GE -Georgian (Georgia) -UTF-8 - -OS Locale (lcid: 438): Faroese (Faroe Islands) - 1252 -fo_FO -Faroese (Faroe Islands) -windows-1252 - -OS Locale (lcid: 439): Hindi (India) - 0 -hi_IN -Hindi (India) -UTF-8 - -OS Locale (lcid: 43a): Maltese (Malta) - 0 -mt_MT -Maltese (Malta) -UTF-8 - -OS Locale (lcid: 43b): Sami (Northern) (Norway) - 1252 -se_NO -Northern Sami (Norway) -windows-1252 - -OS Locale (lcid: 43e): Malay (Malaysia) - 1252 -ms_MY -Malay (Malaysia) -windows-1252 - -OS Locale (lcid: 43f): Kazakh (Kazakhstan) - 0 -kk_KZ -Kazakh (Kazakhstan) -windows-1251 - -OS Locale (lcid: 440): Kyrgyz (Kyrgyzstan) - 1251 -ky_KG -Kirghiz (Kyrgyzstan) -windows-1251 - -OS Locale (lcid: 441): Kiswahili (Kenya) - 1252 -sw_KE -Swahili (Kenya) -windows-1252 - -OS Locale (lcid: 442): Turkmen (Turkmenistan) - 1250 -tk_TM -Turkmen (Turkmenistan) -windows-1250 - -OS Locale (lcid: 443): Uzbek (Latin) (Uzbekistan) - 1254 -uz_UZ -Uzbek (Uzbekistan) -windows-1254 - -OS Locale (lcid: 444): Tatar (Russia) - 1251 -tt_RU -Tatar (Russia) -windows-1251 - -OS Locale (lcid: 445): Bengali (India) - 0 -bn_IN -Bengali (India) -UTF-8 - -OS Locale (lcid: 446): Punjabi (India) - 0 -pa_IN -Panjabi (India) -UTF-8 - -OS Locale (lcid: 447): Gujarati (India) - 0 -gu_IN -Gujarati (India) -UTF-8 - -OS Locale (lcid: 448): Oriya (India) - 0 -or_IN -Oriya (India) -UTF-8 - -OS Locale (lcid: 449): Tamil (India) - 0 -ta_IN -Tamil (India) -UTF-8 - -OS Locale (lcid: 44a): Telugu (India) - 0 -te_IN -Telugu (India) -UTF-8 - -OS Locale (lcid: 44b): Kannada (India) - 0 -kn_IN -Kannada (India) -UTF-8 - -OS Locale (lcid: 44c): Malayalam (India) - 0 -ml_IN -Malayalam (India) -UTF-8 - -OS Locale (lcid: 44d): Assamese (India) - 0 -as_IN -Assamese (India) -UTF-8 - -OS Locale (lcid: 44e): Marathi (India) - 0 -mr_IN -Marathi (India) -UTF-8 - -OS Locale (lcid: 44f): Sanskrit (India) - 0 -sa_IN -Sanskrit (India) -UTF-8 - -OS Locale (lcid: 450): Mongolian (Cyrillic) (Mongolia) - 1251 -mn_MN -Mongolian (Mongolia) -windows-1251 - -OS Locale (lcid: 451): Tibetan (People's Republic of China) - 0 -bo_CN -Tibetan (China) -UTF-8 - -OS Locale (lcid: 452): Welsh (United Kingdom) - 1252 -cy_GB -Welsh (United Kingdom) -windows-1252 - -OS Locale (lcid: 453): Khmer (Cambodia) - 0 -km_KH -Khmer (Cambodia) -UTF-8 - -OS Locale (lcid: 454): Lao (Lao P.D.R.) - 0 -lo_LA -Lao (Laos) -UTF-8 - -OS Locale (lcid: 456): Galician (Spain) - 1252 -gl_ES -Gallegan (Spain) -windows-1252 - -OS Locale (lcid: 457): Konkani (India) - 0 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 45a): Syriac (Syria) - 0 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 45b): Sinhala (Sri Lanka) - 0 -si_LK -Sinhalese (Sri Lanka) -UTF-8 - -OS Locale (lcid: 45d): Inuktitut (Canada) - 0 -iu_CA -Inuktitut (Canada) -UTF-8 - -OS Locale (lcid: 45e): Amharic (Ethiopia) - 0 -am_ET -Amharic (Ethiopia) -UTF-8 - -OS Locale (lcid: 461): Nepali (Nepal) - 0 -ne_NP -Nepali (Nepal) -UTF-8 - -OS Locale (lcid: 462): Frisian (Netherlands) - 1252 -fy_NL -Frisian (Netherlands) -windows-1252 - -OS Locale (lcid: 463): Pashto (Afghanistan) - 0 -ps_AF -Pushto (Afghanistan) -windows-1256 - -OS Locale (lcid: 464): Filipino (Philippines) - 1252 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 465): Divehi (Maldives) - 0 -dv_MV -Divehi (Maldives) -UTF-8 - -OS Locale (lcid: 468): Hausa (Latin) (Nigeria) - 1252 -ha_NG -Hausa (Nigeria) -windows-1252 - -OS Locale (lcid: 46a): Yoruba (Nigeria) - 1252 -yo_NG -Yoruba (Nigeria) -windows-1252 - -OS Locale (lcid: 46b): Quechua (Bolivia) - 1252 -qu_BO -Quechua (Bolivia) -windows-1252 - -OS Locale (lcid: 46c): Sesotho sa Leboa (South Africa) - 1252 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 46d): Bashkir (Russia) - 1251 -ba_RU -Bashkir (Russia) -windows-1251 - -OS Locale (lcid: 46e): Luxembourgish (Luxembourg) - 1252 -lb_LU -Luxembourgish (Luxembourg) -windows-1252 - -OS Locale (lcid: 46f): Greenlandic (Greenland) - 1252 -kl_GL -Greenlandic (Greenland) -windows-1252 - -OS Locale (lcid: 470): Igbo (Nigeria) - 1252 -ig_NG -Igbo (Nigeria) -windows-1252 - -OS Locale (lcid: 478): Yi (People's Republic of China) - 0 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 47a): Mapudungun (Chile) - 1252 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 47c): Mohawk (Canada) - 1252 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 47e): Breton (France) - 1252 -br_FR -Breton (France) -windows-1252 - -OS Locale (lcid: 480): Uighur (People's Republic of China) - 1256 -ug_CN -Uighur (China) -windows-1256 - -OS Locale (lcid: 481): Maori (New Zealand) - 0 -mi_NZ -Maori (New Zealand) -UTF-8 - -OS Locale (lcid: 482): Occitan (France) - 1252 -oc_FR -Occitan (France) -windows-1252 - -OS Locale (lcid: 483): Corsican (France) - 1252 -co_FR -Corsican (France) -windows-1252 - -OS Locale (lcid: 484): Alsatian (France) - 1252 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 485): Yakut (Russia) - 1251 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 486): K'iche (Guatemala) - 1252 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 487): Kinyarwanda (Rwanda) - 1252 -rw_RW -Kinyarwanda (Rwanda) -windows-1252 - -OS Locale (lcid: 488): Wolof (Senegal) - 1252 -wo_SN -Wolof (Senegal) -windows-1252 - -OS Locale (lcid: 48c): Dari (Afghanistan) - 1256 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 801): Arabic (Iraq) - 1256 -ar_IQ -Arabic (Iraq) -windows-1256 - -OS Locale (lcid: 804): Chinese (People's Republic of China) - 936 -zh_CN -Chinese (China) -GBK - -OS Locale (lcid: 807): German (Switzerland) - 1252 -de_CH -German (Switzerland) -windows-1252 - -OS Locale (lcid: 809): English (United Kingdom) - 1252 -en_GB -English (United Kingdom) -windows-1252 - -OS Locale (lcid: 80a): Spanish (Mexico) - 1252 -es_MX -Spanish (Mexico) -windows-1252 - -OS Locale (lcid: 80c): French (Belgium) - 1252 -fr_BE -French (Belgium) -windows-1252 - -OS Locale (lcid: 810): Italian (Switzerland) - 1252 -it_CH -Italian (Switzerland) -windows-1252 - -OS Locale (lcid: 813): Dutch (Belgium) - 1252 -nl_BE -Dutch (Belgium) -windows-1252 - -OS Locale (lcid: 814): Norwegian (Nynorsk) (Norway) - 1252 -no_NO_NY -Norwegian (Norway,Nynorsk) -windows-1252 - -OS Locale (lcid: 816): Portuguese (Portugal) - 1252 -pt_PT -Portuguese (Portugal) -windows-1252 - -OS Locale (lcid: 81a): Serbian (Latin) (Serbia and Montenegro) - 1250 -sr_CS -Serbian (Serbia and Montenegro) -windows-1250 - -OS Locale (lcid: 81d): Swedish (Finland) - 1252 -sv_FI -Swedish (Finland) -windows-1252 - -OS Locale (lcid: 82c): Azeri (Cyrillic) (Azerbaijan) - 1251 -az_AZ -Azerbaijani (Azerbaijan) -windows-1251 - -OS Locale (lcid: 82e): Lower Sorbian (Germany) - 1252 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 83b): Sami (Northern) (Sweden) - 1252 -se_SE -Northern Sami (Sweden) -windows-1252 - -OS Locale (lcid: 83c): Irish (Ireland) - 1252 -ga_IE -Irish (Ireland) -windows-1252 - -OS Locale (lcid: 83e): Malay (Brunei Darussalam) - 1252 -ms_BN -Malay (Brunei) -windows-1252 - -OS Locale (lcid: 843): Uzbek (Cyrillic) (Uzbekistan) - 1251 -uz_UZ -Uzbek (Uzbekistan) -windows-1251 - -OS Locale (lcid: 845): Bengali (Bangladesh) - 0 -bn_BD -Bengali (Bangladesh) -UTF-8 - -OS Locale (lcid: 850): Mongolian (Traditional Mongolian) (People's Republic of China) - 0 -mn_CN -Mongolian (China) -UTF-8 - -OS Locale (lcid: 85d): Inuktitut (Latin) (Canada) - 1252 -iu_CA -Inuktitut (Canada) -windows-1252 - -OS Locale (lcid: 85f): Tamazight (Latin) (Algeria) - 1252 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 86b): Quechua (Ecuador) - 1252 -qu_EC -Quechua (Ecuador) -windows-1252 - -OS Locale (lcid: c01): Arabic (Egypt) - 1256 -ar_EG -Arabic (Egypt) -windows-1256 - -OS Locale (lcid: c04): Chinese (Hong Kong S.A.R.) - 950 -zh_HK -Chinese (Hong Kong) -x-windows-950 - -OS Locale (lcid: c07): German (Austria) - 1252 -de_AT -German (Austria) -windows-1252 - -OS Locale (lcid: c09): English (Australia) - 1252 -en_AU -English (Australia) -windows-1252 - -OS Locale (lcid: c0a): Spanish (Spain) - 1252 -es_ES -Spanish (Spain) -windows-1252 - -OS Locale (lcid: c0c): French (Canada) - 1252 -fr_CA -French (Canada) -windows-1252 - -OS Locale (lcid: c1a): Serbian (Cyrillic) (Serbia and Montenegro) - 1251 -sr_CS -Serbian (Serbia and Montenegro) -windows-1251 - -OS Locale (lcid: c3b): Sami (Northern) (Finland) - 1252 -se_FI -Northern Sami (Finland) -windows-1252 - -OS Locale (lcid: c6b): Quechua (Peru) - 1252 -qu_PE -Quechua (Peru) -windows-1252 - -OS Locale (lcid: 1001): Arabic (Libya) - 1256 -ar_LY -Arabic (Libya) -windows-1256 - -OS Locale (lcid: 1004): Chinese (Singapore) - 936 -zh_SG -Chinese (Singapore) -GBK - -OS Locale (lcid: 1007): German (Luxembourg) - 1252 -de_LU -German (Luxembourg) -windows-1252 - -OS Locale (lcid: 1009): English (Canada) - 1252 -en_CA -English (Canada) -windows-1252 - -OS Locale (lcid: 100a): Spanish (Guatemala) - 1252 -es_GT -Spanish (Guatemala) -windows-1252 - -OS Locale (lcid: 100c): French (Switzerland) - 1252 -fr_CH -French (Switzerland) -windows-1252 - -OS Locale (lcid: 101a): Croatian (Latin) (Bosnia and Herzegovina) - 1250 -hr_BA -Croatian (Bosnia and Herzegovina) -windows-1250 - -OS Locale (lcid: 103b): Sami (Lule) (Norway) - 1252 -se -Northern Sami -windows-1252 - -OS Locale (lcid: 1401): Arabic (Algeria) - 1256 -ar_DZ -Arabic (Algeria) -windows-1256 - -OS Locale (lcid: 1404): Chinese (Macao S.A.R.) - 950 -zh_MO -Chinese (Macao) -x-windows-950 - -OS Locale (lcid: 1407): German (Liechtenstein) - 1252 -de_LI -German (Liechtenstein) -windows-1252 - -OS Locale (lcid: 1409): English (New Zealand) - 1252 -en_NZ -English (New Zealand) -windows-1252 - -OS Locale (lcid: 140a): Spanish (Costa Rica) - 1252 -es_CR -Spanish (Costa Rica) -windows-1252 - -OS Locale (lcid: 140c): French (Luxembourg) - 1252 -fr_LU -French (Luxembourg) -windows-1252 - -OS Locale (lcid: 141a): Bosnian (Latin) (Bosnia and Herzegovina) - 1250 -bs_BA -Bosnian (Bosnia and Herzegovina) -windows-1250 - -OS Locale (lcid: 143b): Sami (Lule) (Sweden) - 1252 -se -Northern Sami -windows-1252 - -OS Locale (lcid: 1801): Arabic (Morocco) - 1256 -ar_MA -Arabic (Morocco) -windows-1256 - -OS Locale (lcid: 1809): English (Ireland) - 1252 -en_IE -English (Ireland) -windows-1252 - -OS Locale (lcid: 180a): Spanish (Panama) - 1252 -es_PA -Spanish (Panama) -windows-1252 - -OS Locale (lcid: 180c): French (Principality of Monaco) - 1252 -fr_MC -French (Monaco) -windows-1252 - -OS Locale (lcid: 181a): Serbian (Latin) (Bosnia and Herzegovina) - 1250 -sr_BA -Serbian (Bosnia and Herzegovina) -windows-1250 - -OS Locale (lcid: 183b): Sami (Southern) (Norway) - 1252 -se -Northern Sami -windows-1252 - -OS Locale (lcid: 1c01): Arabic (Tunisia) - 1256 -ar_TN -Arabic (Tunisia) -windows-1256 - -OS Locale (lcid: 1c09): English (South Africa) - 1252 -en_ZA -English (South Africa) -windows-1252 - -OS Locale (lcid: 1c0a): Spanish (Dominican Republic) - 1252 -es_DO -Spanish (Dominican Republic) -windows-1252 - -OS Locale (lcid: 1c1a): Serbian (Cyrillic) (Bosnia and Herzegovina) - 1251 -sr_BA -Serbian (Bosnia and Herzegovina) -windows-1251 - -OS Locale (lcid: 1c3b): Sami (Southern) (Sweden) - 1252 -se -Northern Sami -windows-1252 - -OS Locale (lcid: 2001): Arabic (Oman) - 1256 -ar_OM -Arabic (Oman) -windows-1256 - -OS Locale (lcid: 2009): English (Jamaica) - 1252 -en_JM -English (Jamaica) -windows-1252 - -OS Locale (lcid: 200a): Spanish (Venezuela) - 1252 -es_VE -Spanish (Venezuela) -windows-1252 - -OS Locale (lcid: 201a): Bosnian (Cyrillic) (Bosnia and Herzegovina) - 1251 -bs_BA -Bosnian (Bosnia and Herzegovina) -windows-1250 - -OS Locale (lcid: 203b): Sami (Skolt) (Finland) - 1252 -se -Northern Sami -windows-1252 - -OS Locale (lcid: 2401): Arabic (Yemen) - 1256 -ar_YE -Arabic (Yemen) -windows-1256 - -OS Locale (lcid: 2409): English (Caribbean) - 1252 -en -English -windows-1252 - -OS Locale (lcid: 240a): Spanish (Colombia) - 1252 -es_CO -Spanish (Colombia) -windows-1252 - -OS Locale (lcid: 243b): Sami (Inari) (Finland) - 1252 -se -Northern Sami -windows-1252 - -OS Locale (lcid: 2801): Arabic (Syria) - 1256 -ar_SY -Arabic (Syria) -windows-1256 - -OS Locale (lcid: 2809): English (Belize) - 1252 -en_BZ -English (Belize) -windows-1252 - -OS Locale (lcid: 280a): Spanish (Peru) - 1252 -es_PE -Spanish (Peru) -windows-1252 - -OS Locale (lcid: 2c01): Arabic (Jordan) - 1256 -ar_JO -Arabic (Jordan) -windows-1256 - -OS Locale (lcid: 2c09): English (Trinidad and Tobago) - 1252 -en_TT -English (Trinidad and Tobago) -windows-1252 - -OS Locale (lcid: 2c0a): Spanish (Argentina) - 1252 -es_AR -Spanish (Argentina) -windows-1252 - -OS Locale (lcid: 3001): Arabic (Lebanon) - 1256 -ar_LB -Arabic (Lebanon) -windows-1256 - -OS Locale (lcid: 3009): English (Zimbabwe) - 1252 -en_ZW -English (Zimbabwe) -windows-1252 - -OS Locale (lcid: 300a): Spanish (Ecuador) - 1252 -es_EC -Spanish (Ecuador) -windows-1252 - -OS Locale (lcid: 3401): Arabic (Kuwait) - 1256 -ar_KW -Arabic (Kuwait) -windows-1256 - -OS Locale (lcid: 3409): English (Republic of the Philippines) - 1252 -en_PH -English (Philippines) -windows-1252 - -OS Locale (lcid: 340a): Spanish (Chile) - 1252 -es_CL -Spanish (Chile) -windows-1252 - -OS Locale (lcid: 3801): Arabic (U.A.E.) - 1256 -ar_AE -Arabic (United Arab Emirates) -windows-1256 - -OS Locale (lcid: 380a): Spanish (Uruguay) - 1252 -es_UY -Spanish (Uruguay) -windows-1252 - -OS Locale (lcid: 3c01): Arabic (Bahrain) - 1256 -ar_BH -Arabic (Bahrain) -windows-1256 - -OS Locale (lcid: 3c0a): Spanish (Paraguay) - 1252 -es_PY -Spanish (Paraguay) -windows-1252 - -OS Locale (lcid: 4001): Arabic (Qatar) - 1256 -ar_QA -Arabic (Qatar) -windows-1256 - -OS Locale (lcid: 4009): English (India) - 1252 -en_IN -English (India) -windows-1252 - -OS Locale (lcid: 400a): Spanish (Bolivia) - 1252 -es_BO -Spanish (Bolivia) -windows-1252 - -OS Locale (lcid: 4409): English (Malaysia) - 1252 -en_MY -English (Malaysia) -windows-1252 - -OS Locale (lcid: 440a): Spanish (El Salvador) - 1252 -es_SV -Spanish (El Salvador) -windows-1252 - -OS Locale (lcid: 4809): English (Singapore) - 1252 -en_SG -English (Singapore) -windows-1252 - -OS Locale (lcid: 480a): Spanish (Honduras) - 1252 -es_HN -Spanish (Honduras) -windows-1252 - -OS Locale (lcid: 4c0a): Spanish (Nicaragua) - 1252 -es_NI -Spanish (Nicaragua) -windows-1252 - -OS Locale (lcid: 500a): Spanish (Puerto Rico) - 1252 -es_PR -Spanish (Puerto Rico) -windows-1252 - -OS Locale (lcid: 540a): Spanish (United States) - 1252 -es_US -Spanish (United States) -windows-1252
--- a/test/java/util/Locale/data/deflocale.winxp Thu Sep 16 11:16:02 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,861 +0,0 @@ -# OSVersionInfo -# MajorVersion: 5 -# MinorVersion: 1 -# BuildNumber: 2600 -# CSDVersion: Service Pack 2 - - -OS Locale (lcid: 401): Arabic (Saudi Arabia) - 1256 -ar_SA -Arabic (Saudi Arabia) -windows-1256 - -OS Locale (lcid: 402): Bulgarian (Bulgaria) - 1251 -bg_BG -Bulgarian (Bulgaria) -windows-1251 - -OS Locale (lcid: 403): Catalan (Spain) - 1252 -ca_ES -Catalan (Spain) -windows-1252 - -OS Locale (lcid: 404): Chinese (Taiwan) - 950 -zh_TW -Chinese (Taiwan) -x-windows-950 - -OS Locale (lcid: 405): Czech (Czech Republic) - 1250 -cs_CZ -Czech (Czech Republic) -windows-1250 - -OS Locale (lcid: 406): Danish (Denmark) - 1252 -da_DK -Danish (Denmark) -windows-1252 - -OS Locale (lcid: 407): German (Germany) - 1252 -de_DE -German (Germany) -windows-1252 - -OS Locale (lcid: 408): Greek (Greece) - 1253 -el_GR -Greek (Greece) -windows-1253 - -OS Locale (lcid: 409): English (United States) - 1252 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 40a): Spanish (Spain) - 1252 -es_ES -Spanish (Spain) -windows-1252 - -OS Locale (lcid: 40b): Finnish (Finland) - 1252 -fi_FI -Finnish (Finland) -windows-1252 - -OS Locale (lcid: 40c): French (France) - 1252 -fr_FR -French (France) -windows-1252 - -OS Locale (lcid: 40d): Hebrew (Israel) - 1255 -iw_IL -Hebrew (Israel) -windows-1255 - -OS Locale (lcid: 40e): Hungarian (Hungary) - 1250 -hu_HU -Hungarian (Hungary) -windows-1250 - -OS Locale (lcid: 40f): Icelandic (Iceland) - 1252 -is_IS -Icelandic (Iceland) -windows-1252 - -OS Locale (lcid: 410): Italian (Italy) - 1252 -it_IT -Italian (Italy) -windows-1252 - -OS Locale (lcid: 411): Japanese (Japan) - 932 -ja_JP -Japanese (Japan) -windows-31j - -OS Locale (lcid: 412): Korean (Korea) - 949 -ko_KR -Korean (South Korea) -x-windows-949 - -OS Locale (lcid: 413): Dutch (Netherlands) - 1252 -nl_NL -Dutch (Netherlands) -windows-1252 - -OS Locale (lcid: 414): Norwegian (Bokmål) (Norway) - 1252 -no_NO -Norwegian (Norway) -windows-1252 - -OS Locale (lcid: 415): Polish (Poland) - 1250 -pl_PL -Polish (Poland) -windows-1250 - -OS Locale (lcid: 416): Portuguese (Brazil) - 1252 -pt_BR -Portuguese (Brazil) -windows-1252 - -OS Locale (lcid: 417): Romansh (Switzerland) - 1252 -rm_CH -Raeto-Romance (Switzerland) -windows-1252 - -OS Locale (lcid: 418): Romanian (Romania) - 1250 -ro_RO -Romanian (Romania) -windows-1250 - -OS Locale (lcid: 419): Russian (Russia) - 1251 -ru_RU -Russian (Russia) -windows-1251 - -OS Locale (lcid: 41a): Croatian (Croatia) - 1250 -hr_HR -Croatian (Croatia) -windows-1250 - -OS Locale (lcid: 41b): Slovak (Slovakia) - 1250 -sk_SK -Slovak (Slovakia) -windows-1250 - -OS Locale (lcid: 41c): Albanian (Albania) - 1250 -sq_AL -Albanian (Albania) -windows-1250 - -OS Locale (lcid: 41d): Swedish (Sweden) - 1252 -sv_SE -Swedish (Sweden) -windows-1252 - -OS Locale (lcid: 41e): Thai (Thailand) - 874 -th_TH -Thai (Thailand) -x-windows-874 - -OS Locale (lcid: 41f): Turkish (Turkey) - 1254 -tr_TR -Turkish (Turkey) -windows-1254 - -OS Locale (lcid: 420): Urdu (Islamic Republic of Pakistan) - 1256 -ur_PK -Urdu (Pakistan) -windows-1256 - -OS Locale (lcid: 421): Indonesian (Indonesia) - 1252 -in_ID -Indonesian (Indonesia) -windows-1252 - -OS Locale (lcid: 422): Ukrainian (Ukraine) - 1251 -uk_UA -Ukrainian (Ukraine) -windows-1251 - -OS Locale (lcid: 423): Belarusian (Belarus) - 1251 -be_BY -Belarusian (Belarus) -windows-1251 - -OS Locale (lcid: 424): Slovenian (Slovenia) - 1250 -sl_SI -Slovenian (Slovenia) -windows-1250 - -OS Locale (lcid: 425): Estonian (Estonia) - 1257 -et_EE -Estonian (Estonia) -windows-1257 - -OS Locale (lcid: 426): Latvian (Latvia) - 1257 -lv_LV -Latvian (Latvia) -windows-1257 - -OS Locale (lcid: 427): Lithuanian (Lithuania) - 1257 -lt_LT -Lithuanian (Lithuania) -windows-1257 - -OS Locale (lcid: 429): Farsi (Iran) - 1256 -fa_IR -Persian (Iran) -windows-1256 - -OS Locale (lcid: 42a): Vietnamese (Viet Nam) - 1258 -vi_VN -Vietnamese (Vietnam) -windows-1258 - -OS Locale (lcid: 42b): Armenian (Armenia) - 0 -hy_AM -Armenian (Armenia) -UTF-8 - -OS Locale (lcid: 42c): Azeri (Latin) (Azerbaijan) - 1254 -az_AZ -Azerbaijani (Azerbaijan) -windows-1254 - -OS Locale (lcid: 42d): Basque (Spain) - 1252 -eu_ES -Basque (Spain) -windows-1252 - -OS Locale (lcid: 42f): FYRO Macedonian (Former Yugoslav Republic of Macedonia) - 1251 -mk_MK -Macedonian (Macedonia) -windows-1251 - -OS Locale (lcid: 432): Tswana (South Africa) - 1252 -tn_ZA -Tswana (South Africa) -windows-1252 - -OS Locale (lcid: 434): Xhosa (South Africa) - 1252 -xh_ZA -Xhosa (South Africa) -windows-1252 - -OS Locale (lcid: 435): Zulu (South Africa) - 1252 -zu_ZA -Zulu (South Africa) -windows-1252 - -OS Locale (lcid: 436): Afrikaans (South Africa) - 1252 -af_ZA -Afrikaans (South Africa) -windows-1252 - -OS Locale (lcid: 437): Georgian (Georgia) - 0 -ka_GE -Georgian (Georgia) -UTF-8 - -OS Locale (lcid: 438): Faroese (Faroe Islands) - 1252 -fo_FO -Faroese (Faroe Islands) -windows-1252 - -OS Locale (lcid: 439): Hindi (India) - 0 -hi_IN -Hindi (India) -UTF-8 - -OS Locale (lcid: 43a): Maltese (Malta) - 0 -mt_MT -Maltese (Malta) -UTF-8 - -OS Locale (lcid: 43b): Sami (Northern) (Norway) - 1252 -se_NO -Northern Sami (Norway) -windows-1252 - -OS Locale (lcid: 43e): Malay (Malaysia) - 1252 -ms_MY -Malay (Malaysia) -windows-1252 - -OS Locale (lcid: 43f): Kazakh (Kazakhstan) - 1251 -kk_KZ -Kazakh (Kazakhstan) -windows-1251 - -OS Locale (lcid: 440): Kyrgyz (Kyrgyzstan) - 1251 -ky_KG -Kirghiz (Kyrgyzstan) -windows-1251 - -OS Locale (lcid: 441): Swahili (Kenya) - 1252 -sw_KE -Swahili (Kenya) -windows-1252 - -OS Locale (lcid: 443): Uzbek (Latin) (Uzbekistan) - 1254 -uz_UZ -Uzbek (Uzbekistan) -windows-1254 - -OS Locale (lcid: 444): Tatar (Russia) - 1251 -tt_RU -Tatar (Russia) -windows-1251 - -OS Locale (lcid: 445): Bengali (India) - 0 -bn_IN -Bengali (India) -UTF-8 - -OS Locale (lcid: 446): Punjabi (India) - 0 -pa_IN -Panjabi (India) -UTF-8 - -OS Locale (lcid: 447): Gujarati (India) - 0 -gu_IN -Gujarati (India) -UTF-8 - -OS Locale (lcid: 449): Tamil (India) - 0 -ta_IN -Tamil (India) -UTF-8 - -OS Locale (lcid: 44a): Telugu (India) - 0 -te_IN -Telugu (India) -UTF-8 - -OS Locale (lcid: 44b): Kannada (India) - 0 -kn_IN -Kannada (India) -UTF-8 - -OS Locale (lcid: 44c): Malayalam (India) - 0 -ml_IN -Malayalam (India) -UTF-8 - -OS Locale (lcid: 44e): Marathi (India) - 0 -mr_IN -Marathi (India) -UTF-8 - -OS Locale (lcid: 44f): Sanskrit (India) - 0 -sa_IN -Sanskrit (India) -UTF-8 - -OS Locale (lcid: 450): Mongolian (Mongolia) - 1251 -mn_MN -Mongolian (Mongolia) -windows-1251 - -OS Locale (lcid: 452): Welsh (United Kingdom) - 1252 -cy_GB -Welsh (United Kingdom) -windows-1252 - -OS Locale (lcid: 456): Galician (Spain) - 1252 -gl_ES -Gallegan (Spain) -windows-1252 - -OS Locale (lcid: 457): Konkani (India) - 0 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 45a): Syriac (Syria) - 0 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 461): Nepali (Nepal) - 0 -ne_NP -Nepali (Nepal) -UTF-8 - -OS Locale (lcid: 462): Frisian (Netherlands) - 1252 -fy_NL -Frisian (Netherlands) -windows-1252 - -OS Locale (lcid: 463): Pashto (Afghanistan) - 1256 -ps_AF -Pushto (Afghanistan) -windows-1256 - -OS Locale (lcid: 464): Filipino (Philippines) - 1252 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 465): Divehi (Maldives) - 0 -dv_MV -Divehi (Maldives) -UTF-8 - -OS Locale (lcid: 46b): Quechua (Bolivia) - 1252 -qu_BO -Quechua (Bolivia) -windows-1252 - -OS Locale (lcid: 46c): Northern Sotho (South Africa) - 1252 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 46e): Luxembourgish (Luxembourg) - 1252 -lb_LU -Luxembourgish (Luxembourg) -windows-1252 - -OS Locale (lcid: 47a): Mapudungun (Chile) - 1252 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 47c): Mohawk (Canada) - 1252 -en_US -English (United States) -windows-1252 - -OS Locale (lcid: 481): Maori (New Zealand) - 0 -mi_NZ -Maori (New Zealand) -UTF-8 - -OS Locale (lcid: 801): Arabic (Iraq) - 1256 -ar_IQ -Arabic (Iraq) -windows-1256 - -OS Locale (lcid: 804): Chinese (People's Republic of China) - 936 -zh_CN -Chinese (China) -GBK - -OS Locale (lcid: 807): German (Switzerland) - 1252 -de_CH -German (Switzerland) -windows-1252 - -OS Locale (lcid: 809): English (United Kingdom) - 1252 -en_GB -English (United Kingdom) -windows-1252 - -OS Locale (lcid: 80a): Spanish (Mexico) - 1252 -es_MX -Spanish (Mexico) -windows-1252 - -OS Locale (lcid: 80c): French (Belgium) - 1252 -fr_BE -French (Belgium) -windows-1252 - -OS Locale (lcid: 810): Italian (Switzerland) - 1252 -it_CH -Italian (Switzerland) -windows-1252 - -OS Locale (lcid: 813): Dutch (Belgium) - 1252 -nl_BE -Dutch (Belgium) -windows-1252 - -OS Locale (lcid: 814): Norwegian (Nynorsk) (Norway) - 1252 -no_NO_NY -Norwegian (Norway,Nynorsk) -windows-1252 - -OS Locale (lcid: 816): Portuguese (Portugal) - 1252 -pt_PT -Portuguese (Portugal) -windows-1252 - -OS Locale (lcid: 81a): Serbian (Latin) (Serbia and Montenegro) - 1250 -sr_CS -Serbian (Serbia and Montenegro) -windows-1250 - -OS Locale (lcid: 81d): Swedish (Finland) - 1252 -sv_FI -Swedish (Finland) -windows-1252 - -OS Locale (lcid: 82c): Azeri (Cyrillic) (Azerbaijan) - 1251 -az_AZ -Azerbaijani (Azerbaijan) -windows-1251 - -OS Locale (lcid: 83b): Sami (Northern) (Sweden) - 1252 -se_SE -Northern Sami (Sweden) -windows-1252 - -OS Locale (lcid: 83c): Irish (Ireland) - 1252 -ga_IE -Irish (Ireland) -windows-1252 - -OS Locale (lcid: 83e): Malay (Brunei Darussalam) - 1252 -ms_BN -Malay (Brunei) -windows-1252 - -OS Locale (lcid: 843): Uzbek (Cyrillic) (Uzbekistan) - 1251 -uz_UZ -Uzbek (Uzbekistan) -windows-1251 - -OS Locale (lcid: 85d): Inuktitut (Latin) (Canada) - 1252 -iu_CA -Inuktitut (Canada) -windows-1252 - -OS Locale (lcid: 86b): Quechua (Ecuador) - 1252 -qu_EC -Quechua (Ecuador) -windows-1252 - -OS Locale (lcid: c01): Arabic (Egypt) - 1256 -ar_EG -Arabic (Egypt) -windows-1256 - -OS Locale (lcid: c04): Chinese (Hong Kong S.A.R.) - 950 -zh_HK -Chinese (Hong Kong) -x-windows-950 - -OS Locale (lcid: c07): German (Austria) - 1252 -de_AT -German (Austria) -windows-1252 - -OS Locale (lcid: c09): English (Australia) - 1252 -en_AU -English (Australia) -windows-1252 - -OS Locale (lcid: c0a): Spanish (Spain) - 1252 -es_ES -Spanish (Spain) -windows-1252 - -OS Locale (lcid: c0c): French (Canada) - 1252 -fr_CA -French (Canada) -windows-1252 - -OS Locale (lcid: c1a): Serbian (Cyrillic) (Serbia and Montenegro) - 1251 -sr_CS -Serbian (Serbia and Montenegro) -windows-1251 - -OS Locale (lcid: c3b): Sami (Northern) (Finland) - 1252 -se_FI -Northern Sami (Finland) -windows-1252 - -OS Locale (lcid: c6b): Quechua (Peru) - 1252 -qu_PE -Quechua (Peru) -windows-1252 - -OS Locale (lcid: 1001): Arabic (Libya) - 1256 -ar_LY -Arabic (Libya) -windows-1256 - -OS Locale (lcid: 1004): Chinese (Singapore) - 936 -zh_SG -Chinese (Singapore) -GBK - -OS Locale (lcid: 1007): German (Luxembourg) - 1252 -de_LU -German (Luxembourg) -windows-1252 - -OS Locale (lcid: 1009): English (Canada) - 1252 -en_CA -English (Canada) -windows-1252 - -OS Locale (lcid: 100a): Spanish (Guatemala) - 1252 -es_GT -Spanish (Guatemala) -windows-1252 - -OS Locale (lcid: 100c): French (Switzerland) - 1252 -fr_CH -French (Switzerland) -windows-1252 - -OS Locale (lcid: 101a): Croatian (Bosnia and Herzegovina) - 1250 -hr_BA -Croatian (Bosnia and Herzegovina) -windows-1250 - -OS Locale (lcid: 103b): Sami (Lule) (Norway) - 1252 -se -Northern Sami -windows-1252 - -OS Locale (lcid: 1401): Arabic (Algeria) - 1256 -ar_DZ -Arabic (Algeria) -windows-1256 - -OS Locale (lcid: 1404): Chinese (Macau S.A.R.) - 950 -zh_MO -Chinese (Macao) -x-windows-950 - -OS Locale (lcid: 1407): German (Liechtenstein) - 1252 -de_LI -German (Liechtenstein) -windows-1252 - -OS Locale (lcid: 1409): English (New Zealand) - 1252 -en_NZ -English (New Zealand) -windows-1252 - -OS Locale (lcid: 140a): Spanish (Costa Rica) - 1252 -es_CR -Spanish (Costa Rica) -windows-1252 - -OS Locale (lcid: 140c): French (Luxembourg) - 1252 -fr_LU -French (Luxembourg) -windows-1252 - -OS Locale (lcid: 141a): Bosnian (Bosnia and Herzegovina) - 1250 -bs_BA -Bosnian (Bosnia and Herzegovina) -windows-1250 - -OS Locale (lcid: 143b): Sami (Lule) (Sweden) - 1252 -se -Northern Sami -windows-1252 - -OS Locale (lcid: 1801): Arabic (Morocco) - 1256 -ar_MA -Arabic (Morocco) -windows-1256 - -OS Locale (lcid: 1809): English (Ireland) - 1252 -en_IE -English (Ireland) -windows-1252 - -OS Locale (lcid: 180a): Spanish (Panama) - 1252 -es_PA -Spanish (Panama) -windows-1252 - -OS Locale (lcid: 180c): French (Principality of Monaco) - 1252 -fr_MC -French (Monaco) -windows-1252 - -OS Locale (lcid: 181a): Serbian (Latin) (Bosnia and Herzegovina) - 1250 -sr_BA -Serbian (Bosnia and Herzegovina) -windows-1250 - -OS Locale (lcid: 183b): Sami (Southern) (Norway) - 1252 -se -Northern Sami -windows-1252 - -OS Locale (lcid: 1c01): Arabic (Tunisia) - 1256 -ar_TN -Arabic (Tunisia) -windows-1256 - -OS Locale (lcid: 1c09): English (South Africa) - 1252 -en_ZA -English (South Africa) -windows-1252 - -OS Locale (lcid: 1c0a): Spanish (Dominican Republic) - 1252 -es_DO -Spanish (Dominican Republic) -windows-1252 - -OS Locale (lcid: 1c1a): Serbian (Cyrillic) (Bosnia and Herzegovina) - 1251 -sr_BA -Serbian (Bosnia and Herzegovina) -windows-1251 - -OS Locale (lcid: 1c3b): Sami (Southern) (Sweden) - 1252 -se -Northern Sami -windows-1252 - -OS Locale (lcid: 2001): Arabic (Oman) - 1256 -ar_OM -Arabic (Oman) -windows-1256 - -OS Locale (lcid: 2009): English (Jamaica) - 1252 -en_JM -English (Jamaica) -windows-1252 - -OS Locale (lcid: 200a): Spanish (Venezuela) - 1252 -es_VE -Spanish (Venezuela) -windows-1252 - -OS Locale (lcid: 201a): Bosnian (Cyrillic) (Bosnia and Herzegovina) - 1250 -bs_BA -Bosnian (Bosnia and Herzegovina) -windows-1250 - -OS Locale (lcid: 203b): Sami (Skolt) (Finland) - 1252 -se -Northern Sami -windows-1252 - -OS Locale (lcid: 2401): Arabic (Yemen) - 1256 -ar_YE -Arabic (Yemen) -windows-1256 - -OS Locale (lcid: 2409): English (Caribbean) - 1252 -en -English -windows-1252 - -OS Locale (lcid: 240a): Spanish (Colombia) - 1252 -es_CO -Spanish (Colombia) -windows-1252 - -OS Locale (lcid: 243b): Sami (Inari) (Finland) - 1252 -se -Northern Sami -windows-1252 - -OS Locale (lcid: 2801): Arabic (Syria) - 1256 -ar_SY -Arabic (Syria) -windows-1256 - -OS Locale (lcid: 2809): English (Belize) - 1252 -en_BZ -English (Belize) -windows-1252 - -OS Locale (lcid: 280a): Spanish (Peru) - 1252 -es_PE -Spanish (Peru) -windows-1252 - -OS Locale (lcid: 2c01): Arabic (Jordan) - 1256 -ar_JO -Arabic (Jordan) -windows-1256 - -OS Locale (lcid: 2c09): English (Trinidad and Tobago) - 1252 -en_TT -English (Trinidad and Tobago) -windows-1252 - -OS Locale (lcid: 2c0a): Spanish (Argentina) - 1252 -es_AR -Spanish (Argentina) -windows-1252 - -OS Locale (lcid: 3001): Arabic (Lebanon) - 1256 -ar_LB -Arabic (Lebanon) -windows-1256 - -OS Locale (lcid: 3009): English (Zimbabwe) - 1252 -en_ZW -English (Zimbabwe) -windows-1252 - -OS Locale (lcid: 300a): Spanish (Ecuador) - 1252 -es_EC -Spanish (Ecuador) -windows-1252 - -OS Locale (lcid: 3401): Arabic (Kuwait) - 1256 -ar_KW -Arabic (Kuwait) -windows-1256 - -OS Locale (lcid: 3409): English (Republic of the Philippines) - 1252 -en_PH -English (Philippines) -windows-1252 - -OS Locale (lcid: 340a): Spanish (Chile) - 1252 -es_CL -Spanish (Chile) -windows-1252 - -OS Locale (lcid: 3801): Arabic (U.A.E.) - 1256 -ar_AE -Arabic (United Arab Emirates) -windows-1256 - -OS Locale (lcid: 380a): Spanish (Uruguay) - 1252 -es_UY -Spanish (Uruguay) -windows-1252 - -OS Locale (lcid: 3c01): Arabic (Bahrain) - 1256 -ar_BH -Arabic (Bahrain) -windows-1256 - -OS Locale (lcid: 3c0a): Spanish (Paraguay) - 1252 -es_PY -Spanish (Paraguay) -windows-1252 - -OS Locale (lcid: 4001): Arabic (Qatar) - 1256 -ar_QA -Arabic (Qatar) -windows-1256 - -OS Locale (lcid: 400a): Spanish (Bolivia) - 1252 -es_BO -Spanish (Bolivia) -windows-1252 - -OS Locale (lcid: 440a): Spanish (El Salvador) - 1252 -es_SV -Spanish (El Salvador) -windows-1252 - -OS Locale (lcid: 480a): Spanish (Honduras) - 1252 -es_HN -Spanish (Honduras) -windows-1252 - -OS Locale (lcid: 4c0a): Spanish (Nicaragua) - 1252 -es_NI -Spanish (Nicaragua) -windows-1252 - -OS Locale (lcid: 500a): Spanish (Puerto Rico) - 1252 -es_PR -Spanish (Puerto Rico) -windows-1252
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Locale/icuLocales.txt Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,292 @@ +af +af-NA +af-ZA +am +am-ET +ar +ar-AE +ar-BH +ar-DZ +ar-EG +ar-IQ +ar-JO +ar-KW +ar-LB +ar-LY +ar-MA +ar-OM +ar-QA +ar-SA +ar-SD +ar-SY +ar-TN +ar-YE +as +as-IN +az +az-Cyrl +az-Cyrl-AZ +az-Latn +az-Latn-AZ +be +be-BY +bg +bg-BG +bn +bn-BD +bn-IN +bo +bo-CN +bo-IN +ca +ca-ES +cs +cs-CZ +cy +cy-GB +da +da-DK +de +de-AT +de-BE +de-CH +de-DE +de-LI +de-LU +el +el-CY +el-GR +en +en-AU +en-BE +en-BW +en-BZ +en-CA +en-GB +en-HK +en-IE +en-IN +en-JM +en-MH +en-MT +en-NA +en-NZ +en-PH +en-PK +en-SG +en-TT +en-US +en-US-posix +en-VI +en-ZA +en-ZW +eo +es +es-AR +es-BO +es-CL +es-CO +es-CR +es-DO +es-EC +es-ES +es-GT +es-HN +es-MX +es-NI +es-PA +es-PE +es-PR +es-PY +es-SV +es-US +es-UY +es-VE +et +et-EE +eu +eu-ES +fa +fa-AF +fa-IR +fi +fi-FI +fo +fo-FO +fr +fr-BE +fr-CA +fr-CH +fr-FR +fr-LU +fr-MC +fr-SN +ga +ga-IE +gl +gl-ES +gsw +gsw-CH +gu +gu-IN +gv +gv-GB +ha +ha-Latn +ha-Latn-GH +ha-Latn-NE +ha-Latn-NG +haw +haw-US +he +he-IL +hi +hi-IN +hr +hr-HR +hu +hu-HU +hy +hy-AM +hy-AM-revised +id +id-ID +ii +ii-CN +is +is-IS +it +it-CH +it-IT +ja +ja-JP +ka +ka-GE +kk +kk-Cyrl +kk-Cyrl-KZ +kl +kl-GL +km +km-KH +kn +kn-IN +ko +ko-KR +kok +kok-IN +kw +kw-GB +lt +lt-LT +lv +lv-LV +mk +mk-MK +ml +ml-IN +mr +mr-IN +ms +ms-BN +ms-MY +mt +mt-MT +nb +nb-NO +ne +ne-IN +ne-NP +nl +nl-BE +nl-NL +nn +nn-NO +om +om-ET +om-KE +or +or-IN +pa +pa-Arab +pa-Arab-PK +pa-Guru +pa-Guru-IN +pl +pl-PL +ps +ps-AF +pt +pt-BR +pt-PT +ro +ro-MD +ro-RO +ru +ru-RU +ru-UA +si +si-LK +sk +sk-SK +sl +sl-SI +so +so-DJ +so-ET +so-KE +so-SO +sq +sq-AL +sr +sr-Cyrl +sr-Cyrl-BA +sr-Cyrl-ME +sr-Cyrl-RS +sr-Latn +sr-Latn-BA +sr-Latn-ME +sr-Latn-RS +sv +sv-FI +sv-SE +sw +sw-KE +sw-TZ +ta +ta-IN +te +te-IN +th +th-TH +ti +ti-ER +ti-ET +tr +tr-TR +uk +uk-UA +ur +ur-IN +ur-PK +uz +uz-Arab +uz-Arab-AF +uz-Cyrl +uz-Cyrl-UZ +uz-Latn +uz-Latn-UZ +vi +vi-VN +zh +zh-Hans +zh-Hans-CN +zh-Hans-HK +zh-Hans-MO +zh-Hans-SG +zh-Hant +zh-Hant-HK +zh-Hant-MO +zh-Hant-TW +zu +zu-ZA
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/TimeZone/Bug6912560.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6912560 + * @run main/othervm Bug6912560 + * @summary Make sure that file path canonicalization in + * sun.util.calendar.ZoneInfoFile works with the default security + * manager. + */ + +import java.io.File; +import java.util.*; + +public class Bug6912560 { + public static void main(String[] args) { + // set the user.timezone property + String tzname = "Asia/Tokyo"; + System.setProperty("user.timezone", tzname); + + System.setSecurityManager(new SecurityManager()); + TimeZone tz = TimeZone.getDefault(); + if (!tzname.equals(tz.getID())) { + throw new RuntimeException("got " + tz.getID() + + ", expected " + tzname); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/sound/midi/Gervill/AudioFloatFormatConverter/SkipTest.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @summary Test skip method returned from AudioFloatFormatConverter.getAudioInputStream */ + +import java.io.ByteArrayInputStream; + +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioInputStream; + +import com.sun.media.sound.AudioFloatFormatConverter; + +public class SkipTest { + + public static void main(String[] args) throws Exception { + AudioFloatFormatConverter converter = new AudioFloatFormatConverter(); + byte[] data = { 10, 20, 30, 40, 30, 20, 10 }; + AudioFormat format = new AudioFormat(8000, 8, 1, true, false); + AudioFormat format2 = new AudioFormat(16000, 8, 1, true, false); + AudioInputStream ais = new AudioInputStream(new ByteArrayInputStream( + data), format, data.length); + AudioInputStream ais2 = converter.getAudioInputStream(format2, ais); + byte[] data2 = new byte[30]; + int ret = ais2.read(data2, 0, data2.length); + ais.reset(); + AudioInputStream ais3 = converter.getAudioInputStream(format2, ais); + byte[] data3 = new byte[100]; + ais3.skip(7); + int ret2 = ais3.read(data3, 7, data3.length); + if (ret2 != ret - 7) + throw new Exception("Skip doesn't work correctly (" + ret2 + " != " + + (ret - 7) + ")"); + for (int i = 7; i < ret2 + 7; i++) { + if (data3[i] != data2[i]) + throw new Exception("Skip doesn't work correctly (" + data3[i] + + " != " + data2[i] + ")"); + } + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/sound/midi/Gervill/ModelByteBufferWavetable/OpenStream.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @summary Test AudioFloatInputStream.getFrameLength() returned from + ModelByteBufferWavetable openStream method */ + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; + +import javax.sound.sampled.*; + +import com.sun.media.sound.*; + +public class OpenStream { + + static float[] testarray; + + static byte[] test_byte_array; + + static byte[] test_byte_array_8ext; + + static AudioFormat format = new AudioFormat(44100, 16, 1, true, false); + + static AudioFormat format24 = new AudioFormat(44100, 24, 1, true, false); + + static ModelByteBuffer buffer; + + static ModelByteBuffer buffer_wave; + + static ModelByteBuffer buffer8; + + static ModelByteBuffer buffer16_8; + + static ModelByteBuffer buffer24; + + static File test_file; + + static ModelByteBuffer buffer_wave_ondisk; + + static void setUp() throws Exception { + testarray = new float[1024]; + for (int i = 0; i < 1024; i++) { + double ii = i / 1024.0; + ii = ii * ii; + testarray[i] = (float) Math.sin(10 * ii * 2 * Math.PI); + testarray[i] += (float) Math.sin(1.731 + 2 * ii * 2 * Math.PI); + testarray[i] += (float) Math.sin(0.231 + 6.3 * ii * 2 * Math.PI); + testarray[i] *= 0.3; + } + test_byte_array = new byte[testarray.length * 2]; + AudioFloatConverter.getConverter(format).toByteArray(testarray, + test_byte_array); + buffer = new ModelByteBuffer(test_byte_array); + + byte[] test_byte_array2 = new byte[testarray.length * 3]; + buffer24 = new ModelByteBuffer(test_byte_array2); + test_byte_array_8ext = new byte[testarray.length]; + byte[] test_byte_array_8_16 = new byte[testarray.length * 2]; + AudioFloatConverter.getConverter(format24).toByteArray(testarray, + test_byte_array2); + int ix = 0; + int x = 0; + for (int i = 0; i < test_byte_array_8ext.length; i++) { + test_byte_array_8ext[i] = test_byte_array2[ix++]; + test_byte_array_8_16[x++] = test_byte_array2[ix++]; + test_byte_array_8_16[x++] = test_byte_array2[ix++]; + } + buffer16_8 = new ModelByteBuffer(test_byte_array_8_16); + buffer8 = new ModelByteBuffer(test_byte_array_8ext); + + AudioInputStream ais = new AudioInputStream(buffer.getInputStream(), + format, testarray.length); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + AudioSystem.write(ais, AudioFileFormat.Type.WAVE, baos); + buffer_wave = new ModelByteBuffer(baos.toByteArray()); + + test_file = File.createTempFile("test", ".raw"); + FileOutputStream fos = new FileOutputStream(test_file); + fos.write(baos.toByteArray()); + fos.close(); + buffer_wave_ondisk = new ModelByteBuffer(test_file); + + } + + static void tearDown() throws Exception { + if (!test_file.delete()) + test_file.deleteOnExit(); + } + + public static void testOpenStream(ModelByteBufferWavetable wavetable) + throws Exception { + AudioFloatInputStream ais = wavetable.openStream(); + long frames = wavetable.getBuffer().capacity() + / wavetable.getFormat().getFrameSize(); + long framelength = ais.getFrameLength(); + ais.close(); + if (frames != framelength) { + throw new Exception("Incorrect framelength returned (" + frames + + " != " + framelength + ")"); + } + } + + public static void main(String[] args) throws Exception { + + setUp(); + + try { + testOpenStream(new ModelByteBufferWavetable(buffer, format)); + testOpenStream(new ModelByteBufferWavetable(buffer_wave, format)); + testOpenStream(new ModelByteBufferWavetable(buffer_wave_ondisk, + format)); + } finally { + tearDown(); + } + + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/sound/midi/Gervill/ModelStandardIndexedDirector/ModelStandardIndexedDirectorTest.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @summary Test ModelStandardIndexedDirector class */ + +import java.util.ArrayList; +import java.util.List; +import java.util.TreeSet; + +import com.sun.media.sound.ModelConnectionBlock; +import com.sun.media.sound.ModelDirectedPlayer; +import com.sun.media.sound.ModelPerformer; +import com.sun.media.sound.ModelStandardDirector; +import com.sun.media.sound.ModelStandardIndexedDirector; + +public class ModelStandardIndexedDirectorTest { + + private static String treeToString(TreeSet<Integer> set) + { + StringBuffer buff = new StringBuffer(); + boolean first = true; + for(Integer s : set) + { + if(!first) + buff.append(";"); + buff.append(s); + first = false; + } + return buff.toString(); + } + + private static void testDirector(ModelPerformer[] performers) throws Exception + { + final TreeSet<Integer> played = new TreeSet<Integer>(); + ModelDirectedPlayer player = new ModelDirectedPlayer() + { + public void play(int performerIndex, + ModelConnectionBlock[] connectionBlocks) { + played.add(performerIndex); + } + }; + ModelStandardIndexedDirector idirector = + new ModelStandardIndexedDirector(performers, player); + ModelStandardDirector director = + new ModelStandardDirector(performers, player); + + for (int n = 0; n < 128; n++) + { + for (int v = 0; v < 128; v++) + { + director.noteOn(n, v); + String p1 = treeToString(played); + played.clear(); + idirector.noteOn(n, v); + String p2 = treeToString(played); + played.clear(); + if(!p1.equals(p2)) + throw new Exception( + "Note = " + n + ", Vel = " + v + " failed"); + } + } + } + + private static void testDirectorCombinations( + ModelPerformer[] performers) throws Exception + { + for (int i = 0; i < performers.length; i++) { + ModelPerformer[] performers2 = new ModelPerformer[i]; + for (int j = 0; j < performers2.length; j++) { + performers2[j] = performers[i]; + } + testDirector(performers2); + } + } + + private static void addPerformer( + List<ModelPerformer> performers, + int keyfrom, + int keyto, + int velfrom, + int velto) + { + ModelPerformer performer = new ModelPerformer(); + performer.setKeyFrom(keyfrom); + performer.setKeyTo(keyto); + performer.setVelFrom(velfrom); + performer.setVelTo(velto); + performers.add(performer); + } + + public static void main(String[] args) throws Exception + { + // Test collection of normal values + List<ModelPerformer> performers = new ArrayList<ModelPerformer>(); + addPerformer(performers, 0, 0, 0, 127); + addPerformer(performers, 0, 50, 0, 127); + addPerformer(performers, 0, 127, 0, 127); + addPerformer(performers, 21, 21, 0, 127); + addPerformer(performers, 21, 60, 0, 127); + addPerformer(performers, 21, 127, 0, 127); + addPerformer(performers, 50, 50, 0, 127); + addPerformer(performers, 50, 60, 0, 127); + addPerformer(performers, 50, 127, 0, 127); + addPerformer(performers, 73, 73, 0, 127); + addPerformer(performers, 73, 80, 0, 127); + addPerformer(performers, 73, 127, 0, 127); + addPerformer(performers, 127, 127, 0, 127); + addPerformer(performers, 0, 0, 60, 127); + addPerformer(performers, 0, 50, 60, 127); + addPerformer(performers, 0, 127, 60, 127); + addPerformer(performers, 21, 21, 60, 127); + addPerformer(performers, 21, 60, 60, 127); + addPerformer(performers, 21, 127, 60, 127); + addPerformer(performers, 50, 50, 60, 127); + addPerformer(performers, 50, 60, 60, 127); + addPerformer(performers, 50, 127, 60, 127); + addPerformer(performers, 73, 73, 60, 127); + addPerformer(performers, 73, 80, 60, 127); + addPerformer(performers, 73, 127, 60, 127); + addPerformer(performers, 127, 127, 60, 127); + addPerformer(performers, 0, 0, 80, 83); + addPerformer(performers, 0, 50, 80, 83); + addPerformer(performers, 0, 127, 80, 83); + addPerformer(performers, 21, 21, 80, 83); + addPerformer(performers, 21, 60, 80, 83); + addPerformer(performers, 21, 127, 80, 83); + addPerformer(performers, 50, 50, 80, 83); + addPerformer(performers, 50, 60, 80, 83); + addPerformer(performers, 50, 127, 80, 83); + addPerformer(performers, 73, 73, 80, 83); + addPerformer(performers, 73, 80, 80, 83); + addPerformer(performers, 73, 127, 80, 83); + addPerformer(performers, 127, 127, 80, 83); + + + testDirectorCombinations( + performers.toArray( + new ModelPerformer[performers.size()]) + ); + + // Test reversed values + performers.clear(); + addPerformer(performers, 50, 30, 80, 83); + addPerformer(performers, 30, 30, 50, 30); + addPerformer(performers, 37, 30, 50, 30); + testDirector( + performers.toArray( + new ModelPerformer[performers.size()]) + ); + + // Test out-of-range values + performers.clear(); + addPerformer(performers, -20, 6, 0, 127); + addPerformer(performers, 0, 300, 0, 300); + addPerformer(performers, -2, -8, -5, -9); + + testDirector( + performers.toArray( + new ModelPerformer[performers.size()]) + ); + + } +} + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/sound/midi/Gervill/SoftChannel/ProgramAndBankChange.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @summary Test SoftChannel program and bank change */ + +import java.io.IOException; + +import javax.sound.midi.*; +import javax.sound.sampled.*; + +import com.sun.media.sound.*; + +public class ProgramAndBankChange { + + private static SimpleInstrument generateTestInstrument(Patch patch) { + ModelOscillator osc = new ModelOscillator() { + public float getAttenuation() { + return 0; + } + + public int getChannels() { + return 1; + } + + public ModelOscillatorStream open(float samplerate) { + return new ModelOscillatorStream() { + public void close() throws IOException { + } + + public void noteOff(int velocity) { + } + + public void noteOn(MidiChannel channel, VoiceStatus voice, + int noteNumber, int velocity) { + } + + public int read(float[][] buffer, int offset, int len) + throws IOException { + return len; + } + + public void setPitch(float ipitch) { + } + }; + } + }; + ModelPerformer performer = new ModelPerformer(); + performer.getOscillators().add(osc); + SimpleInstrument testinstrument = new SimpleInstrument(); + testinstrument.setPatch(patch); + testinstrument.add(performer); + return testinstrument; + } + + private static void assertTrue(boolean value) throws Exception { + if (!value) + throw new RuntimeException("assertTrue fails!"); + } + + private static void testProgramAndBank(SoftSynthesizer soft, + AudioInputStream stream, Patch patch) throws Exception { + + int program = patch.getProgram(); + int bank = patch.getBank(); + + MidiChannel channel = soft.getChannels()[0]; + byte[] buff = new byte[2048]; + + channel.programChange(bank, program); + channel.noteOn(64, 64); + stream.read(buff, 0, buff.length); + + int foundprogram = -1; + int foundbank = -1; + VoiceStatus[] vstatus = soft.getVoiceStatus(); + for (int i = 0; i < vstatus.length; i++) { + if (vstatus[i].active) { + foundprogram = vstatus[i].program; + foundbank = vstatus[i].bank; + break; + } + } + + assertTrue(foundprogram == program); + assertTrue(foundbank == bank); + + channel.noteOn(64, 0); + stream.read(buff, 0, buff.length); + + channel = soft.getChannels()[1]; + // Send MSB Bank + channel.controlChange(0x00, bank / 128); + // Send LSB Bank + channel.controlChange(0x20, bank % 128); + // Send Program Change + channel.programChange(program); + channel.noteOn(64, 64); + stream.read(buff, 0, buff.length); + + foundprogram = -1; + foundbank = -1; + vstatus = soft.getVoiceStatus(); + for (int i = 0; i < vstatus.length; i++) { + if (vstatus[i].active) { + foundprogram = vstatus[i].program; + foundbank = vstatus[i].bank; + break; + } + } + assertTrue(foundprogram == program); + assertTrue(foundbank == bank); + channel.noteOn(64, 0); + stream.read(buff, 0, buff.length); + } + + public static void main(String[] args) throws Exception { + SoftSynthesizer soft = new SoftSynthesizer(); + AudioInputStream stream = soft.openStream(null, null); + soft.unloadAllInstruments(soft.getDefaultSoundbank()); + + soft.loadInstrument(generateTestInstrument(new Patch(0, 0))); + soft.loadInstrument(generateTestInstrument(new Patch(7, 0))); + soft.loadInstrument(generateTestInstrument(new Patch(20, 10))); + soft.loadInstrument(generateTestInstrument(new Patch(3678, 15))); + soft.loadInstrument(generateTestInstrument(new Patch(4678, 15))); + + testProgramAndBank(soft, stream, new Patch(0, 0)); + testProgramAndBank(soft, stream, new Patch(7, 0)); + testProgramAndBank(soft, stream, new Patch(20, 10)); + testProgramAndBank(soft, stream, new Patch(3678, 15)); + testProgramAndBank(soft, stream, new Patch(4678, 15)); + + soft.close(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/sound/midi/Gervill/SoftSynthesizer/GetAvailableInstruments2.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @summary Test SoftSynthesizer getAvailableInstruments method */ + +import javax.sound.midi.MidiDevice; +import javax.sound.midi.MidiUnavailableException; +import javax.sound.midi.Patch; +import javax.sound.midi.Soundbank; +import javax.sound.sampled.*; +import javax.sound.midi.MidiDevice.Info; + +import com.sun.media.sound.*; + +public class GetAvailableInstruments2 { + + private static void assertEquals(Object a, Object b) throws Exception { + if (!a.equals(b)) + throw new RuntimeException("assertEquals fails!"); + } + + private static void assertTrue(boolean value) throws Exception { + if (!value) + throw new RuntimeException("assertTrue fails!"); + } + + public static void main(String[] args) throws Exception { + AudioSynthesizer synth = new SoftSynthesizer(); + synth.openStream(null, null); + Soundbank defsbk = synth.getDefaultSoundbank(); + if (defsbk != null) { + synth.unloadAllInstruments(defsbk); + assertTrue(defsbk.getInstruments().length == synth + .getAvailableInstruments().length); + } + synth.close(); + + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/sound/midi/Gervill/SoftSynthesizer/GetLoadedInstruments2.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @summary Test SoftSynthesizer getLoadedInstruments method */ + +import javax.sound.midi.MidiDevice; +import javax.sound.midi.MidiUnavailableException; +import javax.sound.midi.Patch; +import javax.sound.midi.Soundbank; +import javax.sound.sampled.*; +import javax.sound.midi.MidiDevice.Info; + +import com.sun.media.sound.*; + +public class GetLoadedInstruments2 { + + private static void assertEquals(Object a, Object b) throws Exception { + if (!a.equals(b)) + throw new RuntimeException("assertEquals fails!"); + } + + private static void assertTrue(boolean value) throws Exception { + if (!value) + throw new RuntimeException("assertTrue fails!"); + } + + public static void main(String[] args) throws Exception { + AudioSynthesizer synth = new SoftSynthesizer(); + synth.openStream(null, null); + Soundbank defsbk = synth.getDefaultSoundbank(); + if (defsbk != null) { + assertTrue(defsbk.getInstruments().length == synth + .getLoadedInstruments().length); + } + synth.close(); + + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/sound/midi/Gervill/SoftSynthesizer/GetPropertyInfo.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @summary Test SoftSynthesizer getPropertyInfo method */ + +import java.util.HashMap; +import java.util.Map; + +import javax.sound.midi.MidiDevice; +import javax.sound.midi.MidiUnavailableException; +import javax.sound.midi.Patch; +import javax.sound.midi.Soundbank; +import javax.sound.sampled.*; +import javax.sound.sampled.AudioFormat.Encoding; +import javax.sound.midi.MidiDevice.Info; + +import com.sun.media.sound.*; + +public class GetPropertyInfo { + + private static void assertTrue(boolean value) throws Exception { + if (!value) + throw new RuntimeException("assertTrue fails!"); + } + + public static void main(String[] args) throws Exception { + SoftSynthesizer synth = new SoftSynthesizer(); + Map<String, Object> p = new HashMap<String, Object>(); + p.put("format", "8000 HZ 24 BIT MONO UNSIGNED BIG-ENDIAN"); + p.put("control rate", 125); + p.put("reverb", false); + p.put("auto gain control", "false"); + AudioSynthesizerPropertyInfo[] ap = synth.getPropertyInfo(p); + for (int i = 0; i < ap.length; i++) { + if (ap[i].name.equals("control rate")) + assertTrue(Math.abs((Float) ap[i].value - 125.0) < 0.001); + if (ap[i].name.equals("reverb")) + assertTrue((Boolean) ap[i].value == false); + if (ap[i].name.equals("auto gain control")) + assertTrue((Boolean) ap[i].value == false); + if (ap[i].name.equals("format")) { + AudioFormat format = (AudioFormat) ap[i].value; + assertTrue(format.getChannels() == 1); + assertTrue(format.getSampleSizeInBits() == 24); + assertTrue(format.isBigEndian()); + assertTrue(Math.abs(format.getSampleRate() - 8000) < 0.001); + assertTrue(format.getEncoding() == Encoding.PCM_UNSIGNED); + } + } + p = new HashMap<String, Object>(); + p.put("format", "9000 Hz, 8 bit, 4 channels"); + ap = synth.getPropertyInfo(p); + for (int i = 0; i < ap.length; i++) { + if (ap[i].name.equals("format")) { + AudioFormat format = (AudioFormat) ap[i].value; + assertTrue(format.getChannels() == 4); + assertTrue(format.getSampleSizeInBits() == 8); + assertTrue(!format.isBigEndian()); + assertTrue(Math.abs(format.getSampleRate() - 9000) < 0.001); + assertTrue(format.getEncoding() == Encoding.PCM_SIGNED); + } + } + + p = new HashMap<String, Object>(); + p.put("format", "PCM_UNSIGNED 44100.0 Hz, 16 bit, 3 channels, 6 bytes/frame, big-endian"); + ap = synth.getPropertyInfo(p); + for (int i = 0; i < ap.length; i++) { + if (ap[i].name.equals("format")) { + AudioFormat format = (AudioFormat) ap[i].value; + assertTrue(format.getChannels() == 3); + assertTrue(format.getSampleSizeInBits() == 16); + assertTrue(format.isBigEndian()); + assertTrue(Math.abs(format.getSampleRate() - 44100) < 0.001); + assertTrue(format.getEncoding() == Encoding.PCM_UNSIGNED); + } + } + + + } +}
--- a/test/javax/sound/midi/Gervill/SoftSynthesizer/LoadAllInstruments.java Thu Sep 16 11:16:02 2010 -0700 +++ b/test/javax/sound/midi/Gervill/SoftSynthesizer/LoadAllInstruments.java Thu Sep 16 11:17:32 2010 -0700 @@ -55,7 +55,6 @@ Soundbank defsbk = synth.getDefaultSoundbank(); if(defsbk != null) { - assertTrue(synth.getLoadedInstruments().length == 0); synth.unloadAllInstruments(defsbk); SimpleSoundbank sbk = new SimpleSoundbank(); SimpleInstrument ins = new SimpleInstrument();
--- a/test/javax/sound/midi/Gervill/SoftSynthesizer/LoadInstrument.java Thu Sep 16 11:16:02 2010 -0700 +++ b/test/javax/sound/midi/Gervill/SoftSynthesizer/LoadInstrument.java Thu Sep 16 11:17:32 2010 -0700 @@ -55,7 +55,6 @@ Soundbank defsbk = synth.getDefaultSoundbank(); if(defsbk != null) { - assertTrue(synth.getLoadedInstruments().length == 0); synth.unloadAllInstruments(defsbk); SimpleSoundbank sbk = new SimpleSoundbank(); SimpleInstrument ins = new SimpleInstrument();
--- a/test/javax/sound/midi/Gervill/SoftSynthesizer/LoadInstruments.java Thu Sep 16 11:16:02 2010 -0700 +++ b/test/javax/sound/midi/Gervill/SoftSynthesizer/LoadInstruments.java Thu Sep 16 11:17:32 2010 -0700 @@ -55,7 +55,6 @@ Soundbank defsbk = synth.getDefaultSoundbank(); if(defsbk != null) { - assertTrue(synth.getLoadedInstruments().length == 0); synth.unloadAllInstruments(defsbk); SimpleSoundbank sbk = new SimpleSoundbank(); SimpleInstrument ins = new SimpleInstrument();
--- a/test/javax/sound/midi/Gervill/SoftSynthesizer/RemapInstrument.java Thu Sep 16 11:16:02 2010 -0700 +++ b/test/javax/sound/midi/Gervill/SoftSynthesizer/RemapInstrument.java Thu Sep 16 11:17:32 2010 -0700 @@ -56,15 +56,15 @@ Soundbank defsbk = synth.getDefaultSoundbank(); if(defsbk != null) { - Instrument ins0 = defsbk.getInstrument(new Patch(0,0)); + Instrument ins3 = defsbk.getInstrument(new Patch(0,3)); Instrument ins10 = defsbk.getInstrument(new Patch(0,10)); - assertTrue(synth.remapInstrument(ins0, ins10)); + assertTrue(synth.remapInstrument(ins3, ins10)); Instrument[] loaded = synth.getLoadedInstruments(); for (int i = 0; i < loaded.length; i++) { - if(loaded[i].getPatch().getBank() == 0) - if(loaded[i].getPatch().getProgram() == 10) + if(loaded[i].getPatch().getBank() == ins3.getPatch().getBank()) + if(loaded[i].getPatch().getProgram() == ins3.getPatch().getProgram()) { - assertEquals(loaded[i].getName(), ins0.getName()); + assertEquals(loaded[i].getName(), ins10.getName()); break; } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/sound/midi/Gervill/SoftSynthesizer/TestDisableLoadDefaultSoundbank.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @summary Test Disable/enable loading default soundbank in SoftSynthesizer */ + +import java.util.HashMap; +import java.util.Map; + +import javax.sound.midi.MidiDevice; +import javax.sound.midi.MidiUnavailableException; +import javax.sound.midi.Patch; +import javax.sound.midi.Soundbank; +import javax.sound.sampled.*; +import javax.sound.midi.MidiDevice.Info; + +import com.sun.media.sound.*; + +public class TestDisableLoadDefaultSoundbank { + + private static void assertEquals(Object a, Object b) throws Exception { + if (!a.equals(b)) + throw new RuntimeException("assertEquals fails!"); + } + + private static void assertTrue(boolean value) throws Exception { + if (!value) + throw new RuntimeException("assertTrue fails!"); + } + + public static void main(String[] args) throws Exception { + AudioSynthesizer synth = new SoftSynthesizer(); + synth.openStream(null, null); + Soundbank defsbk = synth.getDefaultSoundbank(); + if (defsbk != null) { + assertTrue(defsbk.getInstruments().length == synth + .getLoadedInstruments().length); + } + synth.close(); + Map<String, Object> p = new HashMap<String, Object>(); + p.put("load default soundbank", false); + synth.openStream(null, p); + if (defsbk != null) { + assertTrue(synth.getLoadedInstruments().length == 0); + } + synth.close(); + + } +}
--- a/test/javax/sound/midi/Gervill/SoftSynthesizer/UnloadAllInstruments.java Thu Sep 16 11:16:02 2010 -0700 +++ b/test/javax/sound/midi/Gervill/SoftSynthesizer/UnloadAllInstruments.java Thu Sep 16 11:17:32 2010 -0700 @@ -55,9 +55,8 @@ Soundbank defsbk = synth.getDefaultSoundbank(); if(defsbk != null) { + synth.unloadAllInstruments(defsbk); assertTrue(synth.getLoadedInstruments().length == 0); - synth.unloadAllInstruments(defsbk); - assertTrue(synth.getAvailableInstruments().length == 0); synth.loadAllInstruments(defsbk); assertTrue(synth.getLoadedInstruments().length != 0); synth.unloadAllInstruments(defsbk);
--- a/test/javax/sound/midi/Gervill/SoftSynthesizer/UnloadInstrument.java Thu Sep 16 11:16:02 2010 -0700 +++ b/test/javax/sound/midi/Gervill/SoftSynthesizer/UnloadInstrument.java Thu Sep 16 11:17:32 2010 -0700 @@ -55,7 +55,6 @@ Soundbank defsbk = synth.getDefaultSoundbank(); if(defsbk != null) { - assertTrue(synth.getLoadedInstruments().length == 0); synth.unloadAllInstruments(defsbk); SimpleSoundbank sbk = new SimpleSoundbank(); SimpleInstrument ins = new SimpleInstrument();
--- a/test/javax/sound/midi/Gervill/SoftSynthesizer/UnloadInstruments.java Thu Sep 16 11:16:02 2010 -0700 +++ b/test/javax/sound/midi/Gervill/SoftSynthesizer/UnloadInstruments.java Thu Sep 16 11:17:32 2010 -0700 @@ -55,7 +55,6 @@ Soundbank defsbk = synth.getDefaultSoundbank(); if(defsbk != null) { - assertTrue(synth.getLoadedInstruments().length == 0); synth.unloadAllInstruments(defsbk); SimpleSoundbank sbk = new SimpleSoundbank(); SimpleInstrument ins = new SimpleInstrument();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/sound/midi/Gervill/SoftTuning/RealTimeTuning.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @summary Test RealTime-tunings using SoftReciver.send method */ + +import java.io.IOException; + +import javax.sound.midi.*; +import javax.sound.sampled.*; + +import com.sun.media.sound.*; + +public class RealTimeTuning { + + private static class PitchSpy { + public float pitch = 0; + + public Soundbank getSoundBank() { + ModelOscillator osc = new ModelOscillator() { + public float getAttenuation() { + return 0; + } + + public int getChannels() { + return 0; + } + + public ModelOscillatorStream open(float samplerate) { + return new ModelOscillatorStream() { + public void close() throws IOException { + pitch = 0; + } + + public void noteOff(int velocity) { + pitch = 0; + } + + public void noteOn(MidiChannel channel, + VoiceStatus voice, int noteNumber, int velocity) { + pitch = noteNumber * 100; + } + + public int read(float[][] buffer, int offset, int len) + throws IOException { + return len; + } + + public void setPitch(float ipitch) { + pitch = ipitch; + } + }; + } + }; + ModelPerformer performer = new ModelPerformer(); + performer.getOscillators().add(osc); + SimpleInstrument testinstrument = new SimpleInstrument(); + testinstrument.setPatch(new Patch(0, 0)); + testinstrument.add(performer); + SimpleSoundbank testsoundbank = new SimpleSoundbank(); + testsoundbank.addInstrument(testinstrument); + return testsoundbank; + } + } + + public static void sendTuningChange(Receiver recv, int channel, + int tuningpreset, int tuningbank) throws InvalidMidiDataException { + // Data Entry + ShortMessage sm1 = new ShortMessage(); + sm1.setMessage(ShortMessage.CONTROL_CHANGE, channel, 0x64, 04); + ShortMessage sm2 = new ShortMessage(); + sm2.setMessage(ShortMessage.CONTROL_CHANGE, channel, 0x65, 00); + + // Tuning Bank + ShortMessage sm3 = new ShortMessage(); + sm3.setMessage(ShortMessage.CONTROL_CHANGE, channel, 0x06, tuningbank); + // Data Increment + ShortMessage sm4 = new ShortMessage(); + sm4.setMessage(ShortMessage.CONTROL_CHANGE, channel, 0x60, 0x7F); + // Data Decrement + ShortMessage sm5 = new ShortMessage(); + sm5.setMessage(ShortMessage.CONTROL_CHANGE, channel, 0x61, 0x7F); + + // Data Entry + ShortMessage sm6 = new ShortMessage(); + sm6.setMessage(ShortMessage.CONTROL_CHANGE, channel, 0x64, 03); + ShortMessage sm7 = new ShortMessage(); + sm7.setMessage(ShortMessage.CONTROL_CHANGE, channel, 0x65, 00); + + // Tuning program + ShortMessage sm8 = new ShortMessage(); + sm8 + .setMessage(ShortMessage.CONTROL_CHANGE, channel, 0x06, + tuningpreset); + // Data Increment + ShortMessage sm9 = new ShortMessage(); + sm9.setMessage(ShortMessage.CONTROL_CHANGE, channel, 0x60, 0x7F); + // Data Decrement + ShortMessage sm10 = new ShortMessage(); + sm10.setMessage(ShortMessage.CONTROL_CHANGE, channel, 0x61, 0x7F); + + recv.send(sm1, -1); + recv.send(sm2, -1); + recv.send(sm3, -1); + recv.send(sm4, -1); + recv.send(sm5, -1); + recv.send(sm6, -1); + recv.send(sm7, -1); + recv.send(sm8, -1); + recv.send(sm9, -1); + recv.send(sm10, -1); + + } + + private static void assertTrue(boolean value) throws Exception { + if (!value) + throw new RuntimeException("assertTrue fails!"); + } + + public static void testTunings(int[] msg, int tuningProgram, + int tuningBank, int targetNote, float targetPitch, boolean realtime) + throws Exception { + AudioSynthesizer synth = new SoftSynthesizer(); + AudioInputStream stream = synth.openStream(null, null); + Receiver recv = synth.getReceiver(); + MidiChannel channel = synth.getChannels()[0]; + byte[] buff = new byte[2048]; + + // Create test instrument which we can use to monitor pitch changes + PitchSpy pitchspy = new PitchSpy(); + + synth.unloadAllInstruments(synth.getDefaultSoundbank()); + synth.loadAllInstruments(pitchspy.getSoundBank()); + + SysexMessage sysex = null; + + // Send tuning changes + if (msg != null) { + byte[] bmsg = new byte[msg.length]; + for (int i = 0; i < bmsg.length; i++) + bmsg[i] = (byte) msg[i]; + sysex = new SysexMessage(); + sysex.setMessage(bmsg, bmsg.length); + if (targetPitch == 0) { + targetPitch = (float) new SoftTuning(bmsg) + .getTuning(targetNote); + // Check if targetPitch != targetNote * 100 + assertTrue(Math.abs(targetPitch - targetNote * 100.0) > 0.001); + } + } + + if (tuningProgram != -1) + sendTuningChange(recv, 0, tuningProgram, tuningBank); + + // First test without tunings + channel.noteOn(targetNote, 64); + stream.read(buff, 0, buff.length); + assertTrue(Math.abs(pitchspy.pitch - (targetNote * 100.0)) < 0.001); + + // Test if realtime/non-realtime works + if (sysex != null) + recv.send(sysex, -1); + stream.read(buff, 0, buff.length); + if (realtime) + assertTrue(Math.abs(pitchspy.pitch - targetPitch) < 0.001); + else + assertTrue(Math.abs(pitchspy.pitch - (targetNote * 100.0)) < 0.001); + + // Test if tunings works + channel.noteOn(targetNote, 0); + stream.read(buff, 0, buff.length); + assertTrue(Math.abs(pitchspy.pitch - 0.0) < 0.001); + + channel.noteOn(targetNote, 64); + stream.read(buff, 0, buff.length); + assertTrue(Math.abs(pitchspy.pitch - targetPitch) < 0.001); + + channel.noteOn(targetNote, 0); + stream.read(buff, 0, buff.length); + assertTrue(Math.abs(pitchspy.pitch - 0.0) < 0.001); + + stream.close(); + } + + public static void main(String[] args) throws Exception { + // Test with no-tunings + testTunings(null, -1, -1, 60, 6000, false); + + int[] msg; + // 0x02 SINGLE NOTE TUNING CHANGE (REAL-TIME) + msg = new int[] { 0xf0, 0x7f, 0x7f, 0x08, 0x02, 0x10, 0x02, 36, 36, 64, + 0, 60, 70, 0, 0, 0xf7 }; + testTunings(msg, 0x10, 0, 60, 7000, true); + + // 0x07 SINGLE NOTE TUNING CHANGE (NON REAL-TIME) (BANK) + msg = new int[] { 0xf0, 0x7e, 0x7f, 0x08, 0x07, 0x05, 0x07, 0x02, 36, + 36, 64, 0, 60, 80, 0, 0, 0xf7 }; + testTunings(msg, 0x07, 0x05, 60, 8000, false); + + // 0x07 SINGLE NOTE TUNING CHANGE (REAL-TIME) (BANK) + msg = new int[] { 0xf0, 0x7f, 0x7f, 0x08, 0x07, 0x05, 0x07, 0x02, 36, + 36, 64, 0, 60, 80, 0, 0, 0xf7 }; + testTunings(msg, 0x07, 0x05, 60, 8000, true); + + // 0x08 scale/octave tuning 1-byte form (Non Real-Time) + msg = new int[] { 0xf0, 0x7e, 0x7f, 0x08, 0x08, 0x03, 0x7f, 0x7f, 5, + 10, 15, 20, 25, 30, 35, 40, 45, 50, 51, 52, 0xf7 }; + testTunings(msg, -1, -1, 60, 0, false); + + // 0x08 scale/octave tuning 1-byte form (REAL-TIME) + msg = new int[] { 0xf0, 0x7f, 0x7f, 0x08, 0x08, 0x03, 0x7f, 0x7f, 5, + 10, 15, 20, 25, 30, 35, 40, 45, 50, 51, 52, 0xf7 }; + testTunings(msg, -1, -1, 60, 0, true); + + // 0x09 scale/octave tuning 2-byte form (Non Real-Time) + msg = new int[] { 0xf0, 0x7e, 0x7f, 0x08, 0x09, 0x03, 0x7f, 0x7f, 5, + 10, 15, 20, 25, 30, 35, 40, 45, 50, 51, 52, 5, 10, 15, 20, 25, + 30, 35, 40, 45, 50, 51, 52, 0xf7 }; + testTunings(msg, -1, -1, 60, 0, false); + + // 0x09 scale/octave tuning 2-byte form (REAL-TIME) + msg = new int[] { 0xf0, 0x7f, 0x7f, 0x08, 0x09, 0x03, 0x7f, 0x7f, 5, + 10, 15, 20, 25, 30, 35, 40, 45, 50, 51, 52, 5, 10, 15, 20, 25, + 30, 35, 40, 45, 50, 51, 52, 0xf7 }; + testTunings(msg, -1, -1, 60, 0, true); + + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/sound/midi/MidiDeviceConnectors/TestAllDevices.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 4933700 + * @summary Tests that default devices return MidiDeviceTransmitter/Receiver and returned objects return correct MidiDevice + * @compile -source 1.7 TestAllDevices.java + * @run main TestAllDevices + * @author Alex Menkov + */ + +import javax.sound.midi.MidiDevice; +import javax.sound.midi.MidiDeviceReceiver; +import javax.sound.midi.MidiDeviceTransmitter; +import javax.sound.midi.MidiSystem; +import javax.sound.midi.MidiUnavailableException; +import javax.sound.midi.Receiver; +import javax.sound.midi.Transmitter; + + +public class TestAllDevices { + + static boolean failed = false; + + public static void main(String[] args) throws Exception { + out("default receiver:"); + try { + Receiver recv = MidiSystem.getReceiver(); + out(" receiver: " + recv); + if (recv instanceof MidiDeviceReceiver) { + out(" OK"); + } else { + out(" ERROR: not an instance of MidiDeviceReceiver"); + failed = true; + } + } catch (MidiUnavailableException ex) { + // this is not an error + out(" receiver: MidiUnavailableException (test NOT failed)"); + } + + out("default transmitter:"); + try { + Transmitter tran = MidiSystem.getTransmitter(); + out(" transmitter: " + tran); + if (tran instanceof MidiDeviceTransmitter) { + out(" OK"); + } else { + out(" ERROR: not an instance of MidiDeviceTransmitter"); + failed = true; + } + } catch (MidiUnavailableException ex) { + // this is not an error + out(" transmitter: MidiUnavailableException (test NOT failed)"); + } + + MidiDevice.Info[] infos = MidiSystem .getMidiDeviceInfo(); + for (MidiDevice.Info info: infos) { + out(info.toString() + ":"); + try { + MidiDevice dev = MidiSystem.getMidiDevice(info); + dev.open(); + + try { + Receiver recv = dev.getReceiver(); + out(" receiver: " + recv); + if (recv instanceof MidiDeviceReceiver) { + MidiDeviceReceiver devRecv = (MidiDeviceReceiver)recv; + MidiDevice retDev = devRecv.getMidiDevice(); + if (retDev == dev) { + out(" OK"); + } else { + out(" ERROR: getMidiDevice returned incorrect device: " + retDev); + failed = true; + } + } else { + out(" ERROR: not an instance of MidiDeviceReceiver"); + failed = true; + } + } catch (MidiUnavailableException ex) { + // this is not an error + out(" receiver: MidiUnavailableException (test NOT failed)"); + } + + try { + Transmitter tran = dev.getTransmitter(); + out(" transmitter: " + tran); + if (tran instanceof MidiDeviceTransmitter) { + MidiDeviceTransmitter devTran = (MidiDeviceTransmitter)tran; + MidiDevice retDev = devTran.getMidiDevice(); + if (retDev == dev) { + out(" OK"); + } else { + out(" ERROR: getMidiDevice retur4ned incorrect device: " + retDev); + failed = true; + } + } else { + out(" ERROR: not an instance of MidiDeviceTransmitter"); + failed = true; + } + } catch (MidiUnavailableException ex) { + // this is not an error + out(" transmitter: MidiUnavailableException (test NOT failed)"); + } + + dev.close(); + } catch (MidiUnavailableException ex) { + out(" device: MidiUnavailableException (test NOT failed)"); + } + } + + if (failed) { + throw new Exception("Test failed."); + } + } + + static void out(String s) { + System.out.println(s); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/sound/sampled/AudioFormat/Matches_NOT_SPECIFIED.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 4937708 + * @summary Tests that AudioFormat.matches handle NOT_SPECIFIED value in all fields + * @run main Matches_NOT_SPECIFIED + * @author Alex Menkov + * + */ + +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioFormat.Encoding; +import javax.sound.sampled.AudioSystem; + + +public class Matches_NOT_SPECIFIED { + + static boolean success = true; + static AudioFormat f1; + static AudioFormat f2; + + public static void main(String[] args) throws Exception { + AudioFormat f3; + f1 = new AudioFormat(44100, 16, 2, true, false); + f2 = new AudioFormat(Encoding.PCM_SIGNED, + AudioSystem.NOT_SPECIFIED, + AudioSystem.NOT_SPECIFIED, + AudioSystem.NOT_SPECIFIED, + AudioSystem.NOT_SPECIFIED, + AudioSystem.NOT_SPECIFIED, false); + test(true); + +// f1 = new AudioFormat(44100, 8, 16, true, false); + f2 = new AudioFormat(Encoding.PCM_SIGNED, + AudioSystem.NOT_SPECIFIED, + AudioSystem.NOT_SPECIFIED, + AudioSystem.NOT_SPECIFIED, + AudioSystem.NOT_SPECIFIED, + AudioSystem.NOT_SPECIFIED, true); + test(false); + + f1 = new AudioFormat(44100, 8, 8, true, false); + test(true); + + if (success) { + out("The test PASSED."); + } else { + out("The test FAILED."); + throw new Exception("The test FAILED"); + } + } + + static void test(boolean shouldMatch) { + out("testing:"); + out(" - " + f1.toString()); + out(" - " + f2.toString()); + if (f1.matches(f2)) { + if (shouldMatch) { + out(" (OK) MATCHES"); + } else { + out(" (ERROR) MATCHES"); + success = false; + } + } else { + if (shouldMatch) { + out(" (ERROR) DOESNT MATCH!"); + success = false; + } else { + out(" (OK) DOESNT MATCH!"); + } + } + } + + static void out(String s) { + System.out.println(s); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/sound/sampled/AudioFormat/PCM_FLOAT_support.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 6944033 + * @summary Tests that PCM_FLOAT encoding is supported + * @compile -source 1.7 PCM_FLOAT_support.java + * @run main PCM_FLOAT_support + * @author Alex Menkov + * + */ + +import javax.sound.sampled.AudioFormat.Encoding; +import javax.sound.sampled.AudioSystem; + + +public class PCM_FLOAT_support { + + static Encoding pcmFloatEnc; + + static boolean testFailed = false; + + public static void main(String[] args) throws Exception { + // 1st checks Encoding.PCM_FLOAT is available + pcmFloatEnc = Encoding.PCM_FLOAT; + + Encoding[] encodings = AudioSystem.getTargetEncodings(pcmFloatEnc); + out("conversion from PCM_FLOAT to " + encodings.length + " encodings:"); + for (Encoding e: encodings) { + out(" - " + e); + } + if (encodings.length == 0) { + testFailed = true; + } + + test(Encoding.PCM_SIGNED); + test(Encoding.PCM_UNSIGNED); + + if (testFailed) { + throw new Exception("test failed"); + } + out("test passed."); + } + + static void out(String s) { + System.out.println(s); + } + + static boolean test(Encoding enc) { + out("conversion " + enc + " -> PCM_FLOAT:"); + Encoding[] encodings = AudioSystem.getTargetEncodings(enc); + for (Encoding e: encodings) { + if (e.equals(pcmFloatEnc)) { + out(" - OK"); + return true; + } + } + out(" - FAILED (not supported)"); + testFailed = true; + return false; + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/swing/JColorChooser/Test6977726.html Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,8 @@ +<html> +<body> +If you don't see the preview panel, then test failed, otherwise it passed. + +<applet width="500" height="400" code="Test6977726.class"> +</applet> +</body> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/swing/JColorChooser/Test6977726.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6977726 + * @summary Checks if JColorChooser.setPreviewPanel removes the old one + * @author Sergey Malenkov + * @run applet/manual=yesno Test6977726.html + */ + +import javax.swing.JApplet; +import javax.swing.JColorChooser; +import javax.swing.JLabel; + +public class Test6977726 extends JApplet { + public void init() { + JColorChooser chooser = new JColorChooser(); + chooser.setPreviewPanel(new JLabel("Text Preview Panel")); + getContentPane().add(chooser); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/swing/border/Test6978482.java Thu Sep 16 11:17:32 2010 -0700 @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6978482 + * @summary Tests unchecked casts + * @author Sergey Malenkov + */ + +import com.sun.java.swing.plaf.motif.MotifBorders; +import com.sun.java.swing.plaf.windows.WindowsBorders; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.image.BufferedImage; + +import javax.swing.ActionMap; +import javax.swing.JFileChooser; +import javax.swing.JLabel; +import javax.swing.JToggleButton; +import javax.swing.JToolBar; +import javax.swing.border.BevelBorder; +import javax.swing.border.Border; +import javax.swing.border.CompoundBorder; +import javax.swing.border.EmptyBorder; +import javax.swing.border.EtchedBorder; +import javax.swing.border.LineBorder; +import javax.swing.border.MatteBorder; +import javax.swing.border.SoftBevelBorder; +import javax.swing.border.TitledBorder; +import javax.swing.plaf.ActionMapUIResource; +import javax.swing.plaf.BorderUIResource; +import javax.swing.plaf.synth.SynthLookAndFeel; +import javax.swing.plaf.basic.BasicBorders; +import javax.swing.plaf.basic.BasicToolBarUI; +import javax.swing.plaf.metal.MetalBorders; +import javax.swing.plaf.metal.MetalComboBoxEditor; + +import sun.swing.plaf.synth.SynthFileChooserUI; + +public class Test6978482 { + private static final JLabel LABEL = new JLabel(); + private static final JToolBar TOOLBAR = new JToolBar(); // init non-rollover border + + private static final Border[] BORDERS = { + new MotifBorders.BevelBorder(true, Color.BLACK, Color.WHITE), + new MotifBorders.ButtonBorder(Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK), + new MotifBorders.FocusBorder(Color.BLACK, Color.WHITE), + new MotifBorders.FrameBorder(LABEL), + new MotifBorders.MenuBarBorder(Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK), + new MotifBorders.MotifPopupMenuBorder(new Font(null, Font.PLAIN, 10), Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK), + new MotifBorders.ToggleButtonBorder(Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK), + + new WindowsBorders.ProgressBarBorder(Color.BLACK, Color.WHITE), + new WindowsBorders.ToolBarBorder(Color.BLACK, Color.WHITE), + //- WindowsInternalFrameUI.XPBorder is not accessible: check it visually + //? WindowsTableHeaderUI.IconBorder is not accessible: check it visually + //- XPStyle.XPEmptyBorder is not accessible: check it visually + //- XPStyle.XPFillBorder is not accessible: check it visually + //- XPStyle.XPImageBorder is not accessible: check it visually + + new BevelBorder(BevelBorder.RAISED), + new CompoundBorder(), + new EmptyBorder(1, 2, 3, 4), + new EtchedBorder(), + new LineBorder(Color.BLACK, 2, true), + new MatteBorder(1, 2, 3, 4, Color.BLACK), + new SoftBevelBorder(BevelBorder.LOWERED), + new TitledBorder("4856008"), + + new BorderUIResource(new EmptyBorder(1, 2, 3, 4)), + + new BasicBorders.ButtonBorder(Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK), + new BasicBorders.FieldBorder(Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK), + new BasicBorders.MarginBorder(), + new BasicBorders.MenuBarBorder(Color.BLACK, Color.WHITE), + new BasicBorders.RadioButtonBorder(Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK), + //+ BasicBorders.RolloverMarginBorder: + new ToolBar().getRolloverMarginBorder(), + new BasicBorders.SplitPaneBorder(Color.BLACK, Color.WHITE), + //+ BasicBorders.SplitPaneDividerBorder: + BasicBorders.getSplitPaneDividerBorder(), + new BasicBorders.ToggleButtonBorder(Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK), + + new MetalBorders.ButtonBorder(), + //- MetalBorders.DialogBorder is not accessible: check it visually + new MetalBorders.Flush3DBorder(), + //- MetalBorders.FrameBorder is not accessible: check it visually + new MetalBorders.InternalFrameBorder(), + new MetalBorders.MenuBarBorder(), + new MetalBorders.MenuItemBorder(), + new MetalBorders.OptionDialogBorder(), + new MetalBorders.PaletteBorder(), + new MetalBorders.PopupMenuBorder(), + //- MetalBorders.RolloverMarginBorder is not accessible: check it visually + new MetalBorders.ScrollPaneBorder(), + new MetalBorders.TableHeaderBorder(), + new MetalBorders.ToolBarBorder(), + //+ MetalComboBoxEditor.EditorBorder: + new MetalEditor().getEditorBorder(), + + //- SynthBorder is not accessible: check it visually + //- SynthScrollPaneUI.ViewportBorder is not accessible: check it visually + + //? CSSBorder is not accessible: check it visually + //? CommentView.CommentBorder is not accessible: check it visually + //- HiddenTagView.EndTagBorder is not accessible: check it visually + //- HiddenTagView.StartTagBorder is not accessible: check it visually + + //+ SynthFileChooserUI.UIBorder: + new SynthFileChooser().getUIBorder(), + }; + + public static void main(String[] args) { + Component c = new Component() {}; + c.setBackground(Color.WHITE); + c.setForeground(Color.BLACK); + Graphics g = new BufferedImage(1024, 768, BufferedImage.TYPE_INT_RGB).getGraphics(); + g.setClip(0, 0, 1024, 768); + for (Border border : BORDERS) { + System.out.println(border.getClass()); + border.getBorderInsets(c); + border.paintBorder(c, g, 0, 0, 1024, 768); + } + } + + // This class is used to get the instance of BasicBorders.RolloverMarginBorder + private static class ToolBar extends BasicToolBarUI { + private Border getRolloverMarginBorder() { + JToggleButton button = new JToggleButton(); + CompoundBorder border = (CompoundBorder) getNonRolloverBorder(button); + return border.getInsideBorder(); + } + } + + // This class is used to get the instance of MetalComboBoxEditor.EditorBorder + private static class MetalEditor extends MetalComboBoxEditor { + private Border getEditorBorder() { + return editor.getBorder(); + } + } + + // This class is used to get the instance of SynthFileChooserUI.UIBorder + private static class SynthFileChooser extends SynthFileChooserUI { + private static final JFileChooser CHOOSER = new JFileChooser(); + private String name; + + private SynthFileChooser() { + super(CHOOSER); + } + + private Border getUIBorder() { + new SynthLookAndFeel().initialize(); + CHOOSER.setBorder(null); + installDefaults(CHOOSER); + return CHOOSER.getBorder(); + } + + @Override + protected ActionMap createActionMap() { + return new ActionMapUIResource(); + } + + @Override + public String getFileName() { + return this.name; + } + + @Override + public void setFileName(String name) { + this.name = name; + } + } +}