Как изменить язык на java

I want to set the default Locale for my JVM to fr_CA. What are the possible options to do this? I know of only one option Locale.setDefault()

I want to set the default Locale for my JVM to fr_CA. What are the possible options to do this?

I know of only one option Locale.setDefault()

Lii's user avatar

Lii

11.5k8 gold badges62 silver badges85 bronze badges

asked Jan 10, 2012 at 19:13

MozenRath's user avatar

2

From the Oracle Reference:

The default locale of your application is determined in three ways.
First, unless you have explicitly changed the default, the
Locale.getDefault() method returns the locale that was initially determined
by the Java Virtual Machine (JVM) when it first loaded. That is, the
JVM determines the default locale from the host environment. The host
environment’s locale is determined by the host operating system and
the user preferences established on that system.

Second, on some Java runtime implementations, the application user can
override the host’s default locale by providing this information on
the command line by setting the user.language, user.country, and
user.variant system properties.

Third, your application can call the Locale.setDefault(Locale)
method. The setDefault(Locale aLocale) method lets your application
set a systemwide (actually VM-wide) resource. After you set the default locale with this
method, subsequent calls to Locale.getDefault() will return the newly
set locale.

eckes's user avatar

eckes

10k1 gold badge58 silver badges71 bronze badges

answered Jan 10, 2012 at 19:17

aleroot's user avatar

alerootaleroot

70.2k30 gold badges173 silver badges210 bronze badges

1

In the answers here, up to now, we find two ways of changing the JRE locale setting:

  • Programatically, using Locale.setDefault() (which, in my case, was the solution, since I didn’t want to require any action of the user):

    Locale.setDefault(new Locale("pt", "BR"));
    
  • Via arguments to the JVM:

    java -jar anApp.jar -Duser.language=pt-BR
    

But, just as reference, I want to note that, on Windows, there is one more way of changing the locale used by the JRE, as documented here: changing the system-wide language.

Note: You must be logged in with an account that has Administrative Privileges.

  1. Click Start > Control Panel.

  2. Windows 7 and Vista: Click Clock, Language and Region > Region and Language.

    Windows XP: Double click the Regional and Language Options
    icon.

    The Regional and Language Options dialog box appears.

  3. Windows 7: Click the Administrative tab.

    Windows XP and Vista: Click the Advanced tab.

    (If there is no Advanced tab, then you are not logged in with
    administrative privileges.)

  4. Under the Language for non-Unicode programs section, select the desired language from the drop down menu.

  5. Click OK.

    The system displays a dialog box asking whether to use existing
    files or to install from the operating system CD. Ensure that you have
    the CD ready.

  6. Follow the guided instructions to install the files.

  7. Restart the computer after the installation is complete.

Certainly on Linux the JRE also uses the system settings to determine which locale to use, but the instructions to set the system-wide language change from distro to distro.

answered Jul 21, 2015 at 2:05

Antônio Medeiros's user avatar

1

You can use JVM args

java -Duser.country=ES -Duser.language=es -Duser.variant=Traditional_WIN

answered Jan 10, 2012 at 19:16

Aravind Yarram's user avatar

Aravind YarramAravind Yarram

78.1k45 gold badges230 silver badges321 bronze badges

There is another away if you don’t like to change System locale but the JVM. you can setup a System (or user) Environment variable JAVA_TOOL_OPTIONS and set its value to -Duser.language=en-US or any other language-REGION you want.

answered Jun 18, 2019 at 18:50

Ryan Ouyang's user avatar

Ryan OuyangRyan Ouyang

5274 silver badges15 bronze badges

You can do this:

enter image description here

enter image description here

And to capture locale. You can do this:

private static final String LOCALE = LocaleContextHolder.getLocale().getLanguage()
            + "-" + LocaleContextHolder.getLocale().getCountry();

MozenRath's user avatar

MozenRath

9,41412 gold badges59 silver badges102 bronze badges

answered Apr 10, 2019 at 14:32

Nick Borges's user avatar

Nick BorgesNick Borges

4574 silver badges3 bronze badges

You can enforce VM arguments for a JAR file with the following code:

