il me semble que dans mon code tout ce que j'ai fais est en anglais (enfin ça y ressemble)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)
Thotbox - application collaborative de partage de codes sour
Re: application collaborative de gestion de code source
-
Geo Trouvpatou
- Messages : 471
- Inscription : dim. 23/déc./2007 18:10
Re: application collaborative de gestion de code source
C'était pour ça que j'avais dit ça.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 !
Re: application collaborative de gestion de code source
parcontre j'ai des soucis avec sous windows c'est currieux !!!! faut que je regarde de plus prêt !Geo Trouvpatou a écrit :C'était pour ça que j'avais dit ça.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 !
Edit: j'ai trouvé !! il y a une petite différence entre ta fonction et celle que j'utilisais. j'ai adapté mon code !
Re: application collaborative de gestion de code source
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
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
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.
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.
Re: application collaborative de gestion de code source
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
Re: application collaborative de gestion de code source
Bonjour à tous,
Idéalement ce serait de compléter le bout de code suivant :
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
Affiche :
A+
Guimauve
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Édit : Sous Linux
Code : Tout sélectionner
Debug GetEnvironmentVariable("LANGUAGE")Donc la langue et autre chose, probablement la disposition clavier. À confirmer...fr_CA:en
A+
Guimauve
Re: application collaborative de gestion de code source
Question, est-ce que le système est assez fort pour prendre un truc du genre :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("")
Code : Tout sélectionner
t(*LanguageA, "About")Code : Tout sélectionner
t("About")É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
Voilà ce que j'ai :
Pour "getenv" j'avais trouvé l'info ici : http://stackoverflow.com/questions/4894 ... e-in-linux
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:enRe: application collaborative de gestion de code source
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.
Merci à l'avance.
Guimauve
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
EndIfPar exemple la variable : GNOME_DESKTOP_SESSION_ID = this-is-deprecatedGDM_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/:
Merci à l'avance.
Guimauve
Re: application collaborative de gestion de code source
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
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
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"
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"
-
Geo Trouvpatou
- Messages : 471
- Inscription : dim. 23/déc./2007 18:10
Re: application collaborative de gestion de code source
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é :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.
Bye.
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 = "/"
CompilerEndSelectVoici 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.
Dernière modification par Geo Trouvpatou le mer. 12/oct./2011 14:00, modifié 2 fois.
Re: application collaborative de gestion de code source
merci beaucoup GeoTrouvpatou !! 
Re: application collaborative de gestion de code source
Bonjour à tous,
Voici la procédure de création de répertoire que j'avais fait pour plusieurs de mes programmes.
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
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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<A+
Guimauve