Question Localisation d'un script en plusieurs langues

Plus d'informations
il y a 17 ans 1 mois #3877 par Laurent Dardenne
janel écrit:

quelle version utilises-tu?

La V1 sous XP.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #3904 par Jacques Barathon
Je testerai ce soir, je te dirai si je vois une technique plus simple.

Janel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #3907 par Laurent Dardenne
janel écrit:

Je testerai ce soir, je te dirai si je vois une technique plus simple.

Merci.
De mon coté j'ai trouvé une autre approche avec regex.Escape et Unescape, mais dans ce cas il faut utiliser les caractères d'échapement du C/C# : [code:1]\tSuccess\r\n[/code:1]
Du coup soit je traite toutes les lignes ou je précise une convention pour les lignes à traiter, par exemple
[code:1]\Name=\tSuccess\r\n[/code:1]
Ce qui me gêne un peu :woohoo:
Et sur MS-Connect je n'ai pas trouvé de bug à ce sujet.<br><br>Message édité par: Laurent Dardenne, à: 3/02/09 17:56

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #4004 par Laurent Dardenne
Je me suis lancé dans la localisation du Wrapper Log4Net et il y a un cas de figure qui ne semble pas pris en charge.
Si je ne livre pas que les répertoires des langues US et Fr et qu'un poste configuré en Allemand utilise ce script alors le répertoire du nom de langue récupéré n'existe pas.
Pour éviter cette situation il est peut être préférable dans ce cas de préciser une langue par défaut, par exemple US.
Ainsi les messages d'erreurs sont bien renseignés.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #4005 par Jacques Barathon
Bien vu. Je mettrai à jour le script pour intégrer ce cas de figure.

Merci !

Janel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #4019 par Laurent Dardenne
Pour infos si on renseigne le nom de fichier de ressources, cela ne fonctionne pas:
[code:1]
$Global:messages = import-localizeddata \&quot;G:\PS\Log4NET\testlocal\fr-FR\PackageLog4Net.psl1\&quot; $myculture
[/code:1]
J'utilise ce cas car j'ai un script d'initialisation InitializeLG4N.ps1 et ce script charge le script PackageLog4Net.ps1 qui lui est localisé.
Le parsing suivant du nom de fichier ne se fait pas :
[code:1]$FileName = [IO.Path]::GetFileNameWithoutExtension((split-path -Leaf $MyInvocation.MyCommand))[/code:1]
Au passage sous PS V1, l'appel suivant suffit :
[code:1] [IO.Path]::GetFileNameWithoutExtension($MyInvocation.MyCommand)[/code:1]
Donc si on déplace cette instruction dans le corps du script pour tester les 2 cas, alors il faut interroger le scope de l'appelant :
[code:1]
write-host \&quot;FileName : $FileName\&quot; -fore green
$ParentInvocation = (Get-Variable MyInvocation -Scope 1).Value
write-host \&quot;Invoke $($ParentInvocation.MyCommand)\&quot; -fore green

if ($FileName -eq [String]::Empty)
{ $FileName=$ParentInvocation.MyCommand }
$FileName= [IO.Path]::GetFileNameWithoutExtension($FileName)
write-host \&quot;FileName : $FileName\&quot; -fore green
[/code:1]
De mon coté, pour faciliter la distinction des noms de fichiers j'ai renommé en DataFileName et CallerScriptName.

Une dernière, si une des ligne ne respecte pas la structure ChaîneClé=ChaîneContenu, par exemple ;test alors le script part en erreur, normal. Mais dans ce cas on a un peu de mal à savoir ce qui se passe.
Cas d'erreur :

;todo
=
A=
=B
t=#dir#
C#=Language

#tests pour unescape
K1=\t\Tabulation
K2=\t\Tabulation
K3=Tabulation\x
K4=Tabulation\z
K5=c:\test\fichier.txt
K6=\&quot;c:\test\fichier.txt\&quot;
#Seul le nom de fichier suivant est pris en compte sans erreur
K7=\&quot;c:\\test\\fichier.txt\&quot; #ce commentaire est inclus dans la valeur de la clé
\tK1=Tab

J'ai ajouté le contrôle suivant, pour les exceptions levées par $Ht.Add et $Value=[Regex]::Unescape :
[code:1]
...
Foreach {
trap [System.ArgumentException] {Write-error \&quot;$key=$value`r`n$($_.Exception.Message)\&quot;;Continue}
...
[/code:1]

Ensuite pour la chaîne d'origine suivante :
[code:1]Throw \&quot;Add-LogAppender : le paramètre Logger n'implémente pas l'interface ILoggerWrapper.\&quot;[/code:1]
je déclare la chaîne :

NotImplementInterface={0} : le paramètre {1} n'implémente pas l'interface {2}.

sa construction se fait par l'appel suivant :
[code:1]
throw $messages.NotImplementInterface -F \&quot;Add-LogAppender\&quot;,\&quot;Logger\&quot;,\&quot;ILoggerWrapper\&quot;
[/code:1]
Rien d'extraordinaire donc.
Si on souhaite effectuer d'autres traitements par exemple un expandstring, on peut créer une méthode sur la hashtable au lieu de créer des routines annexes (je suppose une seule hashtable de localisation par script):
[code:1]
$messages=$messages|add-member ScriptMethod Get {
#Args[0] contient par convention la clé de la Hashtable
# -F recoit un tableau de string
$this.Item($Args[0]) -F $Args[1..($Args.Count-1)]
# Exemple pour : NullParameter={0} : le paramètre {1} est à null.
# $Datas.Get(\&quot;NullParameter\&quot;,\&quot;Getlogger\&quot;, \&quot;Logger\&quot;«»)
#Si on passe à la fonction formatage plus de paramètres que nécessaire cela ne pose pas de pb
} -pass
$messages=$messages|add-member ScriptMethod ExpandString{
$ExecutionContext.InvokeCommand.ExpandString($this.Item($Args[0]) )
} -pass
#$messages=$messages|add-member ScriptMethod UnEscape, etc

#Appels
throw $messages.Get(\&quot;NotImplementInterface\&quot;,\&quot;Add-LogAppender\&quot;,\&quot;Logger\&quot;,\&quot;ILoggerWrapper\&quot;«»)
throw $messages.ExpandString(\&quot;FileError\&quot;«»)
[/code:1]
Il reste, je pense, un cas à étudier : J'utilise la culture par défaut US mais sur un poste configuré par exemple en cyrillique, en arabe ou en japonais.
Dans ce cas je ne sais pas ce que donnera l'affichage, j'ai donc relu ce post . A ton avis pour le tester l'installation d'une de ces pages de code suffit ?<br><br>Message édité par: Laurent Dardenne, à: 11/02/09 15:46

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.074 secondes
Propulsé par Kunena