import java.io.File;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;

public class JVMArgumentEnforcer
{
    private String argument;

    public JVMArgumentEnforcer(String argument)
    {
        this.argument = argument;
    }

    public static long getTotalPhysicalMemory()
    {
        com.sun.management.OperatingSystemMXBean bean =
                (com.sun.management.OperatingSystemMXBean)
                        java.lang.management.ManagementFactory.getOperatingSystemMXBean();
        return bean.getTotalPhysicalMemorySize();
    }

    public static boolean isUsing64BitJavaInstallation()
    {
        String bitVersion = System.getProperty("sun.arch.data.model");

        return bitVersion.equals("64");
    }

    private boolean hasTargetArgument()
    {
        RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
        List<String> inputArguments = runtimeMXBean.getInputArguments();

        return inputArguments.contains(argument);
    }

    public void forceArgument() throws Exception
    {
        if (!hasTargetArgument())
        {
            // This won't work from IDEs
            if (JARUtilities.isRunningFromJARFile())
            {
                // Supply the desired argument
                restartApplication();
            } else
            {
                throw new IllegalStateException("Please supply the VM argument with your IDE: " + argument);
            }
        }
    }

    private void restartApplication() throws Exception
    {
        String javaBinary = getJavaBinaryPath();
        ArrayList<String> command = new ArrayList<>();
        command.add(javaBinary);
        command.add("-jar");
        command.add(argument);
        String currentJARFilePath = JARUtilities.getCurrentJARFilePath();
        command.add(currentJARFilePath);

        ProcessBuilder processBuilder = new ProcessBuilder(command);
        processBuilder.start();

        // Kill the current process
        System.exit(0);
    }

    private String getJavaBinaryPath()
    {
        return System.getProperty("java.home")
                + File.separator + "bin"
                + File.separator + "java";
    }

    public static class JARUtilities
    {
        static boolean isRunningFromJARFile() throws URISyntaxException
        {
            File currentJarFile = getCurrentJARFile();

            return currentJarFile.getName().endsWith(".jar");
        }

        static String getCurrentJARFilePath() throws URISyntaxException
        {
            File currentJarFile = getCurrentJARFile();

            return currentJarFile.getPath();
        }

        private static File getCurrentJARFile() throws URISyntaxException
        {
            return new File(JVMArgumentEnforcer.class.getProtectionDomain().getCodeSource().getLocation().toURI());
        }
    }
}

It is used as follows:

JVMArgumentEnforcer jvmArgumentEnforcer = new JVMArgumentEnforcer("-Duser.language=pt-BR"); // For example
jvmArgumentEnforcer.forceArgument();

answered Dec 31, 2016 at 21:27

BullyWiiPlaza's user avatar

BullyWiiPlazaBullyWiiPlaza

16.4k9 gold badges105 silver badges171 bronze badges

Define a GUI and a combobox with supported languages. Add an ItemListener so when the combobox is changed, the texts are updated.

LanguageGUIClient.java:

import javax.swing.*;

public class LanguageGUIClient
{
    public static void main(String[] arguments) throws Exception
    {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

        SwingUtilities.invokeLater(() ->
        {
            LanguageGUI languageGUI = new LanguageGUI();
            languageGUI.setVisible(true);
        });
    }
}

LanguageGUI.java:

import javax.swing.*;
import java.util.Locale;
import java.util.ResourceBundle;

public class LanguageGUI extends JFrame
{
    public static ResourceBundle resourceBundle;

    private JPanel rootPanel;
    private JComboBox<Locale> languageComboBox;
    private JLabel languageLabel;

    public LanguageGUI()
    {
        configureFrameProperties();
    }

    private void configureFrameProperties()
    {
        add(rootPanel);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        languageComboBox.addItem(Locale.US);
        languageComboBox.addItem(Locale.GERMANY);
        languageComboBox.addItem(Locale.FRANCE);
        setTexts();
        languageComboBox.addItemListener(itemEvent -> setTexts());
        setSize(300, 100);
    }

