Question Comment retrouver les ressources localisées ?
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6298
- Remerciements reçus 68
il y a 8 ans 10 mois #18804
par Laurent Dardenne
Tutoriels PowerShell
Comment retrouver les ressources localisées ? a été créé par Laurent Dardenne
Le code suivant permet de retrouver les ressources localisées des assemblies Powershell :
[code:1]
#Adapté de CmdletExtensionLibrary.ps1 de Kirk Munro
Import-Module PSWorkflow
#Force le chargement de
#Microsoft.PowerShell.Activities.resources.dll
Workflow Test { $args;\"Test erreur\"}
$ResourceString=@{}
[appdomain]::currentdomain.GetAssemblies()|
Where {$_.location -match \"resources.dll$\"}| #récupère uniquement les assemblies resources
Foreach {
$CurrentAssembly=$_
Write-verbose $CurrentAssembly.Location
#On ne prend, dans le nom de fichier assembly, que la partie 'namespace'
#et on remplace les points par des tirets
$AssemblyName=(split-path $_.Location -leaf).Replace(\".resources.dll\",\"\"«»).Replace(\".\",\"_\"«»)
Write-Debug $AssemblyName
$ResourceString.\"$AssemblyName\"=@{}
$ResourceString.\"$AssemblyName\"=$ResourceString.\"$AssemblyName\"| Add-Member NoteProperty Location $_.Location -pass
#récupère les noms des ressources du fichier resources courant
$_.GetManifestResourceNames()|
Foreach {
$CurrentResourceName=$_
#Supprime le postfixe
$ResourceName= $_ -replace '.resources$',\"\"
$ResourceNameH=$ResourceName.Replace(\".\",\"_\"«»)
Write-Debug \"`t$ResourceName\"
$ResourceString.\"$AssemblyName\".\"$ResourceNameH\"=@{}
#Crée un gestionnaire de ressources
$rm=new-object System.Resources.ResourceManager($ResourceName,$CurrentAssembly)
#récupère les ressources du fichier courant
($rm.GetResourceSet((Get-Culture),$true,$true)).GetEnumerator()|
Foreach {
$NameKeyResource=$_.Key.Replace(\".\",\"-\"«»)
Write-debug \"`t`t$NameKeyResource\"
#Insére la clé et la valeur dans la table
$ResourceString.\"$AssemblyName\".\"$ResourceNameH\".\"$NameKeyResource\"=$_.Value
}
}
}
[/code:1]
Lister les clés des hashtables imbriquées :
[code:1]
$ResourceString.getenumerator()|% {
$Level1=$_.Name
$_.Value.getenumerator()|% {
$Level2=$_.Name
$_.Value.getenumerator()|? Name -match 'supported'|% { \"$level1.$level2.\"+ $_.Name}
}
}
[/code:1]
Retrouver les possibles messages d'erreur, entre autres, lors du parsing d'un workflow :
[code:1]
$ResourceString.Microsoft_PowerShell_Activities.ActivityResources_fr.GetEnumerator()|
? name -ne 'Xml_cmdletsOverObjectsXsd'|
fl name,value
#Exemple d'accés à une des clés listées
$ResourceString.Microsoft_PowerShell_Activities.ActivityResources_fr.SubExpressionNotSupported
[/code:1]
La clé suivante contient la version du XSD utilisé lors de la génération d'un fichier CDXML :
[code:1]
$ResourceString.Microsoft_PowerShell_Activities.ActivityResources_fr.Xml_cmdletsOverObjectsXsd
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 10/02/15 10:26
[code:1]
#Adapté de CmdletExtensionLibrary.ps1 de Kirk Munro
Import-Module PSWorkflow
#Force le chargement de
#Microsoft.PowerShell.Activities.resources.dll
Workflow Test { $args;\"Test erreur\"}
$ResourceString=@{}
[appdomain]::currentdomain.GetAssemblies()|
Where {$_.location -match \"resources.dll$\"}| #récupère uniquement les assemblies resources
Foreach {
$CurrentAssembly=$_
Write-verbose $CurrentAssembly.Location
#On ne prend, dans le nom de fichier assembly, que la partie 'namespace'
#et on remplace les points par des tirets
$AssemblyName=(split-path $_.Location -leaf).Replace(\".resources.dll\",\"\"«»).Replace(\".\",\"_\"«»)
Write-Debug $AssemblyName
$ResourceString.\"$AssemblyName\"=@{}
$ResourceString.\"$AssemblyName\"=$ResourceString.\"$AssemblyName\"| Add-Member NoteProperty Location $_.Location -pass
#récupère les noms des ressources du fichier resources courant
$_.GetManifestResourceNames()|
Foreach {
$CurrentResourceName=$_
#Supprime le postfixe
$ResourceName= $_ -replace '.resources$',\"\"
$ResourceNameH=$ResourceName.Replace(\".\",\"_\"«»)
Write-Debug \"`t$ResourceName\"
$ResourceString.\"$AssemblyName\".\"$ResourceNameH\"=@{}
#Crée un gestionnaire de ressources
$rm=new-object System.Resources.ResourceManager($ResourceName,$CurrentAssembly)
#récupère les ressources du fichier courant
($rm.GetResourceSet((Get-Culture),$true,$true)).GetEnumerator()|
Foreach {
$NameKeyResource=$_.Key.Replace(\".\",\"-\"«»)
Write-debug \"`t`t$NameKeyResource\"
#Insére la clé et la valeur dans la table
$ResourceString.\"$AssemblyName\".\"$ResourceNameH\".\"$NameKeyResource\"=$_.Value
}
}
}
[/code:1]
Lister les clés des hashtables imbriquées :
[code:1]
$ResourceString.getenumerator()|% {
$Level1=$_.Name
$_.Value.getenumerator()|% {
$Level2=$_.Name
$_.Value.getenumerator()|? Name -match 'supported'|% { \"$level1.$level2.\"+ $_.Name}
}
}
[/code:1]
Retrouver les possibles messages d'erreur, entre autres, lors du parsing d'un workflow :
[code:1]
$ResourceString.Microsoft_PowerShell_Activities.ActivityResources_fr.GetEnumerator()|
? name -ne 'Xml_cmdletsOverObjectsXsd'|
fl name,value
#Exemple d'accés à une des clés listées
$ResourceString.Microsoft_PowerShell_Activities.ActivityResources_fr.SubExpressionNotSupported
[/code:1]
La clé suivante contient la version du XSD utilisé lors de la génération d'un fichier CDXML :
[code:1]
$ResourceString.Microsoft_PowerShell_Activities.ActivityResources_fr.Xml_cmdletsOverObjectsXsd
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 10/02/15 10:26
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6298
- Remerciements reçus 68
il y a 8 ans 9 mois #18984
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Comment retrouver les ressources localisées ?
Une correction permettant de charger les ressources de Workflow :
[code:1]
Import-Module PSWorkflow
#Force le chargement de
#Microsoft.PowerShell.Activities.resources.dll
Workflow Test { $args;\"Test erreur\"}
[/code:1]
[code:1]
Import-Module PSWorkflow
#Force le chargement de
#Microsoft.PowerShell.Activities.resources.dll
Workflow Test { $args;\"Test erreur\"}
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.068 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- Comment retrouver les ressources localisées ?