* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Novembre 22, 2024, 08:47:37 pm

Inserisci il nome utente, la password e la durata della sessione.

94 Visitatori, 0 Utenti

Autore Topic: Traduzioni in italiano  (Letto 14225 volte)

bonmario

  • Hero Member
  • *****
  • Post: 1358
  • Karma: +11/-1
Traduzioni in italiano
« il: Gennaio 12, 2013, 04:08:32 pm »
Ciao a tutti,
è tutta mattina che divento scemo con una cosa che ho sempre fatto e che adesso non mi funziona più.
Allora, in alcuni progetti, io uso questo codice per emettere il giorno della settimana (Lunedì, Martedì, ecc):
Codice: [Seleziona]
DefaultFormatSettings.LongDayNames[DayOfWeek(WrkData)]
Se vado sulla parola DefaultFormatSettings e faccio CTRL + Click, mi apre il sorgente sysinth.inc, dove trovo i valori di LongDayNames alla penultima riga, che però sono in inglese.
Li modifico in italiano, salvo e rifaccio la build di Lazarus.
Riapro il mio progetto, lo compilo, ma mi da sempre i giorni in inglese.

N.B. La modifica del sorgente che ho descritto sopra, è solo a titolo di esempio: ho da anni un programma che mi traduce quelle descrizioni in italiano e che lancio ogni volta prima di rifare la build di Lazarus, ma da qualche tempo, qui a casa non mi funziona più (Ubuntu 64 bit).
Al lavoro, su windows, funziona ancora tutto bene come sempre.

Qualcuno ha qualche idea?

Grazie in anticipo, Mario
« Ultima modifica: Gennaio 25, 2013, 01:23:06 pm da bonmario »

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:Giorni della settimana in italiano
« Risposta #1 il: Gennaio 12, 2013, 05:28:08 pm »
Scusa, sono rinco di mio.
Modifichi l'rtl così, al volo?
Non puoi fare la modifica runtime al volo all'avvio del programma?
Ci sono milioni di modi per farlo.
Perchè abbia smesso di farlo non ne ho idea.
I path immagino tu li abbia già controllati, cambiato qualche cosa a livello di "lettura" del file? Non so, canna a leggere i dati?
Hai fatto qualche aggiornamento prima che smettesse di funzionare?
In alternativa c'è :
http://wiki.freepascal.org/Translations_/_i18n_/_localizations_for_programs
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

bonmario

  • Hero Member
  • *****
  • Post: 1358
  • Karma: +11/-1
Re:Giorni della settimana in italiano
« Risposta #2 il: Gennaio 12, 2013, 07:33:55 pm »
No, modifico il sorgente di FPC, poi rifaccio la build di Lazarus e, da quel momento in poi, tutti i programmi in cui ho bisogno il giorno della settimana, dovrebbero avere le traduzioni italiane.
I percorsi ed il resto mi sembrano Ok, anche perché quando faccio il CTRL + Click su DefaultFormatSettings mi apre il sorgente modificato da me.
Io Lazarus lo aggiorno da SVN e lo ricompilo almeno un paio di volte al mese, quindi non mi sono reso conto di preciso quando questa cosa ha smesso di funzionare

Non puoi fare la modifica runtime al volo all'avvio del programma?

Intendi dire di fare io una procedura che mi restituisce i giorni in italiano? Se è così, potrei farlo in pochissimo tempo, ma sarei curioso di capire perché il metodo che ho usato per anni non funziona più !!!!

Ciao, Mario

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2921
  • Karma: +20/-4
Re:Giorni della settimana in italiano
« Risposta #3 il: Gennaio 12, 2013, 07:44:38 pm »
se non sbaglio è la seconda volta che in questo forum leggo che modifichi il codice di fpc per "fare prima".
direi che il motivo per cui al mondo ci sono molte guerre è perché in molti hanno riscritto la Bibbia a loro modo. :D

scherzi a parte, le tue applicazioni non possono e non devono dipendere da queste modifiche, soprattutto per problemi come la localizzazione.

dovresti farti una unit dove ridefinisciti le tue cose e la usi in ogni tuo progetto.
altrimenti sei condannato alla modifica perpetua ad ogni cambio di versione o OS, senza contare che non potrai condividere il tuo codice con nessuno...

