wxLANGUAGE_ENGLISH != wxLANGUAGE_ENGLISH
September 3rd, 2010 Begemot Posted in Oбщее
Я зол, я дико зол, надо выпустить пар, но постараюсь без крепких выражений.
Прикрутил полгода назад локализацию, уже есть несколько языков – английский, русский, китайский и голландский. Выпускаю новую версию, получаю через день 5 писем. Мол “поставили новую версию, но интерфейс теперь на каком-то странном языке, наверное на голландском, чо делать?”.
Первым ответил что небось сами переключили случайно, потом понимаю что проблема есть, начинаю разбираться. Изучаю свой код ищу где мог ошибиться. Потом оказывается что идентификаторы языков в wxWidgets (wxLANGUAGE_ENGLISH etc) не константы, а просто enum. И недавно туда всунули новый Боснийский язык, причем не в конец, а середину как и положенно по алфовиту, в результате все что ниже его поплыло.
в результате wxLANGUAGE_ENGLISH, хранившиеся в конфиге, вместо 57го стал 58м, а 57м по стал голландский, который оказался у меня тоже. вот такая хрень.
Пока тупо написал workaround – читаю инфорамцию о языке по другому пути в конфиге, в результате у всех заново спросит какой язык они хотят. Но это лучше чем запустить и увидеть голландский.
Но это не решение проблемы, решения я пока особо не вижу, а вы? Как хранить в конфиге информацию о языке?
September 3rd, 2010 at 6:18 pm
используй двухбуквенное обозначение языка – не ошибёшься (см. wxLocale)
September 4th, 2010 at 4:09 pm
Судя по “роадмапу” 08.08.2008 следующим будет южно-осетинский. Готовься заранее 😉
Я храню в текстовом виде:
// Set locale
wxString deflocale = wxT(“English”);
wxString language = CConfig::Get()->GetParameter(wxT(“/General”), wxT(“Language”), deflocale);
const wxLanguageInfo* pInfo = wxLocale::FindLanguageInfo(language);
т.е. без проблем.
BTW, прозреваю такие грабли будут не только в wx.
September 4th, 2010 at 7:29 pm
Блин похоже только я один почему-то думал что значения языков должны быть константами 🙂
Спасибо, попробую использовать текстовое значение
September 4th, 2010 at 9:39 pm
Посмотрел, как хранятся настройки у меня. “Language=ru_RU” написано в конфиге. Я крут 🙂