Где почитать, как QLabel на форму вывести на русском?
Когда-то я брал книжку Земскова по Qt 4 — и егошные примеры все прекрасно работали.
Сегодня после долгого перерыва имеем:
— Windows 7
— Qt 5.4.2 — бесплатная
— QtCretor 3.4.1 c MinGW 4.9.1
В Creatore в редакторе установлена по умолчанию кодировка Windows-1251.
Так осталось с давних времен, чтобы не перебивать комментарии.
Проблема:
а) в неправильной кодировке ?
б) в неправильных вызовах ?
Скорее всего — последнее.
Где прочитать, как правильно?
В Шлее все примеры на английском, а глава о локализации — про глобальные проблемы перевода всех строк в приложении.
Справка в QtCreator — примера подобного не обнаружил.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Проблема: LVV>а) в неправильной кодировке ? LVV>б) в неправильных вызовах ?
Преобразовать всё, что угодно в Qt не проблема, но это неправильно с точки зрения идеологии кроссплатформенности, которая лежит в основе этой библиотеки. Возьмите любой автоконвертор и массово преобразуйте сразу все файлы проекта или проектов из кодировки CP1251 в UTF8. И в настройках Qt Creator тоже смените кодировку на UTF8.
Здравствуйте, LaptevVV, Вы писали:
LVV> QTextCodec *codec = QTextCodec::codecForName("CP1251"); LVV> QTextCodec::setCodecForLocale(codec); // -- тут в прежней проге стояло setCodecForTr(codec)
И ведь не зря стояло setCodecForTr...
LVV> Где прочитать, как правильно?
Перекодировать все из кодировки прошлого века в UTF-8. Ну или костылить вида:
QTextCodec::setCodecForLocale + QTextCodec::setCodecForTr + QTextCodec::setCodecForCStrings
Управляю вселенной не привлекая внимания санитаров.
Здравствуйте, velkin, Вы писали:
V>Здравствуйте, LaptevVV, Вы писали:
LVV>>Проблема: LVV>>а) в неправильной кодировке ? LVV>>б) в неправильных вызовах ?
V>Преобразовать всё, что угодно в Qt не проблема, но это неправильно с точки зрения идеологии кроссплатформенности, которая лежит в основе этой библиотеки. Возьмите любой автоконвертор и массово преобразуйте сразу все файлы проекта или проектов из кодировки CP1251 в UTF8. И в настройках Qt Creator тоже смените кодировку на UTF8.
И не забыть добавить UTF-8 BOM в файлы, иначе MS VC компилятор будет глючить.
Здравствуйте, Denwer, Вы писали:
D> V>Здравствуйте, LaptevVV, Вы писали:
D> LVV>>Проблема: D> LVV>>а) в неправильной кодировке ? D> LVV>>б) в неправильных вызовах ?
D> V>Преобразовать всё, что угодно в Qt не проблема, но это неправильно с точки зрения идеологии кроссплатформенности, которая лежит в основе этой библиотеки. Возьмите любой автоконвертор и массово преобразуйте сразу все файлы проекта или проектов из кодировки CP1251 в UTF8. И в настройках Qt Creator тоже смените кодировку на UTF8.
D> И не забыть добавить UTF-8 BOM в файлы, иначе MS VC компилятор будет глючить.
Здравствуйте, avbochagov, Вы писали:
D>> И не забыть добавить UTF-8 BOM в файлы, иначе MS VC компилятор будет глючить.
A>А какие глюки? Как проявляются?
A>Я просто, наооборот, всегда выкидываю BOM...
Не может автоматом распознать что файл действительно UTF-8, со всеми вытекающими.
LVV>> QTextCodec *codec = QTextCodec::codecForName("CP1251"); LVV>> QTextCodec::setCodecForLocale(codec); // -- тут в прежней проге стояло setCodecForTr(codec) AB>И ведь не зря стояло setCodecForTr...
Для прежних версий — не зря. А для новой — пишет ошибку компиляции, что данный метод не является членом класса QTextCodec.
Дальше я просто не полез копаться. LVV>> Где прочитать, как правильно? AB>Перекодировать все из кодировки прошлого века в UTF-8. Ну или костылить вида: AB>QTextCodec::setCodecForLocale + QTextCodec::setCodecForTr + QTextCodec::setCodecForCStrings
Я внял вашему совету и все перекодировал.
Установка кодека в результате просто не понадобились
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
V>Преобразовать всё, что угодно в Qt не проблема, но это неправильно с точки зрения идеологии кроссплатформенности, которая лежит в основе этой библиотеки. Возьмите любой автоконвертор и массово преобразуйте сразу все файлы проекта или проектов из кодировки CP1251 в UTF8. И в настройках Qt Creator тоже смените кодировку на UTF8.
Я так и сделал — спасибо.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
D>И не забыть добавить UTF-8 BOM в файлы, иначе MS VC компилятор будет глючить.
Креэйтор автоматом сам вставляет.
И компилирую я не студийным компилятором, и мингвшным.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Где почитать, как QLabel на форму вывести на русском?
LVV>В main() пишу: LVV>
LVV> w.setWindowTitle(QObject::tr("HERE YOU SHOULD USE ONLY ASCII <= 127"));
LVV>
LVV>Проблема: LVV>б) в неправильных вызовах ? LVV>Скорее всего — последнее.
Обычно все строки внутри приложения (даже если вы не реализовываете поддержку нескольких языков) пишутся на английском. Причём можно на техническом. Далее, собирается файл локализации и подключается к приложению. Файл можно зашить в ресурсы.
Лично я, как правило, делаю два перевода:
Eng -> Ru // что понятно
Eng -> Eng // что позволяет лингвистам делать корректные тексты, без ковыряния в исходниках
Кратко:
1) lupdate пробегается по проекту и генерирует специальные xml файлы, которые умеет принимать linguist
2) linguist сохраняет перевод в виде "скомпилированного" файла, в qt-шном формате (.qm)
3) .qm файл можно зашить в ресурсы
4) В приложении, через QTranslator, грузим "скомпилированную" локализацию.
SaZ>Обычно все строки внутри приложения (даже если вы не реализовываете поддержку нескольких языков) пишутся на английском. Причём можно на техническом. Далее, собирается файл локализации и подключается к приложению. Файл можно зашить в ресурсы.
SaZ>Лично я, как правило, делаю два перевода: SaZ>
SaZ>Eng -> Ru // что понятно
SaZ>Eng -> Eng // что позволяет лингвистам делать корректные тексты, без ковыряния в исходниках
SaZ>
Спасибо. У меня проще — прога нужна только здесь на местном уровне.
Поэтому "тяжелую артиллерию" привлекать не хотелось. SaZ>http://doc.qt.io/qt-5/qtlinguist-index.html SaZ>http://doc.qt.io/qt-5/internationalization.html SaZ>http://doc.qt.io/qt-5/qtranslator.html
Спасибо. SaZ>Кратко: SaZ>1) lupdate пробегается по проекту и генерирует специальные xml файлы, которые умеет принимать linguist SaZ>2) linguist сохраняет перевод в виде "скомпилированного" файла, в qt-шном формате (.qm) SaZ>3) .qm файл можно зашить в ресурсы SaZ>4) В приложении, через QTranslator, грузим "скомпилированную" локализацию.
Спасибо.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
LVV>Где почитать, как QLabel на форму вывести на русском? LVV>Когда-то я брал книжку Земскова по Qt 4 — и егошные примеры все прекрасно работали. LVV>Сегодня после долгого перерыва имеем: LVV>- Windows 7 LVV>- Qt 5.4.2 — бесплатная LVV>- QtCretor 3.4.1 c MinGW 4.9.1 LVV>В Creatore в редакторе установлена по умолчанию кодировка Windows-1251. LVV>Так осталось с давних времен, чтобы не перебивать комментарии.
LVV>Делаю простую форму из QDialog. LVV>В main() пишу: LVV>
LVV>Проблема: LVV>а) в неправильной кодировке ? LVV>б) в неправильных вызовах ? LVV>Скорее всего — последнее. LVV>Где прочитать, как правильно? LVV>В Шлее все примеры на английском, а глава о локализации — про глобальные проблемы перевода всех строк в приложении. LVV>Справка в QtCreator — примера подобного не обнаружил.
Во первых используйте нормальную кодировку UTF-8!
Виндовые кодировки должны умереть! На английской Венде вечный трах в мозг с 1251 — нормального способа эту проблему решить нет!
Если текст вшит в программу — то все пропало, если внешние файлы — спасает перекодеровка текста в UTF-8.
Здравствуйте, omgOnoz, Вы писали:
O>Во первых используйте нормальную кодировку UTF-8! O>Виндовые кодировки должны умереть! На английской Венде вечный трах в мозг с 1251 — нормального способа эту проблему решить нет! O>Если текст вшит в программу — то все пропало, если внешние файлы — спасает перекодеровка текста в UTF-8. O>Возможны также проблемы с фонтами.
Спасибо.
Как я тут уже писал — просто перегнал весь код в UTF-8.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Denwer, Вы писали: D>И не забыть добавить UTF-8 BOM в файлы, иначе MS VC компилятор будет глючить.
И не забыть убрать UTF-8 BOM, иначе MS VC компилятор будет глючить.
Обоснование следующее:
1. По умолчанию, т.е. если BOM нет, MS VC считает что кодировка файла исходника виндовая
А если BOM есть, то кодировка файла UTF-8
2. Для основного кода это без разницы, т.к. латиница кодируется одинаково в UTF-8 и Windows-1251
3. Но для строк "кириллицей"...
Если MS VC думает, что кодировка файла Win-1251, то он считает, что символы в строке написаны уже в верной кодировке, и записывает их в код как есть. Поэтому русские буквы, записанные в исходнике двухбайтовыми символами UTF-8 попадут в код так же двумя байтами.
Но если MS VC думает, что кодировка файла UTF-8, то он во время компиляции переводит символы в строке в кодировку Windows-1251.
И тогда русские буквы, записанные в исходнике двухбайтовыми символами UTF-8 попадут в код одним байтом в кодировке Windows-1251. Но Qt об этом не знает (если специально ему не сказать).
И тогда в QString string = "русский текст"; будут записаны крокозябры.
Здравствуйте, Denwer, Вы писали:
D>Просто строковые константы нужно использовать как положено: D>QString string = QStringLiteral("русский текст");
QStringLiteral — это лямбда, который позволяет избежать вызова конструктора QString с сопутствующими конвертациями каждый раз, при создании переменной. Никакого отношения к кодировке исходников она не имеет.