Conoscere la valuta monetaria locale utilizzata dal sistema operativo

Da Gambas-it.org - Wikipedia.

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