Question Localisation d'un script en plusieurs langues
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Le mieux est l'ennemi du bienJe suis allé au plus simple
janel écrit:
Je n'en ai pas vraiment en tête mais je me disais qu'il vallait mieux, encore lui, proposer le texte soit filtré soit sans filtrage. Et ainsi laisser l'utilisateur décider.Hmmm, pourquoi pas, mais peux-tu préciser dans quel cas ça te serait utile?
janel écrit:
Dans le tuto en question j'ai abordé les streams comme une possible solution de stockage de ressource mais ce que je proposais était basé sur un fichier de ressources .NETLe principe des ressources basé sur les streams NTFS nécessite d'installer NTFS.DLL sur les postes.
janel écrit:
Effectivement c'est pourquoi je n'utilise pas cette option.Et je ne l'ai peut être pas préciser dans le tutoce qui peut provoquer des pertes de données si, par exemple, on fait un malencontreux copier/coller du fichier sans penser à récupérer ses streams.
En passant, l'outil PrimalScript associe de nombreux streams à un script crée dans leur éditeur.
janel écrit:
Je suis en train de travailler +- sur le sujet sur la ctp3 :qui n'est pas renseignée dans la v2...
[code:1]
function Get-Caller
{
(Get-Variable MyInvocation -Scope 1).Value
}
$C=Get-Caller
$C
# MyCommand : Main.ps1
# BoundParameters : {}
# UnboundArguments : {}
# ScriptLineNumber : 1
# OffsetInLine : 11
# ScriptName :
# Line : .\Main.ps1
# PositionMessage :
# At line:1 char:11
# + .\Main.ps1 <<<<
# InvocationName : .\Main.ps1
# PipelineLength : 1
# PipelinePosition : 1
# ExpectingInput : False
# CommandOrigin : Runspace
[/code:1]
A l'origine c'est une solution proposée par J.Snoover.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
oups, cela ne règle rien.A l'origine c'est une solution proposée par J.Snoover.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
[code:1]
$myinvocation.MyCommand.Definition
[/code:1]
Et l'appel dans test-local doit être
[code:1]. .\import-localizeddata.ps1[/code:1]
Sinon l'appel se fait sur le cmdlet et pas sur la fonction.
Je n'ai pas testé sous la V1.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Auteur du sujet
- Hors Ligne
- Administrateur
-
- Messages : 576
- Remerciements reçus 0
Comme les fonctionnalités de la v1 sont censées être toujours supportées dans la v2, j'ai signalé le problème et un bug a été ouvert. A suivre...
En attendant, j'ai ajouté un test à ma fonction pour qu'elle puisse servir telle quelle sous les deux versions - au passage, je l'ai renommée en import-culturaldata pour éviter le conflit avec import-localizeddata sous la v2 :
[code:1]
function import-culturaldata
{
param (
[string]$filename = [IO.Path]::GetFileNameWithoutExtension((split-path -leaf $myinvocation.MyCommand)),
[System.Globalization.CultureInfo]$UIculture = (get-UIculture)
)
if ($myInvocation.ScriptName) { $scriptname = $myInvocation.ScriptName }
else { $scriptname = $myInvocation.MyCommand.Definition }
$fullpath = $(split-path $ScriptName) + \"\$UIculture\$filename\" + \".psl1\"
$ht = @{}
get-content $fullpath | where {($_.TrimStart()) -ne \"\" -and ($_.TrimStart())[0] -ne \"#\"} | foreach {
$key, $value = $_.Split(\"=\", 2)
$ht.Add($key.Trim(), $value.TrimStart())
}
$ht
}
[/code:1]
Janel
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
[code:1]
Welcome_2 = {0} : {1}
Prompt_2 = $Prompt
Prompt2_2 = `$V2Prompt
Success_2 = `tSuccess`r`n
[/code:1]
Pour le premier pas de soucis :
[code:1]
$messages.Welcome_2 -f \"1\",\"2\"
#1 : 2
[/code:1]
Pour l'avant-dernier un appel à ExpandString suffit :
[code:1]
$Prompt=\"Indirection\"
$ExecutionContext.InvokeCommand.ExpandString($messages.Prompt_2)
#Indirection
[/code:1]
Pour le dernier Success_2 je n'ai pas trouvé mieux que ceci pour récupèrer la chaîne attendue :
[code:1]
$S=&$ExecutionContext.InvokeCommand.NewScriptBlock(\"`$ExecutionContext.InvokeCommand.ExpandString(`\"$($messages.Success_2)`\"«»)\"«»)
$S
# Success
#
[/code:1]
Connais-tu une approche plus simple dans ce cas ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Auteur du sujet
- Hors Ligne
- Administrateur
-
- Messages : 576
- Remerciements reçus 0
Janel
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- Localisation d'un script en plusieurs langues