Maven default locale not same with OS locale
Asked Answered
C

3

13

When I type

mvn --version

in command prompt I see:

Default Locale : en_US

However my System Locale is tr_TR

When I start a Java SE Project without maven and run Locale.getDefault(), tr_TR returns fine. But when I run a Maven project and then Locale.getDefault() it returns en_US which I do not like.

How can I tell maven that my default locale is TR ?

Coenocyte answered 21/7, 2013 at 16:18 Comment(0)
N
22

You can use this command

set MAVEN_OPTS= -Duser.language=tr

Anyway the best solution is to put these informations in the POM file and never by command line. In particular you have to deal with the configuration of Maven-Surefire-Plugin

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.9</version>
        <configuration>
            <systemPropertyVariables>
                <user.language>tr</user.language>
                <user.region>TR</user.region>
            </systemPropertyVariables>
        </configuration> 
    </plugin>

Second Question: Another question if I may, I am running a web app in my locale but it supports lets say german, english.. And your system locale is DE. Can I get your system locale from your request? Or maybe the language you prefer by your browser?

You can take these informations from the request. Here is an example in a servlet.

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;

public class GetLocale extends HttpServlet{

  public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException
  {
      Locale locale = request.getLocale();
      String language = locale.getLanguage();
      String country = locale.getCountry();

      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      out.println(language + ":" + country);
  }
}
Nashom answered 21/7, 2013 at 16:46 Comment(6)
But what if I deploy the project to some other computer with some other Locale? Is there no way to tell Maven to use to OS Locale directly?Coenocyte
I need to make some searches. I've never faced this problem.Nashom
I've googled but I can't find informations. I think there is no way to tell Maven to use OS locale directly.Nashom
Another question if I may, I am running a web app in my locale but it supports lets say german, english.. And your system locale is DE. Can I get your system locale from your request? Or maybe the language you prefer by your browser?Coenocyte
Note: I had to specify user.timezone along with language and region to get the full settings for the locale.Bull
For me systemPropertyVariables works only when surefire is configured to run test in fork mode. When run in non-fork mode, Locale class is already initialized with "default" locale during JVM startup and cannot be overriden.Transpose
R
2

You can also use

<properties>
    <argLine>-Duser.language=tr</argLine>
</properties>

This case works better when the argument is needed at the start of the JVM, as using maven-surefire-plugin, your JVM is already running and the arguments won't be reloaded (that was my case using some initialization with @RunWith(SpringRunner.class) and @SpringBootTest to initialize a MockMvc).

Reboant answered 18/6, 2019 at 13:58 Comment(1)
Thanks! I'd like to add that I used argLine inside of configuration. The docs has a special section for that: Special VM Properties.Camphorate
A
0

Defining the property allows you to pass them as command line argument.

This works for me:

<project>
    <properties>
        <user.language>de</user.language>
        <argLine>-Duser.language=${user.language}</argLine>
    </properties>
</project>
mvn -Duser.language=tr
Anemophilous answered 25/9, 2019 at 8:16 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.