Russian Qt Forum
Ноябрь 22, 2024, 21:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с тайским и японским языком  (Прочитано 8595 раз)
silverrulezz
Гость
« : Июнь 06, 2013, 13:42 »

Всем привет. Возникла проблема с локализацией в Qt 4.8.4 у конечного пользователя (продукт Windows only).
В основной программе все сделано по фэн-шую с помощью tr и qm файлов (в tr не используеться кириллица!!!). Динамическое изменение работает на ура.
Но у конечного пользователя не отображается то тайский, то японский язык. С ивритом и арабским как ни странно у все все хорошо Улыбающийся

И ради теста написал маленькую утилиту с разными полями ввода Qt и тестовым выводом (http://www74.zippyshare.com/v/39453145/file.html).

В данном случае я тестировал тайский.
На моей машине понятное дело все хорошо (Windows 7 SP1 x64)
http://myprintscreen.com/s/1370443845.72045383.png

У конечных пользователей происходит такое
Windows 7 SP1 x64
http://myprintscreen.com/s/1370444007.21877715.png

Windows XP SP3 x86
http://myprintscreen.com/s/1370445975.99039718.png

Во время тестов на одной из машин сотрудника словили интересный баг (Windows 7 SP1 x64)
http://myprintscreen.com/s/1370444305.72579412.png

Установили тайскую раскладку. Notepad++ и Word 2010 спокойно отображают напечатанный текст. Ни одно из полей ввода Qt (QTextEdit, QLineEdit, QPlainTextEdit) не отображает введенный текст. Но если из Microsoft Word 2010 скопировать тайский текст и вставить в QTextEdit то он отображает. Если после этого вводить тайский, то кракозябры. Если же удаляешь хотя бы один из вставленных символов тайского языка, то последующий ввод на тайском все правильно отображает. Мистика Улыбающийся

В тестовом примере пытался использовать все возможные комбинации с:
Код:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QString::fromUtf8
tr
trUtf8
QTextCodec::codecForName("UTF-8")->toUnicode

но результат один и то же.

И вот сижу и гадаю это я где то накосячил или же это проблема Qt?
Подскажите пожалуйста что нужно сделать что бы у всех все одинаково и нормально отображалось Улыбающийся
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Июнь 06, 2013, 14:04 »

Может в используемом шрифте на клиентских машинах просто нету нужных букв?
Ну и + в Windows XP и ниже поддержка азиатских языков включалась Паели инструментов > Язык > Язык и региональные стандарты.
Записан
silverrulezz
Гость
« Ответ #2 : Июнь 06, 2013, 16:01 »

Все гениальное - просто Улыбающийся LisandreL ты оказался прав! Спасибо.

Мне приходила эта идея, но мне не повезло. Я попытался установить шрифт Courier New, но у сотрудника нечего так и не отобразилось и я пошел искать дальше.
После твоего ответа я модернизировал тестовое приложение добавив:
Код:
QApplication::setFont(QFontDialog::getFont(0, QApplication::font()));

и все стало на свои места. С Arial все заработало.
У меня Qt по дефолту использует шрифт MS Shell Dlg 2 и как оказалось на машине сотрудника он "битый" и не отображает так же как у меня.
В итоге запихну шрифт в ресурсы и буду устанавливать его.

Код:
QFontDatabase fontDatabase; 
fontDatabase.addApplicationFont(":/fonts/yourfont");

Еще раз спасибо!
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #3 : Июнь 06, 2013, 20:40 »

Все гениальное - просто Улыбающийся LisandreL ты оказался прав! Спасибо.
Практика просмотра видео с субтитрами устойчиво привила понимание, что то, что у тебя есть какой-то шрифт, ни разу не означает, что в этом шрифте у тебя есть нужные тебе символы. ^_^
Записан
IMPOMEZIA
Гость
« Ответ #4 : Июнь 07, 2013, 13:46 »

А тайские символы разве не тормозят? процитирую себя
Цитировать
в Qt 4.8 (только Windows) люто тормозят тайские символы, я нашёл причину, это происходит, потому что harfbuzz в qt на каждый чих пытается найти thai.dll http://linux.thai.net/projects/libthai это лечится поиском thai.dll либо выкидыванием всего из функции init_libthai() из src\3rdparty\harfbuzz\src\harfbuzz-thai.c
Записан
silverrulezz
Гость
« Ответ #5 : Июнь 07, 2013, 16:17 »

Есть такое. 30+ языков проверил и только тайский при ресайзе главного окна дает о себе знать.
Сначала скачал отсюда http://www.isobuster.com/translations.php Thai.dll и тормоза пропали.
А потом ради теста создал пустой файл Thai.dll и тоже нормально стало работать Веселый

Спасибо за наводку!
« Последнее редактирование: Июнь 07, 2013, 16:21 от silverrulezz » Записан
satmasterz
Гость
« Ответ #6 : Июль 06, 2013, 19:40 »

Да ну нафиг такие языки кому нужны.
---------------------
http://fitoterapevt.pp.ua/likarski-roslini/kulbaba-likarska-vlastivosti-recepti-likuvannya
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 23.