Thotbox - application collaborative de partage de codes sour

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: application collaborative de gestion de code source

Message par Thyphoon »

Geo Trouvpatou a écrit :C'est surtout qu'il faudrait uniformiser le code.
S'il y a des procédures et variables avec des noms anglais et d'autres en français, ça ne sera peut-être pas le mieux.
J'imagine qu'il serait bien de tout mettre en anglais, si d'autres nationalités voulaient participer.
Enfin c'est vous qui voyez (Tiens ça me rappelle 2 comiques)
il me semble que dans mon code tout ce que j'ai fais est en anglais (enfin ça y ressemble) :roll: :wink:
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: application collaborative de gestion de code source

Message par Geo Trouvpatou »

Thyphoon a écrit :merci Geo Trouvpatou !
je vais mettre a jour la procédure dans le code de Thothbox ... (mais je ne ferais pa d'autre changement pour l'instant) j'attends le retour de Guimauve !
C'était pour ça que j'avais dit ça.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: application collaborative de gestion de code source

Message par Thyphoon »

Geo Trouvpatou a écrit :
Thyphoon a écrit :merci Geo Trouvpatou !
je vais mettre a jour la procédure dans le code de Thothbox ... (mais je ne ferais pa d'autre changement pour l'instant) j'attends le retour de Guimauve !
C'était pour ça que j'avais dit ça.
parcontre j'ai des soucis avec sous windows c'est currieux !!!! faut que je regarde de plus prêt !
Edit: j'ai trouvé !! il y a une petite différence entre ta fonction et celle que j'utilisais. j'ai adapté mon code !
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: application collaborative de gestion de code source

Message par djes »

Super, ça bouge :)
Je suis là si vous avez besoin d'explications pour la partie SVN.

Pour la partie traduction, voir ce topic : http://www.purebasic.fr/french/viewtopi ... =3&t=12104
(je remets le texte d'explication ici)
Gettext et ici poedit récupèrent automatiquement les chaînes à traduire à partir des codes sources.

1 - Dans tous les sources entourez les chaînes à traduire avec t("") ou gettext("")

2 - Passez vos fichiers à la moulinette poedit ou gettext pour générer un catalogue :
http://www.poedit.net/
http://www.gnu.org/s/gettext/

Dans Poedit :
Ajoutez le language purebasic dans fichier>préférences>analyseurs (copiez celui pour le php et changez les extensions de listes de fichiers avec *.pb;*.pbi)
Créez un nouveau catalogue pour la langue souhaitée, ajoutez le chemin vers le dossier de votre projet, ajoutez t comme mot-clé
Cliquez sur "Mettre à jour à partir des fichiers sources"
Sauvez le catalogue avec un nom correspondant à la langue à traduire (comme fr_FR). Fichier original (texte) : .po , compilé pour le déploiement : .mo)
Sauvez autant de catalogue que de langues.