    private void setTexts()
    {
        Locale locale = languageComboBox.getItemAt(languageComboBox.getSelectedIndex());
        resourceBundle = ResourceBundle.getBundle("Bundle", locale);
        setTitle(resourceBundle.getString("application.title"));
        languageLabel.setText(resourceBundle.getString("language") + ":");
        languageComboBox.setToolTipText(resourceBundle.getString("language.tooltip"));
    }
}

Note that I’m using IntelliJ's form designer so the .form file contents are necessary as well.

LanguageGUI.form:

<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="LanguageGUI">
  <grid id="27dc6" binding="rootPanel" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
    <margin top="0" left="0" bottom="0" right="0"/>
    <constraints>
      <xy x="20" y="20" width="500" height="400"/>
    </constraints>
    <properties/>
    <border type="none"/>
    <children>
      <component id="eb651" class="javax.swing.JComboBox" binding="languageComboBox">
        <constraints>
          <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
        </constraints>
        <properties>
          <toolTipText value=""/>
        </properties>
      </component>
      <vspacer id="977c1">
        <constraints>
          <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
        </constraints>
      </vspacer>
      <component id="e59f" class="javax.swing.JLabel" binding="languageLabel">
        <constraints>
          <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
        </constraints>
        <properties>
          <text value=""/>
        </properties>
      </component>
    </children>
  </grid>
</form>

Furthermore, you need to create the respective resource bundle files in your resources directory:

The result is a GUI with a combobox allowing you to change language immediately:

Define a GUI and a combobox with supported languages. Add an ItemListener so when the combobox is changed, the texts are updated.

LanguageGUIClient.java:

import javax.swing.*;

public class LanguageGUIClient
{
    public static void main(String[] arguments) throws Exception
    {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

        SwingUtilities.invokeLater(() ->
        {
            LanguageGUI languageGUI = new LanguageGUI();
            languageGUI.setVisible(true);
        });
    }
}

LanguageGUI.java:

import javax.swing.*;
import java.util.Locale;
import java.util.ResourceBundle;

public class LanguageGUI extends JFrame
{
    public static ResourceBundle resourceBundle;

    private JPanel rootPanel;
    private JComboBox<Locale> languageComboBox;
    private JLabel languageLabel;

    public LanguageGUI()
    {
        configureFrameProperties();
    }

    private void configureFrameProperties()
    {
        add(rootPanel);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        languageComboBox.addItem(Locale.US);
        languageComboBox.addItem(Locale.GERMANY);
        languageComboBox.addItem(Locale.FRANCE);
        setTexts();
        languageComboBox.addItemListener(itemEvent -> setTexts());
        setSize(300, 100);
    }

    private void setTexts()
    {
        Locale locale = languageComboBox.getItemAt(languageComboBox.getSelectedIndex());
        resourceBundle = ResourceBundle.getBundle("Bundle", locale);
        setTitle(resourceBundle.getString("application.title"));
        languageLabel.setText(resourceBundle.getString("language") + ":");
        languageComboBox.setToolTipText(resourceBundle.getString("language.tooltip"));
    }
}

Note that I’m using IntelliJ's form designer so the .form file contents are necessary as well.

LanguageGUI.form:

<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="LanguageGUI">
  <grid id="27dc6" binding="rootPanel" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
    <margin top="0" left="0" bottom="0" right="0"/>
    <constraints>
      <xy x="20" y="20" width="500" height="400"/>
    </constraints>
    <properties/>
    <border type="none"/>
    <children>
      <component id="eb651" class="javax.swing.JComboBox" binding="languageComboBox">
        <constraints>
          <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
        </constraints>
        <properties>
          <toolTipText value=""/>
        </properties>
      </component>
      <vspacer id="977c1">
        <constraints>
          <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
        </constraints>
      </vspacer>
      <component id="e59f" class="javax.swing.JLabel" binding="languageLabel">
        <constraints>
          <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
        </constraints>
        <properties>
          <text value=""/>
        </properties>
      </component>
    </children>
  </grid>
</form>

Furthermore, you need to create the respective resource bundle files in your resources directory:

The result is a GUI with a combobox allowing you to change language immediately:

