Maven默认语言环境与操作系统语言环境不同

12

当我打字时

mvn --version

在命令提示符中我看到:

默认区域设置:en_US

然而我的系统区域设置是tr_TR

当我启动一个没有使用Maven的Java SE项目并运行Locale.getDefault()时,tr_TR可以正常返回。但是当我运行Maven项目,然后运行Locale.getDefault(),它返回en_US,这不是我想要的。

我如何告诉Maven我的默认区域设置是TR?

3个回答

21

您可以使用此命令

set MAVEN_OPTS= -Duser.language=tr

总之,最好的解决方案是将这些信息放在POM文件中而不是通过命令行。特别是您需要处理 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>

第二个问题: 如果我允许在我的本地区运行一个 Web 应用程序,但它支持德语、英语等语言。并且您的系统语言环境是 DE。我能否从您的请求中获取您的系统语言环境?或者通过您的浏览器获得您喜欢的语言?

您可以从请求中获取这些信息。以下是 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);
  }
}

但是如果我将项目部署到其他计算机上,使用其他语言环境呢?有没有办法告诉Maven直接使用操作系统的语言环境? - Koray Tugay
我需要进行一些搜索。我从未遇到过这个问题。 - Oscerd
我已经谷歌搜索过了,但是找不到相关信息。我认为没有办法直接告诉Maven使用操作系统语言环境。 - Oscerd
如果我可以问另外一个问题,我正在本地运行一个Web应用程序,但它支持德语、英语等。而您的系统语言环境是DE。我能否从您的请求中获取您的系统语言环境?或者也许是您的浏览器喜好的语言? - Koray Tugay
注意:我必须指定用户时区以及语言和地区才能获取区域设置的完整信息。 - Raj
对我来说,只有在将surefire配置为以fork模式运行测试时,systemPropertyVariables才能正常工作。当以非fork模式运行时,Locale类已经在JVM启动期间使用“默认”语言环境进行了初始化,并且无法被覆盖。 - bedla.czech

1

你也可以使用

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

当需要在JVM启动时使用参数时,此案例表现更佳,因为使用maven-surefire-plugin时,您的JVM已经在运行,参数不会被重新加载(这是我的情况,我使用了一些初始化方法来使用@RunWith(SpringRunner.class)@SpringBootTest初始化一个MockMvc)。


谢谢!我想补充说明,我在 configuration 中使用了 _argLine_。文档有一个专门的部分介绍:特殊 VM 属性 - Marcelo Barros

0

定义属性允许您将它们作为命令行参数传递。

这对我很有效:

<project>
    <properties>
        <user.language>de</user.language>
        <argLine>-Duser.language=${user.language}</argLine>
    </properties>
</project>

mvn -Duser.language=tr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接