Java 胸腺的月定位
我正在使用Thymeleaf作为模板引擎编写一个spring启动应用程序 需要将显示日期的月份翻译本地化为乌克兰语: 预期结果 切换语言后,将显示10-戡戡戡戡戡戡-2021 18:58:53 一般来说,本地化(EN/UA)效果良好 我尝试了以下技巧,但在切换语言后,日期仍以英语显示(即2021年4月10日18:58:53): 如有任何帮助,我们将不胜感激 当您使用Java 胸腺的月定位,java,html,spring-boot,localization,thymeleaf,Java,Html,Spring Boot,Localization,Thymeleaf,我正在使用Thymeleaf作为模板引擎编写一个spring启动应用程序 需要将显示日期的月份翻译本地化为乌克兰语: 预期结果 切换语言后,将显示10-戡戡戡戡戡戡-2021 18:58:53 一般来说,本地化(EN/UA)效果良好 我尝试了以下技巧,但在切换语言后,日期仍以英语显示(即2021年4月10日18:58:53): 如有任何帮助,我们将不胜感激 当您使用#locale.derman时,这对于一种更常用的语言来说只是一种方便 您可以使用相关的语言标记为任何语言构建区域设置。所以,试试#
#locale.derman
时,这对于一种更常用的语言来说只是一种方便
您可以使用相关的语言标记为任何语言构建区域设置。所以,试试#locale.forLanguageTag('uk')
警告: 对于BCP 47语言标记(由Java的
Locale
使用),乌克兰(国家)是UA
,但乌克兰(语言)是uk
您可以将它们组合成uk UA
,这也是一个有效的BCP 47语言标记。这意味着“乌克兰使用的乌克兰语”
这可能是多余的,您可能只需要uk
。法语(fr
)与加拿大(CA
)相比,法国(fr
)与加拿大(CA
)可能存在显著差异。因此,frca
的意思是“加拿大法语”。我不知道乌克兰以外的其他国家使用的乌克兰语是否有显著差异
如果您正在使用构造函数:
Locale(String language, String country)
那么,就您的目的而言,应该是:
Locale('uk', 'UA') // this is correct
因此,警告是这样的:如果您使用以下选项:
Locale('uk', 'UK') // this is INCORRECT!
那么这是不正确的——它的意思是“在英国所代表的一些未知位置使用的乌克兰语”
有一个在线测试平台,您可以自己测试这些语言标记。如果您使用
,会发生什么情况?我不使用Spring,所以我不知道这是否有效:当您使用#locale.derman
时,这对于一种更常用的语言来说只是一种方便。您可以使用相关的语言标记为任何语言构建区域设置。所以,试试#locale.forLanguageTag('uk')
@WimDeblauwe如果我这样做,我会得到非本地化的日期,比如2021年4月10日18:58:53@andrewjames杰出的您可以使用#locale.forLanguageTag('uk')进行访问!我尝试了这个:并得到了预期的结果:02-жжжжжааа-2021 01:36:35然而,还有另一个问题:这种翻译始终独立于语言转换。你知道如何解决这个问题吗?不是100%确定你的意思-但是如果你想为不同的客户端使用不同的语言,那么你可以在上下文中设置语言环境(而不是硬编码到模板中)。例如,这可以基于用户的配置文件/个人设置。我认为,可能已经有了各种各样的问题和答案。如果你的研究没有找到解决办法,那么你可以问一个新问题。如果我误解了这个问题,也是如此!非常感谢。你的方法很有效。原来是我误用了new java.util.Locale('ua','ua')
,而不是new java.util.Locale('uk','uk')
,没想到英国可能代表乌克兰,而不是英国,所以这段代码很好:
我根据你的评论在我的回答中添加了一个警告。(另请注意,英国是英国的GB
。瑞士是赫尔维蒂亚州的CH
,或类似的州……语言和国家缩写有些令人惊讶。)
@Column(name = "report_date")
@Temporal(TemporalType.DATE)
@DateTimeFormat(pattern = "dd/MM/yyyy")
@NotNull
private Date reportDate;
Locale(String language, String country)
Locale('uk', 'UA') // this is correct
Locale('uk', 'UK') // this is INCORRECT!