日本語版グループポリシー設定リストを作ろう!シリーズの番外編です。ここまでの投稿は以下の通りです。
できるだけ品質の良い日本語版を作成するため、Translation Glossary と機械翻訳を併用してきましたが、Translation Glossary はTechNet/MSDNサブスクリプション保持者に限られています。
そこで、全てを機械翻訳で作成する PowerShell スクリプトも作成してみました。たいしたスクリプトじゃありませんが。
ご参考ということで。
#BING翻訳で機械翻訳 function Get-Translation { param([parameter(ValueFromPipeline=$true)] [String] $text = "At least Windows Vista")
$w = new-object system.net.webclient $enc = [Text.Encoding]::GetEncoding("utf-8") $appid = "CEE3EAA3CB489C1794960D1D310BB094B4A50B19" $from = "en" $to = "ja" $contentType = "text/plain" $category = "general" $api = "http://api.microsofttranslator.com/V2/Http.svc/Translate" $url = "{0}?appID={1}&from={2}&to={3}&text={4}&contentType={5}&category={6}" -f $api, $appid, $from, $to, $text, $contentType, $category $h = $enc.GetString($w.DownloadData($url)) if ($h -ne $null) { Write-Host ([xml]$h).string.get_Innertext() return ([xml]$h).string.get_Innertext() } else { Write-Host $text return $text } }
# 一度翻訳したものは再利用できるようハッシュテーブルに格納 function KeepInTable { param([String] $enKey, [String] $jaValue)
if ($jpnfile_hash.ContainsKey($enKey) -eq $false ) { $jpnfile_hash.add($enKey,$jaValue) } }
cls $jpnfile_hash = @{}
# Group Policy Settings Reference for Windows and Windows Server の各タブをCSVで保存したファイルを入力とする $englishFile_Security = '.\WindowsServer2008R2andWindows7GroupPolicySettings_security.csv' $englishFile_adm = '.\WindowsServer2008R2andWindows7GroupPolicySettings_AdministrativeTemplate.csv'
# #Securityタブの変換 #
# セキュリティポリシー一覧ファイルをCSVとして読み込む。各列は a~g とする。 $enfile = Import-Csv $englishfile_Security -Header "a","b","c","d","e","f","g"
# 読み込んだファイルから1行ずつ取り出し、日本語化したい列をBING翻訳のTranslateメソッドで翻訳する ForEach($item in $enfile) { #改行コードをピリオドに置換 $enItem_b = $item.b.replace("`n",".") $enItem_e = $item.e.replace("`n",".") $enItem_g = $item.g.replace("`n",".") if ($jpnfile_hash.ContainsKey($enItem_b) ) { $item.b = $jpnfile_hash.Get_Item($enItem_b) } else { $item.b = Get-Translation ($enItem_b).toString() KeepInTable $enItem_b $Item.b } if ($jpnfile_hash.ContainsKey($enItem_e) ) { $item.e = $jpnfile_hash.Get_Item($enItem_e) } else { $item.e = Get-Translation ($enItem_e).toString() KeepInTable $enItem_e $Item.e } if ($enItem_g -ne "") { if ($jpnfile_hash.ContainsKey($enItem_g)) { $item.g = $jpnfile_hash.Get_Item($enItem_g) } else { $item.g = Get-Translation ($enItem_g).toString() KeepInTable $enItem_e $Item.g } } }
# 置換後のデータをCSVファイルに保存
$enfile | Export-Csv gplistjp_security.csv -encoding Default
# # 管理ポリシーファイルも同様の処理 #
$enfileadm = Import-Csv $englishfile_adm -Header "a","b","c","d","e","f","g","h","i","j"
ForEach($item in $enfileadm) { $enItem_b = $item.b.replace("`n",".") $enItem_g = $item.g.replace("`n",".")
if ($jpnfile_hash.ContainsKey($enItem_b)) { $item.b = $jpnfile_hash.Get_Item($enItem_b) } else { $item.b = Get-Translation ($enItem_b).ToString() KeepInTable $enItem_b $Item.b }
if ($jpnfile_hash.ContainsKey($enItem_g)) { $item.g = $jpnfile_hash.Get_Item($enItem_g) } else { $item.g = Get-Translation ($enItem_g).ToString() KeepInTable $enItem_g $Item.g }
}
$enfileadm | Export-Csv gplistjp_adm.csv -encoding Default
機械翻訳で実行した場合の感想ですが、元の英語に影響されることが多いようですね。英語の Typo が存在すると、それで一気に品質が落ちます。当然といえば当然ですが...。