Question Localisation d'un script en plusieurs langues
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 1 mois #4071
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Localisation d'un script en plusieurs langues
Pour les postes Windows non-latin, je pense me baser sur ce code :
[code:1]
#Détermine si une chaîne de caractère unicode, contenant la date du jour, est dans une page de code latine
$Datas=$Datas|add-member NoteProperty IsBasicLatin ((get-date -uf %A) -match \"\p{IsBasicLatin}\" ) -pass
#Détermine si le fichier de données est celui par défaut
$Datas=$Datas|add-member NoteProperty IsDefaultCulture ($isDefaultCulture) -pass
$Datas=$Datas|add-member ScriptMethod Get {
#Args[0] contient par convention la clé de la Hashtable
# -F recoit un tableau de string
$Text=$this.Item($Args[0]) -F $Args[1..($Args.Count-1)]
# Exemple pour l'entrée : NullParameter={0} : le paramètre {1} est à null.
# $Datas.Get(\"NullParameter\",\"Getlogger\", \"Logger\"«»)
#Si on passe à la fonction de formatage plus de paramètres que nécessaire cela ne pose pas de problème
#La culture par défaut n'est pas latine, on formate le message avec la culture invariante.
#\"La propriété CultureInfo.InvariantCulture n'est ni une culture neutre, ni une culture spécifique.
#Cette culture d'un troisième type pourrait être qualifiée d'indifférente.
#En effet, la culture invariante est associée à la langue anglaise, mais non à un pays ou à une région\".
if ( ($this.IsDefaultCulture) -and ($this.IsBasicLatin -eq $false) )
{ [String]::Format($Text, [System.Globalization.CultureInfo]::InvariantCulture) }
} -pass
[/code:1]
Reste à vérifier la pertinence de cet ajout...
[code:1]
#Détermine si une chaîne de caractère unicode, contenant la date du jour, est dans une page de code latine
$Datas=$Datas|add-member NoteProperty IsBasicLatin ((get-date -uf %A) -match \"\p{IsBasicLatin}\" ) -pass
#Détermine si le fichier de données est celui par défaut
$Datas=$Datas|add-member NoteProperty IsDefaultCulture ($isDefaultCulture) -pass
$Datas=$Datas|add-member ScriptMethod Get {
#Args[0] contient par convention la clé de la Hashtable
# -F recoit un tableau de string
$Text=$this.Item($Args[0]) -F $Args[1..($Args.Count-1)]
# Exemple pour l'entrée : NullParameter={0} : le paramètre {1} est à null.
# $Datas.Get(\"NullParameter\",\"Getlogger\", \"Logger\"«»)
#Si on passe à la fonction de formatage plus de paramètres que nécessaire cela ne pose pas de problème
#La culture par défaut n'est pas latine, on formate le message avec la culture invariante.
#\"La propriété CultureInfo.InvariantCulture n'est ni une culture neutre, ni une culture spécifique.
#Cette culture d'un troisième type pourrait être qualifiée d'indifférente.
#En effet, la culture invariante est associée à la langue anglaise, mais non à un pays ou à une région\".
if ( ($this.IsDefaultCulture) -and ($this.IsBasicLatin -eq $false) )
{ [String]::Format($Text, [System.Globalization.CultureInfo]::InvariantCulture) }
} -pass
[/code:1]
Reste à vérifier la pertinence de cet ajout...
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Auteur du sujet
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 17 ans 1 mois #4072
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Localisation d'un script en plusieurs langues
Hello Laurent,
Désolé pour le manque de suivi sur ce fil. Merci en tout cas pour l'intérêt porté à ce modeste bout de script.
Quant à tes (nombreuses
) questions, il faudra que je regarde ça dans les prochains jours. Je reviendrai poster mes observations et mes modifs le cas échéant.
Janel
Désolé pour le manque de suivi sur ce fil. Merci en tout cas pour l'intérêt porté à ce modeste bout de script.
Quant à tes (nombreuses
Janel
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 1 mois #4073
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Localisation d'un script en plusieurs langues
janel écrit:
Je continue de creuser le sujet; En regardant ce blog , du traducteur chinois de PowerGUI, on peut voir que l'affichage de l'alphabet latin ne semble pas poser de pb dans une console PowerShell localisée, enfin si toutefois elle l'est vraiment et n'est pas une console US avec le langage chinois.
Si les mots-clé du langage PS ne sont pas localisés, comment signifier Get-Item en chinois
, l'usage de la culture invariant répondra parfaitement je pense.
En attendant je vais consulter ces infos sur la globalisation/localisation d'application.
Comme je vais placer sur CodePlex les scripts du wrapper PS pour Log4Net, j'aurais peut être un retour sur ce point.
Du coup j'ajoute ton script original et celui à ma sauce dans la distribution de ce projet.
Et enfin si j'ai le temps je tenterais d'installer une version non-latine de Windows sous virtualPC...<br><br>Message édité par: Laurent Dardenne, à: 16/02/09 18:33
Il est peut être modeste mais répond à un vrai besoin, les choses simples sont souvent les plus utiles, de plus on trouve peu d'info sur la localisation de script en V1.Merci en tout cas pour l'intérêt porté à ce modeste bout de script.
Je continue de creuser le sujet; En regardant ce blog , du traducteur chinois de PowerGUI, on peut voir que l'affichage de l'alphabet latin ne semble pas poser de pb dans une console PowerShell localisée, enfin si toutefois elle l'est vraiment et n'est pas une console US avec le langage chinois.
Si les mots-clé du langage PS ne sont pas localisés, comment signifier Get-Item en chinois
En attendant je vais consulter ces infos sur la globalisation/localisation d'application.
Comme je vais placer sur CodePlex les scripts du wrapper PS pour Log4Net, j'aurais peut être un retour sur ce point.
Du coup j'ajoute ton script original et celui à ma sauce dans la distribution de ce projet.
Et enfin si j'ai le temps je tenterais d'installer une version non-latine de Windows sous virtualPC...<br><br>Message édité par: Laurent Dardenne, à: 16/02/09 18:33
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 1 mois #4082
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Localisation d'un script en plusieurs langues
Après pas mal de recherche, je suis tombé sur
ceci
mais pour la console cmd.exe:
[code:1]
# Windows PowerShell Cookbook
# my.safaribooksonline.com/9780596528492/p...alter?portal=oreilly
function Set-Culture(
[System.Globalization.CultureInfo] $culture =
$(throw \"Please specify a culture\"«»),
[ScriptBlock] $script = $(throw \"Please specify a scriptblock\"«»)
)
{
## A helper function to set the current culture
function SetCulture([System.Globalization.CultureInfo] $culture)
{
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
}
## Remember the original culture information
$oldCulture = [System.Threading.Thread]::CurrentThread.CurrentUICulture
## Restore the original culture information if
## the user's script encounters errors.
trap { SetCulture $oldCulture }
## Set the current culture to the user's provided
## culture.
SetCulture $culture
## Invoke the user's scriptblock
& $script
## Restore the original culture information.
SetCulture $oldCulture
}
[/code:1]
Si on affiche la date en grec ou en russe, l'affichage est erroné :
[code:1]
Set-Culture el-GR {get-date;(get-date).ToString(\"U\", [System.Globalization.CultureInfo]::InvariantCulture)}
#???t?, 17 Feß???a???? 2009 3:06:33 µµ
#Tuesday, 17 February 2009 14:06:33
Set-Culture ru-RU {get-date;(get-date).ToString(\"U\", [System.Globalization.CultureInfo]::InvariantCulture)}
#17 ??????? 2009 ?. 15:07:00
#Tuesday, 17 February 2009 14:07:00
[/code:1]
En modifiant la police de la fenêtre de PS en \"Lucida Console\", le résultat est correct.
On peut visualiser les caractères de cette police par exemple sous Word, menu \"Insertion-Caractères spéciaux\", onglet Symbole, listbox \"Police\" et \"Sous-ensemble\".
En utilisant la listbox \"Sous-ensemble\" on voit que les polices Windows telles que Arial contiennent l'Arabe, l'hébreu, etc, mais que la police Lucida ne contient pas ces sous-ensembles.
[code:1]
#Sous Joomla l'affichage du russe et du grec ne passe pas...
Set-Culture en-US {get-date;(get-date).ToString(\"U\", [System.Globalization.CultureInfo]::InvariantCulture)}
#Tuesday, February 17, 2009 3:08:27 PM
#Tuesday, 17 February 2009 14:08:27
get-date
#mardi 17 février 2009 15:08:28
[/code:1]
Pour le dernier on voit que la date affichée avec l'invariant ne respecte pas l'heure d'hiver mais la première semble respecter le fuseau horaire.
Sinon la syntaxe suivante ne renvoie pas la date au format invariant :
[code:1]
Set-Culture el-gr {get-date;[String]::Format(\"{0:F}\",$(get-date), [System.Globalization.CultureInfo]::InvariantCulture)}
[/code:1]
Donc pour d'autres tests je dois installer, je pense, un Windows US MUI + les packages des langues à tester, et PS US + les packages MUI...<br><br>Message édité par: Laurent Dardenne, à: 17/02/09 15:55
Je pense que pour utiliser ces langues sur une version Fr la question est réglée. Ensuite pour l'affichage dans la console du grec ou du cyrillique on utilisera la fonction de test suivante :This behavior is by design. Arabic and Hebrew (and for that matter Thai, Hindi, and other complex scripts) are not supported on Windows 2000 and Windows XP console.
[code:1]
# Windows PowerShell Cookbook
# my.safaribooksonline.com/9780596528492/p...alter?portal=oreilly
function Set-Culture(
[System.Globalization.CultureInfo] $culture =
$(throw \"Please specify a culture\"«»),
[ScriptBlock] $script = $(throw \"Please specify a scriptblock\"«»)
)
{
## A helper function to set the current culture
function SetCulture([System.Globalization.CultureInfo] $culture)
{
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
}
## Remember the original culture information
$oldCulture = [System.Threading.Thread]::CurrentThread.CurrentUICulture
## Restore the original culture information if
## the user's script encounters errors.
trap { SetCulture $oldCulture }
## Set the current culture to the user's provided
## culture.
SetCulture $culture
## Invoke the user's scriptblock
& $script
## Restore the original culture information.
SetCulture $oldCulture
}
[/code:1]
Si on affiche la date en grec ou en russe, l'affichage est erroné :
[code:1]
Set-Culture el-GR {get-date;(get-date).ToString(\"U\", [System.Globalization.CultureInfo]::InvariantCulture)}
#???t?, 17 Feß???a???? 2009 3:06:33 µµ
#Tuesday, 17 February 2009 14:06:33
Set-Culture ru-RU {get-date;(get-date).ToString(\"U\", [System.Globalization.CultureInfo]::InvariantCulture)}
#17 ??????? 2009 ?. 15:07:00
#Tuesday, 17 February 2009 14:07:00
[/code:1]
En modifiant la police de la fenêtre de PS en \"Lucida Console\", le résultat est correct.
On peut visualiser les caractères de cette police par exemple sous Word, menu \"Insertion-Caractères spéciaux\", onglet Symbole, listbox \"Police\" et \"Sous-ensemble\".
En utilisant la listbox \"Sous-ensemble\" on voit que les polices Windows telles que Arial contiennent l'Arabe, l'hébreu, etc, mais que la police Lucida ne contient pas ces sous-ensembles.
[code:1]
#Sous Joomla l'affichage du russe et du grec ne passe pas...
Set-Culture en-US {get-date;(get-date).ToString(\"U\", [System.Globalization.CultureInfo]::InvariantCulture)}
#Tuesday, February 17, 2009 3:08:27 PM
#Tuesday, 17 February 2009 14:08:27
get-date
#mardi 17 février 2009 15:08:28
[/code:1]
Pour le dernier on voit que la date affichée avec l'invariant ne respecte pas l'heure d'hiver mais la première semble respecter le fuseau horaire.
Sinon la syntaxe suivante ne renvoie pas la date au format invariant :
[code:1]
Set-Culture el-gr {get-date;[String]::Format(\"{0:F}\",$(get-date), [System.Globalization.CultureInfo]::InvariantCulture)}
[/code:1]
Donc pour d'autres tests je dois installer, je pense, un Windows US MUI + les packages des langues à tester, et PS US + les packages MUI...<br><br>Message édité par: Laurent Dardenne, à: 17/02/09 15:55
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 1 mois #4090
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Localisation d'un script en plusieurs langues
Pour le dernier test, il faut inverser les paramètres :
[code:1]Set-Culture el-GR {get-date;[String]::Format([System.Globalization.CultureInfo]::InvariantCult
ure,\"{0:F}\",(get-date))}[/code:1]
Une maille à l'endroit, une maille à l'envers
[code:1]Set-Culture el-GR {get-date;[String]::Format([System.Globalization.CultureInfo]::InvariantCult
ure,\"{0:F}\",(get-date))}[/code:1]
Une maille à l'endroit, une maille à l'envers
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.065 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- Localisation d'un script en plusieurs langues