我正在构建一个多语言网络应用程序。客户要求香港网站以英文显示。不幸的是,“en-HK”在 asp.net 中不是一种有效的文化,所以我尝试使用“zh-hk”来绕过它。但是,这导致日期时间字符串(格式为 dd-MMM-yyyy)以中文显示。
有没有办法用英语显示语言但将其本地化为香港?
我正在构建一个多语言网络应用程序。客户要求香港网站以英文显示。不幸的是,“en-HK”在 asp.net 中不是一种有效的文化,所以我尝试使用“zh-hk”来绕过它。但是,这导致日期时间字符串(格式为 dd-MMM-yyyy)以中文显示。
有没有办法用英语显示语言但将其本地化为香港?
CurrentUICulture
控制本地化资源的选择:将其设置为英语文化(例如“en”或“en-GB”)。
CurrentCulture
控制数字和日期格式等,包括日期和月份名称。将其设置为“en-GB”,或者将其设置为基于“en-GB”的自定义文化,但可以进行任何修改(例如,您的帖子建议您希望“-”作为日期分隔符:dd-MMM-yyyy )。
这些都不会影响时区等,所以我真的不明白为什么仅仅使用“en-GB”会成为一个问题。
我对香港了解不多,但考虑到它最近的历史,那里使用的英语语言惯例可能是基于英国英语而不是美国英语。香港使用的短日期格式(在此处记录在 Wikipedia 上)似乎支持这一断言:它是日/月/年(英国风格,与美国风格的月/日/年不同)。
您始终可以为 en-HK 创建自定义文化(Windows 7 及更高版本支持)。这是通过使用CultureAndRegionInfoBuilder类完成的,如果我上面的评论是正确的,它将允许您基于 en-GB 文化创建您的 en-HK CultureInfo。如果您愿意,这将允许您自定义 CultureInfo 的一些元素(更重要的是,如果您知道香港的不同之处)。通过将您的自定义文化基于 en-GB,您的日期格式将以英文显示月份名称。但是创建一种自定义文化可能是矫枉过正。
更简单地说,您可以使用 en-GB Culture 名称。您的应用程序可能不会使用一些不适用于香港的 en-GB 文化中更神秘的东西。
注意:如果有任何混淆,因为日期格式Thread.CurrentUICulture
没有任何效果 - 它完全取决于Thread.CurrentCulture
设置的内容(并且必须是特定的文化,不像 CurrentUICulture 中性文化,如“en”是可以的) .
据我所知,你不能自己组合你的文化字符串(意思是 en-HK 是无效的,除非它在 .NET 中列出)。
但是,它们每个线程有两种不同的文化设置:
System.Threading.Thread.CurrentThread.CurrentCulture
System.Threading.Thread.CurrentThread.CurrentUICulture
两者都控制不同的事物。也许这可以让您使用英语作为语言,但使用香港作为本地化格式。
您还可以覆盖日期的格式等,也许可以找到更好的文化信息,为您提供所需的日期格式。