使用自定义区域设置
本主题提供有关在应用程序中处理 自定义区域设置 的一些说明。 最好在准备所有源代码时考虑到这些注意事项,因为应用程序不会控制是否在操作系统上安装自定义区域设置。
正确处理LOCALE_STIME常量
如果某个较旧的应用程序使用 GetLocaleInfo 获取 LOCALE_STIME指示的过时时间分隔符,则应用程序可能无法分析时间格式。 请记住,将小时与分钟分隔的字符不同于将分钟与秒分隔的字符。
注意
在针对自定义区域设置进行编程时,请记住它们是不寻常的。 几乎 NLS 可用的每个字段必须应对异常行为。 例如,时间格式 12H34'12'' 是合法的,通常可以理解。 然而,许多应用程序都会假设时间分隔符可能会中断缓冲区长度或显示字段。
区分补充区域设置
所有补充区域设置对区域设置标识符使用LOCALE_CUSTOM_UNSPECIFIED常量。 通常, GetLocaleInfo 无法区分补充区域设置,但 GetLocaleInfoEx 可以,因为它使用 区域设置名称 而不是区域设置标识符。 仅当特定补充区域设置是当前选定的用户区域设置时,应用程序才能检索有关该补充区域设置的信息。 然后,应用程序可以调用 GetLocaleInfo 并将 常量LOCALE_USER_DEFAULT 作为区域设置标识符传递。
处理替换区域设置
若要保持 Windows 的可靠性,请记住,应用程序支持的替换区域设置无法修改已替换的区域设置的区域设置标识符。 替换区域设置也不能修改 Windows 的排序属性。
尽管替换区域设置可以更改默认日历,但它必须在可用日历列表中的某个位置保留原始默认值。 例如,泰国 (泰国) 区域设置使用泰国佛教日历作为默认值。 管理员可以创建使用公历本地化日历的替换区域设置。 但是,可用日历列表仍包含泰国佛教历的条目。
对于替换区域设置,应用程序通常应查阅特定于区域设置的信息,而不是根据特定区域设置的知识尝试使用“快捷方式”。 例如,当 GetThreadLocale 检索当前区域设置作为英语 (美国) 时,它实际上可能是应该允许生效的替换区域设置。
自定义日历
应用程序可以自定义公历的日和月名称,但不能自定义非公历的名称。 同样,NLS 不支持创建用户定义的自定义日历。 有关详细信息,请参阅 日期和日历。
处理排序序列
补充区域设置可以使用任何 Microsoft 定义的排序序列。 替换区域设置必须使用与它替换的区域设置相同的排序顺序。 NLS 不支持创建用户定义的排序序列。 有关详细信息,请参阅 在应用程序中处理排序。
本地化自定义区域设置信息
NLS 不提供用于本地化自定义区域设置信息的机制。 因此,用作自定义区域设置的区域设置标识符的常量LOCALE_SLANGUAGE或LOCALE_SLOCALIZEDLANGUAGENAME始终检索与LOCALE_SNATIVELANGNAME或LOCALE_SNATIVELANGUAGENAME关联的值。
相关主题