【Management】日本語版のグループポリシー設定リストを"作ってみる"(番外)~ すべて機械翻訳で
日本語版グループポリシー設定リストを作ろう!シリーズの番外編です。ここまでの投稿は以下の通りです。
- 【Management】日本語版のグループポリシー設定リストを"作ってみる" 1/3 ~ ランゲージポータルを使う
- 【Management】日本語版のグループポリシー設定リストを"作ってみる" 2/3 ~ Translation Glossary を辞書として使う
- 【Management】日本語版のグループポリシー設定リストを"作ってみる" 3/3 ~ 機械翻訳併用
できるだけ品質の良い日本語版を作成するため、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 = "https://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 が存在すると、それで一気に品質が落ちます。当然といえば当然ですが...。