![]() |
|
|
![]()
|
|
| kuvshinka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
#include <QTextCodec>
... QTextCodec::setCodecForTr( QTextCodec::codecForName( "Windows-1251" ) ); ... QStringList strings; ... strings.append("ПрИвеТ ВсЕм"); ... QTableWidgetItem* data = new QTableWidgetItem(); data->setText(strings.at(1) ); Table1->setItem(1, 1, data); почему текст выводится иероглифами? подскажите пож-та на вышеуказанном примере как программно это поправить? |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Что трудно другие темы по этому поводу просмотреть?
http://forum.vingrad.ru/forum/topic-340661...шрифт.html |
|||
|
||||
| kuvshinka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
собственно вся проблема заключается в том как безошибочно применить метод tr() к QStringList-у - либо при заполнении переменной-строки русским текстом или при ее выводе в таблицу (не знаю где вернее)...
Это сообщение отредактировал(а) kuvshinka - 4.11.2011, 19:27 |
|||
|
||||
| math64 |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
tr() предназначен для перевода. Когда переводить - без разницы, но текст предпочтитель но должен быть латиницей
Если перевод делается не сразу применяется макрос QT_TR_NOOP()
в проект добавляем TRANSLATIONS += project_ru.ts запускаем lupdate и Linguist, делаем переводы строк, получаем файл project_ru.ts:
и с помощью lrelease файл project_ru.qm В main() загружаем файл полученный файл переводов
Если не хочешь возиться с файлом перевода - используй QTextCodec* win1251 = QTextCodec::codecForName( "Windows-1251" ); // Соответственно кодировке исходников QString str = win1251->toUnicode("Строка"); (предпочтительно, но много писать) или QTextCodec::setCodecForCStrings(win1251); // один раз в main() QString str("Строка"); //используется codecForCStrings для перекодировки Это сообщение отредактировал(а) math64 - 7.11.2011, 12:27 |
||||||
|
|||||||
| kuvshinka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
понятнок дело что с массивом типа static char* проблем применения метода tr нет - он как раз и требует параметр такого типа...а как корректно использовать tr для QStringList-a:
Это сообщение отредактировал(а) kuvshinka - 5.11.2011, 21:44 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
tr() нужно использовать для перевода, т.е. создавать словарь с помощью Linguist и. т. д. Переводят обычно с английского, но это не обязательно.
Для перекодирования используются кодеки - когда строка помещена QStringList она уже перекодирована, возможно с неправильной кодировкой - и вернуть правильную кодировку непросто, а иногда и невозможно, если отсутствующие символы заменены на '?' Как перекодировать уже отвечено в ссылке на тему, которую я дал в первом ответе. |
|||
|
||||
| bsa |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
kuvshinka, вообще-то делать надо так:
Ты просто пойми как это все работает: lupdate сканирует исходный текст на предмет вызовов tr(), QT_TR_NOOP() и пр., текст заключенный в скобках помещается в ts файл... Кстати, QT_TR_NOOP() вообще определен как:
Метод tr() принимает в качестве первого параметра ASCII-строку исходного текста. Чтобы одинаковые фразы из разных контекстов не путались, то любому тексту соответствует контекст, в случае Qt класса - имя класса, которому принадлежит метод, вызывающий tr() (т.е. для QWidget контекст будет "QWidget", для MyWidget - "MyWidget"). Так как QCoreApplication::translate необходимо передать несколько параметров, среди которых исходный текст, контекст, специальный комментарий программиста (используется для разделения одинаковых фраз внутри контекста), а так же переменная (обычно), которой определяется множественное значение фразы: 1 байт, 2 байта, 6 байтов. Именно поэтому следует делать исходный текст на английском:
Если ты делаешь так:
Это сообщение отредактировал(а) bsa - 7.11.2011, 11:21 |
||||||||
|
|||||||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
Кстати, полезной опцией будет CODECFORTR. Если прописать его в *.pro файле, то в *.ts добавится тег <default> с указанной кодировкой. Это можно сделать и командой -codecfortr для lupdate, но мне сегодня показалось, что ключ работает как-то по-другому, нежели прямое указание кодека в *.pro - выходные *.ts отличались по содержимому русскоязычных строк (в одном случае абракадабра, в другом все ОК, но кодировка в обоих случаях заданная мной).
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
spyswamp, в отличие от новичков, профессионалы не используют кириллицу в коде. Я уже указал выше причину.
|
|||
|
||||
| _GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
оффтоп.
bsa, уж х.з. какой из меня профи, но некоторое время назад мы (в нашем проекте) решили сразу писать кирилицей (обёрнутой в trUtr8() ) Т.к. в текущий момент клиенты все в России, а при необходимости вывода за рубеж подключим лингвист - а до тех пор с лингвистом даже возиться не приходится. Проект представляет из себя программный комплекс с компонентами под винду и линух - использование везде utf-8 - силовое решение начальства (имхо правильное) =) -------------------- Дорогу осилит идущий |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
bsa, в отличии от новичков, профессионал должен уметь решать любую проблему, даже если ему в руки попал код с мегатонной русских строк. Лично я сам не фанат русского языка в ПО в принципе.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
spyswamp, _GRIN_, не цепляйтесь к словам "новичок" и "профессионал". Я их употребил исключительно для придания веса своему посту, дабы неокрепшие умы не принимали скорых решений в пользу великого и могучего в коде.
|
|||
|
||||
| _GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
=) - да я и не цепляюсь - долгое время (проект развивается, продаётся и поддерживается уже несколько лет) мы классически в исходниках на английском писали, затем сами же себя переводили - дополнительная работа с лингвистом. Затем пришла светлая мысль - нафига.
Я, признаться, долго отбрыкивался, но потом до меня дошло, что при выходе на зарубежного пользователя мы ничего не потеряем (лингвист-то и tr никто не убирает), а вот в текущий момент лишнюю работу делать не придётся. Вот я и решил поделиться =) Это сообщение отредактировал(а) _GRIN_ - 9.11.2011, 12:42 -------------------- Дорогу осилит идущий |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
_GRIN_, а как решаете проблему с множественными формами слов? Или их у вас вообще нет?
Это сообщение отредактировал(а) bsa - 9.11.2011, 13:26 |
|||
|
||||
| _GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
bsa, стыдно признаться. но я не понимаю о чём ты?
Повседневные мои задачи связанные с топиком выглядят примерно так: есть текст который надо отобразить - на русском он выглядет так "Состояние сервера №1 - Норма" (плюс идентификатор сервера и состояние должены меняться) в исходнике выглядет так:
в случае если будет иностранный заказчик (допустин требуется английский) в лингвисте переведём так "State of server #%1 - %2" "Normal" Это сообщение отредактировал(а) _GRIN_ - 9.11.2011, 14:41 -------------------- Дорогу осилит идущий |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |