From bcb704366cb5e333a626c18c308c7e0448a8e69f Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdenetwork@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kopete/plugins/translator/Makefile.am | 25 ++ .../plugins/translator/kopete_translator.desktop | 128 +++++++ .../translator/kopete_translator_config.desktop | 127 +++++++ kopete/plugins/translator/translatorchatui.rc | 9 + kopete/plugins/translator/translatordialog.cpp | 44 +++ kopete/plugins/translator/translatordialog.h | 51 +++ kopete/plugins/translator/translatorguiclient.cpp | 100 +++++ kopete/plugins/translator/translatorguiclient.h | 63 ++++ kopete/plugins/translator/translatorlanguages.cpp | 101 ++++++ kopete/plugins/translator/translatorlanguages.h | 94 +++++ kopete/plugins/translator/translatorplugin.cpp | 402 +++++++++++++++++++++ kopete/plugins/translator/translatorplugin.h | 113 ++++++ kopete/plugins/translator/translatorprefs.cpp | 52 +++ kopete/plugins/translator/translatorprefsbase.ui | 191 ++++++++++ kopete/plugins/translator/translatorui.rc | 12 + 15 files changed, 1512 insertions(+) create mode 100644 kopete/plugins/translator/Makefile.am create mode 100644 kopete/plugins/translator/kopete_translator.desktop create mode 100644 kopete/plugins/translator/kopete_translator_config.desktop create mode 100644 kopete/plugins/translator/translatorchatui.rc create mode 100644 kopete/plugins/translator/translatordialog.cpp create mode 100644 kopete/plugins/translator/translatordialog.h create mode 100644 kopete/plugins/translator/translatorguiclient.cpp create mode 100644 kopete/plugins/translator/translatorguiclient.h create mode 100644 kopete/plugins/translator/translatorlanguages.cpp create mode 100644 kopete/plugins/translator/translatorlanguages.h create mode 100644 kopete/plugins/translator/translatorplugin.cpp create mode 100644 kopete/plugins/translator/translatorplugin.h create mode 100644 kopete/plugins/translator/translatorprefs.cpp create mode 100644 kopete/plugins/translator/translatorprefsbase.ui create mode 100644 kopete/plugins/translator/translatorui.rc (limited to 'kopete/plugins/translator') diff --git a/kopete/plugins/translator/Makefile.am b/kopete/plugins/translator/Makefile.am new file mode 100644 index 00000000..7ab367f9 --- /dev/null +++ b/kopete/plugins/translator/Makefile.am @@ -0,0 +1,25 @@ +METASOURCES = AUTO + +AM_CPPFLAGS = $(KOPETE_INCLUDES) $(all_includes) + +kde_module_LTLIBRARIES = kopete_translator.la kcm_kopete_translator.la + +kopete_translator_la_SOURCES = translatorplugin.cpp \ + translatordialog.cpp translatorguiclient.cpp translatorlanguages.cpp +kopete_translator_la_LDFLAGS = -module -no-undefined $(KDE_PLUGIN) $(all_libraries) +kopete_translator_la_LIBADD = ../../libkopete/libkopete.la $(LIB_KIO) + +kcm_kopete_translator_la_SOURCES = translatorprefsbase.ui translatorprefs.cpp translatorlanguages.cpp +kcm_kopete_translator_la_LDFLAGS = -module -no-undefined $(KDE_PLUGIN) $(all_libraries) +kcm_kopete_translator_la_LIBADD = ../../libkopete/libkopete.la $(LIB_KUTILS) + +service_DATA = kopete_translator.desktop +servicedir = $(kde_servicesdir) + +kcm_DATA = kopete_translator_config.desktop +kcmdir = $(kde_servicesdir)/kconfiguredialog + +mydatadir = $(kde_datadir)/kopete_translator +mydata_DATA = translatorui.rc translatorchatui.rc + + diff --git a/kopete/plugins/translator/kopete_translator.desktop b/kopete/plugins/translator/kopete_translator.desktop new file mode 100644 index 00000000..5da3f373 --- /dev/null +++ b/kopete/plugins/translator/kopete_translator.desktop @@ -0,0 +1,128 @@ +[Desktop Entry] +Type=Service +X-Kopete-Version=1000900 +Icon=locale +ServiceTypes=Kopete/Plugin +X-KDE-Library=kopete_translator +X-KDE-PluginInfo-Author=Duncan Mac-Vicar Prett +X-KDE-PluginInfo-Email=duncan@kde.org +X-KDE-PluginInfo-Name=kopete_translator +X-KDE-PluginInfo-Version=0.8.0 +X-KDE-PluginInfo-Website=http://kopete.kde.org +X-KDE-PluginInfo-Category=Plugins +X-KDE-PluginInfo-Depends= +X-KDE-PluginInfo-License=GPL +X-KDE-PluginInfo-EnabledByDefault=false +Name=Translator +Name[ar]=المترجم +Name[be]=Перакладнік +Name[bg]=Автоматичен превод +Name[bn]=অনুবাদক +Name[br]=Troer +Name[bs]=Prevodilac +Name[ca]=Traductor +Name[cs]=Překladač +Name[cy]=Cyfieithydd +Name[da]=Oversætter +Name[de]=Übersetzer +Name[el]=Μεταφραστής +Name[eo]=Tradukilo +Name[es]=Traductor +Name[et]=Tõlketeenus +Name[eu]=Itzultzailea +Name[fa]=مترجم +Name[fi]=Kääntäjä +Name[fr]=Traducteur +Name[ga]=Aistritheoir +Name[gl]=Traductor +Name[he]=מתרגם +Name[hi]=अनुवादक +Name[hr]=Prevoditelj +Name[hu]=Tolmács +Name[is]=Þýðandi +Name[it]=Traduttore +Name[ja]=翻訳ソフト +Name[ka]=მთარგმნელი +Name[km]=កម្មវិធី​បកប្រែ +Name[lt]=Vertėjas +Name[mk]=Преведувач +Name[nb]=Oversetter +Name[nds]=Översetter +Name[ne]=अनुवादक +Name[nl]=Vertaler +Name[nn]=Omsetjar +Name[pa]=ਅਨੁਵਾਦ +Name[pl]=Tłumacz +Name[pt]=Tradutor +Name[pt_BR]=Tradutor +Name[ro]=Traducător +Name[ru]=Переводчик +Name[se]=Jorgaleaddji +Name[sk]=Preklad +Name[sl]=Prevajalec +Name[sr]=Преводилац +Name[sr@Latn]=Prevodilac +Name[sv]=Översättning +Name[ta]=மொழிமாற்றி +Name[tg]=Тарҷумон +Name[tr]=Çevirmen +Name[uk]=Перекладач +Name[uz]=Tarjimon +Name[uz@cyrillic]=Таржимон +Name[wa]=Ratournaedje +Name[zh_CN]=翻译家 +Name[zh_HK]=翻譯者 +Name[zh_TW]=翻譯器 +Comment=Chat with foreign buddies in your native language +Comment[ar]=تحدث مع أصدقائك اﻷجانب بلغتك اﻷم +Comment[be]=Гутарка з замежнікамі на роднай мове +Comment[bg]=Приставка за превод от един език на друг в реално време +Comment[bn]=আপনার স্থানীয় ভাষাতে বিদেশী বন্ধুর সঙ্গে চ্যাট করুন +Comment[bs]=Razgovarajte sa prijateljima iz inostranstva u vašem jeziku +Comment[ca]=Feu un xat amb els vostres amics en la vostra llengua nativa +Comment[cs]=Pokecejte si s cizinci ve svém rodném jazyku +Comment[cy]=Sgwrsio â chyfeillion tramor yn eich iaith gyntaf +Comment[da]=Chat med udenlandske venner på dit eget sprog +Comment[de]=Chatten mit fremdsprachigen Freunden in der eigenen Muttersprache +Comment[el]=Συνομιλήστε με ξένους φίλους στη μητρική σας γλώσσα +Comment[es]=Charle con compañeros extranjeros en su lengua +Comment[et]=Vestlemine välismaiste semudega enda emakeeles +Comment[eu]=Atzerriko lagunekin zure ama-hizkuntzan hitz egin +Comment[fa]=گپ زدن با دوستان خارجی با زبان مادریتان +Comment[fi]=Juttele ulkomaisten kaveriesi kanssa omalla kielelläsi +Comment[fr]=Discutez avec des étrangers dans votre langue natale +Comment[gl]=Fala con amigos extranxeiros na túa lingua nativa +Comment[he]=שוחח עם חברים מחו"ל בשפת האם שלך +Comment[hi]=आपकी मातृ भाषा में विदेशी बड्डीस से गपशप करें +Comment[hr]=Razgovo sa stranim prijateljima na vašem materinjem jeziku +Comment[hu]=Csevegés más nyelvet beszélőkkel a saját nyelven +Comment[is]=rabbaðu við útlenda félaga á þínu máli +Comment[it]=Parla con un tuo amico straniero nella tua lingua +Comment[ja]=母国語のままで他国の人とチャットする +Comment[ka]=უცხოელ მეგობრებთან საკუთარ ენაზე საუბარი +Comment[kk]=Шетел достарымен өз тіліңізде әңгімелесу +Comment[km]=ជជែក​កំសាន្ត​ជាមួយ​សម្លាញ់​ជនជាតិ​បរទេស ដោយ​ប្រើ​ភាសា​កំណើត​របស់​អ្នក +Comment[lt]=Bendraukite su bičiuliais iš užsieno gimtąja kalba +Comment[mk]=Разговарајте со странски пријатели на вашиот мајчин јазик +Comment[nb]=Snakk med utenlandske venner på ditt eget språk +Comment[nds]=Klöön in Dien Moderspraak mit frömdspreken Frünnen +Comment[ne]=तपाईँको मातृ भाषामा विदेशी साथीसँग कुराकानी गर्नुहोस् +Comment[nl]=Praat met vrienden uit andere landen in uw eigen taal +Comment[nn]=Prat med utanlandske venner på ditt eige språk +Comment[pl]=Umożliwia rozmowę z zagranicznymi znajomymi w Twoim macierzystym języku +Comment[pt]=Converse com amigos estrangeiros na sua língua nativa +Comment[pt_BR]=Conversa com colegas estrangeiros em seu idioma nativo +Comment[ru]=Позволяет говорить с иностранцами на вашем родном языке +Comment[se]=Čátte olgoriikkalaš ustibiiguin iežat gillii +Comment[sk]=Rozprávajte sa s vašimi priateľmi v cudzine v inom jazyku +Comment[sl]=Klepetajte s prijatelji iz tujine v svojem domačem jeziku +Comment[sr]=Ћаскајте са вашим другарима странцима на вашем матерњем језику +Comment[sr@Latn]=Ćaskajte sa vašim drugarima strancima na vašem maternjem jeziku +Comment[sv]=Chatta med utländska kompisar på ditt modersmål +Comment[ta]=வெளிநாட்டு நபருடன் உங்கள் சொந்த மொழியில் அரட்டை அடிக்க முடியும் +Comment[tg]=Чат бо дӯстони хориҷӣ дар забони модарии шумо +Comment[tr]=Anadilinizdeki arkadaşlarla sohbet edin +Comment[uk]=Розмова з іноземними друзями на вашій рідній мові +Comment[zh_CN]=以您的母语与外国朋友聊天 +Comment[zh_HK]=以您的母語和外地的伙伴聊天 +Comment[zh_TW]=用您的母語跟外國朋友聊天 diff --git a/kopete/plugins/translator/kopete_translator_config.desktop b/kopete/plugins/translator/kopete_translator_config.desktop new file mode 100644 index 00000000..288709c4 --- /dev/null +++ b/kopete/plugins/translator/kopete_translator_config.desktop @@ -0,0 +1,127 @@ +[Desktop Entry] +Icon=locale +Type=Service +ServiceTypes=KCModule + +X-KDE-ModuleType=Library +X-KDE-Library=kopete_translator +X-KDE-FactoryName=TranslatorConfigFactory +X-KDE-ParentApp=kopete_translator +X-KDE-ParentComponents=kopete_translator + +Name=Translator +Name[ar]=المترجم +Name[be]=Перакладнік +Name[bg]=Автоматичен превод +Name[bn]=অনুবাদক +Name[br]=Troer +Name[bs]=Prevodilac +Name[ca]=Traductor +Name[cs]=Překladač +Name[cy]=Cyfieithydd +Name[da]=Oversætter +Name[de]=Übersetzer +Name[el]=Μεταφραστής +Name[eo]=Tradukilo +Name[es]=Traductor +Name[et]=Tõlketeenus +Name[eu]=Itzultzailea +Name[fa]=مترجم +Name[fi]=Kääntäjä +Name[fr]=Traducteur +Name[ga]=Aistritheoir +Name[gl]=Traductor +Name[he]=מתרגם +Name[hi]=अनुवादक +Name[hr]=Prevoditelj +Name[hu]=Tolmács +Name[is]=Þýðandi +Name[it]=Traduttore +Name[ja]=翻訳ソフト +Name[ka]=მთარგმნელი +Name[km]=កម្មវិធី​បកប្រែ +Name[lt]=Vertėjas +Name[mk]=Преведувач +Name[nb]=Oversetter +Name[nds]=Översetter +Name[ne]=अनुवादक +Name[nl]=Vertaler +Name[nn]=Omsetjar +Name[pa]=ਅਨੁਵਾਦ +Name[pl]=Tłumacz +Name[pt]=Tradutor +Name[pt_BR]=Tradutor +Name[ro]=Traducător +Name[ru]=Переводчик +Name[se]=Jorgaleaddji +Name[sk]=Preklad +Name[sl]=Prevajalec +Name[sr]=Преводилац +Name[sr@Latn]=Prevodilac +Name[sv]=Översättning +Name[ta]=மொழிமாற்றி +Name[tg]=Тарҷумон +Name[tr]=Çevirmen +Name[uk]=Перекладач +Name[uz]=Tarjimon +Name[uz@cyrillic]=Таржимон +Name[wa]=Ratournaedje +Name[zh_CN]=翻译家 +Name[zh_HK]=翻譯者 +Name[zh_TW]=翻譯器 +Comment=Translates messages from your native language to another language +Comment[ar]=يترجم رسائل من لغتك اﻷم إلى لغة أخرى +Comment[be]=Перакладае паведамленні з роднай мовы на замежныя +Comment[bg]=Приставка за превод от един език на друг в реално време +Comment[bn]=আপনার স্থানীয় ভাষা থেকে অন্য একটি ভাষাতে বার্তা অনুবাদ করে +Comment[bs]=Prevodi poruke iz vašeg maternjeg jezika u neki drugi +Comment[ca]=Tradueix els missatges des del vostre idioma natiu cap a un altre +Comment[cs]=Překládá zprávy z vašeho rodného jazyka do jiného +Comment[cy]=Cyfieithu negeseuon o'ch iaith gyntaf i iaith arall +Comment[da]=Oversætter beskeder fra dit indfødte sprog til et andet sprog +Comment[de]=Übersetzt Nachrichten von der eigenen in eine fremde Sprache +Comment[el]=Μεταφράζει μηνύματα από τη μητρική σας γλώσσα σε μια άλλη +Comment[es]=Traduce mensajes de su lengua a otra +Comment[et]=Tõlgib sõnumid sinu emakeelest mingisse muusse keelde +Comment[eu]=Mezuak zure ama-hizkuntzatik beste hizkuntzara itzultzen ditu +Comment[fa]=ترجمۀ پیامهایی با زبان مادری شما به زبانهای دیگر +Comment[fi]=Kääntää viestit omasta kielestä toiseen kieleen +Comment[fr]=Traduit les messages de votre langue natale en une autre langue +Comment[ga]=Aistríonn seo teachtaireachtaí ó do theanga dúchais go teanga eile +Comment[gl]=Traduce as túas mensaxes da túa lingua nativa a outra +Comment[he]=מתרגם את מסריך משפת האם שלך לשפה אחרת +Comment[hi]=आपकी मातृ भाषा के संदेशों को अन्य भाषा में अनुवाद करे +Comment[hr]=Prevodi poruke s vašeg maternjeg jezika na neki drugi +Comment[hu]=Az üzenetek lefordítása a saját nyelvről egy idegen nyelvre +Comment[is]=Þýðir skeyti úr þinni tungu yfir í annað +Comment[it]=Traduci messaggi dalla tua lingua in un'altra +Comment[ja]=母国語から他の言語にメッセージを翻訳する +Comment[ka]=შეტყობინებებს თარგმნის თქვენი მშობლიური ენიდან სხვა ენაზე +Comment[kk]=Хабарларды бір тілден басқа тілге аудару +Comment[km]=បកប្រែ​សារ​ពី​ភាសា​កំណើត​របស់​អ្នក​ទៅ​ជា​ភាសា​មួយ​ទៀត +Comment[lt]=Verčia žinutes iš gimtosios kalbos į užsienio kalbas +Comment[mk]=Ги преведува пораките од вашиот мајчин јазик на друг јазик +Comment[nb]=Oversetter meldinger fra ditt eget språk til et annet +Comment[nds]=Översett Narichten vun Dien Moderspraak na anner Spraken +Comment[ne]=तपाईँ मातृ भाषाबाट अर्को भाषामा सन्देश अनुवाद गर्दछ +Comment[nl]=Vertaalt berichten van uw eigen taal naar een andere taal +Comment[nn]=Set om meldingar frå ditt eige språk til eit anna +Comment[pl]=Tłumaczy wiadomości z Twojego języka na inny +Comment[pt]=Traduz as mensagens da sua língua nativa para outra língua +Comment[pt_BR]=Traduz mensagens de seu idioma nativo para outro idioma +Comment[ru]=Переводит сообщение с вашего родного языка на язык вашего собеседника +Comment[se]=Jorgala dieđáhusaid du gielas muhton eará gillii +Comment[sk]=Prekladá správy z jedného jazyka do iného +Comment[sl]=Prevede sporočila iz vašega domačega jezika v drugi jezik +Comment[sr]=Преводи поруке са вашег матерњег језика на неки други +Comment[sr@Latn]=Prevodi poruke sa vašeg maternjeg jezika na neki drugi +Comment[sv]=Översätt meddelanden från ditt modersmål till ett annat språk +Comment[ta]=உங்கள் மொழியிலிருந்து வேறு மொழிக்கு மொழிபெயர் +Comment[tg]=Пайёмҳоро аз забони модарии шумо ба дигар забонҳо тарҷума мекунад +Comment[tr]=Diğer dillerden ana dilinize çevrilen mesajlar +Comment[uk]=Перекладає повідомлення з вашої рідної мови на якусь іншу мову +Comment[zh_CN]=将消息从您的母语翻译成其它语言 +Comment[zh_HK]=將您母語的訊息翻譯為另一種語言 +Comment[zh_TW]=將訊息從您的母語翻成其他語言 + + diff --git a/kopete/plugins/translator/translatorchatui.rc b/kopete/plugins/translator/translatorchatui.rc new file mode 100644 index 00000000..7dc86e2c --- /dev/null +++ b/kopete/plugins/translator/translatorchatui.rc @@ -0,0 +1,9 @@ + + + + + &Tools + + + + diff --git a/kopete/plugins/translator/translatordialog.cpp b/kopete/plugins/translator/translatordialog.cpp new file mode 100644 index 00000000..c03921fc --- /dev/null +++ b/kopete/plugins/translator/translatordialog.cpp @@ -0,0 +1,44 @@ +/*************************************************************************** + translatordialog.cpp - description + ------------------- + begin : sam oct 19 2002 + copyright : (C) 2002 by Olivier Goffart + email : ogoffart @ kde.org + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include +#include + +#include "translatordialog.h" + + +TranslatorDialog::TranslatorDialog(const QString &text,QWidget *parent, const char *name ) : KDialogBase(parent,name,true,i18n("Translator Plugin"), Ok) +{ + m_textEdit=new KTextEdit(this); + setMainWidget(m_textEdit); + m_textEdit->setText(text); +} +TranslatorDialog::~TranslatorDialog() +{ +} + +QString TranslatorDialog::translatedText() +{ + return m_textEdit->text(); +} +/*void TranslatorDialog::slotFinished() +{ + emit finished(m_textEdit->text()); +} */ + + +#include "translatordialog.moc" diff --git a/kopete/plugins/translator/translatordialog.h b/kopete/plugins/translator/translatordialog.h new file mode 100644 index 00000000..70fd46c0 --- /dev/null +++ b/kopete/plugins/translator/translatordialog.h @@ -0,0 +1,51 @@ +/*************************************************************************** + translatordialog.h - description + ------------------- + begin : sam oct 19 2002 + copyright : (C) 2002 by Olivier Goffart + email : ogoffart @ kde.org + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef TRANSLATORDIALOG_H +#define TRANSLATORDIALOG_H + +#include +#include + +//#include + +class KTextEdit; + +/** + * @author Olivier Goffart + */ +class TranslatorDialog : public KDialogBase +{ + Q_OBJECT + +public: + TranslatorDialog(const QString &translated, QWidget *parent=0, const char *name=0); + ~TranslatorDialog(); + + QString translatedText(); + +private: + KTextEdit *m_textEdit; + +private slots: // Public slots +// void slotFinished(); +}; + +#endif + +// vim: set noet ts=4 sts=4 sw=4: + diff --git a/kopete/plugins/translator/translatorguiclient.cpp b/kopete/plugins/translator/translatorguiclient.cpp new file mode 100644 index 00000000..ae175f41 --- /dev/null +++ b/kopete/plugins/translator/translatorguiclient.cpp @@ -0,0 +1,100 @@ +/* + translatorguiclient.cpp + + Kopete Translator plugin + + Copyright (c) 2003-2004 by Olivier Goffart + + Kopete (c) 2003-2004 by the Kopete developers + + ************************************************************************* + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ************************************************************************* +*/ + +#include + +#include +#include +#include + +#include "kopetemessagemanager.h" +#include "kopeteview.h" +#include "kopetecontact.h" +#include "kopetemetacontact.h" +#include "kopetemessage.h" + +#include "translatorplugin.h" +#include "translatorguiclient.h" +#include "translatorlanguages.h" + +TranslatorGUIClient::TranslatorGUIClient( Kopete::ChatSession *parent, const char *name ) +: QObject( parent, name ), KXMLGUIClient( parent ) +{ + setInstance( TranslatorPlugin::plugin()->instance() ); + connect( TranslatorPlugin::plugin(), SIGNAL( destroyed( QObject * ) ), this, SLOT( deleteLater() ) ); + + m_manager = parent; + + new KAction( i18n( "Translate" ), "locale", CTRL + Key_T, this, SLOT( slotTranslateChat() ), actionCollection(), "translateCurrentMessage" ); + + setXMLFile( "translatorchatui.rc" ); +} + +TranslatorGUIClient::~TranslatorGUIClient() +{ +} + +void TranslatorGUIClient::slotTranslateChat() +{ + if ( !m_manager->view() ) + return; + + Kopete::Message msg = m_manager->view()->currentMessage(); + QString body = msg.plainBody(); + if ( body.isEmpty() ) + return; + + QString src_lang = TranslatorPlugin::plugin()->m_myLang; + QString dst_lang; + + QPtrList list = m_manager->members(); + Kopete::MetaContact *to = list.first()->metaContact(); + dst_lang = to->pluginData( TranslatorPlugin::plugin(), "languageKey" ); + if ( dst_lang.isEmpty() || dst_lang == "null" ) + { + kdDebug( 14308 ) << k_funcinfo << "Cannot determine dst Metacontact language (" << to->displayName() << ")" << endl; + return; + } + + // We search for src_dst + TranslatorPlugin::plugin()->translateMessage( body, src_lang, dst_lang, this, SLOT( messageTranslated( const QVariant & ) ) ); +} + +void TranslatorGUIClient::messageTranslated( const QVariant &result ) +{ + QString translated = result.toString(); + if ( translated.isEmpty() ) + { + kdDebug( 14308 ) << k_funcinfo << "Empty string returned" << endl; + return; + } + + //if the user close the window before the translation arrive, return + if ( !m_manager->view() ) + return; + + Kopete::Message msg = m_manager->view()->currentMessage(); + msg.setBody( translated ); + m_manager->view()->setCurrentMessage( msg ); +} + +#include "translatorguiclient.moc" + +// vim: set noet ts=4 sts=4 sw=4: + diff --git a/kopete/plugins/translator/translatorguiclient.h b/kopete/plugins/translator/translatorguiclient.h new file mode 100644 index 00000000..32ff015f --- /dev/null +++ b/kopete/plugins/translator/translatorguiclient.h @@ -0,0 +1,63 @@ +/* + translatorguiclient.h + + Kopete Translator Plugin + + Copyright (c) 2003 by Olivier Goffart + + Kopete (c) 2003 by the Kopete developers + + ************************************************************************* + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ************************************************************************* +*/ + +#ifndef TRANSLATORGUICLIENT_H +#define TRANSLATORGUICLIENT_H + +#include +#include + +#include + +#include "kopetemessage.h" +#include "kopeteplugin.h" + +namespace Kopete { class ChatSession; } + +/** + * @author Olivier Goffart + */ + +class TranslatorGUIClient : public QObject , public KXMLGUIClient +{ + Q_OBJECT + +public: + TranslatorGUIClient( Kopete::ChatSession *parent, const char *name=0L); + ~TranslatorGUIClient(); + +private slots: + void slotTranslateChat(); + void messageTranslated(const QVariant&); + +private: + Kopete::ChatSession *m_manager; +}; + +#endif + +/* + * Local variables: + * c-indentation-style: k&r + * c-basic-offset: 8 + * indent-tabs-mode: t + * End: + */ +// vim: set noet ts=4 sts=4 sw=4: + diff --git a/kopete/plugins/translator/translatorlanguages.cpp b/kopete/plugins/translator/translatorlanguages.cpp new file mode 100644 index 00000000..4e59fa79 --- /dev/null +++ b/kopete/plugins/translator/translatorlanguages.cpp @@ -0,0 +1,101 @@ +/* + translatorlanguages.cpp + + Kopete Translatorfish Translator plugin + + Copyright (c) 2001-2002 by Duncan Mac-Vicar Prett + Copyright (c) 2002-2003 by Olivier Goffart + Copyright (c) 2003 by Matt Rogers + + Kopete (c) 2002-2003 by the Kopete developers + + ************************************************************************* + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ************************************************************************* +*/ + +#include +#include +#include + +#include "translatorlanguages.h" + +TranslatorLanguages::TranslatorLanguages() +{ + m_lc = 0; + m_sc = 0; + m_services.insert("babelfish", "BabelFish"); + m_services.insert("google", "Google"); + + m_langs.insert("null", i18n("Unknown")); + m_langs.insert("en", i18n("English")); + m_langs.insert("zh", i18n("Chinese")); + m_langs.insert("fr", i18n("French")); + m_langs.insert("de", i18n("German")); + m_langs.insert("it", i18n("Italian")); + m_langs.insert("ja", i18n("Japanese")); + m_langs.insert("ko", i18n("Korean")); + m_langs.insert("pt", i18n("Portuguese")); + m_langs.insert("ru", i18n("Russian")); + m_langs.insert("es", i18n("Spanish")); + + /* English to .. */ + m_supported["babelfish"].append("en_zh"); + m_supported["babelfish"].append("en_fr"); + m_supported["babelfish"].append("en_de"); + m_supported["babelfish"].append("en_it"); + m_supported["babelfish"].append("en_ja"); + m_supported["babelfish"].append("en_ko"); + m_supported["babelfish"].append("en_pt"); + m_supported["babelfish"].append("en_es"); + /* Chinese to .. */ + m_supported["babelfish"].append("zh_en"); + /* French to ... */ + m_supported["babelfish"].append("fr_en"); + m_supported["babelfish"].append("fr_de"); + /* German to ... */ + m_supported["babelfish"].append("de_en"); + m_supported["babelfish"].append("de_fr"); + + m_supported["babelfish"].append("it_en"); + m_supported["babelfish"].append("ja_en"); + m_supported["babelfish"].append("ko_en"); + m_supported["babelfish"].append("pt_en"); + m_supported["babelfish"].append("ru_en"); + m_supported["babelfish"].append("es_en"); + + /* Google Service */ + m_supported["google"].append("en_de"); + m_supported["google"].append("en_es"); + m_supported["google"].append("en_fr"); + m_supported["google"].append("en_it"); + m_supported["google"].append("en_pt"); + m_supported["google"].append("de_en"); + m_supported["google"].append("de_fr"); + m_supported["google"].append("es_en"); + m_supported["google"].append("fr_en"); + m_supported["google"].append("fr_de"); + m_supported["google"].append("it_en"); + m_supported["google"].append("pt_en"); + + QMap::ConstIterator i; + + for ( i = m_langs.begin(); i != m_langs.end() ; ++i ) + { + m_langIntKeyMap[m_lc] = i.key(); + m_langKeyIntMap[i.key()] = m_lc; + m_lc++; + } + + for ( i = m_services.begin(); i != m_services.end() ; ++i ) + { + m_servicesIntKeyMap[m_sc] = i.key(); + m_servicesKeyIntMap[i.key()] = m_sc; + m_sc++; + } +} diff --git a/kopete/plugins/translator/translatorlanguages.h b/kopete/plugins/translator/translatorlanguages.h new file mode 100644 index 00000000..cbd6385f --- /dev/null +++ b/kopete/plugins/translator/translatorlanguages.h @@ -0,0 +1,94 @@ +/* + translatorlanguages.h + + Kopete Translatorfish Translator plugin + + Copyright (c) 2001-2002 by Duncan Mac-Vicar Prett + Copyright (c) 2002-2003 by Olivier Goffart + Copyright (c) 2003 by Matt Rogers + + Kopete (c) 2002-2003 by the Kopete developers + + ************************************************************************* + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ************************************************************************* +*/ + +#ifndef TRANSLATORLANGUAGES_H_ +#define TRANSLATORLANGUAGES_H_ + +#include +#include + +class QString; + + +class TranslatorLanguages +{ +public: + TranslatorLanguages(); + + /*************************************************************************** + * Language APIs * + ***************************************************************************/ + + const QString& languageName( const QString &key ) + { return m_langs[key]; }; + + const int languageIndex ( const QString &key ) + { return m_langKeyIntMap[key]; }; + + const QString& languageKey( const int index ) + { return m_langIntKeyMap[index]; }; + + const QMap& languagesMap() + { return m_langs; }; + + const QMap& servicesMap() + { return m_services; }; + + const QStringList& supported( const QString &servicekey ) + { return m_supported[servicekey]; }; + + const int serviceIndex ( const QString &key ) + { return m_servicesKeyIntMap[key]; }; + + const QString& serviceKey( const int index ) + { return m_servicesIntKeyMap[index]; }; + + int numLanguages() { return m_lc; }; + + int numServices() { return m_sc; }; + +private: + + /* Known Languages key -> desc ie: en -> English */ + QMap< QString, QString> m_langs; + + /* Known Services key -> desc ie: en -> English */ + QMap< QString, QString> m_services; + + /* Supported translations per service, src_dst format ( ie: en_es )*/ + QMap< QString, QStringList > m_supported; + + /* int to lang key and viceversa*/ + QMap m_langIntKeyMap; + QMap m_langKeyIntMap; + + /* int to services key and viceversa*/ + QMap m_servicesIntKeyMap; + QMap m_servicesKeyIntMap; + + /* Lang counter */ + int m_lc; + /* Service counter */ + int m_sc; + +}; + +#endif diff --git a/kopete/plugins/translator/translatorplugin.cpp b/kopete/plugins/translator/translatorplugin.cpp new file mode 100644 index 00000000..694f0bd1 --- /dev/null +++ b/kopete/plugins/translator/translatorplugin.cpp @@ -0,0 +1,402 @@ +/* + translatorplugin.cpp + + Kopete Translator plugin + + Copyright (c) 2001-2002 by Duncan Mac-Vicar Prett + Copyright (c) 2002-2004 by Olivier Goffart + + Kopete (c) 2002-2004 by the Kopete developers + + ************************************************************************* + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ************************************************************************* +*/ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "kopetemetacontact.h" +#include "kopetecontactlist.h" +#include "kopetemessagemanagerfactory.h" +#include "kopetecontact.h" + +#include "translatorplugin.h" +#include "translatordialog.h" +#include "translatorguiclient.h" +#include "translatorlanguages.h" + +typedef KGenericFactory TranslatorPluginFactory; +#if KDE_IS_VERSION(3,2,90) +static const KAboutData aboutdata("kopete_translator", I18N_NOOP("Translator") , "1.0" ); +K_EXPORT_COMPONENT_FACTORY( kopete_translator, TranslatorPluginFactory( &aboutdata ) ) +#else +K_EXPORT_COMPONENT_FACTORY( kopete_translator, TranslatorPluginFactory( "kopete_translator" ) ) +#endif + +TranslatorPlugin::TranslatorPlugin( QObject *parent, const char *name, const QStringList & /* args */ ) +: Kopete::Plugin( TranslatorPluginFactory::instance(), parent, name ) +{ + kdDebug( 14308 ) << k_funcinfo << endl; + + + if ( pluginStatic_ ) + kdWarning( 14308 ) << k_funcinfo << "Translator already initialized" << endl; + else + pluginStatic_ = this; + + m_languages = new TranslatorLanguages; + + connect( Kopete::ChatSessionManager::self(), SIGNAL( aboutToDisplay( Kopete::Message & ) ), + this, SLOT( slotIncomingMessage( Kopete::Message & ) ) ); + connect( Kopete::ChatSessionManager::self(), SIGNAL( aboutToSend( Kopete::Message & ) ), + this, SLOT( slotOutgoingMessage( Kopete::Message & ) ) ); + connect( Kopete::ChatSessionManager::self(), SIGNAL( chatSessionCreated( Kopete::ChatSession * ) ), + this, SLOT( slotNewKMM( Kopete::ChatSession * ) ) ); + + QStringList keys; + QMap m = m_languages->languagesMap(); + for ( int k = 0; k <= m_languages->numLanguages(); k++ ) + keys << m[ m_languages->languageKey( k ) ]; + + m_actionLanguage = new KSelectAction( i18n( "Set &Language" ), "locale", 0, actionCollection(), "contactLanguage" ); + m_actionLanguage->setItems( keys ); + connect( m_actionLanguage, SIGNAL( activated() ), this, SLOT(slotSetLanguage() ) ); + connect( Kopete::ContactList::self(), SIGNAL( metaContactSelected( bool ) ), this, SLOT( slotSelectionChanged( bool ) ) ); + + setXMLFile( "translatorui.rc" ); + + //Add GUI action to all already existing kmm (if the plugin is launched when kopete already rining) + QValueList sessions = Kopete::ChatSessionManager::self()->sessions(); + for (QValueListIterator it= sessions.begin(); it!=sessions.end() ; ++it) + slotNewKMM( *it ); + + loadSettings(); + connect( this, SIGNAL( settingsChanged() ), this, SLOT( loadSettings() ) ); +} + +TranslatorPlugin::~TranslatorPlugin() +{ + kdDebug( 14308 ) << k_funcinfo << endl; + pluginStatic_ = 0L; +} + +TranslatorPlugin* TranslatorPlugin::plugin() +{ + return pluginStatic_; +} + +TranslatorPlugin* TranslatorPlugin::pluginStatic_ = 0L; + +void TranslatorPlugin::loadSettings() +{ + KConfig *config = KGlobal::config(); + int mode = 0; + + config->setGroup( "Translator Plugin" ); + m_myLang = m_languages->languageKey( config->readNumEntry( "myLang" , 0 ) ); + m_service = m_languages->serviceKey( config->readNumEntry( "Service", 0 ) ); + + if ( config->readBoolEntry( "IncomingDontTranslate", true ) ) + mode = 0; + else if ( config->readBoolEntry( "IncomingShowOriginal", false ) ) + mode = 1; + else if ( config->readBoolEntry( "IncomingTranslate", false ) ) + mode = 2; + + m_incomingMode = mode; + + if ( config->readBoolEntry( "OutgoingDontTranslate", true ) ) + mode = 0; + else if ( config->readBoolEntry( "OutgoingShowOriginal", false ) ) + mode = 1; + else if ( config->readBoolEntry( "OutgoingTranslate", false ) ) + mode = 2; + else if ( config->readBoolEntry( "OutgoingAsk", false ) ) + mode = 3; + + m_outgoingMode = mode; +} + +void TranslatorPlugin::slotSelectionChanged( bool b ) +{ + m_actionLanguage->setEnabled( b ); + + if ( !b ) + return; + + Kopete::MetaContact *m = Kopete::ContactList::self()->selectedMetaContacts().first(); + + if( !m ) + return; + + QString languageKey = m->pluginData( this, "languageKey" ); + if ( !languageKey.isEmpty() && languageKey != "null" ) + m_actionLanguage->setCurrentItem( m_languages->languageIndex( languageKey ) ); + else + m_actionLanguage->setCurrentItem( m_languages->languageIndex( "null" ) ); +} + +void TranslatorPlugin::slotNewKMM( Kopete::ChatSession *KMM ) +{ + new TranslatorGUIClient( KMM ); +} + +void TranslatorPlugin::slotIncomingMessage( Kopete::Message &msg ) +{ + if ( m_incomingMode == DontTranslate ) + return; + + QString src_lang; + QString dst_lang; + + if ( ( msg.direction() == Kopete::Message::Inbound ) && !msg.plainBody().isEmpty() ) + { + Kopete::MetaContact *from = msg.from()->metaContact(); + if ( !from ) + { +// kdDebug( 14308 ) << k_funcinfo << "No metaContact for source contact" << endl; + return; + } + src_lang = from->pluginData( this, "languageKey" ); + if( src_lang.isEmpty() || src_lang == "null" ) + { +// kdDebug( 14308 ) << k_funcinfo << "Cannot determine src Metacontact language (" << from->displayName() << ")" << endl; + return; + } + + dst_lang = m_myLang; + + sendTranslation( msg, translateMessage( msg.plainBody(), src_lang, dst_lang ) ); + } +} + +void TranslatorPlugin::slotOutgoingMessage( Kopete::Message &msg ) +{ + if ( m_outgoingMode == DontTranslate ) + return; + + QString src_lang; + QString dst_lang; + + if ( ( msg.direction() == Kopete::Message::Outbound ) && ( !msg.plainBody().isEmpty() ) ) + { + src_lang = m_myLang; + + // Sad, we have to consider only the first To: metacontact + Kopete::MetaContact *to = msg.to().first()->metaContact(); + if ( !to ) + { +// kdDebug( 14308 ) << k_funcinfo << "No metaContact for first contact" << endl; + return; + } + dst_lang = to->pluginData( this, "languageKey" ); + if ( dst_lang.isEmpty() || dst_lang == "null" ) + { +// kdDebug( 14308 ) << k_funcinfo << "Cannot determine dst Metacontact language (" << to->displayName() << ")" << endl; + return; + } + + sendTranslation( msg, translateMessage( msg.plainBody(), src_lang, dst_lang ) ); + } +} + +void TranslatorPlugin::translateMessage( const QString &msg, const QString &from, const QString &to, QObject *obj, const char* slot ) +{ + QSignal completeSignal; + completeSignal.connect( obj, slot ); + + QString result = translateMessage( msg, from, to ); + + if(!result.isNull()) + { + completeSignal.setValue( result ); + completeSignal.activate(); + } +} + +QString TranslatorPlugin::translateMessage( const QString &msg, const QString &from, const QString &to ) +{ + if ( from == to ) + { + kdDebug( 14308 ) << k_funcinfo << "Src and Dst languages are the same" << endl; + return QString::null; + } + + // We search for src_dst + if(! m_languages->supported( m_service ).contains( from + "_" + to ) ) + { + kdDebug( 14308 ) << k_funcinfo << from << "_" << to << " is not supported by service " << m_service << endl; + return QString::null; + } + + + if ( m_service == "babelfish" ) + return babelTranslateMessage( msg ,from, to ); + else if ( m_service == "google" ) + return googleTranslateMessage( msg ,from, to ); + else + return QString::null; +} + +QString TranslatorPlugin::googleTranslateMessage( const QString &msg, const QString &from, const QString &to ) +{ + KURL translatorURL ( "http://translate.google.com/translate_t"); + + QString body = KURL::encode_string( msg ); + QString lp = from + "|" + to; + + QCString postData = QString( "text=" + body + "&langpair=" + lp ).utf8(); + + QString gurl = "http://translate.google.com/translate_t?text=" + body +"&langpair=" + lp; + kdDebug(14308) << k_funcinfo << " URL: " << gurl << endl; + KURL geturl ( gurl ); + + KIO::TransferJob *job = KIO::get( geturl, false, true ); + //job = KIO::http_post( translatorURL, postData, true ); + + //job->addMetaData( "content-type", "application/x-www-form-urlencoded" ); + //job->addMetaData( "referrer", "http://www.google.com" ); + + QObject::connect( job, SIGNAL( data( KIO::Job *, const QByteArray & ) ), this, SLOT( slotDataReceived( KIO::Job *, const QByteArray & ) ) ); + QObject::connect( job, SIGNAL( result( KIO::Job * ) ), this, SLOT( slotJobDone( KIO::Job * ) ) ); + + // KIO is async and we use a sync API, so use the processEvents hack to work around that + // FIXME: We need to make the libkopete API async to get rid of this processEvents. + // It often causes crashes in the code. - Martijn + while ( !m_completed[ job ] ) + qApp->processEvents(); + + QString data = QString::fromLatin1( m_data[ job ] ); + + // After hacks, we need to clean + m_data.remove( job ); + m_completed.remove( job ); + +// kdDebug( 14308 ) << k_funcinfo << "Google response:"<< endl << data << endl; + + QRegExp re( "" ); + re.setMinimal( true ); + re.search( data ); + + return re.cap( 1 ); +} + +QString TranslatorPlugin::babelTranslateMessage( const QString &msg, const QString &from, const QString &to ) +{ + QString body = KURL::encode_string( msg); + QString lp = from + "_" + to; + QString gurl = "http://babelfish.altavista.com/babelfish/tr?enc=utf8&doit=done&tt=urltext&urltext=" + body + "&lp=" + lp; + KURL geturl ( gurl ); + + kdDebug( 14308 ) << k_funcinfo << "URL: " << gurl << endl; + + KIO::TransferJob *job = KIO::get( geturl, false, true ); + + QObject::connect( job, SIGNAL( data( KIO::Job *, const QByteArray & ) ), this, SLOT( slotDataReceived( KIO::Job *, const QByteArray & ) ) ); + QObject::connect( job, SIGNAL( result( KIO::Job * ) ), this, SLOT( slotJobDone( KIO::Job * ) ) ); + + // KIO is async and we use a sync API, so use the processEvents hack to work around that + // FIXME: We need to make the libkopete API async to get rid of this processEvents. + // It often causes crashes in the code. - Martijn + while ( !m_completed[ job ] ) + qApp->processEvents(); + + QString data = QString::fromUtf8( m_data[ job ] ); + + // After hacks, we need to clean + m_data.remove( job ); + m_completed.remove( job ); + + //kdDebug( 14308 ) << k_funcinfo << "Babelfish response: " << endl << data << endl; + + QRegExp re( "
(.*)exec(); + msg.setBody( d->translatedText(), msg.format() ); + delete d; + break; + } + case DontTranslate: + default: + //do nothing + break; + }; +} + +void TranslatorPlugin::slotDataReceived ( KIO::Job *job, const QByteArray &data ) +{ + m_data[ job ] += QCString( data, data.size() + 1 ); +} + +void TranslatorPlugin::slotJobDone ( KIO::Job *job ) +{ + m_completed[ job ] = true; + QObject::disconnect( job, SIGNAL( data( KIO::Job *, const QByteArray & ) ), this, SLOT( slotDataReceived( KIO::Job *, const QByteArray & ) ) ); + QObject::disconnect( job, SIGNAL( result( KIO::Job * ) ), this, SLOT( slotJobDone( KIO::Job * ) ) ); +} + +void TranslatorPlugin::slotSetLanguage() +{ + Kopete::MetaContact *m = Kopete::ContactList::self()->selectedMetaContacts().first(); + if( m && m_actionLanguage ) + m->setPluginData( this, "languageKey", m_languages->languageKey( m_actionLanguage->currentItem() ) ); +} + +#include "translatorplugin.moc" + +// vim: set noet ts=4 sts=4 sw=4: + diff --git a/kopete/plugins/translator/translatorplugin.h b/kopete/plugins/translator/translatorplugin.h new file mode 100644 index 00000000..2a04b509 --- /dev/null +++ b/kopete/plugins/translator/translatorplugin.h @@ -0,0 +1,113 @@ +/* + translatorplugin.h + + Kopete Translatorfish Translator plugin + + Copyright (c) 2001-2002 by Duncan Mac-Vicar Prett + Copyright (c) 2002-2003 by Olivier Goffart + + Kopete (c) 2002-2003 by the Kopete developers + + ************************************************************************* + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ************************************************************************* +*/ + +#ifndef BABELFISHPLUGIN_H +#define BABELFISHPLUGIN_H + +#include +#include +#include +#include + + +#include + +#include "kopetemessage.h" +#include "kopeteplugin.h" + + +class QString; +class KSelectAction; + +namespace Kopete { class Message; } +namespace Kopete { class MetaContact; } +namespace Kopete { class ChatSession; } + +class TranslatorPreferences; +class TranslatorGUIClient; +class TranslatorLanguages; + +/** + * @author Duncan Mac-Vicar Prett + * + * Kopete Translator Plugin + */ +class TranslatorPlugin : public Kopete::Plugin +{ + Q_OBJECT + +friend class TranslatorGUIClient; + +public: + static TranslatorPlugin *plugin(); + + TranslatorPlugin( QObject *parent, const char *name, const QStringList &args ); + ~TranslatorPlugin(); + + enum TranslateMode + { + DontTranslate = 0, + ShowOriginal = 1, + JustTranslate = 2, + ShowDialog = 3 + }; + +private slots: + void slotIncomingMessage( Kopete::Message& msg ); + void slotOutgoingMessage( Kopete::Message& msg ); + void slotDataReceived ( KIO::Job *, const QByteArray &data); + void slotJobDone ( KIO::Job *); + void slotSetLanguage(); + void slotSelectionChanged(bool); + void slotNewKMM(Kopete::ChatSession *); + void loadSettings(); + +public: + QString translateMessage( const QString &, const QString &, const QString & ); + void translateMessage( const QString &, const QString &, const QString & , QObject * , const char*); + +protected: + QString googleTranslateMessage( const QString &, const QString &, const QString & ); + QString babelTranslateMessage(const QString &, const QString &, const QString & ); + +private: + + QMap< KIO::Job *, QCString> m_data; + QMap< KIO::Job *, bool> m_completed; + + KSelectAction* m_actionLanguage; + + static TranslatorPlugin* pluginStatic_; + TranslatorLanguages *m_languages; + + //Settings + QString m_myLang; + QString m_service; + unsigned int m_outgoingMode; + unsigned int m_incomingMode; + +private: + void sendTranslation(Kopete::Message &msg, const QString &translated); +}; + +#endif + +// vim: set noet ts=4 sts=4 sw=4: + diff --git a/kopete/plugins/translator/translatorprefs.cpp b/kopete/plugins/translator/translatorprefs.cpp new file mode 100644 index 00000000..cb67c4c6 --- /dev/null +++ b/kopete/plugins/translator/translatorprefs.cpp @@ -0,0 +1,52 @@ +/* + translatorprefs.cpp - Kopete Translator plugin + + Copyright (c) 2001-2002 by Duncan Mac-Vicar Prett + Copyright (c) 2002-2003 by Olivier Goffart + Kopete (c) 2002-2003 by the Kopete developers + + ************************************************************************* + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ************************************************************************* +*/ + + +#include +#include "kcautoconfigmodule.h" +#include "translatorprefsbase.h" +#include "translatorlanguages.h" +#include + + +class TranslatorPreferences; +typedef KGenericFactory TranslatorConfigFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_kopete_translator, TranslatorConfigFactory( "kcm_kopete_translator" ) ) + +class TranslatorPreferences : public KCAutoConfigModule +{ +public: + TranslatorPreferences( QWidget *parent = 0, const char * = 0, const QStringList &args = QStringList() ) : KCAutoConfigModule( TranslatorConfigFactory::instance(), parent, args ) + { + TranslatorPrefsUI *preferencesDialog = new TranslatorPrefsUI(this); + + TranslatorLanguages languages; + QMap::ConstIterator i; + QMap m; + + m = languages.languagesMap(); + for ( i = m.begin(); i != m.end() ; ++i ) + preferencesDialog->myLang->insertItem( i.data(), languages.languageIndex(i.key()) ); + + m = languages.servicesMap(); + for ( i = m.begin(); i != m.end() ; ++i ) + preferencesDialog->Service->insertItem( i.data(), languages.serviceIndex(i.key()) ); + + setMainWidget( preferencesDialog , "Translator Plugin"); + } +}; + diff --git a/kopete/plugins/translator/translatorprefsbase.ui b/kopete/plugins/translator/translatorprefsbase.ui new file mode 100644 index 00000000..56b75543 --- /dev/null +++ b/kopete/plugins/translator/translatorprefsbase.ui @@ -0,0 +1,191 @@ + +TranslatorPrefsUI +Duncan Mac-Vicar P. + + + TranslatorPrefsUI + + + + 0 + 0 + 401 + 417 + + + + + 5 + 5 + 1 + 0 + + + + + unnamed + + + + Service + + + + + TextLabel2_2 + + + Translation service: + + + + + TextLabel2 + + + Default native language: + + + + + myLang + + + + 1 + 0 + 1 + 0 + + + + + + IncomingMessages + + + Incoming Messages + + + + unnamed + + + + IncomingDontTranslate + + + Do not translate + + + true + + + 0 + + + + + IncomingShowOriginal + + + Show the original message + + + false + + + 1 + + + + + IncomingTranslate + + + Translate directly + + + 2 + + + + + + + OutgoingMessages + + + Outgoing Messages + + + + unnamed + + + + OutgoingDontTranslate + + + Do not translate + + + true + + + 0 + + + + + OutgoingShowOriginal + + + Show the original message + + + false + + + 1 + + + + + OutgoingTranslate + + + Translate directly + + + + + OutgoingAsk + + + Show dialog before sending + + + + + + + Spacer2 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + + diff --git a/kopete/plugins/translator/translatorui.rc b/kopete/plugins/translator/translatorui.rc new file mode 100644 index 00000000..d583b6a4 --- /dev/null +++ b/kopete/plugins/translator/translatorui.rc @@ -0,0 +1,12 @@ + + + + + &Edit + + + + + + + -- cgit v1.2.1