• 【UX】フィールド SE にとっての UX(ユーザーエクスペリエンス)とは

    UX(ユーザーエクスペリエンス) なんて、およそ私の Blog とはかけ離れた内容なのですが、思い当たる節がいくつもあるので...

    まずは以下の記事をご覧ください。

    UX アクティビティ : ROI とユーザーエクスペリエンス ~UX を改善するどんな費用対効果が期待できるのか?~ : PROJECT UX

    ご存知の方も多いと思いますが、2011年1月後半よりマイクロソフトの各部門は品川の新社屋に移転を進めています。これに伴い、社内システムの刷新も図られており、その中でも特に利用頻度の高い「会議室の予約システム」について取り上げた記事が上記です。

    記事の中では、UX考慮前後のアプリケーションを比較し、その効果について言及しています。一目瞭然ですが、以下の画面の左側が考慮前、右側が考慮後です。効果測定は、某デザイン計ソフトウェアに強い会社の出身で、現在 UX エバンジェリストの春日井(Twitter)を中心に進められました。

    clip_image001

    左側の画面...これを見ていると私はキューンと胃が痛くなります(苦笑)。

    こんな画面、これまでにいくらでも見てきたし、いくらでも作ってきたからです...。

    前職で何年間かパッケージの企画、開発、プロモ、メンテを担当していたことがあります。パッケージと言っても、汎用パッケージでは対応できない比較的ニッチな機能を組み込んだ特定業界向けのものであり、その開発プロセスは、汎用パッケージと比較して、お付き合いのあるお客様に依存する面が大きかったと思います。

    こうした形態のパッケージって結構多いですよね。現場のノウハウをパッケージに組み込む...これはコンペでの優位性を確実なものにするために実に正しい施策ですが、問題点が無いわけではありません。その1つが UX へのこだわりです。

    いや、意識的に決して使いづらくしよう...と考えているわけでは当然無く、実装しなければならない機能に執着するあまり、どうしても UX がおろそかになってしまうのです。要求事項を満たそうとして機能をたくさん詰め込みすぎるため、結果的に使いやすさは二の次になってしまうのですね...。もちろん、機能が多いからと言って使いづらくなってしまってはもともこもありませんが、予算的に UX にお金と時間をかける余裕がないというのも正直なところでしょう。

    普段から UX を考え抜いてパッケージを設計しているエンジニアからすれば非常にナンセンスな話かもしれません。

    正直な意見をフィールドSEの立場から言わせてもらうと、「UX を発注する」って行為は、持っていない多くのノウハウが要求されるのですよ。

    • UX の切れ目がよくわからない(単なる画面デザインだけなら別ですが)
    • UX にかけるべき原価の目安がよく分からない
    • UX の発注先がわからない
    • 開発工程における UX 設計 の順番がよくわからない

    などなど、なんかモヤモヤしている点が盛りだくさんです...。

    Microsoft Expression Brend で優れたUXを!と言われても、プロジェクトを仕切る ITPro は、「どのタイミングで」「誰に」「何を」お願いすればよいのかが分からないという...。結果、今まで通りの工程を繰り返すことになるわけですね...。

    このあたりのノウハウを、是非とも UXチームには露出してほしいなぁと願って止まないわけです。

    ....と、なんだか雑談になってしまいました。

  • 【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 が存在すると、それで一気に品質が落ちます。当然といえば当然ですが...。

  • 【Management】日本語版のグループポリシー設定リストを"作ってみる" 3/3 ~ 機械翻訳併用

    前回までの記事はこちらです。

    前回は Translation Glossary を辞書代わりに使用して、英語版の Group Policy Settings Reference for Windows and Windows Server を日本語に変換してみました。Translatiion Glossary で使用されている文章および用語と、Group Policy Settings Reference で使用されているものが微妙に異なる場合があり、以下に示すように残念ながら完全ではありませんでした。

    そこで、変換できなかった英語部分をどうしたらよいか...機械翻訳で補足してしまおう!というのが今回の趣旨です。

    実は、BING を使用した機械翻訳 API については、1年近く前に田辺さんが紹介してくださっています。せっかくですので、以下で紹介されているスクリプトをベースに作りましょう~。(田辺さん、ありがとう!)

    Windows PowerShell でのスクリプティング - スクリプトセンター Microsoft Translator の API を使ってみよう - Shigeya Tanabe's blog - Site Home - TechNet Blogs

    【準備】

    BING の翻訳 API を使用するには、事前に AppID と呼ばれるアプリケーションのIDが必要です。これが発行されていないとAPIからの要求が拒否されてしまいます。

    AppID を要求するには、以下のサイトから必要事項を入力してください。

    http://www.bing.com/developers/createapp.aspx
    image

    一番下のボタン[Agree] をクリックすると、以下のようにAppIDが発行されます。

    image

    【スクリプトを作成する】

    今回作成するスクリプトの方針は、「Translation Glossary」とマッチしなかった英文/用語に対して BING 翻訳 するようにします。ですので、前回同様、以下の3つのファイルを用意しておいてください。

    1. Translationg Glossary で提供されている Windows 7 の Glossary
      jpn-jpn-csv-Windows 7 (1).csv
    2. Group Policy Settings Reference for Windows and Windows Serverの「Administrative Template」タブをCSVで保存したファイル
      WindowsServer2008R2andWindows7GroupPolicySettings_AdministrativeTemplate.csv
    3. Group Policy Settings Reference for Windows and Windows Serverの「Security」タブをCSVで保存したファイル
      WindowsServer2008R2andWindows7GroupPolicySettings_security.csv

    田辺さんのスクリプト前回作成したスクリプトを合体させて、すこしアレンジしたものが以下です。

    # Get-Transaction という機械翻訳用のFunctionを定義しています。
    # Function の中では、
    "http://api.microsofttranslator.com/V2/Http.svc/Translate"  というメソッドを使用して、
    # この Function に引数として渡されたテキスト文字列を翻訳しています

    function Get-Translation {
      param([parameter(ValueFromPipeline=$true)]
       [String] $text = "Group Policy")

      $w = new-object system.net.webclient
      $enc = [Text.Encoding]::GetEncoding("utf-8")

    # AppID を指定
      $appid = "CExxxxxxxxxxxxxxxxxxxxxxxxxxxx0B19" 
    # 翻訳もとは英語
      $from = "en" 
    # 翻訳先は日本語
      $to = "ja"
      $contentType = "text/plain"
      $category = "general"
    # BING翻訳 Translate メソッドの uri
      $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))
      Write-Host "----"
      if ($h -ne $null) {
          ([xml]$h).string.get_Innertext()
          } else {
          # もし翻訳に失敗したら元の英文を返す 
          $text
          }
    }

    cls

    $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行ずつ取り出し、日本語化したい列をハッシュテーブルのキーをベースに置換する
    # $japaneseFile とのマッチングに失敗した場合に Get-Translation を呼び出しています。以降も同様です。
    # なお、あとから完成したCSVを見たときにカラムが機械翻訳を通ったことがわかるよう、[T] を頭に付けています。

    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")).Replace("\r\n"," ")
        } else {
            $item.b = Get-Translation ($item.b.replace("`n"," ")).toString()
            $item.b = "[T]" + $item.b
        }

      if ($jpnfile_hash.ContainsKey($item.e.replace("`n","\r\n")) ) {
        $item.e = $jpnfile_hash.Get_Item($item.e.replace("`n","\r\n")).Replace("\r\n"," ")
       } else {
            $item.e = Get-Translation ($item.e.replace("`n"," ")).ToString()
            $item.e = "[T]" + $item.e
       }
     
      if ($item.g -ne "") {
        if ($jpnfile_hash.ContainsKey($item.g.replace("`n","\r\n")) ) {
                $item.g = $jpnfile_hash.Get_Item($item.g.replace("`n","\r\n")).Replace("\r\n"," ")
            } else {
                $item.g = Get-Translation ($item.g.replace("`n"," ")).ToString()
                $item.g = "[T]" + $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)
    {
      if ($jpnfile_hash.ContainsKey($item.b.replace("`n","\r\n"))) {
            $item.b = $jpnfile_hash.Get_Item($item.b.replace("`n","."))
        } else {
            $item.b = Get-Translation ($item.b.replace("`n",".")).ToString()
            $item.b = "[T]" + $item.b
        }

      if ($jpnfile_hash.ContainsKey($item.g.replace("`n","\r\n")) ) {
           $item.g = $jpnfile_hash.Get_Item($item.g.replace("`n","."))
         }  else {
            $item.g = Get-Translation ($item.g.replace("`n",".")).ToString()
            $item.g = "[T]" + $item.g
         }
    }

    $enfileadm | Export-Csv gplistjp_adm.csv -encoding Default

    どうでしょう?

    「翻訳」などという高度な処理をしているのに、かなりシンプルですよねぇ。

    結果は以下の通りです。いい感じです。ところどころ、「うむむ」という翻訳はあるものの、まぁいけている気がします。

    実物を添付したいのですが、Tanslation Glossary の縛りがあり、できません...すみません...是非とも皆さん自身でスクリプトを実行してみてください。

    image

    ちなみに、Administrative Template と Security の両方を変換するのに、私の環境で約40分かかりました。

    機械翻訳に対してかなりネガティブなイメージを持っていましたが、BING の翻訳機能 を使ってみたところ、マイクロソフト製品で使用されている用語やメッセージについては、割とよさげなことがわかりました。

    ただですねぇ...問題が無いわけではなのんです。BING翻訳のAPIに高頻度でアクセスしていると、途中からアクセスを拒否されてしまうことがあります。

    まぁ、そりゃそうなんですけど...。今回も、何回かそんなことがありました。処理の間にSleep でも入れれば違うのでしょうけど...

    じゃ、今回のように大量の個別データを翻訳したい場合にはどうするかといえば、TranslateArray というメソッドを使うようです。XMLファイルで複数のテキストを一度に渡すことができるみたいです。これについてはまた今度ということで。

    それにしても、BING翻訳、やってみると結構面白いですね。翻訳結果をスピーチしてくれたりとかもあるので、スマートフォンのアプリに実装すれば、リアル「ほんやくこんにゃく」らしきものができてしまいそうです。きっと、Phone 7 担当のT氏が企画してくれるでしょう~。

  • 【Management】日本語版のグループポリシー設定リストを"作ってみる" 2/3 ~ Translation Glossary 編

    前回の続きです。

    なんとか機械的に 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]
    image

    中身はどんなかというと、テクノロジーや製品ごとにファイルが用意されています。その数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用のものは現時点では見当たらないですね。。。

    ほんのちょっとだけファイルの中身をのぞいてみると、以下のような内容です。

    image

    A列 = 英語表記
    C列 = 日本語表記

    ってことをおさえておいてください。

    ーーーーーーーーーーーーーーーー

    一方、英語版の Group Policy Settings Reference for Windows and Windows Server はどんな構造かというと、EXCELファイルで提供されており、ポリシーの性質によって、2つのタブに分かれています。それぞれのタブの列一覧と内容は以下の通りです。

    image

    【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のみで有効かどうか)

    【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(コメント)←日本語化

    ーーーーーーーーーーーーーーーー

    さて、これで方針は決まりました。

    スクリプトを作成する前に、以下のファイルが存在していることを確認してください。

      • jpn-jpn-csv-Windows 7 (1).csv
      • WindowsServer2008R2andWindows7GroupPolicySettings_AdministrativeTemplate.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")) で日本語と同じ値にリプレイスしています。

    上記スクリプトを実行した結果は以下の通りです。ご覧いただくとお分かりの通り、完璧じゃないんですよねぇ。原因は、微妙な文章の違い(複数形と単数形、ピリオドの有り無しなど)なので、目視すれば「あ、これ同じだ」とはわかるのですがプログラムでの判断は厳しいかんじです。テキストマイニングとかできる方だと、「これは同じ」とかできるのでしょうけど...。

    image

    image

    さて、では、この変換しそこなった部分をどうするのか?やはり手作業なのか?

    いえ、そこでやっと機械翻訳の登場となるのです。前回の投稿で、意外と品質の良い変換をしてくれたアイツを使って完成させることにしましょう。

    前回:【Management】日本語版のグループポリシー設定リストを"作ってみる" 1/3 ~ランゲージポータル編

    次回:【Management】日本語版のグループポリシー設定リストを"作ってみる" 3/3 ~ 機械翻訳併用  編

  • 【Management】日本語版のグループポリシー設定リストを"作ってみる" 1/3

    ※あまり期待しないでください...と初めに申し上げておきます

    ある昼下がりの Twitter(@junichia)にて。@norimaki2000 氏に日本語版のグループポリシー設定リストが欲しいと泣きつかれてしまいました。

    ちなみに、英語版は以下からダウンロードできます。EXCELで提供されているので、検索性にも優れとても使い勝手が良い資料です。が、英語がネックとなって日本語環境では使いずらいことは確かです。

    Group Policy Settings Reference for Windows and Windows Server

    既に設定されている項目であれば、グループポリシー用の PowerShell コマンドレットを使用すれば作成することができますし、グループポリシーの管理画面でレポート作成することもできます。しかし、設定可能な項目の一覧となると、これが結構難しく...どうしたものかと考えた挙句、3通りの方法が思い浮かびました。

    今回は、1つ目。

    マイクロソフトランゲージポータルで1つ1つ翻訳する

    ランゲージポータルは俗にいう機械翻訳ではありません。マイクロソフト製品で使用されている用語やメッセージが各国語でどのように表現されているのか、相互に変換することができるという優れものです。

    例えば、以下の英語をそのまま入力して検索してみましょう。

    This policy setting allows you to manage whether Internet Explorer can access data from another security zone using the Microsoft XML Parser (MSXML) or ActiveX Data Objects (ADO). If you enable this policy setting, users can load a page in the zone that uses MSXML or ADO to access data from another site in the zone. If you select Prompt in the drop-down box, users are queried to choose whether to allow a page to be loaded in the zone that uses MSXML or ADO to access data from another site in the zone. If you disable this policy setting, users cannot load a page in the zone that uses MSXML or ADO to access data from another site in the zone. If you do not configure this policy setting, users cannot load a page in the zone that uses MSXML or ADO to access data from another site in the zone.

    以下のような回答が戻ります。

    このポリシー設定を使うと、Internet Explorer が Microsoft XML パーサー (MSXML) または ActiveX Data Objects (ADO) を使って他のセキュリティ ゾーンからデータにアクセスできるかどうかを管理できます。 このポリシー設定を有効にすると、ユーザーはゾーン内の他のサイトにあるデータに MSXML または ADO を使ってアクセスするゾーン内のページを読み込むことができます。ドロップダウン ボックスで [ダイアログを表示する] を選択した場合、ゾーン内の他のサイトにあるデータに MSXML または ADO を使ってアクセスするゾーン内のページを読み込むことを許可するかどうか、ユーザーにたずねます。 このポリシー設定を無効にすると、ゾーン内の他のサイトにあるデータに MSXML または ADO を使ってアクセスするゾーン内のページを読み込むことはできません。 このポリシー設定を構成しない場合は、ゾーン内の他のサイトにあるデータに MSXML または ADO を使ってアクセスするゾーン内のページを読み込むことはできません。

    日本語版のグループポリシーで使用されている文章が、そのまま表示されます。

    これをたった4000回程度繰り返せば日本語化できます...と @norimaki2000 さんに回答したところ、何も応答が無くなってしまいました....これはまずいことになりました...。

    残念ながら、ランゲージポータルでは API が公開されておらず、自動化することが難しいんですよねぇ...

    なんとかなったらうれしいです > えらい人

    p.s. ちなみに、機械翻訳に放り込むとどうなるのか試してみましょう....

    このポリシー設定では、Internet Explorer、Microsoft XML パーサー (MSXML) または ActiveX データ オブジェクト (ADO) を使用して別のセキュリティ ゾーンからデータにアクセスできるかどうかを管理することができます。このポリシー設定を有効にする場合は、ユーザーは MSXML または ADO を使用して、ゾーン内の別のサイトのデータにアクセスするゾーン内のページを読み込むことができます。[ドロップダウン ボックスのプロンプトを選択した場合、ユーザーは MSXML または ADO を使用して、ゾーン内の別のサイトのデータにアクセスするには、ゾーンでロードするページを許可するかどうかをたずねられます。このポリシー設定を無効にした場合、ユーザーは MSXML または ADO を使用して、ゾーン内の別のサイトのデータにアクセスするゾーン内のページを読み込むことができません。このポリシー設定を構成しない場合、ユーザーは MSXML または ADO を使用して、ゾーン内の別のサイトのデータにアクセスするゾーン内のページを読み込むことができません。

    あれ?機械翻訳、なかなかやりますね....。ってことは....。

    次回移行に続く

    次回:【Management】日本語版のグループポリシー設定リストを"作ってみる" 2/3 ~ Translation Glossary を使用する

    次々回 【Management】日本語版のグループポリシー設定リストを"作ってみる" 3/3 ~ 機械翻訳併用