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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Локализация в плагинах (динамических)  (Прочитано 6868 раз)
-=QT=-
Гость
« : Июль 31, 2007, 12:15 »

Ув. Сообщество
Сталкивались ли Вы с локализацией в плагинах? И если можете направьте на путь истинный.
Так как в приложении можно сделать так:

 
Код:
   QTranslator translator;
    if (translationFile.isEmpty())
    {
        translationFile = QLocale::languageToString( QLocale::system().language() );
    }
    translationFile = ":/language/translations/"+translationFile+".qm";
    translator.load( translationFile );
    app.installTranslator( &translator );

А в плагине куда совать это всё.
=========
Windows XP ~ Linux 2.6.x ~QT 4.2.3 (4.3.0 - test)
Записан
QCasper
Гость
« Ответ #1 : Июль 31, 2007, 12:27 »

я в конструктор виджета совал, только экземпляр транслятора надо в heap создавать, а не в стеке, иначе отмирать будет при завершении работы конструктора, и как следствие никакого перевода вы не увидите
Записан
-=QT=-
Гость
« Ответ #2 : Июль 31, 2007, 13:38 »

Большое спасибо.
Только можно кусочек кода этого (одним глазком).

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

 Нашел подобную тему и решение для неё:
http://www.qtcentre.org/forum/f-qt-programming-2/t-plugin-and-internationalization-631.html
Всем спасибо за общение.
Если ктото забацает по другому дайте знать. Очень интересно.
Записан
QCasper
Гость
« Ответ #3 : Июль 31, 2007, 13:45 »

Цитата: "-=QT=-"
Большое спасибо.
Только можно кусочек кода этого (одним глазком).

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

 Нашел подобную тему и решение для неё:
http://www.qtcentre.org/forum/f-qt-programming-2/t-plugin-and-internationalization-631.html
Всем спасибо за общение.
Если ктото забацает по другому дайте знать. Очень интересно.


От вашего мало чем отличается.

Код:
const QList<const char*> c_TranslateFiles = QList<const char*>()	
<< ":xmltranceiver_ru.qm"
<< ":qt_ru.qm"
;

for (int i=0; i<c_TranslateFiles.size(); i++) {
QTranslator *t = new QTranslator(this);
t->load(c_TranslateFiles[i]);
qApp->installTranslator(t);
}


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

 
Цитата: "-=QT=-"
Нашел подобную тему и решение для неё:
http://www.qtcentre.org/forum/f-qt-programming-2/t-plugin-and-internationalization-631.html


Или так...
Записан
-=QT=-
Гость
« Ответ #4 : Июль 31, 2007, 14:27 »

Я с начала тоже пытался сделать ТАК:
Код:
const QList<const char*> c_TranslateFiles = QList<const char*>()   
   << ":xmltranceiver_ru.qm"
   << ":qt_ru.qm"
;

for (int i=0; i<c_TranslateFiles.size(); i++) {
   QTranslator *t = new QTranslator(this);
   t->load(c_TranslateFiles[i]);
   qApp->installTranslator(t);
}

но в строке :
Код:
qApp->installTranslator(t);

он ругался, что нет у него qApp в плагине.
Записан
QCasper
Гость
« Ответ #5 : Июль 31, 2007, 15:19 »

Цитата: "-=QT=-"
он ругался, что нет у него qApp в плагине.


что значит "нет в плагине", и кто именно ругался?
Записан
-=QT=-
Гость
« Ответ #6 : Август 01, 2007, 07:27 »

Цитата: "QCasper"
Цитата: "-=QT=-"
он ругался, что нет у него qApp в плагине.


что значит "нет в плагине", и кто именно ругался?


Ругался компилятор при сборке плагина. Но я подразумеваю что все дело
было в  QTranslator translator;
Записан
ритт
Гость
« Ответ #7 : Август 04, 2007, 02:13 »

я исходил из принципа, что рядом с плагином не буду таскать кучу мелких бинарничков .qm
//у меня в каждом плагине от силы десяток коротких строк наберётся
сделал трансляшки как обычно и дописал ресурс с путями к бинарничкам
затем в плагине инициализируется ресурс и инсталлю его из плагинменеджера

//   ...
   QString baseName = QFileInfo(fileName).baseName();
   if(baseName.startsWith("lib"))
      baseName.remove(0, 3);

   QPluginLoader loader(fileName);
   if(loader.load())
   {
      QTranslator* translator = 0;
      translator = new QTranslator(qApp);
      if(translator->load(":/translations/"+baseName+"_"+QLocale::system().name()))
         qApp->installTranslator(translator);
   }

   QObject* plugin = loader.instance();
//   ...


пара оговорок: каждый плагин у меня используется в роли фабрики - по запросу создаёт и возвращает сущности с определённым функционалом
loader.instance() приходится использовать после qApp->installTranslator(translator);
если кастится и распознаётся, делаю translator->setParent(plugin), иначе delete translator
таким образом при выгрузке плагина я обеспечиваю убийство транслятора

поправьте, если что не так
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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