Como faço para definir o código do idioma padrão na JVM?

Respostas:

156

Da referência do Oracle :

A localidade padrão do seu aplicativo é determinada de três maneiras. Primeiro, a menos que você tenha alterado explicitamente o padrão, o Locale.getDefault()método retornará o código do idioma inicialmente determinado pela Java Virtual Machine (JVM) quando ele foi carregado pela primeira vez. Ou seja, a JVM determina o código do idioma padrão no ambiente host. O código do idioma do ambiente host é determinado pelo sistema operacional do host e pelas preferências do usuário estabelecidas nesse sistema.

Em segundo lugar, em algumas implementações de tempo de execução Java, o usuário do aplicativo pode substituir localidade padrão do hospedeiro, fornecendo esta informação na linha de comando, definindo os user.language, user.countrye user.variantpropriedades do sistema.

Terceiro, seu aplicativo pode chamar o Locale.setDefault(Locale) método O método setDefault (Locale aLocale) permite que seu aplicativo defina um recurso em todo o sistema (na verdade, em toda a VM) . Depois de definir o código de idioma padrão com esse método, as chamadas subseqüentes para Locale.getDefault () retornarão o código de idioma recém-definido.

aleroot
fonte
é qualquer conflito ao buscar o mesmo código de idioma do ResourceBundle. Tentei buscar o pacote, mas eu tenho o que eu tinha inicialmente
Navdeep Singh
153

Você pode configurá-lo na linha de comandos através dos parâmetros da JVM:

java -Duser.country=CA -Duser.language=fr ... com.x.Main

Para obter mais informações, consulte Internacionalização: Compreendendo a localidade na plataforma Java - usando a localidade

lucasmo
fonte
8
Você também pode configurá-lo através da variável de ambiente _JAVA_OPTIONS.
21416 Jeff Paquette
2
Via localidade padrão do Java 7 :setx _JAVA_OPTIONS -Dsun.locale.formatasdefault=true /m
Vadzim
43

Você pode usar argumentos da JVM

java -Duser.country=ES -Duser.language=es -Duser.variant=Traditional_WIN
Aravind Yarram
fonte
29

Nas respostas aqui, até agora, encontramos duas maneiras de alterar a configuração de localidade do JRE:

  • Programaticamente, usando Locale.setDefault () (que, no meu caso, era a solução, pois não queria exigir nenhuma ação do usuário):

    Locale.setDefault(new Locale("pt", "BR"));
  • Via argumentos para a JVM:

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

Mas, apenas como referência, quero observar que, no Windows, há mais uma maneira de alterar a localidade usada pelo JRE, conforme documentado aqui : alterando o idioma do sistema.

Nota : Você deve estar logado com uma conta que possua privilégios administrativos.

  1. Clique em Iniciar> Painel de Controle .

  2. Windows 7 e Vista: Clique em Relógio, Idioma e região> Região e idioma .

    Windows XP: Clique duas vezes no ícone Opções regionais e de idioma .

    A caixa de diálogo Opções regionais e de idioma é exibida.

  3. Windows 7: Clique na guia Administrativo .

    Windows XP e Vista: Clique na guia Avançado .

    (Se não houver guia Avançado, você não estará logado com privilégios administrativos.)

  4. Na seção Idioma para programas não Unicode , selecione o idioma desejado no menu suspenso.

  5. Clique em OK .

    O sistema exibe uma caixa de diálogo perguntando se deseja usar arquivos existentes ou instalar a partir do CD do sistema operacional. Verifique se você tem o CD pronto.

  6. Siga as instruções guiadas para instalar os arquivos.

  7. Reinicie o computador após a conclusão da instalação.

Certamente, no Linux, o JRE também usa as configurações do sistema para determinar qual localidade usar, mas as instruções para definir o idioma do sistema mudam de distribuição para distribuição.

Antonio Vinicius Menezes Medei
fonte
2
Embora essas informações possam ser úteis, gostaria de destacar que essas etapas são diferentes para cada sistema operacional e para cada sistema operacional, você poderá configurar um código de idioma que é usado em todo o sistema. O Java foi projetado para usar esse código de idioma como o código de idioma padrão sempre que não estivermos definindo explicitamente um código de idioma padrão. Portanto, as informações nesta resposta são sobre como definir a localidade padrão no Windows e não no Java.
MozenRath
5

Existe outro problema, se você não gosta de alterar a localidade do sistema, mas a JVM. você pode configurar uma variável de ambiente do sistema (ou usuário) JAVA_TOOL_OPTIONSe definir seu valor para -Duser.language=en-USou qualquer outro idioma - REGION desejado.

Ryan Ouyang
fonte
1

Você pode aplicar argumentos da VM para um JARarquivo com o seguinte código:

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());
        }
    }
}

É usado da seguinte maneira:

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

Você consegue fazer isso:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

E para capturar localidade. Você consegue fazer isso:

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