Questo articolo presuppone la conoscenza di poEdit o di gettext trattati nel precedente articolo “Localizzazione di un progetto wx c++ (usare poEdit)”

wxWidgets

Aggiungere la localizzazione ad un programma scritto in wx è abbastanza semplice. Una volta ottenuti i files .po per tutti le lingue che vogliamo supportare, rinominiamoli con il nome della nostra applicazione e spostiamoli in subdirectory diverse per ogni linguaggio, esempio:

rootDelProgetto/locale/it
rootDelProgetto/locale/it_CH
rootDelProgetto/locale/en_US
rootDelProgetto/locale/en_GB


Ora andiamo nel main, posizioniamoci in un punto in cui ancora non è stata istanziata l’interfaccia e scriviamo il seguente codice:

    //ottengo il percorso "rootDelProgetto/locale/"
    wxString langDir = wxStandardPaths::Get().GetDataDir() + wxFILE_SEP_PATH + wxT("locale");

    //istanzio la classe per effettuare la localizzazione
    wxLocale *m_locale=new wxLocale();

    //se l'init non riesce c'è qualche problema nel recuperare la lingua di sistema...
    if (m_locale->Init(wxLANGUAGE_DEFAULT, wxLOCALE_CONV_ENCODING))
    {
        // aggiungo nei percorsi di ricerca dei files .po la directory "rootDelProgetto/locale/"
        m_locale->AddCatalogLookupPathPrefix(langDir);

        // se AddCatalog torna true il file .po relativo alla lingua di sistema è stato caricato,
        // e il programma visualizzerà la traduzione giusta
        if (!m_locale->AddCatalog(wxT("UsbAutostart")))
        {
            // il programma non visualizzerà nessuna tradizione
        }
    }
    else
    {
        // il programma non visualizzerà nessuna tradizione
    }
    delete m_locale;

Per forzare una lingua in particolare, basta specificare nella chiamata alla funzione Init, una costante diversa da wxLANGUAGE_DEFAULT, per esempio wxLANGUAGE_ITALIAN.


Se sei interessato a questo post, potresti anche provare a leggere:

    No related posts