Bonsoir,
Je pense avoir trouvé une solution pour accéder aux valeurs des variables LC_xxxxx
En fait, dans l'unité
clocale, il y a la définition de la fonction
setlocale. Mais les constantes qui y sont liées sont incomplètes (il n'y en a que 6 de définies alors qu'en réalité il en existe 12).
J'ai donc créé ce code pour utiliser la fonction setlocale et redéfinir (enrichir) les constantes :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| unit u_setlocale;
{$mode objfpc}{$H+}
interface
{$linklib c}
uses
Unix, // Pour la définition de cint
initc; // Pour la définition de clib
const
LC_CTYPE = 0;
LC_NUMERIC = 1;
LC_TIME = 2;
LC_COLLATE = 3;
LC_MONETARY = 4;
LC_MESSAGES = 5;
LC_ALL = 6;
LC_PAPER = 7;
LC_NAME = 8;
LC_ADDRESS = 9;
LC_TELEPHONE = 10;
LC_MEASUREMENT = 11;
LC_IDENTIFICATION = 12;
function setlocale(category: cint; locale: pchar): pchar; cdecl; external clib name 'setlocale';
implementation
end. |
Après avoir ajouté l'unité dans les uses d'un petit programme de tests, j'appelle la fonction
setlocale en indiquant la variable LC dont je veux la valeur. Exemple d'appel :
setlocale(LC_CTYPE,'')
Et ça m'affiche bien la valeur de la variable ! En tout cas, dans mon environnement ...
L'exemple d'utilisation de la fonction
GetEnvironmentVariable est faux sur le wiki de freepascal. En effet, l'exemple utilise la variable locale LC_CTYPE or la fonction ne peut accéder (du moins dans mon environnement) qu'aux variables "globales" et non "locales". Avec cette fonction, j'arrive à afficher toutes les variables qui sont affichées via la commande linux
env. Je pense d'ailleurs que c'est pour cela que sous linux, il y a la commande
locale qui permet d'afficher les variables LC_xxxxxx --> ce qui implique qu'il faut utiliser une fonction spécifique pour y accéder aussi en pascal.
Toujours en recherchant sur le wiki des infos sur la fonction
setlocale, dans la page traitant de i18n et des fichiers po pour les traductions, pour avoir la langue par défaut, ils utilisent
GetEnvironmentVariableUTF8 avec la variable d'environnement
LANG.
A moins ne pas avoir correctement recherché, la fonction
setlocale n'est pas du tout documentée sur le wiki ... et entre l'absence de documentation et un exemple faux, je me suis donc basé sur la définition et l'utilisation en C.
J'ai encore squatté mais ce coup-ci, c'est avec du pascal
Bonne soirée.
Cdt
Laurent
Partager