Conoscere la valuta monetaria locale utilizzata dal sistema operativo
Per conoscere quale tipo di valuta moneria usa il nostro sistema operativo, è possibile utilizzare almeno due modalità.
Uso delle sole risorse di Gambas
Le risorse di Gambas consentono di conoscere in modo molto semplice quale tipo di valuta moneria usa il nostro sistema operativo:
Public Sub Main() Print "Moneta: "; Format(0, "$$#") Print "Simbolo monetario: "; Format(0, "$#") End
Un'altra modalità (sempre utilizzando le sole risorse di Gambas) prevede che si vada ad individuare nella directory "/usr/share/i18n/locales" il file corrispondente al tipo di lingua impostata nel nostro sistema. Infatti i file presenti in detta directory sono contraddistinti da un nome simile a quello identificativo della lingua locale utilizzata.
Successivamente si dovrà andare a leggere il contenuto del file individuato ed interpretare i valore UNICODE presenti nelle righe che identificate con int_curr_symbol per la valuta monetaria, e currency_symbol, per il simbolo della valuta.
Mostriamo di seguito un esempio:
Public Sub Main() Dim lingua, locales, arcloc, unicode, moneta As String Dim b As Byte locales = "/usr/share/i18n/locales" lingua = Scan(System.Language, "*.*")[0] arcloc = File.load(locales &/ Dir(locales, lingua, gb.File)[0]) unicode = Scan(Replace(arcloc, " ", Null), "*int_curr_symbol\"<U*<U0020>*")[1] For b = 1 To 18 Step 7 moneta &= Chr(Val("&" & Mid(unicode, b, 4))) Next Print "Valuta monetaria: "; moneta unicode = Scan(Replace(arcloc, " ", Null), "*currency_symbol\"<U*>*")[1] Print "Simbolo monetario: "; String.Chr(Val("&" & unicode)) End
Uso delle risorse della libreria Libc.so.6
La seconda modalità prevede l'uso di alcune risorse della libreria Libc.so.6 .
Mostriamo un possibile esempio:
Library "libc:6" Public Struct Lconv decimal_point As Pointer thousands_sep As Pointer grouping As Pointer int_curr_symbol As Pointer currency_symbol As Pointer End Struct Private Const LC_MONETARY As Integer = 4 ' char *setlocale (int __category, const char *__locale) ' Set and/or return the current locale. Private Extern setlocale(category As Integer, locale As String) As Pointer ' struct lconv *localeconv(void) ' Return the numeric/monetary information for the current locale. Private Extern localeconv() As Lconv Public Sub Main() Dim lc As Lconv ' Specifichiamo la categoria e l'ambiente dell'impostazione locale per lingua: setlocale(LC_MONETARY, System.Language) ' Ritorna un Puntatore alla Struttura che dà informazioni sui simboli numerici secondo l'impostazione locale: lc = localeconv() With lc Print "Valuta monetaria: "; String@(.int_curr_symbol) Print "Simbolo monetario: "; String@(.currency_symbol) End With End
Riferimenti
- /usr/include/locale.h