- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这种方法可以将语言环境设置为波兰语:
void CMeetingScheduleAssistantApp::SetLocale()
{
// https://www.microsoft.com/resources/msdn/goglobal/default.mspx#ISO2
CString strLang[NUM_LANGUAGES] =
{
_T("plk")
// Add more languages here
};
_tsetlocale(LC_ALL, strLang[m_eLanguage - LANGUAGE_ENGLISH]);
}
为简洁起见,我删除了其他语言。现在,当我格式化一个 COleDateTime
对象并显示月份时,比如一月,它显示为:
styczeń
但我想将其显示为:
stycznia
是否有区域设置来调整 COleDateTime::Format
方法或区域设置返回的月份值?
否则我将不得不添加一些手动覆盖。
我想要返回的月份是:
根据 here它指出:
Some languages, such as Finnish, German, Polish, and Russian, have several noun forms. If you plan to use localized names provided by the system, have a linguist check to make sure you are using them in the right context. Windows carries both the nominative and genitive forms of Polish and Russian month names; the form changes depending on the month name's position in the string relative to the day name. Windows returns both forms in a single string separated by a null value. The system carries only one form of each month name or day name for all other languages.
现在,这就是我实际格式化我的日期字符串的方式(因为我支持 40 多种语言,所以有点棘手。所以,(对于英语)我从这个格式字符串开始:
%1 %2!d!-%3!d!
%1
是月份。%2!d!
是第一天值。%3!d!
是第二天值。如果我的约会需要跨越两个月,我有:
%1 %2!d!–%3 %4!d!
%1
是月值。%2!d!
是第一天值。%3
是第二个月值。%3!d!
是第二天值。上面的用法是这样的:
if (datThisMonday.GetMonth() == datEndOfWeek.GetMonth())
{
strDate.FormatMessage(IDS_STR_TPL_OCLM_WEEK,
datThisMonday.Format(_T("%B")), datThisMonday.GetDay(), datEndOfWeek.GetDay());
}
else
{
strDate.FormatMessage(IDS_STR_TPL_OCLM_WEEK2,
datThisMonday.Format(_T("%B")), datThisMonday.GetDay(),
datEndOfWeek.Format(_T("%B")), datEndOfWeek.GetDay());
}
对于波兰语,我各自的格式字符串是:
%2!d!-%3!d! %1
%2!d! %1–%4!d! %3
所以,我可以看到,因为我正在使用 FormatMessage
格式化日期字符串,并且只使用 COleDateTime::Format
方法来解析 month 这可能是问题的原因。
因为我在日期字符串中有两个日期,所以我不能只使用一个日期格式化 API 调用(因为我的日期字符串代表一周跨度)。
所以我检查了:
strDate = datThisMonday.Format(_T("%d %B"));
这没什么区别。所以我改用这个:
SYSTEMTIME sTime;
datThisMonday.GetAsSystemTime(sTime);
GetDateFormat(GetThreadLocale(),
DATE_LONGDATE,
&sTime, _T("d MMMM"),
strDate.GetBuffer(_MAX_PATH), _MAX_PATH);
没有区别。它仍然以与以前相同的方式显示日期。即使它确实正确显示了日期,它也不会考虑来自两个 COleDateTime 对象的日期范围。
困惑。
还试过:
TCHAR szDate[100] = _T("");
GetDateFormatEx(_T("pl"), NULL, &sTime, _T("ddd MMMM"), szDate, 100, NULL);
AfxMessageBox(szDate);
只是不会显示变体。
我能让它显示正确日期的唯一方法是这样的:
GetDateFormatEx(_T("pl"), DATE_LONGDATE, &sTime, NULL, szDate, 100, NULL);
那么月份就对了。现在在我提到的文章中指出:
Windows returns both forms in a single string separated by a null value.
我什至不知道如何访问它。
最佳答案
我还遇到过其他问题,但它们与这个问题不同,所以我仍然会在这里提供我的答案。
首先,我找到了一个 document其中声明您必须在日期中包含 d
才能显示正确的月份版本。
因为我想显示一个日期范围,所以我从这个开始:
模板:%1-%2
日期 1:d
日期 2:d MMMM
然后我格式化日期:
SYSTEMTIME sysTime;
ENSURE(rDate.GetAsSystemTime(sysTime));
GetDateFormatEx(_T("pl"),
NULL,
&sysTime,
strDateFormat,
strDate.GetBuffer(_MAX_PATH), _MAX_PATH, nullptr);
正确显示。如果日期范围跨越两个月,我有:
模板:%1-%2
日期 1:d MMMM
日期 2:d MMMM
效果不错。
关于mfc - 获取 COleDateTime::Format 以返回 "stycznia"而不是波兰月份 "styczeń"的 "January",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53696567/
注意!! 了解波兰语或任何其他具有强烈屈曲性的自然语言,最好是带有格系统(例如德语),将有很大帮助回答这个问题。特别是,波兰语变格系统与其他斯拉夫语言系统非常相似,例如:俄语、捷克语、塞尔维亚语等。
我正在用 C 开发一个嵌入式应用程序,它必须符合 MISRA标准。它将涉及使用包含波兰语符号 (ąęćłńśźż) 的字符串。我尝试使用八进制/十六进制转义序列对它们进行编码: dictionary[
我是一名优秀的程序员,十分优秀!