Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: QCasper от Июль 24, 2007, 08:50



Название: Интернационализация QHttp
Отправлено: QCasper от Июль 24, 2007, 08:50
Код:
http::http(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
m_Http = new QHttp(this);
m_Http->get("", &m_Buffer);

connect(m_Http, SIGNAL(requestFinished(int, bool)),
this, SLOT(requestFinished(int, bool)));
}
void http::requestFinished(int id, bool error) {
if (error)
QMessageBox::information(this, "Error",m_Http->errorString());
}


Вот простенький код. Он собирается Qt 4.3.0 под виндой. Проблема заключается в том, что сообщение, которое возвращает m_Http->errorString() вываливается на аглицком, несмотря на то, что qt_ru.qm я загружаю в main.cpp. Но, стоит поменять
Код:
m_Http->errorString()
на
Код:
qApp->translate("QHttp", m_Http->errorString().toAscii().constData())
и сразу видим текст на великом и могучем. Тролли забыли поставить tr? Или я что-то не понимаю...

P.S. вот и я добрался до полтыщи :)


Название: Интернационализация QHttp
Отправлено: SABROG от Июль 24, 2007, 10:21
Я уже ничему не удивляюсь при работе с Qt. Если что-то работает не так, то я пишу всё сам, паралельно отрепортив троллям. Уже не раз было такое, что приходилось тратить целый день, чтобы с нуля переписать кусок кода, который был почти закончен, но из-за багов/недоработок троллей не может быть завершен полностью.

Вот пример наглядный. Есть простенький диалог, на нем QTableWidget с тремя колонками кнопочки перемещения и удаления итемов. Задача такая, в последней колонке сделать в строке combobox. Я не хотел заморачиваться с моделями, т.к. диалог ну очень простой и большой важности для меня не представляет. Чтобы не морочиться с делегатами я стал разбирать пример Color Editor Factory и класс QItemEditorFactory. Поставил на тип QVariant::UInt свой ComboBox. Сделал OpenPersistentEditor, чтобы не тыкать мышкой два раза. Но то что получилось меня не устроило. Дело в том, что из класса Editor'a нет стандартной возможности изменить данные в итеме TableWidget'a, только ComboBox (или любой другой редактор). Данные в итеме меняются только в том случае, когда Editor закрывается, т.е. подтверждается выбор и combobox уничтожается. Это не сочитается с функцией OpenPersistentEditor. Хорошо думаю, пусть юзер тыкает 2 раза по итему, чтобы сделать выбор. Только прикол в том, что QItemEditorFactory работает только с Qt::DisplayRole. А мне надо, чтобы пользователь видел надписи типа "Дом", "Машина, "Работа", а не загадочные enumы типа "1","2","3". Я пихаю эти enum'ы в Qt::UserRole, соответственно в Qt::DisplayRole я вижу текстовые обозначения. Но, как я уже сказал, QItemEditorFactory работает только с Qt::DisplayRole, а именно с Qt::EditRole, но они взаимосвязаны и расклад этого не изменить.

В итоге все это завершилось тем, что я пересел на QTableView + делегаты. А пока пересаживался - потратил еще один день.


Название: Интернационализация QHttp
Отправлено: ритт от Июль 26, 2007, 19:47
errorString заполняется везде таким макаром (кроме "Request aborted"):

QLatin1String(QT_TRANSLATE_NOOP("QHttp", "No server set to connect to")

как думаешь, забыли везде  tr() поставить или всё же в "Request aborted" забыли QT_TRANSLATE_NOOP ?


Название: Интернационализация QHttp
Отправлено: QCasper от Июль 27, 2007, 08:14
Цитата: "ритт"
errorString заполняется везде таким макаром (кроме "Request aborted"):

QLatin1String(QT_TRANSLATE_NOOP("QHttp", "No server set to connect to")

как думаешь, забыли везде  tr() поставить или всё же в "Request aborted" забыли QT_TRANSLATE_NOOP ?


Я исходники не смотрел, но у меня и "Host %1 not found" не переводится


Название: Интернационализация QHttp
Отправлено: ритт от Июль 28, 2007, 01:59
"Host %1 not found" тоже помечен как QT_TRANSLATE_NOOP

честно говоря, я не могу придумать оправдание зачем тролли так поступают с неприоритетными сообщениями...
может, у кого есть мысли? поделитесь.