В Java у нас есть фантастическая функция, называемая классомLocale.

Это позволяет нам быстро различать культурные локали и форматировать наш контент соответствующим образом. Это важно для процесса интернационализации. Как и у i18n, у Localization также есть аббревиатура —*l10n*.

Основная причина использованияLocale заключается в том, что все необходимое форматирование для конкретной локали может быть доступно без перекомпиляции. Приложение может обрабатывать несколько локалей одновременно, поэтому поддержка нового языка проста.

Локали обычно представлены языком, страной и вариантом аббревиатуры, разделенными подчеркиванием:

  • де (немецкий)

  • it_CH (итальянский, Швейцария)

  • en_US_UNIX (США, платформа UNIX)

2.1. поля

Мы уже узнали, чтоLocale consists of language code, country code, and variant. There are two more possible fields to set: script and extensions.

Давайте посмотрим на список полей и посмотрим, каковы правила:

  • Language может быть кодомISO 639 alpha-2 or alpha-3 или подтегом зарегистрированного языка.

  • Region (Страна) — это код страныISO 3166 alpha-2 или код городаUN numeric-3.

  • Variant — это чувствительное к регистру значение или набор значений, определяющих вариантLocale.

  • Script должен быть допустимым кодомISO 15924 alpha-4.

  • Extensions — это карта, состоящая из односимвольных ключей и значенийString.

Нет списка возможных значенийextension, но значения должны быть правильно сформированными вложенными тегамиBCP-47. Ключи и значения всегда преобразуются в нижний регистр.

2.2. Locale.Builderс

Есть несколько способов создания объектовLocale. Один из возможных способов используетLocale.Builder. Locale.Builder имеет пять методов установки, которые мы можем использовать для создания объекта и в то же время для проверки этих значений:

Locale locale = new Locale.Builder()
  .setLanguage("fr")
  .setRegion("CA")
  .setVariant("POSIX")
  .setScript("Latn")
  .build();

String представляет собойLocale какfr_CA_POSIX # Latn_.

Приятно знать, чтоsetting ‘variant’ may be a little bit tricky as there’s no official restriction on variant values, although the setter method requires it to be BCP-47 compliant.

В противном случае он выброситIllformedLocaleException.

В случае, когда нам нужно использовать значение, не прошедшее проверку, мы можем использовать конструкторыLocale, поскольку они не проверяют значения.

2.3. Конструкторы

Locale имеет три конструктора:

  • новый языковой стандарт (язык строк)

  • новый языковой стандарт (язык строки, страна строки)

  • новый языковой стандарт (язык строки, страна строки, вариант строки)

Трехпараметрический конструктор:

Locale locale = new Locale("pl", "PL", "UNIX");

Допустимыйvariant должен бытьString, состоящим из 5-8 буквенно-цифровых или одиночных цифр, за которыми следуют 3 буквенно-цифровых символа. Мы можем применить UNIX к полюvariant только через конструктор, поскольку он не соответствует этим требованиям.

Однако есть один недостаток использования конструкторов для создания объектовLocale — мы не можем задавать расширения и поля скриптов.

2.4. Константы

Это, вероятно, самый простой и самый ограниченный способ получитьLocales. КлассLocale имеет несколько статических констант, которые представляют наиболее популярную страну или язык:

Locale japan = Locale.JAPAN;
Locale japanese = Locale.JAPANESE;

2.5. Языковые теги

Другой способ созданияLocale — это вызов статического фабричного методаforLanguageTag(String languageTag). Для этого метода требуетсяString, который соответствует стандартуIETF BCP 47.

Вот как мы можем создать UKLocale:

Locale uk = Locale.forLanguageTag("en-UK");

2.6. Доступные регионы

Хотя мы можем создать несколько комбинаций объектовLocale, мы не сможем их использовать.

Важно помнить, чтоLocalesна платформе зависят от тех, которые были установлены в среде выполнения Java.

Поскольку мы используемLocales для форматирования, различные форматирующие программы могут иметь еще меньший набор доступныхLocales, установленных в среде выполнения.

Давайте посмотрим, как получить массивы доступных языков:

