【Management】日本語版のグループポリシー設定リストを"作ってみる"(番外)~ すべて機械翻訳で

日本語版グループポリシー設定リストを作ろう!シリーズの番外編です。ここまでの投稿は以下の通りです。

できるだけ品質の良い日本語版を作成するため、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 が存在すると、それで一気に品質が落ちます。当然といえば当然ですが...。