Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
Алексей |
16.1.2011, 13:32
Сообщение
#1
|
|
Студент ![]() Группа: Участник Сообщений: 37 Регистрация: 29.8.2010 Пользователь №: 1988 Спасибо сказали: 0 раз(а) Репутация: 0
|
Создаю приложение С++, добавляю в него qml-файл для вывода интерфейса:
main.cpp mainwindow.h mainwindow.cpp MainWindow.qml В результате получаю набор квадратиков в место надписи на русском, поэтому хотел узнать как использовать qml файлы с русским интерфейсом и вслучае необходимости интернационализировать их - tr() в них у меня не получилось использовать. Единственный способ который я пока нашёл чтобы выводить в qml русские надписи - это выводить их через параметры - но это довольно трудоёмкое занятие и для некоторых программ которые не будут интернализироваться не имеет никакого смысла, поэтому хотелось бы узнать способ использовать русские символы в самом qml. |
|
|
|
|
igor_bogomolov |
16.1.2011, 14:30
Сообщение
#2
|
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29
|
Link
|
|
|
|
|
Алексей |
16.1.2011, 16:48
Сообщение
#3
|
|
Студент ![]() Группа: Участник Сообщений: 37 Регистрация: 29.8.2010 Пользователь №: 1988 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(igor_bogomolov @ 16.1.2011, 16:30) Link Link не могу разобраться на какой объект и как нужно установить перевод (на само приложение перевод устанавливается и тестовые MessageBox появляются переведёнными), но вот окно из qml файла остаётся непереведённым MainWindow.qml (добавил qsTr) [/expand (добавил QTranslator)][expand=main.cpp] |
|
|
|
|
Litkevich Yuriy |
16.1.2011, 18:23
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(Алексей @ 16.1.2011, 18:48) Link но вот окно из qml файла остаётся непереведённым а на какой язык ты переводил его?
|
|
|
|
|
igor_bogomolov |
16.1.2011, 19:58
Сообщение
#5
|
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29
|
Алексей, судя по кодировке вы делаете это под Windows. Попробуйте сделать следующее:
1. Откройте файл MainWindow.qml в qtcreator что бы была возможность редактировать в виде текста 2. Переходим в меню "Правка"->"Выбор кодировки". Принудительно выставляем Utf8 3. Далее стираем русский текст и пишем его заново без всяких qsTr. Теперь qml файл у нас полностью в utf8 4. Компилируем, запускает. У меня после этого русский текст отобразился правильно. Т.е. отсюда вывод: qml файл должен быть в кодировк utf8 |
|
|
|
|
Алексей |
18.1.2011, 19:19
Сообщение
#6
|
|
Студент ![]() Группа: Участник Сообщений: 37 Регистрация: 29.8.2010 Пользователь №: 1988 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(Litkevich Yuriy @ 16.1.2011, 20:23) Link Цитата(Алексей @ 16.1.2011, 18:48) Link но вот окно из qml файла остаётся непереведённым а на какой язык ты переводил его?извеняюсь (поправить сейчас никак) я сюда скопировал безумный вариант перевода с русского на русский, который родился в безуспешных попытках) но вообще переводил с английского на русский Цитата(igor_bogomolov @ 16.1.2011, 21:58) Link Алексей, судя по кодировке вы делаете это под Windows. Попробуйте сделать следующее: 1. Откройте файл MainWindow.qml в qtcreator что бы была возможность редактировать в виде текста 2. Переходим в меню "Правка"->"Выбор кодировки". Принудительно выставляем Utf8 3. Далее стираем русский текст и пишем его заново без всяких qsTr. Теперь qml файл у нас полностью в utf8 4. Компилируем, запускает. У меня после этого русский текст отобразился правильно. Т.е. отсюда вывод: qml файл должен быть в кодировк utf8 Большое спасибо! заработало (и да под виндос) ПС но вот с интернализацией qml через С++ проблемы не решились даже с utf-8, поправил: MainWindow.qml (добавил qsTr) main.cpp (добавил QTranslator) |
|
|
|
|
Litkevich Yuriy |
18.1.2011, 19:53
Сообщение
#7
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(Алексей @ 18.1.2011, 21:19) Link qsTr("translated text") Цитата(Алексей @ 18.1.2011, 21:19) Link QTextCodec::setCodecForTr(QTextCodec::codecForName("CP-1251")); текст в QML-е в UTF-8 (если я правильно понимаю), а текстовыц кодек установлен в CP-1251.Посмотри в асистенте: распространяется ли действие setCodecForTr на QML? Если да, то причина понятна, если нет, то возможно там свой способ указания есть. |
|
|
|
|
igor_bogomolov |
18.1.2011, 22:12
Сообщение
#8
|
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29
|
Алексей, в аттаче рабочий пример, разбирайся.
Единственное замечание по сборке: важно правильное указание путей. exe, MainWindow.qml и папка i18n должны находиться в одном каталоге, который должен быть назначен как каталог запуска приложения. Об этом придётся позаботиться самому, скопировав, после компиляции, все требуемые файлы в одно место. Надеюсь понятно объяснил
Прикрепленные файлы
|
|
|
|
|
Алексей |
15.3.2011, 12:17
Сообщение
#9
|
|
Студент ![]() Группа: Участник Сообщений: 37 Регистрация: 29.8.2010 Пользователь №: 1988 Спасибо сказали: 0 раз(а) Репутация: 0
|
Насколько заметил в креаторе есть баг с русским буквами (необходимо каждый раз перегружать файл в UTF-8 после первого открытия его в дизайнере в сессии), так что если кто заинтересован поддержим:
Link |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 15.12.2025, 16:28 |