Для имплементации <input type="calendar"> типа вот этого:
нужно вывести строку со словом "Today" в текущей locale юзера.
Есть ли у кого-нибудь идея где эту строку можно выцепить?
Для имен дней недели или месяцев в Windows есть соотв. API.
Но вот для "today" чего-то я не нашел...
Здравствуйте, c-smile, Вы писали:
CS>Есть ли у кого-нибудь идея где эту строку можно выцепить? CS>Для имен дней недели или месяцев в Windows есть соотв. API. CS>Но вот для "today" чего-то я не нашел...
А в Windows вообще где-нибудь такая надпись есть? Я что-то не припоминаю.
Здравствуйте, c-smile, Вы писали:
CS>Есть ли у кого-нибудь идея где эту строку можно выцепить? CS>Для имен дней недели или месяцев в Windows есть соотв. API. CS>Но вот для "today" чего-то я не нашел...
Здравствуйте, c-smile, Вы писали:
C>>Кстати, по поводу локализации — вот есть интересный проект: https://fedorahosted.org/fuel CS>Я не понял. Это планируется сделать частью OS? CS>Скажем некий сервис типа ::get_localized_string_for("today"); ?
Примерно так. Они планируют сделать набор po-файлов, которые в Линуксе будут лежать где-нибудь в /usr/share/blahblah, а на Windows их можно с приложением запаковать. А с po-файлами уже с помощью gettext можно работать...
Здравствуйте, Cyberax, Вы писали:
CS>>Скажем некий сервис типа ::get_localized_string_for("today"); ? C>Примерно так. Они планируют сделать набор po-файлов, которые в Линуксе будут лежать где-нибудь в /usr/share/blahblah, а на Windows их можно с приложением запаковать. А с po-файлами уже с помощью gettext можно работать...
Поправь меня, если я не прав, но на не английскоподобной грамматике (русской, к примеру) такие системы лажают.
Здравствуйте, Alexander G, Вы писали:
AG>Здравствуйте, c-smile, Вы писали:
CS>>Есть ли у кого-нибудь идея где эту строку можно выцепить? CS>>Для имен дней недели или месяцев в Windows есть соотв. API. CS>>Но вот для "today" чего-то я не нашел...
AG>Хак:
AG>
Здравствуйте, adontz, Вы писали:
C>>Примерно так. Они планируют сделать набор po-файлов, которые в Линуксе будут лежать где-нибудь в /usr/share/blahblah, а на Windows их можно с приложением запаковать. А с po-файлами уже с помощью gettext можно работать... A>Поправь меня, если я не прав, но на не английскоподобной грамматике (русской, к примеру) такие системы лажают.
Работают. В русском проблемы только с формами множественного числа возникают (их четыре штуки), но они там решены.
S>>Но вот для "today" чего-то я не нашел... >Есть такая хорошая вещь — Wine Это практически исходники Винды!
дык, а что мешает посмотреть, как собственно винда делает?...
там строчка тудэй для календаря грузиццо посредством
int MCLoadString(UINT uID, LPWSTR lpBuffer, int nBufferMax)
{
return CCLoadStringEx(uID, lpBuffer, nBufferMax, GetUserDefaultLangID());
}
int CCLoadStringEx(UINT uID, LPWSTR lpBuffer, int nBufferMax, WORD wLang)
{
return CCLoadStringExInternal(HINST_THISDLL, uID, lpBuffer, nBufferMax, wLang);
}
int CCLoadStringExInternal(HINSTANCE hInst, UINT uID, LPWSTR lpBuffer, int nBufferMax, WORD wLang)
{
PWCHAR pwch;
HRSRC hrsrc;
int cwch = 0;
if (nBufferMax <= 0) return 0; // sanity check
/*
* String tables are broken up into "bundles" of 16 strings each.
*/
hrsrc = FindResourceExRetry(hInst, RT_STRING,
(LPCTSTR)(LONG_PTR)(1 + (USHORT)uID / 16),
wLang);
if (hrsrc) {
pwch = (PWCHAR)LoadResource(hInst, hrsrc);
if (pwch) {
/*
* Now skip over the strings in the resource until we
* hit the one we want. Each entry is a counted string,
* just like Pascal.
*/for (uID %= 16; uID; uID--) {
#ifndef UNIX
pwch += *pwch + 1;
#else// unix version has a WORD first then followed by a padding word
// then the whole string in WCHAR (4 bytes on UNIX)
pwch += *(WORD *)pwch + 1;
#endif
}
#ifndef UNIX
cwch = min(*pwch, nBufferMax - 1);
memcpy(lpBuffer, pwch+1, cwch * sizeof(WCHAR)); /* Copy the goo */#else// length of the string is a WORD not WCHAR
cwch = min(*(WORD *)pwch, nBufferMax - 1);
memcpy(lpBuffer, pwch+1, cwch * sizeof(WCHAR)); /* Copy the goo */#endif
}
}
lpBuffer[cwch] = L'\0'; /* Terminate the string */return cwch;
}
HRSRC FindResourceExRetry(HMODULE hmod, LPCTSTR lpType, LPCTSTR lpName, WORD wLang)
{
HRSRC hrsrc = FindResourceEx(hmod, lpType, lpName, wLang);
// if failed because we couldn't find the resouce in requested lang
// and requested lang wasn't neutral, then try neutral.if (!hrsrc && wLang != MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL))
{
wLang = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);
hrsrc = FindResourceEx(hmod, lpType, lpName, wLang);
}
return hrsrc;
}