前回の続きです。
なんとか機械的に Group Policy Settings Reference for Windows and Windows Server を日本語に変換できないだろうか...と考えて思いついた方法の2つ目です。
■ Translation Glossary を辞書として使用する(TechNet/MSDN 契約者限定なのです。。。)
Translation Glossary ってご存知ですか?ランゲージポータルにさりげなく書かれているのですが、要は「マイクロソフト製品で使用されている用語やメッセージの英語ー日本語対応表」が OS ごとに、CSVファイルで提供されているのです。 ってことは、PowerShell でちょちょいとスクリプトを組めば、Translation Glossary を辞書代わりにして、英語版のグループポリシー設定リストを日本語に置き換えることができそうです。 ただ、TechNet または MSDN のサブスクライバーでないと入手できませんし、再配布も禁止されていますのでここに添付することができません...。TechNet サブスクリプションの場合、以下から Translation Glossary をダウンロードできます。 [ツールとリソース]-[Translation Glossary] 中身はどんなかというと、テクノロジーや製品ごとにファイルが用意されています。その数392個。容量も全部で555MBと、かなりのボリュームになっています。 jpn-jpn-csv-.NETFramework2.0SP1.csv jpn-jpn-csv-.NETFramework3.5SP1.csv jpn-jpn-csv-.NETFramework4.csv (略) jpn-jpn-csv-ExpressionWeb4.csv jpn-jpn-csv-FirewallClientforISAServer.csv jpn-jpn-csv-FlightSimulator_X.csv (略) jpn-jpn-csv-MicrosoftOfficeDocumentImaging2007SP2.csv jpn-jpn-csv-OfficeLiveWorkspaceSV4.csv jpn-jpn-csv-OfficeOnlineClient2007.csv (略) jpn-jpn-csv-SQLServer2008R2.csv jpn-jpn-csv-SQLServerCompact3.5SP2.csv jpn-jpn-csv-SQLServerJDBCDriver3.0.csv (略) jpn-jpn-csv-Windows 7 (1).csv jpn-jpn-csv-Windows 7 (2).csv jpn-jpn-csv-Windows7UpgradeAdvisor2.csv (略)
Translation Glossary ってご存知ですか?ランゲージポータルにさりげなく書かれているのですが、要は「マイクロソフト製品で使用されている用語やメッセージの英語ー日本語対応表」が OS ごとに、CSVファイルで提供されているのです。
ってことは、PowerShell でちょちょいとスクリプトを組めば、Translation Glossary を辞書代わりにして、英語版のグループポリシー設定リストを日本語に置き換えることができそうです。
ただ、TechNet または MSDN のサブスクライバーでないと入手できませんし、再配布も禁止されていますのでここに添付することができません...。TechNet サブスクリプションの場合、以下から Translation Glossary をダウンロードできます。
[ツールとリソース]-[Translation Glossary]
中身はどんなかというと、テクノロジーや製品ごとにファイルが用意されています。その数392個。容量も全部で555MBと、かなりのボリュームになっています。
jpn-jpn-csv-.NETFramework2.0SP1.csv jpn-jpn-csv-.NETFramework3.5SP1.csv jpn-jpn-csv-.NETFramework4.csv (略) jpn-jpn-csv-ExpressionWeb4.csv jpn-jpn-csv-FirewallClientforISAServer.csv jpn-jpn-csv-FlightSimulator_X.csv (略) jpn-jpn-csv-MicrosoftOfficeDocumentImaging2007SP2.csv jpn-jpn-csv-OfficeLiveWorkspaceSV4.csv jpn-jpn-csv-OfficeOnlineClient2007.csv (略) jpn-jpn-csv-SQLServer2008R2.csv jpn-jpn-csv-SQLServerCompact3.5SP2.csv jpn-jpn-csv-SQLServerJDBCDriver3.0.csv (略) jpn-jpn-csv-Windows 7 (1).csv jpn-jpn-csv-Windows 7 (2).csv jpn-jpn-csv-Windows7UpgradeAdvisor2.csv (略)
ここで、jpn-jpn-csv-Windows 7 (1).csv というファイルに注目してください。その名の通り、このファイルには Windows 7 で使用されている日本語と英語の対応表が掲載されています。行数はざっと259万行! 膨大な量です。どうやら、Windows Server 2008 R2用のものは現時点では見当たらないですね。。。 ほんのちょっとだけファイルの中身をのぞいてみると、以下のような内容です。 A列 = 英語表記 C列 = 日本語表記 ってことをおさえておいてください。 ーーーーーーーーーーーーーーーー 一方、英語版の Group Policy Settings Reference for Windows and Windows Server はどんな構造かというと、EXCELファイルで提供されており、ポリシーの性質によって、2つのタブに分かれています。それぞれのタブの列一覧と内容は以下の通りです。 【Administrative Template(管理テンプレート)タブ】 ※EXCEL を操作するのは(私が)面倒なので、タブをCSVファイルとして保存しておいてください。ここでは、次のファイル名で保存したものとします。WndowsServer2008R2andWindows7GroupPolicySettings_AdministrativeTemplate.csv A列:File Name(templateファイル名) B列:Policy Setting Name(設定名)← 日本語化 C列:Scope(ターゲット) D列:Policy Path(設定ノードのパス) E列:Registry Information(レジストリのパス) F列:Supported On(サポートされているOS) G列:Help Text(設定内容の説明) ← 日本語化 H列:Reboot Required(有効にするために再起動が必要かどうか) I列:Logoff Required(有効にするためにログオンしなおしが必要かどうか) J列:Active Directory Schema or Domain Requirements(ADのみで有効かどうか)
ここで、jpn-jpn-csv-Windows 7 (1).csv というファイルに注目してください。その名の通り、このファイルには Windows 7 で使用されている日本語と英語の対応表が掲載されています。行数はざっと259万行! 膨大な量です。どうやら、Windows Server 2008 R2用のものは現時点では見当たらないですね。。。
ほんのちょっとだけファイルの中身をのぞいてみると、以下のような内容です。
A列 = 英語表記 C列 = 日本語表記
ってことをおさえておいてください。
ーーーーーーーーーーーーーーーー
一方、英語版の Group Policy Settings Reference for Windows and Windows Server はどんな構造かというと、EXCELファイルで提供されており、ポリシーの性質によって、2つのタブに分かれています。それぞれのタブの列一覧と内容は以下の通りです。
【Administrative Template(管理テンプレート)タブ】
※EXCEL を操作するのは(私が)面倒なので、タブをCSVファイルとして保存しておいてください。ここでは、次のファイル名で保存したものとします。WndowsServer2008R2andWindows7GroupPolicySettings_AdministrativeTemplate.csv
【Security タブ】 ※EXCELファイルを操作するのは(私が)面倒なので、タブをCSVファイルとして保存しておいてください。ここでは次のファイル名で保存したものとします。WindowsServer2008R2andWindows7GroupPolicySettings_security.csv A列:Policy Path(設定ノードのパス) B列:Policy Name(設定名)←日本語化 C列:Supported On(サポートされているOS) D列:Registry Settings(レジストリのパス) E列:Help Text(設定内容の説明)←日本語化 F列:Reboot Required(有効にするために再起動が必要かどうか) G列:Comments(コメント)←日本語化 ーーーーーーーーーーーーーーーー さて、これで方針は決まりました。 スクリプトを作成する前に、以下のファイルが存在していることを確認してください。
【Security タブ】
※EXCELファイルを操作するのは(私が)面倒なので、タブをCSVファイルとして保存しておいてください。ここでは次のファイル名で保存したものとします。WindowsServer2008R2andWindows7GroupPolicySettings_security.csv
さて、これで方針は決まりました。
スクリプトを作成する前に、以下のファイルが存在していることを確認してください。
ーーーーーーーーーーーーーーーー 上記の3つのファイルを使用して、PowerShell で作成したスクリプトが以下の通りです。コメント欄に簡単に解説を加えておきます。ご覧のとおり、非常にシンプルです。 $japaneseFile = '.\jpn-jpn-csv-Windows 7 (1).csv' $englishFile_Security = '.\WindowsServer2008R2andWindows7GroupPolicySettings_security.csv' $englishFile_adm = '.\WindowsServer2008R2andWindows7GroupPolicySettings_AdministrativeTemplate.csv' #日本語ファイルをCSVファイルとして読み込む。各列は a~k とする。 $jpnfile = Import-Csv $japaneseFile -Header "a","b","c","d","e","f","g","h","i","j","k" #ハッシュテーブルを作成し、a列をキーとして、c列を格納 $jpnfile_hash = @{} $jpnfile |foreach-object { if ($jpnfile_hash.ContainsKey($_.a) -eq $false ){ $jpnfile_hash.add($_.a,$_.c) } } # セキュリティポリシー一覧ファイルをCSVとして読み込む。各列は a~g とする。 $enfile = Import-Csv $englishfile_Security -Header "a","b","c","d","e","f","g" # 読み込んだファイルから1行ずつ取り出し、日本語化したい列をハッシュテーブルのキーをベースに置換する ForEach($item in $enfile) { if ($jpnfile_hash.ContainsKey($item.b.replace("`n","\r\n")) ) { $item.b = $jpnfile_hash.Get_Item($item.b.replace("`n","\r\n")) } if ($jpnfile_hash.ContainsKey($item.e.replace("`n","\r\n")) ) { $item.e = $jpnfile_hash.Get_Item($item.e.replace("`n","\r\n")) } if ($jpnfile_hash.ContainsKey($item.g.replace("`n","\r\n")) ) { $item.g = $jpnfile_hash.Get_Item($item.g.replace("`n","\r\n")) } } # 置換後のデータを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) { if ($jpnfile_hash.ContainsKey($item.b.replace("`n","\r\n")) ) { $item.b = $jpnfile_hash.Get_Item($item.b.replace("`n","\r\n")) } if ($jpnfile_hash.ContainsKey($item.g.replace("`n","\r\n")) ) { $item.g = $jpnfile_hash.Get_Item($item.g.replace("`n","\r\n")) } } $enfileadm | Export-Csv gplistjp_adm.csv -encoding Default ちなみに、「replace("`n","\r\n")) 」が意味不明かと思います。実は、英語ファイルのほうには改行コードが含まれているところがある一方で、日本語では \r\n という文字に置換されているのです。なので、英語から読み込んだ値は、一旦 replace("`n","\r\n")) で日本語と同じ値にリプレイスしています。 上記スクリプトを実行した結果は以下の通りです。ご覧いただくとお分かりの通り、完璧じゃないんですよねぇ。原因は、微妙な文章の違い(複数形と単数形、ピリオドの有り無しなど)なので、目視すれば「あ、これ同じだ」とはわかるのですがプログラムでの判断は厳しいかんじです。テキストマイニングとかできる方だと、「これは同じ」とかできるのでしょうけど...。 さて、では、この変換しそこなった部分をどうするのか?やはり手作業なのか? いえ、そこでやっと機械翻訳の登場となるのです。前回の投稿で、意外と品質の良い変換をしてくれたアイツを使って完成させることにしましょう。 前回:【Management】日本語版のグループポリシー設定リストを"作ってみる" 1/3 ~ランゲージポータル編 次回:【Management】日本語版のグループポリシー設定リストを"作ってみる" 3/3 ~ 機械翻訳併用 編
上記の3つのファイルを使用して、PowerShell で作成したスクリプトが以下の通りです。コメント欄に簡単に解説を加えておきます。ご覧のとおり、非常にシンプルです。
$japaneseFile = '.\jpn-jpn-csv-Windows 7 (1).csv' $englishFile_Security = '.\WindowsServer2008R2andWindows7GroupPolicySettings_security.csv' $englishFile_adm = '.\WindowsServer2008R2andWindows7GroupPolicySettings_AdministrativeTemplate.csv'
#日本語ファイルをCSVファイルとして読み込む。各列は a~k とする。
$jpnfile = Import-Csv $japaneseFile -Header "a","b","c","d","e","f","g","h","i","j","k"
#ハッシュテーブルを作成し、a列をキーとして、c列を格納
$jpnfile_hash = @{} $jpnfile |foreach-object { if ($jpnfile_hash.ContainsKey($_.a) -eq $false ){ $jpnfile_hash.add($_.a,$_.c) } }
# セキュリティポリシー一覧ファイルをCSVとして読み込む。各列は a~g とする。
$enfile = Import-Csv $englishfile_Security -Header "a","b","c","d","e","f","g"
# 読み込んだファイルから1行ずつ取り出し、日本語化したい列をハッシュテーブルのキーをベースに置換する
ForEach($item in $enfile) { if ($jpnfile_hash.ContainsKey($item.b.replace("`n","\r\n")) ) { $item.b = $jpnfile_hash.Get_Item($item.b.replace("`n","\r\n")) }
if ($jpnfile_hash.ContainsKey($item.e.replace("`n","\r\n")) ) { $item.e = $jpnfile_hash.Get_Item($item.e.replace("`n","\r\n")) } if ($jpnfile_hash.ContainsKey($item.g.replace("`n","\r\n")) ) { $item.g = $jpnfile_hash.Get_Item($item.g.replace("`n","\r\n")) } }
# 置換後のデータを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) { if ($jpnfile_hash.ContainsKey($item.b.replace("`n","\r\n")) ) { $item.b = $jpnfile_hash.Get_Item($item.b.replace("`n","\r\n")) }
if ($jpnfile_hash.ContainsKey($item.g.replace("`n","\r\n")) ) { $item.g = $jpnfile_hash.Get_Item($item.g.replace("`n","\r\n")) } } $enfileadm | Export-Csv gplistjp_adm.csv -encoding Default
ちなみに、「replace("`n","\r\n")) 」が意味不明かと思います。実は、英語ファイルのほうには改行コードが含まれているところがある一方で、日本語では \r\n という文字に置換されているのです。なので、英語から読み込んだ値は、一旦 replace("`n","\r\n")) で日本語と同じ値にリプレイスしています。
上記スクリプトを実行した結果は以下の通りです。ご覧いただくとお分かりの通り、完璧じゃないんですよねぇ。原因は、微妙な文章の違い(複数形と単数形、ピリオドの有り無しなど)なので、目視すれば「あ、これ同じだ」とはわかるのですがプログラムでの判断は厳しいかんじです。テキストマイニングとかできる方だと、「これは同じ」とかできるのでしょうけど...。
さて、では、この変換しそこなった部分をどうするのか?やはり手作業なのか?
いえ、そこでやっと機械翻訳の登場となるのです。前回の投稿で、意外と品質の良い変換をしてくれたアイツを使って完成させることにしましょう。
前回:【Management】日本語版のグループポリシー設定リストを"作ってみる" 1/3 ~ランゲージポータル編
次回:【Management】日本語版のグループポリシー設定リストを"作ってみる" 3/3 ~ 機械翻訳併用 編