From 63ca3a9c22ff532d784509bfbcab3ef6a422b199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Soutad=C3=A9?= Date: Wed, 7 Jul 2010 21:04:38 +0200 Subject: [PATCH] String localization implemented (missing some strings) --- ressources/icons/France.png | Bin 0 -> 637 bytes ressources/icons/United Kingdom.png | Bin 0 -> 1767 bytes src/controller/KissCount.cpp | 6 ++ src/controller/KissCount.h | 2 + src/model/Database.cpp | 28 +++++++++ src/model/Database.h | 2 + src/model/User.cpp | 2 +- src/view/PreferencesPanel.cpp | 13 +++- src/view/SupportedLanguages.cpp | 7 +++ src/view/SupportedLanguages.h | 17 +++++ src/view/wxUI.cpp | 94 ++++++++++++++++++++-------- src/view/wxUI.h | 5 +- 12 files changed, 145 insertions(+), 31 deletions(-) create mode 100644 ressources/icons/France.png create mode 100644 ressources/icons/United Kingdom.png create mode 100644 src/view/SupportedLanguages.cpp create mode 100644 src/view/SupportedLanguages.h diff --git a/ressources/icons/France.png b/ressources/icons/France.png new file mode 100644 index 0000000000000000000000000000000000000000..21d04198a02fe355223d5462f926a9980580db86 GIT binary patch literal 637 zcmV-@0)qXCP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;14%?dRCwC#mphKsKoEw%c6&4gJ39yok&_W{0Wwybas-dBEhr<@NQ) zJFTb1xViZ-Yvyn7-p|lp@$&PhXF0IWvW%;%SIM?^@%GJRpZ4}Ez&Zz(&IOFIY_~Pi z`z1C3)DfrEe*f7I><1}@>e~Y3PcMmh03?Ko4ubS*=K$V$L`Vj}41i$cQ{Wt+Nmd_*Fg!?y0KAW5K+rm!0wVJ8 z;($^LXQNc?y+i9fodPrF*(;Fkf5%EGPG(9G`Z&q7$Cm~P^?x@(v;e(iy5gx z{sMRq%JSFbpv`783t(Fm(_zx5Bn7+xUIWihT$cX;zNr3Au(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ?ZAnByRCwC#mwj*)*;3Di3zuSCpVdjCzP_Au50#*3QD%um82jcPii#=$1F(HYFGTjZQ9Qlm zPKF=cPtSYrllkNmWR}j&)Bsms?LL$wm9(OnGS%7i;I33S#CUo{3S;NvOd+M9anl%Mo525QubkaZ& z(e>yN)B(_S13hFibM{o0PSjAUchKkUBWq1LY15}+L@f61{eYU9BXo3l69A^E(AOJe z|DL0~c(@yL+4mV_*XVe51KvM3qACi-#RZg=&BE^wM=cQ0iNp@e9|iFH!z};qH+b-J z6W!Zi!d6hoh@boj`9JktcmiLi>zGy zExwkW!N~}ZvZMj-xYrL!kesnW;PFOy&Ju?m59%W>PkmV zcEkVzC@}zuM3-ZFdr2;uL1sZA+OQ!2G&HpE;->moRwMxtEXzRG)p#Mw6%qH%R*{eI zdJrWkQ3t;Ie#6aIK}E^a0Ni=^pg2>IV5t91G`;$-2Z{(N3X08!V8rj;lkQLG{4eR( zb=bi$6D~j$L=Pf{al`Zy4*%!iH!79|G3#mlKD504n*#X18j#IKk}GXM5c+$;uOt1r zaa~D5O|}o{XJ7?Gu~K~l0GfuV1JW@6VhgHzbDjCalu;VELn6CI^ z08|G#iFmzqJhz#a(fJg0pQLI>2`MfIB7Q_nz$6k04=lyeOUu$3KR%mx-uW@*>>}(6*rxZRAhmEm$l;MB?pORaf%XTc@#)9mDMhe$UV~tLa>~mbnct zbEIw&`Cp%eW$A!|VOVkKTuoadPUrWeq-3XbUGj;DNa%dKv_3LlT5K8O{lzw^{`FCD zW|Rpm7ZH&rySuXBxki|dP zD^BMMvDuagkgEbXof_M=Eu^+~Ia$L}>G|WIa2MW(t@RA)b#**-Za6EKy+Xj_y>4)Y zLMG+qyO}rdS9Esv;`(+Gc_;shOew%K_X#RTwDEHFV$!o*2@4!M_E8j94@!I4T4^R# zJge8rq1Qf;+`<i4FcpU zK(5E*aXT(_aADQcsGqizx#{Orwxv?F1 literal 0 HcmV?d00001 diff --git a/src/controller/KissCount.cpp b/src/controller/KissCount.cpp index 2ca86f2..4655a39 100644 --- a/src/controller/KissCount.cpp +++ b/src/controller/KissCount.cpp @@ -245,3 +245,9 @@ void KissCount::KillMe() _user = NULL; _wxUI->ChangeUser(); } + +void KissCount::SetLanguage(wxLanguage language) +{ + _db->SetLanguage(_user, language); + _user->_preferences[wxT("language")] = wxString::Format(wxT("%d"), language) ; +} diff --git a/src/controller/KissCount.h b/src/controller/KissCount.h index 081260e..16315ae 100644 --- a/src/controller/KissCount.h +++ b/src/controller/KissCount.h @@ -45,6 +45,8 @@ class KissCount void GenerateMonth(int monthFrom, int yearFrom, int monthTo, int yearTo); void KillMe(); + + void SetLanguage(wxLanguage language); private: wxUI* _wxUI; Database* _db; diff --git a/src/model/Database.cpp b/src/model/Database.cpp index 6e9d691..8e5fe59 100644 --- a/src/model/Database.cpp +++ b/src/model/Database.cpp @@ -882,3 +882,31 @@ void Database::KillMe(User* user) req = wxT("DELETE FROM user WHERE id='") + user->_id + wxT("'"); EXECUTE_SQL_UPDATE(req, ); } + +void Database::SetLanguage(User* user, wxLanguage language) +{ + wxString req; + req = wxT("UPDATE preference SET ") ; + req += wxT("name='language'"); + req += wxT(", value='") + wxString::Format(wxT("%d"), language) + wxT("'"); + req += wxT(" WHERE user='") + user->_id + wxT("'"); + + try + { + if (!_db.ExecuteUpdate(req)) + { + req = wxT("INSERT INTO preference ('user', 'name', 'value') VALUES ('") ; + req += user->_id + wxT("'"); + req += wxT(" ,'language'"); + req += wxT(" ,'") + wxString::Format(wxT("%d"), language) + wxT("'"); + req += wxT(")"); + EXECUTE_SQL_UPDATE(req, ); + } + } + catch (wxSQLite3Exception e) + { + std::cerr << req.mb_str() << "\n" ; + std::cerr << e.GetMessage().mb_str() << "\n" ; + return ; + } +} diff --git a/src/model/Database.h b/src/model/Database.h index 6e5cbdf..245cd67 100644 --- a/src/model/Database.h +++ b/src/model/Database.h @@ -47,6 +47,8 @@ class Database void ChangeName(User* user, const wxString& name); void NewUser(const wxString& name); + void SetLanguage(User* user, wxLanguage language); + void KillMe(User* user); private: wxSQLite3Database _db; diff --git a/src/model/User.cpp b/src/model/User.cpp index 117f8bf..3f105cc 100644 --- a/src/model/User.cpp +++ b/src/model/User.cpp @@ -92,7 +92,7 @@ wxLanguage User::GetLanguage() long val; if (res == wxT("")) - return wxLANGUAGE_ENGLISH_UK ; + return wxLANGUAGE_ENGLISH ; res.ToLong(&val); diff --git a/src/view/PreferencesPanel.cpp b/src/view/PreferencesPanel.cpp index e50be75..283cef2 100644 --- a/src/view/PreferencesPanel.cpp +++ b/src/view/PreferencesPanel.cpp @@ -196,12 +196,11 @@ void PreferencesPanel::InitCategories(User* user) void PreferencesPanel::InitLanguage(User* user) { int i, select=0; - wxLanguage pref = user->GetLanguage(); for (i=0; iAppend(languages[i].name, wxBitmap(languages[i].icon)); - if (languages[i].language == pref) + if (languages[i].language == _wxUI->_language) select = i; } @@ -478,7 +477,15 @@ void PreferencesPanel::OnChangePassword(wxCommandEvent& event) void PreferencesPanel::OnLanguageChange(wxCommandEvent& event) { wxLanguage language = languages[_language->GetSelection()].language; - _wxUI->SetLanguage(language); + if (_wxUI->SetLanguage(language) || language == wxLANGUAGE_ENGLISH) + { + _wxUI->NeedReload(); + _kiss->SetLanguage(language); + wxMessageBox(_("Language successfully changed, please go to another panel"), _("KissCount"), wxICON_INFORMATION | wxOK); + } + else + wxMessageBox(_("Language not changed"), _("KissCount"), wxICON_ERROR | wxOK); + } void PreferencesPanel::OnShow(wxShowEvent& event) diff --git a/src/view/SupportedLanguages.cpp b/src/view/SupportedLanguages.cpp new file mode 100644 index 0000000..7945935 --- /dev/null +++ b/src/view/SupportedLanguages.cpp @@ -0,0 +1,7 @@ +#include "SupportedLanguages.h" + +language languages[NB_SUPPORTED_LANGUAGES] = { + { wxT("English"), wxT(ICONS_PATH "/United Kingdom.png"), wxLANGUAGE_ENGLISH}, + { wxT("Français"), wxT(ICONS_PATH "/France.png"), wxLANGUAGE_FRENCH} +}; + diff --git a/src/view/SupportedLanguages.h b/src/view/SupportedLanguages.h new file mode 100644 index 0000000..752e08f --- /dev/null +++ b/src/view/SupportedLanguages.h @@ -0,0 +1,17 @@ +#ifndef SUPPORTEDLANGUAGES_H +#define SUPPORTEDLANGUAGES_H + +#include + +typedef struct { + wxString name; + wxString icon; + wxLanguage language; +} language ; + +#define NB_SUPPORTED_LANGUAGES 2 +#define ICONS_PATH "./ressources/icons" + +extern language languages[NB_SUPPORTED_LANGUAGES]; + +#endif diff --git a/src/view/wxUI.cpp b/src/view/wxUI.cpp index f28965d..de126cf 100644 --- a/src/view/wxUI.cpp +++ b/src/view/wxUI.cpp @@ -22,19 +22,6 @@ wxUI::wxUI(KissCount* kiss, const wxString& title, const wxPoint& pos, const wxS // CreateStatusBar(); // SetStatusText( wxT("Welcome to wxWidgets!") ); - months[0] = _("january"); - months[1] = _("february"); - months[2] = _("march"); - months[3] = _("april"); - months[4] = _("may"); - months[5] = _("june"); - months[6] = _("july"); - months[7] = _("august"); - months[8] = _("september"); - months[9] = _("october"); - months[10] = _("november"); - months[11] = _("december") ; - SetSizer(_hbox); _hbox->Add(buttons); @@ -49,6 +36,8 @@ wxUI::~wxUI() bool wxUI::SetLanguage(long language) { + bool res = true; + if (_locale) delete _locale; _locale = NULL; @@ -63,16 +52,39 @@ bool wxUI::SetLanguage(long language) _locale->AddCatalog(wxT("french")); _locale->AddCatalog(wxT("kisscount")); + + _language = (wxLanguage) language; } - if ((_locale == NULL || !_locale->IsOk()) && wxLocale::IsAvailable(wxLANGUAGE_ENGLISH)) + if (_locale == NULL || !_locale->IsOk()) { if (_locale) delete _locale; - _locale = new wxLocale( wxLANGUAGE_ENGLISH ); - return false; + _locale = new wxLocale(); + +#ifdef __WXGTK__ + _locale->AddCatalogLookupPathPrefix(wxT("./ressources/po")); +#endif + + _locale->AddCatalog(wxT("kisscount")); + + _language = wxLANGUAGE_ENGLISH; + res = false; } - return true; + months[0] = _("january"); + months[1] = _("february"); + months[2] = _("march"); + months[3] = _("april"); + months[4] = _("may"); + months[5] = _("june"); + months[6] = _("july"); + months[7] = _("august"); + months[8] = _("september"); + months[9] = _("october"); + months[10] = _("november"); + months[11] = _("december") ; + + return res; } void wxUI::ShowAccount() @@ -93,6 +105,8 @@ void wxUI::ChangeUser() void wxUI::LoadUser() { + User* user = _kiss->GetUser(); + if (_curPanel) { _hbox->Detach(_curPanel); @@ -105,6 +119,9 @@ void wxUI::LoadUser() if (_preferencesPanel) delete _preferencesPanel; + if (user->_preferences[wxT("language")] != wxT("")) + SetLanguage(user->GetLanguage()); + _preferencesPanel = new PreferencesPanel(_kiss, this); _accountPanel = new AccountPanel(_kiss, this); @@ -113,7 +130,8 @@ void wxUI::LoadUser() void wxUI::ShowPanel(wxPanel* panel) { - int month, year; + int month, year, account=0, preferences=0; + wxShowEvent event; if (!panel) return; @@ -122,14 +140,40 @@ void wxUI::ShowPanel(wxPanel* panel) _hbox->Detach(_curPanel); _curPanel->Hide(); } - - if (panel == _accountPanel && _needReload) + + if (_needReload) { - month = _accountPanel->_curMonth; - year = _accountPanel->_curYear; - delete _accountPanel; - panel = _accountPanel = new AccountPanel(_kiss, this); - _accountPanel->ShowMonth(month, year); + if (panel == _accountPanel) + { + account = 1; + month = _accountPanel->_curMonth; + year = _accountPanel->_curYear; + } + + if (panel == _preferencesPanel) + { + preferences = 1; + } + + delete _accountPanel; + delete _preferencesPanel; + + _accountPanel = new AccountPanel(_kiss, this); + if (year != -1) + _accountPanel->ShowMonth(month, year); + _preferencesPanel = new PreferencesPanel(_kiss, this); + + if (account) + { + _accountPanel->OnShow(event); + panel = _accountPanel; + } + if (preferences) + { + _preferencesPanel->OnShow(event); + panel = _preferencesPanel; + } + _needReload = false; } diff --git a/src/view/wxUI.h b/src/view/wxUI.h index 6a89e8f..3afab90 100644 --- a/src/view/wxUI.h +++ b/src/view/wxUI.h @@ -33,8 +33,11 @@ class wxUI: public wxFrame void KillMe(); + void ShowPanel(wxPanel* panel); void NeedReload(); + wxLanguage _language; + private: KissCount *_kiss; wxBoxSizer *_hbox; @@ -43,8 +46,6 @@ class wxUI: public wxFrame wxPanel *_curPanel; wxLocale *_locale; bool _needReload; - - void ShowPanel(wxPanel* panel); }; #endif