当我打字时
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>
第二个问题: 如果我允许在我的本地区运行一个 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);
}
}
你也可以使用
<properties>
<argLine>-Duser.language=tr</argLine>
</properties>
当需要在JVM启动时使用参数时,此案例表现更佳,因为使用maven-surefire-plugin
时,您的JVM已经在运行,参数不会被重新加载(这是我的情况,我使用了一些初始化方法来使用@RunWith(SpringRunner.class)
和@SpringBootTest
初始化一个MockMvc
)。
定义属性允许您将它们作为命令行参数传递。
这对我很有效:
<project>
<properties>
<user.language>de</user.language>
<argLine>-Duser.language=${user.language}</argLine>
</properties>
</project>
mvn -Duser.language=tr
systemPropertyVariables
才能正常工作。当以非fork模式运行时,Locale
类已经在JVM启动期间使用“默认”语言环境进行了初始化,并且无法被覆盖。 - bedla.czech