Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: fear от Ноябрь 02, 2006, 19:10



Название: QString: cтатические элементы классов не конвертируются tr()
Отправлено: fear от Ноябрь 02, 2006, 19:10
В приведённом ниже примере статический массив mess типа QString инициализируется значениями до загрузки текстового кодека, в результате чего на экран вместо русского текста выводится какая-то лабуда.
Кто-нибуть сталкивался с подобной проблемой? Как её можно решить?

Код:
#include "aaa.h"

int main(int argc, char *argv[])
{
  ...

  QTextCodec *codec = QTextCodec::codecForName("utf8");
  QTextCodec::setCodecForTr(codec);

  ...
  <вывод содержимого AAA::mess на экран>
  ...
}


Файл aaa.h

Код:
class AAA
{
   ...
   static const QString mess[];
   ...
};



Файл aaa.cpp

Код:
  ...
  const QString AAA::mess[] = {QObject::tr("Вася"), QObject::tr("Петя"), QObject::tr("Стёпа")};
  ...


Название: QString: cтатические элементы классов не конвертируются tr()
Отправлено: SLK от Ноябрь 02, 2006, 19:22
добавь QTextCodec::setCodecForCStrings(сodec);


Название: QString: cтатические элементы классов не конвертируются tr()
Отправлено: Dendy от Ноябрь 03, 2006, 01:12
Ну дак, а как иначе... Кто кроме тебя знает что и когда в какую строку запихнуть? Естественно, статические членьІ инициализируются первьІми и чесно запишут билибердень в переменньІе (ибо никто не знает какие кодеки использовать для кирилицьІ).

Создай метод, которьІй будет инициализировать статические переменньІе и вьІзьІвай его после загрузки кодеков.


Название: QString: cтатические элементы классов не конвертируются tr()
Отправлено: Вудруф от Ноябрь 03, 2006, 07:50
Да и то это сработает только при условии, если они не будут константными (const_cast в расчёт не берём как "некрасивый").


Название: QString: cтатические элементы классов не конвертируются tr()
Отправлено: burkav84 от Ноябрь 08, 2006, 22:37
Попробуй:
1. Исходник в котором содержится QObject::tr конверти в UTF-8
2. Применяй вместо QObject::tr Object::trUtf8

добавлено спустя 1 минуту:

 
Цитировать

2. Применяй вместо QObject::tr Object::trUtf8


Пропустил Q:
2. Применяй вместо QObject::tr   QObject::trUtf8


Название: QString: cтатические элементы классов не конвертируются tr()
Отправлено: Alex03 от Ноябрь 09, 2006, 07:50
Примеры из хелпа 3.3.6

Код:

Example of QT_TR_NOOP():
    QString FriendlyConversation::greeting( int greet_type )
    {
        static const char* greeting_strings[] = {
            QT_TR_NOOP( "Hello" ),
            QT_TR_NOOP( "Goodbye" )
        };
        return tr( greeting_strings[greet_type] );
    }

Example of QT_TRANSLATE_NOOP():
    static const char* greeting_strings[] = {
        QT_TRANSLATE_NOOP( "FriendlyConversation", "Hello" ),
        QT_TRANSLATE_NOOP( "FriendlyConversation", "Goodbye" )
    };

    QString FriendlyConversation::greeting( int greet_type )
    {
        return tr( greeting_strings[greet_type] );
    }

    QString global_greeting( int greet_type )
    {
        return qApp->translate( "FriendlyConversation",
                                greeting_strings[greet_type] );
    }