当我输入
mvn --version
在命令提示符下我看到:
默认语言环境:en_US
但是我的系统语言环境是 tr_TR
当我在没有 maven 的情况下启动 Java SE 项目并运行 Locale.getDefault() tr_TR 时返回正常。但是当我运行一个 Maven 项目然后 Locale.getDefault() 它返回我不喜欢的 en_US 。
如何告诉 maven 我的默认语言环境是 TR ?
当我输入
mvn --version
在命令提示符下我看到:
默认语言环境:en_US
但是我的系统语言环境是 tr_TR
当我在没有 maven 的情况下启动 Java SE 项目并运行 Locale.getDefault() tr_TR 时返回正常。但是当我运行一个 Maven 项目然后 Locale.getDefault() 它返回我不喜欢的 en_US 。
如何告诉 maven 我的默认语言环境是 TR ?
你可以使用这个命令
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>
第二个问题: 如果可以的话,还有一个问题,我正在我的语言环境中运行一个网络应用程序,但它支持让我们说德语、英语……而且你的系统语言环境是 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);
}
}
你也可以使用
<properties>
<argLine>-Duser.language=tr</argLine>
</properties>
当在 JVM 启动时需要参数时,这种情况效果更好,因为 using maven-surefire-plugin
,您的 JVM 已经在运行并且不会重新加载参数(这是我使用@RunWith(SpringRunner.class)
和@SpringBootTest
初始化 a 的情况MockMvc
)。
定义属性允许您将它们作为命令行参数传递。
这对我有用:
<project>
<properties>
<user.language>de</user.language>
<argLine>-Duser.language=${user.language}</argLine>
</properties>
</project>
mvn -Duser.language=tr