segui il consiglio, rimetti a posto il sorgente e lavora di tuo ;)
Imagination is more important than knowledge (A.Einstein)

bonmario

  • Hero Member
  • *****
  • Post: 1358
  • Karma: +11/-1
Re:Giorni della settimana in italiano
« Risposta #4 il: Gennaio 12, 2013, 11:21:48 pm »
Hai ragione, quella era una soluzione che avevo trovato anni fa', quando non avevo ancora un accesso costante ad internet per documentarmi, e mi arrangiavo spulciando i sorgenti.
Ho già una funzione "GiornoDellaSettimana" in cui richiamo l'istruzione che ho scritto nel primo post che ho modificato per sistemare il problema.
Ero solo curioso di capire coma mai quella soluzione non funziona più !!!!

P.S. Un chiarimento: quando nella tua prima risposta hai scritto
Codice: [Seleziona]
Non puoi fare la modifica runtime al volo all'avvio del programma?

Intendevi appunto scrivere una routine che mi restituisce i giorni in italiano, oppure c'è un metodo che non conosco di forzare a runtime quello che sarebbe l'esito di
Codice: [Seleziona]
DefaultFormatSettings.LongDayNames[DayOfWeek(WrkData)]

Ciao, Mario

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:Giorni della settimana in italiano
« Risposta #5 il: Gennaio 12, 2013, 11:55:14 pm »
Strano, DefaultFormatSettings viene inizializzato automaticamente con i valori propri della lingua del sistema operativo. Senza fare modifiche, a me restituisce i nomi dei giorni in italiano.

Se vuoi darci un'occhiata, si trova tutto in sysutils. La procedura InitInternational, tra le varie cose, fa una chiamata a GetFormatSettings, che esegue GetlocaleFormatSettings(GetThreadLocale, DefaultFormatSettings). La procedura GetlocaleFormatSettings assegna a DefaultFormatSettings dei valori, a seconda di quanto restituito dalla funzione GetThreadLocale del kernel, che restituisce appunto la lingua di sistema. Questo su windows, su altre piattaforme dovrebbe funzionare alla stessa maniera  :)

bonmario

  • Hero Member
  • *****
  • Post: 1358
  • Karma: +11/-1
Re:Giorni della settimana in italiano
« Risposta #6 il: Gennaio 13, 2013, 11:06:25 am »
Questo su windows, su altre piattaforme dovrebbe funzionare alla stessa maniera  :)

Grazie della spiegazione, probabilmente questo è il motivo per cui al lavoro funziona (Windows), ma qui a casa no (Linux).

Questa è la InitInternational di Windows:
Codice: [Seleziona]
Procedure InitInternational;
var
  { A call to GetSystemMetrics changes the value of the 8087 Control Word on
    Pentium4 with WinXP SP2 }
  old8087CW: word;
  DefaultCustomLocaleID : LCID;   // typedef DWORD LCID;
  DefaultCustomLanguageID : Word; // typedef WORD LANGID;
begin
  /// workaround for Windows 7 bug, see bug report #18574
  SetThreadLocale(GetUserDefaultLCID);
  InitInternationalGeneric;
  old8087CW:=Get8087CW;
  SysLocale.MBCS:=GetSystemMetrics(SM_DBCSENABLED)<>0;
  SysLocale.RightToLeft:=GetSystemMetrics(SM_MIDEASTENABLED)<>0;
  SysLocale.DefaultLCID := $0409;
  SysLocale.PriLangID := LANG_ENGLISH;
  SysLocale.SubLangID := SUBLANG_ENGLISH_US;
  // probably needs update with getthreadlocale. post 2.0.2

  DefaultCustomLocaleID := GetThreadLocale;
  if DefaultCustomLocaleID <> 0 then
    begin
      { Locale Identifiers
        +-------------+---------+-------------------------+
        |   Reserved  | Sort ID |      Language ID        |
        +-------------+---------+-------------------------+
        31         20 19      16 15                       0   bit }
      DefaultCustomLanguageID := DefaultCustomLocaleID and $FFFF; // 2^16
      if DefaultCustomLanguageID <> 0 then
        begin
          SysLocale.DefaultLCID := DefaultCustomLocaleID;
          { Language Identifiers
            +-------------------------+-------------------------+
            |     SubLanguage ID      |   Primary Language ID   |
            +-------------------------+-------------------------+
            15                      10  9                         0   bit  }
          SysLocale.PriLangID := DefaultCustomLanguageID and $3ff; // 2^10
          SysLocale.SubLangID := DefaultCustomLanguageID shr 10;
        end;
     end;

  Set8087CW(old8087CW);
  GetFormatSettings;
  if SysLocale.FarEast then GetEraNamesAndYearOffsets;
