Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QTranslator, QString и кодировки... проблемы с русским языком при переводе 
:(
    Опции темы
sergey_85
Дата 21.5.2010, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 17.4.2007
Где: Россия, Челябинск

Репутация: нет
Всего: 1



Привет!

Столкнулся с проблемой при добавлении многоязычности в приложение.

делаю ручной перевод (без tr, т.к. надписи и названия кнопок будут динамические)

делаю так:
Код

  QTranslator trans;
  bool isOk = trans.load("имя_файла_перевода"); //true
   ...

далее, загружаю динамически массив строк для перевода из файла, сливаю все это в QStringList
и затем пытаюсь сделать перевод этих строк через мой QTranslator

Код

QStringList baseWords; //загруженные слова, требующие перевода
QStringList transWords; //здесь будет лежать перевод этих слов, найденных в файле перевода через QTranslator

for(int i=0; i<baseWords.count(); i++)
{
  transWords.append( trans.translate("", baseWords[i].toAscii()) ); //здесь находится перевод слова
}



...и вот тут начинает весь прикол, если в ф-цию translate(...)  в параметре приходит английское слово, например Hello или Privet, то тогда перевод происходит без проблем возвращается перевод на русский к примеру Привет, НО вот если на вход translate(...) приходит русское слово, например Привет, то во-первых, параметр baseWords[i].toAscii() даёт мусор, а перевод не находиться, хотя слово перевода в файле там 100% есть!!!

в main у меня стоят следующие кодеки:
Код

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("windows-1251"));


...еще дополню, что слова для перевода грузятся из файла в кодировке в utf-8, а файл перевода qm в кодировке utf-8

Может кто сталкивался с такой проблемой, думаю что проблема у меня с кодировкой, но где???

использую Qt4.4.3

Спасибо за помощь!




Это сообщение отредактировал(а) sergey_85 - 21.5.2010, 08:15


--------------------
A good design always pays off.
PM MAIL   Вверх
_GRIN_
Дата 22.5.2010, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 6
Всего: 7



1.
Цитата
QString QTranslator::translate ( const char * context, const char * sourceText, const char * disambiguation = 0 ) const   [virtual]
Returns the translation for the key (context, sourceText, disambiguation). If none is found, also tries (context, sourceText, ""). If that still fails, returns an empty string.

следовательно раз на выходе
Цитата
даёт мусор

значит перевод дейстительно 100% есть и он найден и дело в кодировке smile

2.
Цитата
QTextCodec::setCodecForTr(QTextCodec::codecForName("windows-1251"));

Цитата
делаю ручной перевод (без tr, т.к. надписи и названия кнопок будут динамические)

Цитата
void QTextCodec::setCodecForTr ( QTextCodec * c )   [static]
Sets the codec used by QObject::tr() on its argument to c. If c is 0 (the default), tr() assumes Latin-1.
If the literal quoted text in the program is not in the Latin-1 encoding, this function can be used to set the appropriate encoding. For example, software developed by Korean programmers might use eucKR for all the text in the program, in which case the main() function might look like this:
 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     QTextCodec::setCodecForTr(QTextCodec::codecForName("eucKR"));
     ...
 }
Note that this is not the way to select the encoding that the user has chosen. For example, to convert an application containing literal English strings to Korean, all that is needed is for the English strings to be passed through tr() and for translation files to be loaded. For details of internationalization, see Internationalization with Qt.

т.е. так как tr() не используется, то данная настройка кодека ни к чему.

3.По идее установка кодека для С-строк должна правильно настроить QString::toAscii()
Цитата
QByteArray QString::toAscii () const
Returns an 8-bit ASCII representation of the string as a QByteArray.
If a codec has been set using QTextCodec::setCodecForCStrings(), it is used to convert Unicode to 8-bit char; otherwise this function does the same as toLatin1().

но может быть установка кодека не сработала по какой-либо причине.

Я советую попробывать QString::toUtf8() вместо QString::toAscii(). Правда сам с таким не сталкивался, а проверить времени нет.

З.Ы.
Имхо отказ от tr() оправдан только в случае если в процессе эксплуатации добавляется перевод. Если же все строки так и так забиты в коде, то отказ от tr() не оправдан.
Честно говоря интересно подробнее узнать о причине отказа от tr()
smile


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
sergey_85
Дата 23.5.2010, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 17.4.2007
Где: Россия, Челябинск

Репутация: нет
Всего: 1



почему отказался от tr(...) т.к. в программе динамический перевод, немного скажу, динамически грузиться gui (через ui loader), затем грузиться файл перевода и вот так вот идет перевод, фай перевода идет вместе с gui формой..

проблему пока не решил, как что так сразу напишу.

спасибо за помощь!


--------------------
A good design always pays off.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0748 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.