3 - Ajoutez les lignes suivantes à votre code (comme dans sample.pb)
XIncludeFile "translator.pbi"
Translator_init("locale\", "fr_FR") ;laissez la 2ème vide pour autodétection
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: application collaborative de gestion de code source

Message par Geo Trouvpatou »

Salut.

Ben Djes, je crois que la 1ère chose qui intéresserait Guimauve, ce serait une petite explication de "GetThreadLocale_()" se trouvant dans "locale.pbi" et de savoir s'il peut contourner le problème pour Linux.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: application collaborative de gestion de code source

Message par djes »

C'est très simple, cela renvoie un code qui permet de savoir la langue de l'utilisateur local. Sur Linux, c'est défini dans une variable d'environnement (et c'est donc encore plus simple). Voir http://www.gnu.org/s/hello/manual/gette ... SIX-Locale
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: application collaborative de gestion de code source

Message par Guimauve »

Bonjour à tous,

Idéalement ce serait de compléter le bout de code suivant :

Code : Tout sélectionner

CompilerSelect #PB_Compiler_OS
    
  CompilerCase #PB_OS_Windows 
    lcid = GetThreadLocale_()
    langid = LANGIDFROMLCID(lcid)
    primary = PRIMARYLANGID(langid)
    sub = SUBLANGID(lcid)
    
  CompilerCase #PB_OS_Linux
    lcid = ????
    langid = ????
    primary = ????
    sub = ????
    
  CompilerCase #PB_OS_MacOS
    lcid = ????
    langid = ????
    primary = ????
    sub = ????
    
CompilerEndSelect
Pour le moment, je n'ai pas vraiment le temps de faire les recherches nécessaires mais je peux trouver du temps dans le courant de la semaine pour le faire mais une chose est sûr la partie MacOS je ne peux pas la faire puisque je n'ai pas de machine MacOS. Donc si quelqu'un qui travaille sous Mac pourrait faire le travaille, ça serait génial.

Édit : Sous Linux

Code : Tout sélectionner

Debug GetEnvironmentVariable("LANGUAGE")
Affiche :
fr_CA:en
Donc la langue et autre chose, probablement la disposition clavier. À confirmer...

A+
Guimauve
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: application collaborative de gestion de code source

Message par Guimauve »

djes a écrit :Super, ça bouge :)
Je suis là si vous avez besoin d'explications pour la partie SVN.

Pour la partie traduction, voir ce topic : http://www.purebasic.fr/french/viewtopi ... =3&t=12104
(je remets le texte d'explication ici)
Gettext et ici poedit récupèrent automatiquement les chaînes à traduire à partir des codes sources.

1 - Dans tous les sources entourez les chaînes à traduire avec t("") ou gettext("")
Question, est-ce que le système est assez fort pour prendre un truc du genre :

Code : Tout sélectionner

t(*LanguageA, "About")
ou il faut impérativement avoir :

Code : Tout sélectionner

t("About")
Merci à l'avance.

ÉDIT :

J'ai trouvé la réponse à ma question, il suffit d'ajouter "t(*LanguageA, " comme mot clé et ça devrait fonctionner.

A+
Guimauve
Dernière modification par Guimauve le mar. 13/sept./2011 4:57, modifié 1 fois.
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: application collaborative de gestion de code source

Message par Geo Trouvpatou »

Voilà ce que j'ai :

Code : Tout sélectionner

Debug PeekS(getenv_("LANG")) ; fr_FR.UTF-8
Debug GetEnvironmentVariable("LANG") ; fr_FR.UTF-8

Debug PeekS(getenv_("LANGUAGE")) ; fr_FR:en
Debug GetEnvironmentVariable("LANGUAGE") ; fr_FR:en
Pour "getenv" j'avais trouvé l'info ici : http://stackoverflow.com/questions/4894 ... e-in-linux
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: application collaborative de gestion de code source

Message par Guimauve »

Bonjour à tous,

J'ai une question : Est-ce que les variables d'environnement sont une valeur sûr ? Une valeur sûr dans le sens où elles ne changent pas trop souvent.

Code : Tout sélectionner

If ExamineEnvironmentVariables()
  While NextEnvironmentVariable()
    Debug EnvironmentVariableName() + " = " + EnvironmentVariableValue()
  Wend
EndIf
GDM_KEYBOARD_LAYOUT = ca
GNOME_KEYRING_PID = 1917
LANGUAGE = fr_CA:en
USER = guimauve
SSH_AGENT_PID = 1969
COMPIZ_CONFIG_PROFILE = ubuntu
ORBIT_SOCKETDIR = /tmp/orbit-guimauve
HOME = /home/guimauve
XDG_SESSION_COOKIE = 64600120c336cb45722ed39700000006-1315837376.754006-1135282929
DESKTOP_SESSION = gnome
GTK_MODULES = canberra-gtk-module
DBUS_SESSION_BUS_ADDRESS = unix:abstract=/tmp/dbus-l1UyhBRQxO,guid=3fe0bb8dcd68e64bea56703400000038
GNOME_KEYRING_CONTROL = /tmp/keyring-XnrSc1
UBUNTU_MENUPROXY = libappmenu.so
MANDATORY_PATH = /usr/share/gconf/gnome.mandatory.path
LOGNAME = guillaume
DESKTOP_AUTOSTART_ID = 101f610ce7931d4dc13158373778207200000019360000
DEFAULTS_PATH = /usr/share/gconf/gnome.default.path
USERNAME = guimauve
GNOME_DESKTOP_SESSION_ID = this-is-deprecated
WINDOWPATH = 8
SESSION_MANAGER = local/guimauve-desktop:@/tmp/.ICE-unix/1936,unix/guimauve-desktop:/tmp/.ICE-unix/1936
GDM_LANG = fr_CA
PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
DISPLAY = :0
LANG = fr_CA.UTF-8
XAUTHORITY = /var/run/gdm/auth-for-guimauve-80XsIb/database
SSH_AUTH_SOCK = /tmp/keyring-XnrSc1/ssh
SHELL = /bin/bash
GDMSESSION = gnome
PWD = /home/guimauve
XDG_DATA_DIRS = /usr/share/gnome:/usr/local/share/:/usr/share/
XDG_CONFIG_DIRS = /etc/xdg/xdg-gnome:/etc/xdg
GIO_LAUNCHED_DESKTOP_FILE = /home/guillaume/.local/share/applications/alacarte-made.desktop
GIO_LAUNCHED_DESKTOP_FILE_PID = 7744
PUREBASIC_HOME = /home/guimauve/PureBasic/purebasic460/
LD_LIBRARY_PATH = /home/guimauve/PureBasic/purebasic460/compilers/:
Par exemple la variable : GNOME_DESKTOP_SESSION_ID = this-is-deprecated

Merci à l'avance.
Guimauve
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: application collaborative de gestion de code source

Message par djes »

Je pense que nous pouvons nous fier à ces variables, et (pas vérifié) que tous les programmes les utilisent (apache/php par exemple).

En suivant le lien de Geo Trouvpatou (merci), je suis tombé sur la normalisation unix POSIX.1-2001, SUSv3 (http://www.unix.org/version3/), qui indique que la fonction nl_langinfo() (http://linux.die.net/man/3/nl_langinfo) est standardisée, donc a priori elle fonctionne aussi bien sur Linux que sur MacOS X puisqu'ils respectent cette norme. Plus d'infos ici : http://pubs.opengroup.org/onlinepubs/79 ... ocale.html

Voir ce code

Code : Tout sélectionner

#include <langinfo.h>

char *s;
s = getenv("LANG");
if (s == NULL) 
    printf("LANG is not set");
else {
    setlocale(LC_ALL, s);
    printf(nl_langinfo(_NL_IDENTIFICATION_LANGUAGE));
}
Dernière modification par djes le mar. 13/sept./2011 11:09, modifié 1 fois.
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: application collaborative de gestion de code source

Message par Geo Trouvpatou »

Je me dit qu'un comboBox avec la liste des langues ferait l'affaire.
Parce que je ne sais pas si la partie qui pose problème est utile à autre chose que la détection automatique de la langue.

Après ça fait plus pro et voir même magique au yeux de certains : "Whaaaou! le programme y sait quelle langue je cause" :lol:
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: application collaborative de gestion de code source

Message par Geo Trouvpatou »

Salut.

Bon j'ai amélioré la fonction DirectoryCreate(dossier$) et supprimé un bug qui faisait que ça ne fonctionnait pas sous Linux.
Le problème avec la fonction originale et ma 1ère version c'est qu"il y avait toujours un tour de boucle inutile pour vérifier au final que dossier$ était bien vide pour pouvoir sortir de la boucle et après être sorti de la boucle une soustraction était effectuée.

Donc pour éviter tout ça je suis passé par une boucle For...Next.
Et plus de soustraction non plus.

Le problème qui faisait que cela ne fonctionnait pas sous Linux c'était simplement ça : CompilerCase #PB_OS_Linux Or #PB_OS_MacOS
D'ailleurs si quelqu'un sait comment combiner plusieurs OS (Si c'est possible) , parce que même la virgule ne fonctionne pas.

Mais ceci étant dit, j'ai changé mon fusil d'épaule et pour être sûr d'une Procedure Multi-Plateforme et fonctionnelle avec la Démo de PB, je préfère utiliser le même code pour tous les OS sans API.

J'ai ajouté :

Code : Tout sélectionner

; Utile pour la portabilitée du code.
CompilerSelect #PB_Compiler_OS 
      CompilerCase #PB_OS_Windows : #EOL$ = #CRLF$ : #SeparatorDir = "\" 
      CompilerCase #PB_OS_Linux   : #EOL$ = #LF$ : #SeparatorDir = "/"
      CompilerCase #PB_OS_MacOS   : #EOL$ = #CR$ : #SeparatorDir = "/"
CompilerEndSelect
Bon #EOL$ dans le cas présent ne sert à rien.

Voici le code avec ton cartouche Typhoon, mais à la place des [X] je trouve plus compréhensible [Ok] et j'ai ajouté Demo, qui permet de préciser que le code est fonctionnel avec la version de Démo de PB.

Code : Tout sélectionner

;*********************************
;* Title    : DirectoryCreate(dossier$)
;* Author : GeoTrouvpatou
;* Date    : 13/09/2011
;* Compatibility
;* Windows x86 [?] | Windows x64 [Ok]
;* Linux x86  [?] | Linux x64 [Ok]
;* MacOs PPC [?] | MacOs intel [?]
;* Unicode [?]
;* Demo [Ok]
;*********************************
DebugLevel 2
; Utile pour la portabilitée du code.
CompilerSelect #PB_Compiler_OS 
      CompilerCase #PB_OS_Windows : #EOL$ = #CRLF$ : #SeparatorDir = "\" 
      CompilerCase #PB_OS_Linux   : #EOL$ = #LF$ : #SeparatorDir = "/"
      CompilerCase #PB_OS_MacOS   : #EOL$ = #CR$ : #SeparatorDir = "/"
CompilerEndSelect

Procedure.b DirectoryCreate(dossier$)
      ; Il est préférable de mettre le code ci-dessous parce que 
      ; si l'on met pour dossier$ : "toto\titi\vovo\aze" cela ne créer pas
      ; le repertoire "aze" considérant que c'est un fichier.
      If Right(dossier$, 1) <> #SeparatorDir
            dossier$ + #SeparatorDir
      EndIf
      
      ; ; ;       CompilerSelect #PB_Compiler_OS  
      ; ; ;                   
      ; ; ;             CompilerCase #PB_OS_Windows
      ; ; ;                   Debug "Windows Use"
      ; ; ;                   ; Sous Windows autant utiliser une API existante.
      ; ; ;                   ProcedureReturn MakeSureDirectoryPathExists_(dossier$)
      ; ; ;                   
      ; ; ;                   
      ; ; ;             CompilerCase #PB_OS_Linux ;Or #PB_OS_MacOS
      ; ; ;                   Debug "Linux Use"
      Protected.b nbDossiersPourBoucle, indexDossierActuel ; Sert à la boucle For ... Next
      Protected nbDossiersExistants.b ; Nb de dossiers déjà créés.
      
      Protected nomDossier$
      Protected nomCheminComplet$
      
      
      Debug dossier$, 2
      nbDossiersPourBoucle = CountString(dossier$, #SeparatorDir)
      Debug "Nombre de dossiers : "+ Str(nbDossiersPourBoucle), 2
      
      For indexDossierActuel = 1 To nbDossiersPourBoucle
            
            nomDossier$ = StringField(dossier$, indexDossierActuel, #SeparatorDir)
            Debug "nomDossier$ : "+ nomDossier$, 2
            
            
            ; [1] On liste le chemin vers le dernier dossier.
            
            ; On a un dossier principal et pas de sous-dossier.
            If indexDossierActuel = 1
                  nomCheminComplet$ + nomDossier$
                  Debug Str(indexDossierActuel) +" nomCheminComplet$ >>> " + nomCheminComplet$, 2
                  
            Else
                  ; On a des sous-dossiers, donc à chaques fois, on ajoute 
                  ; le chemin précédent, plus un Slash plus le nom de dossier en cours.
                  
                  nomCheminComplet$ + #SeparatorDir + nomDossier$
                  Debug Str(indexDossierActuel) +" nomCheminComplet$ >>> " + nomCheminComplet$, 2
                  
            EndIf
            
            
            ; [2] On créer le dossier en fonction de son chemin.
            
            ; Si c'est un dossier et qu'il existe alors on ne fait qu'incrementer nbDossiersExistants
            If FileSize(nomCheminComplet$) = -2
                  nbDossiersExistants + 1
                  
            Else
                  ; Si le dossier n'existe pas, alors on le créer et si le dossier a bien été créé, 
                  ; alors on incremente nbDossiersExistants
                  If CreateDirectory(nomCheminComplet$) <> 0
                        nbDossiersExistants + 1
                        
                  EndIf
            EndIf
            
      Next indexDossierActuel
      
      
      ; [3] On vérifie si tous les dossiers ont bien été créés
      
      Debug "nbDossiersPourBoucle : "+ Str(nbDossiersPourBoucle), 2
      Debug "nbDossiersExistants : "+ Str(nbDossiersExistants), 2
      
      ; Si nbDossiersPourBoucle = nbDossiersExistants, alors c'est que tous 
      ; les dossiers ont bien été créés et donc la procedure retourne 1
      If nbDossiersPourBoucle = nbDossiersExistants
            ProcedureReturn #True
      EndIf
      ProcedureReturn #False 
      
      ; ; ;       CompilerEndSelect
EndProcedure

; CallDebugger
; Exemple :
Debug DirectoryCreate("toto\titi\vovo\aze") ; Windows
; Debug DirectoryCreate("toto/titi/vovo/aze") ; Linux
; Debug DirectoryCreate("toto\") ; Test avec un unique dossier.
Bye.
Dernière modification par Geo Trouvpatou le mer. 12/oct./2011 14:00, modifié 2 fois.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: application collaborative de gestion de code source

Message par Thyphoon »

merci beaucoup GeoTrouvpatou !! :D
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: application collaborative de gestion de code source

Message par Guimauve »

Bonjour à tous,

Voici la procédure de création de répertoire que j'avais fait pour plusieurs de mes programmes.

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : BuiltPathDirectory()
; Fichier : BuiltPathDirectory.pbi
; Version : 1.0.0
; Programmation : OK
; Programmé par : Guimauve
; Date : 29-04-2008
; Mise à jour : 14-09-2011
; Codé avec PureBasic V4.60 RC1
; Plate forme : Windows, Linux, MacOS
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Procedure.b BuiltPathDirectory(Path.s)
  
  CompilerSelect #PB_Compiler_OS
      
    CompilerCase #PB_OS_Windows 
      PathSep.s = "\"
      
    CompilerCase #PB_OS_Linux
      PathSep.s = "/"
      
    CompilerCase #PB_OS_MacOS
      PathSep.s = "/"
      
  CompilerEndSelect
  
  DirectoryQty = CountString(Path, PathSep)
  
  For Index = 0 To DirectoryQty
    
    Directory.s = Directory + StringField(Path, Index + 1, PathSep) + PathSep
    
    If FileSize(Directory) <> -2
      CreateDirectory(Directory)
    EndIf 
    
  Next
  
  If FileSize(Directory) = -2
    Success.b = #True
  Else
    Success = #False
  EndIf
  
  ProcedureReturn Success
EndProcedure

; Debug BuiltPathDirectory("toto\titi\vovo\aze") ; Windows
Debug BuiltPathDirectory("toto/titi/vovo/aze") ; Linux, MacOS

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Les solutions sont donc très similaire entre celle proposé par GeoTrouvpatou et celle que je propose quoique la mienne est un peu plus légère.

A+
Guimauve
Répondre