Locale[] numberFormatLocales = NumberFormat.getAvailableLocales();
Locale[] dateFormatLocales = DateFormat.getAvailableLocales();
Locale[] locales = Locale.getAvailableLocales();

После этого мы можем проверить, находится ли нашLocale среди доступныхLocales.

Следует помнить, чтоthe set of available locales is different for various implementations of the Java Platformand various areas of functionality.

2.7. Локаль по умолчанию

При работе с локализацией нам может потребоваться узнать, какой по умолчаниюLocale в нашем экземпляреJVM. К счастью, есть простой способ сделать это:

Locale defaultLocale = Locale.getDefault();

Кроме того, мы можем указать значение по умолчаниюLocale, вызвав аналогичный метод установки:

Locale.setDefault(Locale.CANADA_FRENCH);

Это особенно актуально, когда мы хотим создать тестыJUnit, которые не зависят от экземпляраJVM.

Internationalization and localization

Internationalization (i18n) refers to the process of extracting strings from source code and presenting them as properties with a set of values.

Localization (l10n) is the process of translating values of these properties into target languages.

Keys and values for the target languages are stored in dedicated properties files, which can be combined into a resource bundle for convenience. IntelliJ IDEA can recognize hard-coded string literals in Java code and suggest to extract them into the corresponding properties files.

Install the Resource Bundle Editor plugin

Install the Resource Bundle Editor plugin to be able to work with properties:

In the Settings/Preferences dialog Ctrl+Alt+S , select Plugins .

Switch to the Marketplace tab and type Resource Bundle Editor in the search bar.

Click Install next to the plugin name, apply the changes and close the dialog.

Здравствуйте, Mr WeL, Вы писали:

MW>Привет!
MW>А можно русифицировать эту, очень привлекательную, среду разработки?

А зачем? Может и все ключевые слова Java переведем на русский язык?!

Кстати, доводилось работать на русифицированной версии Turbo Prolog. Ужас.

От: Alex-AKF
Дата: 17.09.04 14:53
Оценка:

17.09.04 в 09:17 Mr WeL в своём письме писал(а):

> Привет!
> А можно русифицировать эту, очень привлекательную, среду разработки?

А что, простите, там руссифицировать?

От: Mr WeL
Дата: 18.09.04 04:30
Оценка:
От: redrick
Дата: 18.09.04 14:44
Оценка:
От: Mr WeL
Дата: 20.09.04 05:56
Оценка:

Здравствуйте, redrick, Вы писали:

R>учите английский — все равно никуда без него не уедете

А никто никуда не собирается .

От: A_Gura http://a-gura.livejournal.com
Дата: 20.09.04 07:59
Оценка:

Здравствуйте, Mr WeL, Вы писали:

MW>Здравствуйте, redrick, Вы писали:

R>>учите английский — все равно никуда без него не уедете

MW>А никто никуда не собирается .

MW>

Работать надо над собой. И английский знать с такой-то профессией нужно обязательно.

От: Mr WeL
Дата: 20.09.04 08:56
Оценка:

A_G>Работать надо над собой. И английский знать с такой-то профессией нужно обязательно.
Привет!

Проблема с автоматической сменой языка в Intellij-idea (RU/EN/IL)

После того как перехожу в intellij-idea из браузера, или любого другого окна, происходит автоматическая смена языка, по умолчанию использую в системе 3 языка RU/EN/IL. В любых других приложениях, программах. такой проблемы нет.

  • intellij-idea 2016.1.4 2
  • Windows 10
  • Puntoswitcher (никогда не устанавливался)

Ставлю в браузере язык руский, перехожу в идею, ставится иврит, возращаюсь в браузер с ивритом. Ставлю в идее английский язык, иду в браузер, с английским языком, возвращаюсь в идею с ивритом. в любых других вариантах все так же Подскажите пожалуйста, что нужно настроить и в чем заключается проблема?

Понравилась статья? Поделить с друзьями:
  • Как изменить язык на iherb
  • Как изменить язык на faceit
  • Как изменить язык на ebay
  • Как изменить язык на badoo
  • Как изменить язык на asos