end;


mentre questa è quella di Linux:
Codice: [Seleziona]
Procedure InitInternational;
begin
  InitInternationalGeneric;
  InitAnsi;
end;
Dove non c'è la chiamata a GetlocaleFormatSettings.


Probabilmente, negli anni hanno cambiato questa implementazione, e la forzatura che facevo io ha smesso di funzionare.

Grazie ancora, Mario

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:Giorni della settimana in italiano
« Risposta #7 il: Gennaio 13, 2013, 11:30:02 am »
Per linux, prova ad includere la unit clocale. Dovrebbe inizializzare le impostazioni per la lingua di sistema:

http://lazarus-ccr.sourceforge.net/docs/rtl/clocale/index.html

bonmario

  • Hero Member
  • *****
  • Post: 1358
  • Karma: +11/-1
Re:Giorni della settimana in italiano
« Risposta #8 il: Gennaio 13, 2013, 11:53:42 am »
Grazie,
stavo proprio per scrivere la stessa cosa !!!!
Ho provato a fare un po' di ricerche ed ho scoperto che basta aggiungere quella.

Casomai servisse a qualcun altro in futuro, visto che lo stesso progetto deve girare sia su Windows che su Linux, ho aggiunto questo nella uses:
Codice: [Seleziona]
{$IFDEF LINUX}
, clocale{$ENDIF}

Grazie a tutti, Mario

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:Giorni della settimana in italiano
« Risposta #9 il: Gennaio 13, 2013, 02:53:52 pm »
Si Bonmario, intrendevo proprio modificare il valore delle stringhe ;)
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

bonmario

  • Hero Member
  • *****
  • Post: 1358
  • Karma: +11/-1
Re:Traduzioni in italiano
« Risposta #10 il: Gennaio 25, 2013, 01:25:57 pm »
Ciao a tutti,
sfrutto questo vecchio thread, a cui ho cambiato il titolo, visto che la domanda è comunque attinente.
Voi avete già un metodo funzionante per fare in modo che quando emettete una MessageDlg, i tasti siano in italiano e non Yes, Cancel, ecc  in inglese?

Grazie, Mario

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:Traduzioni in italiano
« Risposta #11 il: Gennaio 25, 2013, 01:43:15 pm »
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

bonmario

  • Hero Member
  • *****
  • Post: 1358
  • Karma: +11/-1
Re:Traduzioni in italiano
« Risposta #12 il: Febbraio 01, 2013, 07:41:59 pm »
Scusa il ritardo, ma mi ero perso la tua risposta ...

C'è qualcosa che non mi torna ...
Ora sono a casa ed ho provato a lanciare questa istruzione su Linux:
Codice: [Seleziona]
  
  MessageDlg('Titolo', 'Msg', mtError, [mbYes, mbNo, mbOK, mbCancel, mbHelp, mbClose], 0);
i bottoni sono tutti in italiano.
Purtroppo qui non ho un'installazione Windows funzionante, ma sono quasi sicuro che la MessageDlg al lavoro, su windows, mi emette i bottoni in inglese.
Qualcuno può provare a dirmi se lanciando la stessa istruzione in windows escono in inglese?

Grazie, Mario

bonmario

  • Hero Member
  • *****
  • Post: 1358
  • Karma: +11/-1
Re:Traduzioni in italiano
« Risposta #13 il: Febbraio 04, 2013, 11:37:11 am »
Sono appena riuscito a provarlo su Windows: il testo dei bottoni non è tradotto, ma resta quindi in inglese.

Ciao, Mario

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:Traduzioni in italiano
« Risposta #14 il: Febbraio 04, 2013, 04:10:59 pm »
Versione di Windows ... lo so può sembrare una domanda idiota ;)
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

 

Recenti

How To

Utenti
  • Utenti in totale: 803
  • Latest: maXim.FI
Stats
  • Post in totale: 19169
  • Topic in totale: 2286
  • Online Today: 99
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 94
Total: 94

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.