OSDN Git Service

#27617 Wiktionaryに対応・設定の切り替え/追加機能を追加
authorhoneplus <honeplus@users.osdn.me>
Tue, 21 Feb 2012 16:39:40 +0000 (16:39 +0000)
committerhoneplus <honeplus@users.osdn.me>
Tue, 21 Feb 2012 16:39:40 +0000 (16:39 +0000)
(config.xml, InputLanguageCodeDialog は Wikipedia.xml, AddLanguageDialogに移動),
Wikipedia用設定の対訳表などのパターンを追加,
見出しの置き換えに改行区切りで複数の語句を登録できるよう改良,
その他画面表示周りの処理の改善/小不具合を修正

git-svn-id: http://svn.osdn.net/svnroot/wptscs/trunk@22 7cc79d57-4d93-40a1-83d5-ec7b38613dec

41 files changed:
HmLib/HmLib.csproj
HmLib/Properties/AssemblyInfo.cs
HmLib/Utilities/CollectionUtils.cs [new file with mode: 0644]
HmLibTest/HmLibTest.csproj
HmLibTest/Properties/AssemblyInfo.cs
HmLibTest/Utilities/CollectionUtilsTest.cs [new file with mode: 0644]
Wikipedia 翻訳支援ツール.asta
Wptscs/AddConfigDialog.Designer.cs [new file with mode: 0644]
Wptscs/AddConfigDialog.cs [new file with mode: 0644]
Wptscs/AddConfigDialog.ja.resx [new file with mode: 0644]
Wptscs/AddConfigDialog.resx [new file with mode: 0644]
Wptscs/AddLanguageDialog.Designer.cs [moved from Wptscs/InputLanguageCodeDialog.Designer.cs with 96% similarity]
Wptscs/AddLanguageDialog.cs [moved from Wptscs/InputLanguageCodeDialog.cs with 84% similarity]
Wptscs/AddLanguageDialog.ja.resx [moved from Wptscs/InputLanguageCodeDialog.ja.resx with 100% similarity]
Wptscs/AddLanguageDialog.resx [moved from Wptscs/InputLanguageCodeDialog.resx with 99% similarity]
Wptscs/ConfigForm.Designer.cs
Wptscs/ConfigForm.cs
Wptscs/ConfigForm.resx
Wptscs/MainForm.Designer.cs
Wptscs/MainForm.cs
Wptscs/MainForm.ja.resx
Wptscs/MainForm.resx
Wptscs/Models/Config.cs
Wptscs/Models/TranslationTable.cs
Wptscs/Properties/AssemblyInfo.cs
Wptscs/Properties/Resources.Designer.cs
Wptscs/Properties/Resources.ja.resx
Wptscs/Properties/Resources.resx
Wptscs/Properties/Settings.Designer.cs
Wptscs/Properties/Settings.settings
Wptscs/Readme.txt
Wptscs/Utilities/FormUtils.cs
Wptscs/Wikipedia.xml [moved from Wptscs/config.xml with 92% similarity]
Wptscs/Wiktionary.xml [new file with mode: 0644]
Wptscs/Wptscs.csproj
Wptscs/app.config
WptscsTest/Logics/MediaWikiTranslatorTest.cs
WptscsTest/Models/ConfigTest.cs
WptscsTest/Models/TranslationTableTest.cs
WptscsTest/Properties/AssemblyInfo.cs
WptscsTest/WptscsTest.csproj

index 14f1e76..2e01b0b 100644 (file)
@@ -58,6 +58,7 @@
     <Compile Include="Parsers\AbstractTextParser.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Parsers\XmlParser.cs" />
+    <Compile Include="Utilities\CollectionUtils.cs" />
     <Compile Include="Utilities\ObjectUtils.cs" />
     <Compile Include="Utilities\StringUtils.cs" />
     <Compile Include="Utilities\Validate.cs" />
index fa1d3d0..ccde19a 100644 (file)
@@ -42,7 +42,7 @@ using System.Runtime.InteropServices;
 // すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を 
 // 既定値にすることができます:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.2.*")]
+[assembly: AssemblyVersion("0.3.*")]
 
 // 本ライブラリをC#以外の言語からも利用可能となるよう共通言語仕様準拠とする
 [assembly: System.CLSCompliant(true)]
diff --git a/HmLib/Utilities/CollectionUtils.cs b/HmLib/Utilities/CollectionUtils.cs
new file mode 100644 (file)
index 0000000..c6c9092
--- /dev/null
@@ -0,0 +1,71 @@
+// ================================================================================================
+// <summary>
+//      コレクション/配列処理に関するユーティリティクラスソース。</summary>
+//
+// <copyright file="CollectionUtils.cs" company="honeplusのメモ帳">
+//      Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
+// <author>
+//      Honeplus</author>
+// ================================================================================================
+
+namespace Honememo.Utilities
+{
+    using System;
+    using System.Collections.Generic;
+
+    /// <summary>
+    /// コレクション/配列処理に関するユーティリティクラスです。
+    /// </summary>
+    public static class CollectionUtils
+    {
+        #region 比較メソッド
+
+        /// <summary>
+        /// 指定された文字列が渡されたコレクション内に存在するかを大文字小文字を無視して判定する。
+        /// </summary>
+        /// <param name="collection">探索するコレクション。</param>
+        /// <param name="item">含まれるか判定する文字列。</param>
+        /// <returns>指定された文字列が含まれる場合<c>true</c>。</returns>
+        /// <exception cref="ArgumentNullException"><para>collection</para>が<c>null</c>の場合。</exception>
+        public static bool ContainsIgnoreCase(IEnumerable<string> collection, string item)
+        {
+            foreach (string s in Validate.NotNull(collection))
+            {
+                if (s == item || (s != null && item != null && s.ToLower() == item.ToLower()))
+                {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+
+        #endregion
+
+        #region 加工メソッド
+
+        /// <summary>
+        /// 渡された文字列配列の中の要素を全て<see cref="String.Trim()"/>した配列を返す。
+        /// </summary>
+        /// <param name="array"><c>Trim</c>する文字列配列。</param>
+        /// <returns><c>Trim</c>された文字列配列。</returns>
+        /// <exception cref="ArgumentNullException"><para>array</para>が<c>null</c>の場合。</exception>
+        /// <remarks><para>array</para>中に<c>null</c>要素が存在するのは可。</remarks>
+        public static string[] Trim(string[] array)
+        {
+            string[] result = new string[Validate.NotNull(array).Length];
+            for (int i = 0; i < array.Length; i++)
+            {
+                string s = array[i];
+                if (s != null)
+                {
+                    result[i] = s.Trim();
+                }
+            }
+
+            return result;
+        }
+
+        #endregion
+    }
+}
index 0dd3044..8910eed 100644 (file)
@@ -56,6 +56,7 @@
     <Compile Include="Utilities\StringUtilsTest.cs" />
     <Compile Include="Utilities\ValidateTest.cs" />
     <Compile Include="Utilities\XmlUtilsTest.cs" />
+    <Compile Include="Utilities\CollectionUtilsTest.cs" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\HmLib\HmLib.csproj">
@@ -63,6 +64,7 @@
       <Name>HmLib</Name>
     </ProjectReference>
   </ItemGroup>
+  <Import Project="$(ProgramFiles)\MSBuild\Microsoft\StyleCop\v4.4\Microsoft.StyleCop.Targets" />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
index 2f3a992..91adbb0 100644 (file)
@@ -42,4 +42,4 @@ using System.Runtime.InteropServices;
 // すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を 
 // 既定値にすることができます:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.2.*")]
+[assembly: AssemblyVersion("0.3.*")]
diff --git a/HmLibTest/Utilities/CollectionUtilsTest.cs b/HmLibTest/Utilities/CollectionUtilsTest.cs
new file mode 100644 (file)
index 0000000..dccd5b6
--- /dev/null
@@ -0,0 +1,107 @@
+// ================================================================================================
+// <summary>
+//      CollectionUtilsのテストクラスソース。</summary>
+//
+// <copyright file="CollectionUtilsTest.cs" company="honeplusのメモ帳">
+//      Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
+// <author>
+//      Honeplus</author>
+// ================================================================================================
+
+namespace Honememo.Utilities
+{
+    using System;
+    using NUnit.Framework;
+
+    /// <summary>
+    /// CollectionUtilsのテストクラスです。
+    /// </summary>
+    [TestFixture]
+    public class CollectionUtilsTest
+    {
+        #region 比較メソッドテストケース
+
+        /// <summary>
+        /// ContainsIgnoreCaseメソッドテストケース。
+        /// </summary>
+        [Test]
+        public void TestContainsIgnoreCase()
+        {
+            string[] array = new string[0];
+            Assert.IsFalse(CollectionUtils.ContainsIgnoreCase(array, null));
+            Assert.IsFalse(CollectionUtils.ContainsIgnoreCase(array, String.Empty));
+            Assert.IsFalse(CollectionUtils.ContainsIgnoreCase(array, "test"));
+
+            array = new string[] { "test" };
+            Assert.IsFalse(CollectionUtils.ContainsIgnoreCase(array, null));
+            Assert.IsFalse(CollectionUtils.ContainsIgnoreCase(array, String.Empty));
+            Assert.IsTrue(CollectionUtils.ContainsIgnoreCase(array, "test"));
+            Assert.IsTrue(CollectionUtils.ContainsIgnoreCase(array, "teST"));
+            Assert.IsTrue(CollectionUtils.ContainsIgnoreCase(array, "TEST"));
+            Assert.IsFalse(CollectionUtils.ContainsIgnoreCase(array, "tesd"));
+
+            array = new string[] { "TEst" };
+            Assert.IsTrue(CollectionUtils.ContainsIgnoreCase(array, "test"));
+            Assert.IsTrue(CollectionUtils.ContainsIgnoreCase(array, "teST"));
+            Assert.IsTrue(CollectionUtils.ContainsIgnoreCase(array, "TEST"));
+            Assert.IsFalse(CollectionUtils.ContainsIgnoreCase(array, "tesd"));
+
+            array = new string[] { "Test", null, "日本語" };
+            Assert.IsTrue(CollectionUtils.ContainsIgnoreCase(array, null));
+            Assert.IsFalse(CollectionUtils.ContainsIgnoreCase(array, String.Empty));
+            Assert.IsTrue(CollectionUtils.ContainsIgnoreCase(array, "test"));
+            Assert.IsTrue(CollectionUtils.ContainsIgnoreCase(array, "日本語"));
+
+            array = new string[] { "Test", String.Empty, "日本語" };
+            Assert.IsFalse(CollectionUtils.ContainsIgnoreCase(array, null));
+            Assert.IsTrue(CollectionUtils.ContainsIgnoreCase(array, String.Empty));
+            Assert.IsTrue(CollectionUtils.ContainsIgnoreCase(array, "test"));
+            Assert.IsTrue(CollectionUtils.ContainsIgnoreCase(array, "日本語"));
+        }
+
+        /// <summary>
+        /// ContainsIgnoreCaseメソッドテストケース(異常系)。
+        /// </summary>
+        [Test]
+        [ExpectedException(typeof(ArgumentNullException))]
+        public void TestContainsIgnoreCaseNull()
+        {
+            CollectionUtils.ContainsIgnoreCase(null, "test");
+        }
+
+        #endregion
+
+        #region 加工メソッドテストケース
+
+        /// <summary>
+        /// Trimメソッドテストケース。
+        /// </summary>
+        [Test]
+        public void TestTrim()
+        {
+            Assert.AreEqual(0, CollectionUtils.Trim(new string[0]).Length);
+            Assert.AreEqual(1, CollectionUtils.Trim(new string[] { "test" }).Length);
+            Assert.AreEqual(
+                new string[] { "test" },
+                CollectionUtils.Trim(new string[] { " test " }));
+            Assert.AreEqual(
+                new string[] { "Test", null, "日本語" },
+                CollectionUtils.Trim(new string[] { " Test", null, "日本語 " }));
+            Assert.AreEqual(
+                new string[] { "Te st", String.Empty, "日 本 語" },
+                CollectionUtils.Trim(new string[] { "Te st ", " ", " 日 本 語 " }));
+        }
+
+        /// <summary>
+        /// Trimメソッドテストケース(異常系)。
+        /// </summary>
+        [Test]
+        [ExpectedException(typeof(ArgumentNullException))]
+        public void TestTrimNull()
+        {
+            CollectionUtils.Trim(null);
+        }
+
+        #endregion
+    }
+}
index 7ca605f..eb60e83 100644 (file)
Binary files a/Wikipedia 翻訳支援ツール.asta and b/Wikipedia 翻訳支援ツール.asta differ
diff --git a/Wptscs/AddConfigDialog.Designer.cs b/Wptscs/AddConfigDialog.Designer.cs
new file mode 100644 (file)
index 0000000..0dbaef7
--- /dev/null
@@ -0,0 +1,90 @@
+namespace Honememo.Wptscs
+{
+    partial class AddConfigDialog
+    {
+        /// <summary>
+        /// 必要なデザイナー変数です。
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// 使用中のリソースをすべてクリーンアップします。
+        /// </summary>
+        /// <param name="disposing">マネージ リソースが破棄される場合 true、破棄されない場合は false です。</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows フォーム デザイナーで生成されたコード
+
+        /// <summary>
+        /// デザイナー サポートに必要なメソッドです。このメソッドの内容を
+        /// コード エディターで変更しないでください。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddConfigDialog));
+            this.labelName = new System.Windows.Forms.Label();
+            this.textBoxName = new System.Windows.Forms.TextBox();
+            this.buttonOk = new System.Windows.Forms.Button();
+            this.buttonCancel = new System.Windows.Forms.Button();
+            this.SuspendLayout();
+            // 
+            // labelName
+            // 
+            resources.ApplyResources(this.labelName, "labelName");
+            this.labelName.Name = "labelName";
+            // 
+            // textBoxName
+            // 
+            resources.ApplyResources(this.textBoxName, "textBoxName");
+            this.textBoxName.Name = "textBoxName";
+            // 
+            // buttonOk
+            // 
+            resources.ApplyResources(this.buttonOk, "buttonOk");
+            this.buttonOk.Name = "buttonOk";
+            this.buttonOk.UseVisualStyleBackColor = true;
+            this.buttonOk.Click += new System.EventHandler(this.ButtonOk_Click);
+            // 
+            // buttonCancel
+            // 
+            resources.ApplyResources(this.buttonCancel, "buttonCancel");
+            this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+            this.buttonCancel.Name = "buttonCancel";
+            this.buttonCancel.UseVisualStyleBackColor = true;
+            // 
+            // InputConfigDialog
+            // 
+            this.AcceptButton = this.buttonOk;
+            resources.ApplyResources(this, "$this");
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.CancelButton = this.buttonCancel;
+            this.Controls.Add(this.buttonCancel);
+            this.Controls.Add(this.buttonOk);
+            this.Controls.Add(this.textBoxName);
+            this.Controls.Add(this.labelName);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+            this.MaximizeBox = false;
+            this.MinimizeBox = false;
+            this.Name = "InputConfigDialog";
+            this.ShowIcon = false;
+            this.ShowInTaskbar = false;
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label labelName;
+        private System.Windows.Forms.TextBox textBoxName;
+        private System.Windows.Forms.Button buttonOk;
+        private System.Windows.Forms.Button buttonCancel;
+    }
+}
\ No newline at end of file
diff --git a/Wptscs/AddConfigDialog.cs b/Wptscs/AddConfigDialog.cs
new file mode 100644 (file)
index 0000000..c61d212
--- /dev/null
@@ -0,0 +1,121 @@
+// ================================================================================================
+// <summary>
+//      Wikipedia翻訳支援ツール設定名入力ダイアログクラスソース</summary>
+//
+// <copyright file="AddConfigDialog.cs" company="honeplusのメモ帳">
+//      Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
+// <author>
+//      Honeplus</author>
+// ================================================================================================
+
+namespace Honememo.Wptscs
+{
+    using System;
+    using System.Collections.Generic;
+    using System.IO;
+    using System.Windows.Forms;
+    using Honememo.Models;
+    using Honememo.Wptscs.Logics;
+    using Honememo.Wptscs.Models;
+    using Honememo.Wptscs.Properties;
+    using Honememo.Wptscs.Utilities;
+
+    /// <summary>
+    /// Wikipedia翻訳支援ツール設定名入力ダイアログのクラスです。
+    /// </summary>
+    public partial class AddConfigDialog : Form
+    {
+        #region private変数
+
+        /// <summary>
+        /// 登録済みの設定ファイル名。
+        /// </summary>
+        private IgnoreCaseSet configNames;
+
+        #endregion
+
+        #region コンストラクタ
+
+        /// <summary>
+        /// コンストラクタ。初期化メソッド呼び出しのみ。
+        /// </summary>
+        /// <param name="configNames">登録済みの設定ファイル名。</param>
+        /// <exception cref="ArgumentNullException"><para>configNames</para>が<c>null</c>。</exception>
+        public AddConfigDialog(IEnumerable<string> configNames)
+        {
+            // Windows フォーム デザイナで生成されたコード
+            this.InitializeComponent();
+
+            // 重複チェック用の既存の設定名一覧を受け取る
+            this.configNames = new IgnoreCaseSet(configNames);
+        }
+
+        #endregion
+
+        #region プロパティ
+
+        /// <summary>
+        /// 設定名(データやり取り用)。
+        /// </summary>
+        public string ConfigName
+        {
+            get;
+            set;
+        }
+
+        #endregion
+
+        #region フォームの各イベントのメソッド
+
+        /// <summary>
+        /// OKボタン押下時の処理。データ保存。
+        /// </summary>
+        /// <param name="sender">イベント発生オブジェクト。</param>
+        /// <param name="e">発生したイベント。</param>
+        private void ButtonOk_Click(object sender, EventArgs e)
+        {
+            // 入力値チェック
+            this.ConfigName = this.textBoxName.Text.Trim();
+            if (String.IsNullOrEmpty(this.ConfigName))
+            {
+                FormUtils.WarningDialog(Resources.WarningMessageEmptyConfigName);
+                this.textBoxName.Focus();
+                return;
+            }
+            else if (this.ConfigName.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0)
+            {
+                FormUtils.WarningDialog(
+                    Resources.WarningMessageInvalidConfigName,
+                    String.Join(", ", Path.GetInvalidFileNameChars()));
+                this.textBoxName.Focus();
+                return;
+            }
+            else if (this.configNames.Contains(this.ConfigName))
+            {
+                FormUtils.WarningDialog(Resources.WarningMessageDuplicateConfigName);
+                this.textBoxName.Focus();
+                return;
+            }
+
+            // テキストボックスの設定名を保存、設定名からMediaWiki用のパラメータで設定を作成
+            Config config = new Config();
+            config.File = this.ConfigName + Settings.Default.ConfigurationExtension;
+            config.Translator = typeof(MediaWikiTranslator);
+            try
+            {
+                // 設定ファイルを一旦保存、成功なら画面を閉じる
+                // ※ エラーの場合、どうしても駄目ならキャンセルボタンで閉じてもらう
+                config.Save();
+                this.DialogResult = DialogResult.OK;
+            }
+            catch (Exception ex)
+            {
+                // 異常時はエラーメッセージを表示
+                System.Diagnostics.Debug.WriteLine(ex.ToString());
+                FormUtils.ErrorDialog(Resources.ErrorMessageConfigSaveFailed, ex.Message);
+            }
+        }
+
+        #endregion
+    }
+}
diff --git a/Wptscs/AddConfigDialog.ja.resx b/Wptscs/AddConfigDialog.ja.resx
new file mode 100644 (file)
index 0000000..f15e65f
--- /dev/null
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="labelName.AutoSize" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="labelName.Size" type="System.Drawing.Size, System.Drawing">
+    <value>157, 30</value>
+  </data>
+  <data name="labelName.Text" xml:space="preserve">
+    <value>追加する設定の名称を入力してください:</value>
+  </data>
+  <data name="textBoxName.Location" type="System.Drawing.Point, System.Drawing">
+    <value>41, 40</value>
+  </data>
+  <data name="buttonOk.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 66</value>
+  </data>
+  <data name="buttonCancel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>93, 66</value>
+  </data>
+  <data name="buttonCancel.Text" xml:space="preserve">
+    <value>キャンセル</value>
+  </data>
+  <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
+    <value>180, 98</value>
+  </data>
+  <data name="$this.Text" xml:space="preserve">
+    <value>設定の追加</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/Wptscs/AddConfigDialog.resx b/Wptscs/AddConfigDialog.resx
new file mode 100644 (file)
index 0000000..f95f983
--- /dev/null
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="buttonCancel.Text" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 12</value>
+  </data>
+  <data name="&gt;&gt;labelName.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;buttonOk.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;labelName.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="buttonOk.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="textBoxName.MaxLength" type="System.Int32, mscorlib">
+    <value>150</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;buttonOk.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>InputConfigDialog</value>
+  </data>
+  <data name="&gt;&gt;buttonOk.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="labelName.Size" type="System.Drawing.Size, System.Drawing">
+    <value>108, 12</value>
+  </data>
+  <data name="&gt;&gt;textBoxName.Name" xml:space="preserve">
+    <value>textBoxName</value>
+  </data>
+  <data name="buttonCancel.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;textBoxName.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;buttonCancel.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="buttonOk.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 55</value>
+  </data>
+  <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
+    <value>180, 87</value>
+  </data>
+  <data name="&gt;&gt;buttonOk.Name" xml:space="preserve">
+    <value>buttonOk</value>
+  </data>
+  <data name="&gt;&gt;buttonCancel.Name" xml:space="preserve">
+    <value>buttonCancel</value>
+  </data>
+  <data name="&gt;&gt;labelName.Name" xml:space="preserve">
+    <value>labelName</value>
+  </data>
+  <data name="buttonOk.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
+  </data>
+  <data name="textBoxName.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;textBoxName.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="labelName.Location" type="System.Drawing.Point, System.Drawing">
+    <value>11, 9</value>
+  </data>
+  <data name="&gt;&gt;labelName.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;textBoxName.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="buttonCancel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
+  </data>
+  <data name="buttonOk.Text" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="buttonCancel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>93, 55</value>
+  </data>
+  <data name="labelName.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="labelName.Text" xml:space="preserve">
+    <value>Input settings name:</value>
+  </data>
+  <data name="&gt;&gt;buttonCancel.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;buttonCancel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="labelName.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="$this.Text" xml:space="preserve">
+    <value>Add Settings</value>
+  </data>
+  <data name="textBoxName.Size" type="System.Drawing.Size, System.Drawing">
+    <value>100, 19</value>
+  </data>
+  <data name="textBoxName.Location" type="System.Drawing.Point, System.Drawing">
+    <value>41, 29</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+</root>
\ No newline at end of file
similarity index 96%
rename from Wptscs/InputLanguageCodeDialog.Designer.cs
rename to Wptscs/AddLanguageDialog.Designer.cs
index ae4fc96..2d7a4d7 100644 (file)
@@ -1,6 +1,6 @@
 namespace Honememo.Wptscs
 {
-    partial class InputLanguageCodeDialog
+    partial class AddLanguageDialog
     {
         /// <summary>
         /// 必要なデザイナー変数です。
@@ -28,7 +28,7 @@
         /// </summary>
         private void InitializeComponent()
         {
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InputLanguageCodeDialog));
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddLanguageDialog));
             this.textBoxCode = new System.Windows.Forms.TextBox();
             this.buttonOk = new System.Windows.Forms.Button();
             this.buttonCancel = new System.Windows.Forms.Button();
@@ -49,8 +49,8 @@
             // 
             // buttonCancel
             // 
-            this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
             resources.ApplyResources(this.buttonCancel, "buttonCancel");
+            this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
             this.buttonCancel.Name = "buttonCancel";
             this.buttonCancel.UseVisualStyleBackColor = true;
             // 
@@ -73,6 +73,8 @@
             this.MaximizeBox = false;
             this.MinimizeBox = false;
             this.Name = "InputLanguageCodeDialog";
+            this.ShowIcon = false;
+            this.ShowInTaskbar = false;
             this.ResumeLayout(false);
             this.PerformLayout();
 
similarity index 84%
rename from Wptscs/InputLanguageCodeDialog.cs
rename to Wptscs/AddLanguageDialog.cs
index d8a5843..b5df3b9 100644 (file)
@@ -2,7 +2,7 @@
 // <summary>
 //      Wikipedia翻訳支援ツールコード入力ダイアログクラスソース</summary>
 //
-// <copyright file="InputLanguageCodeDialog.cs" company="honeplusのメモ帳">
+// <copyright file="AddLanguageDialog.cs" company="honeplusのメモ帳">
 //      Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
 // <author>
 //      Honeplus</author>
 namespace Honememo.Wptscs
 {
     using System;
-    using System.Collections.Generic;
-    using System.ComponentModel;
-    using System.Data;
-    using System.Drawing;
-    using System.Text;
     using System.Windows.Forms;
     using Honememo.Wptscs.Models;
     using Honememo.Wptscs.Properties;
@@ -24,7 +19,7 @@ namespace Honememo.Wptscs
     /// <summary>
     /// Wikipedia翻訳支援ツールコード入力ダイアログのクラスです。
     /// </summary>
-    public partial class InputLanguageCodeDialog : Form
+    public partial class AddLanguageDialog : Form
     {
         #region private変数
 
@@ -41,7 +36,8 @@ namespace Honememo.Wptscs
         /// コンストラクタ。初期化メソッド呼び出しのみ。
         /// </summary>
         /// <param name="config">設定対象のConfig。</param>
-        public InputLanguageCodeDialog(Config config)
+        /// <exception cref="ArgumentNullException"><para>config</para>が<c>null</c>。</exception>
+        public AddLanguageDialog(Config config)
         {
             // Windows フォーム デザイナで生成されたコード
             this.InitializeComponent();
@@ -75,13 +71,14 @@ namespace Honememo.Wptscs
         private void ButtonOk_Click(object sender, EventArgs e)
         {
             // 入力値チェック
-            if (String.IsNullOrWhiteSpace(this.textBoxCode.Text))
+            this.LanguageCode = this.textBoxCode.Text.Trim();
+            if (String.IsNullOrEmpty(this.LanguageCode))
             {
                 FormUtils.WarningDialog(Resources.WarningMessageEmptyLanguageCode);
                 this.textBoxCode.Focus();
                 return;
             }
-            else if (this.config.GetWebsite(this.textBoxCode.Text.Trim()) != null)
+            else if (this.config.GetWebsite(this.LanguageCode) != null)
             {
                 FormUtils.WarningDialog(Resources.WarningMessageDuplicateLanguageCode);
                 this.textBoxCode.Focus();
@@ -89,8 +86,7 @@ namespace Honememo.Wptscs
             }
 
             // テキストボックスの言語コードを保存して画面を閉じる
-            this.LanguageCode = this.textBoxCode.Text.Trim();
-            this.Close();
+            this.DialogResult = DialogResult.OK;
         }
 
         #endregion
similarity index 99%
rename from Wptscs/InputLanguageCodeDialog.resx
rename to Wptscs/AddLanguageDialog.resx
index 2f96cd4..ad1d566 100644 (file)
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="textBoxCode.Location" type="System.Drawing.Point, System.Drawing">
-    <value>52, 29</value>
+  <data name="&gt;&gt;textBoxCode.Name" xml:space="preserve">
+    <value>textBoxCode</value>
   </data>
   <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
   <data name="textBoxCode.MaxLength" type="System.Int32, mscorlib">
     <value>255</value>
   </data>
+  <data name="buttonCancel.Text" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
   <data name="textBoxCode.Size" type="System.Drawing.Size, System.Drawing">
     <value>73, 19</value>
   </data>
-  <data name="textBoxCode.TabIndex" type="System.Int32, mscorlib">
-    <value>0</value>
-  </data>
-  <data name="&gt;&gt;textBoxCode.Name" xml:space="preserve">
-    <value>textBoxCode</value>
-  </data>
-  <data name="&gt;&gt;textBoxCode.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name="&gt;&gt;textBoxCode.Parent" xml:space="preserve">
-    <value>$this</value>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 12</value>
   </data>
   <data name="&gt;&gt;textBoxCode.ZOrder" xml:space="preserve">
     <value>3</value>
   </data>
-  <data name="buttonOk.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 55</value>
-  </data>
-  <data name="buttonOk.Size" type="System.Drawing.Size, System.Drawing">
+  <data name="buttonCancel.Size" type="System.Drawing.Size, System.Drawing">
     <value>75, 23</value>
   </data>
-  <data name="buttonOk.TabIndex" type="System.Int32, mscorlib">
-    <value>1</value>
-  </data>
-  <data name="buttonOk.Text" xml:space="preserve">
-    <value>OK</value>
-  </data>
-  <data name="&gt;&gt;buttonOk.Name" xml:space="preserve">
-    <value>buttonOk</value>
+  <data name="labelCode.Text" xml:space="preserve">
+    <value>Input language code:</value>
   </data>
   <data name="&gt;&gt;buttonOk.Type" xml:space="preserve">
     <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;buttonOk.Parent" xml:space="preserve">
-    <value>$this</value>
-  </data>
-  <data name="&gt;&gt;buttonOk.ZOrder" xml:space="preserve">
-    <value>2</value>
+  <data name="buttonOk.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
   </data>
   <data name="buttonCancel.Location" type="System.Drawing.Point, System.Drawing">
     <value>93, 55</value>
   </data>
-  <data name="buttonCancel.Size" type="System.Drawing.Size, System.Drawing">
-    <value>75, 23</value>
+  <data name="labelCode.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
   </data>
-  <data name="buttonCancel.TabIndex" type="System.Int32, mscorlib">
-    <value>2</value>
+  <data name="labelCode.Location" type="System.Drawing.Point, System.Drawing">
+    <value>11, 9</value>
   </data>
-  <data name="buttonCancel.Text" xml:space="preserve">
-    <value>Cancel</value>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;buttonCancel.Name" xml:space="preserve">
-    <value>buttonCancel</value>
+  <data name="&gt;&gt;buttonOk.ZOrder" xml:space="preserve">
+    <value>2</value>
   </data>
-  <data name="&gt;&gt;buttonCancel.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>InputLanguageCodeDialog</value>
   </data>
-  <data name="&gt;&gt;buttonCancel.Parent" xml:space="preserve">
+  <data name="&gt;&gt;buttonOk.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
+  <data name="&gt;&gt;labelCode.Name" xml:space="preserve">
+    <value>labelCode</value>
+  </data>
+  <data name="buttonCancel.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
   <data name="&gt;&gt;buttonCancel.ZOrder" xml:space="preserve">
     <value>1</value>
   </data>
+  <data name="buttonOk.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 55</value>
+  </data>
+  <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
+    <value>180, 87</value>
+  </data>
   <data name="labelCode.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
-  <data name="labelCode.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 9</value>
+  <data name="&gt;&gt;buttonOk.Name" xml:space="preserve">
+    <value>buttonOk</value>
   </data>
-  <data name="labelCode.Size" type="System.Drawing.Size, System.Drawing">
-    <value>109, 12</value>
+  <data name="&gt;&gt;buttonCancel.Name" xml:space="preserve">
+    <value>buttonCancel</value>
   </data>
-  <data name="labelCode.TabIndex" type="System.Int32, mscorlib">
-    <value>3</value>
+  <data name="&gt;&gt;textBoxCode.Parent" xml:space="preserve">
+    <value>$this</value>
   </data>
-  <data name="labelCode.Text" xml:space="preserve">
-    <value>Input language code:</value>
+  <data name="textBoxCode.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
   </data>
-  <data name="&gt;&gt;labelCode.Name" xml:space="preserve">
-    <value>labelCode</value>
+  <data name="&gt;&gt;textBoxCode.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="buttonOk.Text" xml:space="preserve">
+    <value>OK</value>
   </data>
   <data name="&gt;&gt;labelCode.Type" xml:space="preserve">
     <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
+  <data name="buttonOk.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
+  </data>
+  <data name="&gt;&gt;buttonCancel.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="$this.Text" xml:space="preserve">
+    <value>Add language</value>
+  </data>
+  <data name="&gt;&gt;buttonCancel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
   <data name="&gt;&gt;labelCode.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
+  <data name="labelCode.Size" type="System.Drawing.Size, System.Drawing">
+    <value>109, 12</value>
+  </data>
+  <data name="textBoxCode.Location" type="System.Drawing.Point, System.Drawing">
+    <value>52, 29</value>
+  </data>
   <data name="&gt;&gt;labelCode.ZOrder" xml:space="preserve">
     <value>0</value>
   </data>
   <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
-    <value>6, 12</value>
-  </data>
-  <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
-    <value>180, 87</value>
-  </data>
-  <data name="$this.Text" xml:space="preserve">
-    <value>Add language</value>
-  </data>
-  <data name="&gt;&gt;$this.Name" xml:space="preserve">
-    <value>InputLanguageCodeDialog</value>
-  </data>
-  <data name="&gt;&gt;$this.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
 </root>
\ No newline at end of file
index 2ce3340..60de444 100644 (file)
@@ -30,6 +30,7 @@
         {
             this.components = new System.ComponentModel.Container();
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigForm));
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
             this.buttonOk = new System.Windows.Forms.Button();
             this.buttonCancel = new System.Windows.Forms.Button();
             this.tabControl = new System.Windows.Forms.TabControl();
             // dataGridViewHeading
             // 
             resources.ApplyResources(this.dataGridViewHeading, "dataGridViewHeading");
+            this.dataGridViewHeading.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
+            this.dataGridViewHeading.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
             this.dataGridViewHeading.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+            dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window;
+            dataGridViewCellStyle1.Font = new System.Drawing.Font("MS UI Gothic", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128)));
+            dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText;
+            dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+            dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+            dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+            this.dataGridViewHeading.DefaultCellStyle = dataGridViewCellStyle1;
             this.dataGridViewHeading.Name = "dataGridViewHeading";
             this.dataGridViewHeading.RowTemplate.Height = 21;
             // 
             // dataGridViewLanguageName
             // 
             resources.ApplyResources(this.dataGridViewLanguageName, "dataGridViewLanguageName");
+            this.dataGridViewLanguageName.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
             this.dataGridViewLanguageName.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
             this.dataGridViewLanguageName.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
             this.ColumnCode,
             // 
             // ColumnCode
             // 
-            this.ColumnCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells;
             resources.ApplyResources(this.ColumnCode, "ColumnCode");
             this.ColumnCode.MaxInputLength = 10;
             this.ColumnCode.Name = "ColumnCode";
             // 
             // ColumnName
             // 
-            this.ColumnName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells;
             resources.ApplyResources(this.ColumnName, "ColumnName");
             this.ColumnName.MaxInputLength = 255;
             this.ColumnName.Name = "ColumnName";
             // 
             // ColumnShortName
             // 
-            this.ColumnShortName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells;
             resources.ApplyResources(this.ColumnShortName, "ColumnShortName");
             this.ColumnShortName.MaxInputLength = 20;
             this.ColumnShortName.Name = "ColumnShortName";
index b5464a0..1ad7237 100644 (file)
@@ -18,6 +18,7 @@ namespace Honememo.Wptscs
     using System.Linq;
     using System.Reflection;
     using System.Text;
+    using System.Threading;
     using System.Windows.Forms;
     using Honememo.Utilities;
     using Honememo.Wptscs.Models;
@@ -147,7 +148,7 @@ namespace Honememo.Wptscs
 
                     // 全部成功なら画面を閉じる
                     // ※ エラーの場合、どうしても駄目ならキャンセルボタンで閉じてもらう
-                    this.Close();
+                    this.DialogResult = DialogResult.OK;
                 }
                 catch (Exception ex)
                 {
@@ -393,12 +394,12 @@ namespace Honememo.Wptscs
             }
 
             // 各行にデータを取り込み
-            foreach (IDictionary<string, string> record in table)
+            foreach (IDictionary<string, string[]> record in table)
             {
                 // 行を追加しその行を取得
                 DataGridViewRow row = view.Rows[view.Rows.Add()];
 
-                foreach (KeyValuePair<string, string> cell in record)
+                foreach (KeyValuePair<string, string[]> cell in record)
                 {
                     // 上で登録した列では足りなかった場合、その都度生成する
                     if (!view.Columns.Contains(cell.Key))
@@ -406,13 +407,14 @@ namespace Honememo.Wptscs
                         this.AddTranslationTableColumn(view.Columns, cell.Key, cell.Key);
                     }
 
-                    row.Cells[cell.Key].Value = cell.Value;
+                    // 改行区切りで表示
+                    row.Cells[cell.Key].Value = String.Join("\n", cell.Value);
                 }
             }
 
             // 可能であれば現在表示中の言語の列の昇順でソートする
             // ※ 無ければenで試みる
-            string code = System.Threading.Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName;
+            string code = Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName;
             if (view.Columns.Contains(code))
             {
                 view.Sort(view.Columns[code], ListSortDirection.Ascending);
@@ -421,10 +423,6 @@ namespace Honememo.Wptscs
             {
                 view.Sort(view.Columns["en"], ListSortDirection.Ascending);
             }
-
-            // 列幅をデータ長に応じて自動調整
-            // ※ 常に行ってしまうと、読み込みに時間がかかるため
-            view.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
         }
 
         /// <summary>
@@ -437,14 +435,15 @@ namespace Honememo.Wptscs
             TranslationTable table = new TranslationTable();
             foreach (DataGridViewRow row in view.Rows)
             {
-                IDictionary<string, string> record = new SortedDictionary<string, string>();
+                IDictionary<string, string[]> record = new SortedDictionary<string, string[]>();
                 foreach (DataGridViewCell cell in row.Cells)
                 {
                     // 空のセルは格納しない、該当の組み合わせは消える
                     string value = FormUtils.ToString(cell);
                     if (!String.IsNullOrWhiteSpace(value))
                     {
-                        record[cell.OwningColumn.Name] = value;
+                        // 改行区切りの配列で格納
+                        record[cell.OwningColumn.Name] = CollectionUtils.Trim(value.Split('\n'));
                     }
                 }
 
@@ -478,7 +477,7 @@ namespace Honememo.Wptscs
         {
             Language.LanguageName name;
             if (lang.Names.TryGetValue(
-                System.Threading.Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName, out name))
+                Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName, out name))
             {
                 if (!String.IsNullOrEmpty(name.Name))
                 {
@@ -548,17 +547,16 @@ namespace Honememo.Wptscs
         /// <param name="e">発生したイベント。</param>
         private void ButtonLunguageAdd_Click(object sender, EventArgs e)
         {
-            // 言語追加用ダイアログを表示
-            InputLanguageCodeDialog form = new InputLanguageCodeDialog(this.config);
-            form.ShowDialog();
-
-            // 値が登録された場合
-            if (!String.IsNullOrWhiteSpace(form.LanguageCode))
+            // 言語追加用ダイアログで言語コードを入力
+            using (AddLanguageDialog form = new AddLanguageDialog(this.config))
             {
-                // 値を一覧・見出しの対訳表に追加、登録した値を選択状態に変更
-                this.comboBoxLanguage.Items.Add(form.LanguageCode);
-                this.dataGridViewHeading.Columns.Add(form.LanguageCode, form.LanguageCode);
-                this.comboBoxLanguage.SelectedItem = form.LanguageCode;
+                if (form.ShowDialog() == DialogResult.OK)
+                {
+                    // 値をコンボボックスと見出しの対訳表に追加、登録した値を選択状態に変更
+                    this.comboBoxLanguage.Items.Add(form.LanguageCode);
+                    this.dataGridViewHeading.Columns.Add(form.LanguageCode, form.LanguageCode);
+                    this.comboBoxLanguage.SelectedItem = form.LanguageCode;
+                }
             }
         }
 
@@ -579,8 +577,9 @@ namespace Honememo.Wptscs
                 }
             }
 
-            // コンボボックスからも削除し、表示を更新する
+            // 値を見出しの対訳表とコンボボックスからも削除し、表示を更新する
             this.comboBoxLanguageSelectedText = null;
+            this.dataGridViewHeading.Columns.Remove(this.comboBoxLanguage.Text);
             this.comboBoxLanguage.Items.Remove(this.comboBoxLanguage.Text);
             this.ComboBoxLanguuage_SelectedIndexChanged(sender, e);
         }
index cd19daf..dcbf176 100644 (file)
   <data name="buttonOk.Text" xml:space="preserve">
     <value>OK</value>
   </data>
-  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <data name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing">
     <value>148, 17</value>
-  </metadata>
+  </data>
   <data name="buttonOk.ToolTip" xml:space="preserve">
     <value>設定を入力された内容で更新し、この画面を閉じます。</value>
   </data>
   <data name="dataGridViewItems.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Bottom, Left, Right</value>
   </data>
-  <metadata name="ColumnFromCode.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <data name="ColumnFromCode.UserAddedColumn" type="System.Boolean, mscorlib">
     <value>True</value>
-  </metadata>
+  </data>
   <data name="ColumnFromCode.HeaderText" xml:space="preserve">
     <value>Source</value>
   </data>
   <data name="ColumnFromCode.Width" type="System.Int32, mscorlib">
     <value>66</value>
   </data>
-  <metadata name="ColumnFromTitle.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <data name="ColumnFromTitle.UserAddedColumn" type="System.Boolean, mscorlib">
     <value>True</value>
-  </metadata>
+  </data>
   <data name="ColumnFromTitle.HeaderText" xml:space="preserve">
     <value>Title</value>
   </data>
   <data name="ColumnFromTitle.Width" type="System.Int32, mscorlib">
     <value>66</value>
   </data>
-  <metadata name="ColumnAlias.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <data name="ColumnAlias.UserAddedColumn" type="System.Boolean, mscorlib">
     <value>True</value>
-  </metadata>
+  </data>
   <data name="ColumnAlias.HeaderText" xml:space="preserve">
     <value>Redirect</value>
   </data>
   <data name="ColumnAlias.Width" type="System.Int32, mscorlib">
     <value>80</value>
   </data>
-  <metadata name="ColumnArrow.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <data name="ColumnArrow.UserAddedColumn" type="System.Boolean, mscorlib">
     <value>True</value>
-  </metadata>
+  </data>
   <data name="ColumnArrow.HeaderText" xml:space="preserve">
     <value />
   </data>
   <data name="ColumnArrow.Width" type="System.Int32, mscorlib">
     <value>21</value>
   </data>
-  <metadata name="ColumnToCode.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <data name="ColumnToCode.UserAddedColumn" type="System.Boolean, mscorlib">
     <value>True</value>
-  </metadata>
+  </data>
   <data name="ColumnToCode.HeaderText" xml:space="preserve">
     <value>Destination</value>
   </data>
   <data name="ColumnToCode.Width" type="System.Int32, mscorlib">
     <value>66</value>
   </data>
-  <metadata name="ColumnToTitle.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <data name="ColumnToTitle.UserAddedColumn" type="System.Boolean, mscorlib">
     <value>True</value>
-  </metadata>
+  </data>
   <data name="ColumnToTitle.HeaderText" xml:space="preserve">
     <value>Title</value>
   </data>
   <data name="ColumnToTitle.Width" type="System.Int32, mscorlib">
     <value>66</value>
   </data>
-  <metadata name="ColumnTimestamp.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <data name="ColumnTimestamp.UserAddedColumn" type="System.Boolean, mscorlib">
     <value>True</value>
-  </metadata>
+  </data>
   <data name="ColumnTimestamp.HeaderText" xml:space="preserve">
     <value>Timestamp</value>
   </data>
   </data>
   <data name="tabPageHeadings.ToolTipText" xml:space="preserve">
     <value>見出しの置き換えパターンです。
-見出しを置き換える場合、こちらに各言語での語句を登録してください。</value>
+見出しを置き換える場合、こちらに各言語での語句を登録してください。
+複数の語句が同じ用途で使用されている場合、改行で区切って登録してください。</value>
   </data>
   <data name="&gt;&gt;tabPageHeadings.Name" xml:space="preserve">
     <value>tabPageHeadings</value>
   <data name="dataGridViewLanguageName.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Bottom, Left, Right</value>
   </data>
-  <metadata name="ColumnCode.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <data name="ColumnCode.UserAddedColumn" type="System.Boolean, mscorlib">
     <value>True</value>
-  </metadata>
+  </data>
   <data name="ColumnCode.HeaderText" xml:space="preserve">
     <value>Code</value>
   </data>
   <data name="ColumnCode.Width" type="System.Int32, mscorlib">
     <value>56</value>
   </data>
-  <metadata name="ColumnName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <data name="ColumnName.UserAddedColumn" type="System.Boolean, mscorlib">
     <value>True</value>
-  </metadata>
+  </data>
   <data name="ColumnName.HeaderText" xml:space="preserve">
     <value>Name (Article)</value>
   </data>
   <data name="ColumnName.Width" type="System.Int32, mscorlib">
     <value>97</value>
   </data>
-  <metadata name="ColumnShortName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <data name="ColumnShortName.UserAddedColumn" type="System.Boolean, mscorlib">
     <value>True</value>
-  </metadata>
+  </data>
   <data name="ColumnShortName.HeaderText" xml:space="preserve">
     <value>Abbr</value>
   </data>
@@ -2138,12 +2139,12 @@ http://www.mediawiki.org/wiki/API:Main_page/ja</value>
   <data name="&gt;&gt;tabControl.ZOrder" xml:space="preserve">
     <value>0</value>
   </data>
-  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <data name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing">
     <value>17, 17</value>
-  </metadata>
-  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  </data>
+  <data name="$this.Localizable" type="System.Boolean, mscorlib">
     <value>True</value>
-  </metadata>
+  </data>
   <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
     <value>6, 12</value>
   </data>
index d991fbf..eae7bf6 100644 (file)
@@ -68,11 +68,12 @@ namespace Honememo.Wptscs
             this.toolStripStatusLabelStopwatch = new System.Windows.Forms.ToolStripStatusLabel();
             this.toolStripDropDownButtonLanguage = new System.Windows.Forms.ToolStripDropDownButton();
             this.toolStripMenuItemEnglishUS = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripMenuItemEnglishGB = new System.Windows.Forms.ToolStripMenuItem();
             this.toolStripMenuItemJapanese = new System.Windows.Forms.ToolStripMenuItem();
             this.toolStripMenuItemAuto = new System.Windows.Forms.ToolStripMenuItem();
             this.toolStripDropDownButtonConfig = new System.Windows.Forms.ToolStripDropDownButton();
+            this.toolStripMenuItemNew = new System.Windows.Forms.ToolStripMenuItem();
             this.timerStatusStopwatch = new System.Windows.Forms.Timer(this.components);
-            this.toolStripMenuItemEnglishGB = new System.Windows.Forms.ToolStripMenuItem();
             this.groupBoxTransfer.SuspendLayout();
             this.groupBoxSaveDirectory.SuspendLayout();
             this.groupBoxRun.SuspendLayout();
@@ -81,6 +82,7 @@ namespace Honememo.Wptscs
             // 
             // groupBoxTransfer
             // 
+            resources.ApplyResources(this.groupBoxTransfer, "groupBoxTransfer");
             this.groupBoxTransfer.Controls.Add(this.buttonConfig);
             this.groupBoxTransfer.Controls.Add(this.labelTarget);
             this.groupBoxTransfer.Controls.Add(this.comboBoxTarget);
@@ -88,7 +90,6 @@ namespace Honememo.Wptscs
             this.groupBoxTransfer.Controls.Add(this.linkLabelSourceURL);
             this.groupBoxTransfer.Controls.Add(this.labelSource);
             this.groupBoxTransfer.Controls.Add(this.comboBoxSource);
-            resources.ApplyResources(this.groupBoxTransfer, "groupBoxTransfer");
             this.groupBoxTransfer.Name = "groupBoxTransfer";
             this.groupBoxTransfer.TabStop = false;
             this.toolTip.SetToolTip(this.groupBoxTransfer, resources.GetString("groupBoxTransfer.ToolTip"));
@@ -103,16 +104,16 @@ namespace Honememo.Wptscs
             // 
             // labelTarget
             // 
-            this.labelTarget.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
             resources.ApplyResources(this.labelTarget, "labelTarget");
+            this.labelTarget.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
             this.labelTarget.Name = "labelTarget";
             this.toolTip.SetToolTip(this.labelTarget, resources.GetString("labelTarget.ToolTip"));
             // 
             // comboBoxTarget
             // 
+            resources.ApplyResources(this.comboBoxTarget, "comboBoxTarget");
             this.comboBoxTarget.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
             this.comboBoxTarget.FormattingEnabled = true;
-            resources.ApplyResources(this.comboBoxTarget, "comboBoxTarget");
             this.comboBoxTarget.Name = "comboBoxTarget";
             this.comboBoxTarget.Sorted = true;
             this.toolTip.SetToolTip(this.comboBoxTarget, resources.GetString("comboBoxTarget.ToolTip"));
@@ -122,11 +123,12 @@ namespace Honememo.Wptscs
             // 
             resources.ApplyResources(this.labelArrow, "labelArrow");
             this.labelArrow.Name = "labelArrow";
+            this.toolTip.SetToolTip(this.labelArrow, resources.GetString("labelArrow.ToolTip"));
             // 
             // linkLabelSourceURL
             // 
-            this.linkLabelSourceURL.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
             resources.ApplyResources(this.linkLabelSourceURL, "linkLabelSourceURL");
+            this.linkLabelSourceURL.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
             this.linkLabelSourceURL.Name = "linkLabelSourceURL";
             this.linkLabelSourceURL.TabStop = true;
             this.toolTip.SetToolTip(this.linkLabelSourceURL, resources.GetString("linkLabelSourceURL.ToolTip"));
@@ -134,16 +136,16 @@ namespace Honememo.Wptscs
             // 
             // labelSource
             // 
-            this.labelSource.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
             resources.ApplyResources(this.labelSource, "labelSource");
+            this.labelSource.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
             this.labelSource.Name = "labelSource";
             this.toolTip.SetToolTip(this.labelSource, resources.GetString("labelSource.ToolTip"));
             // 
             // comboBoxSource
             // 
+            resources.ApplyResources(this.comboBoxSource, "comboBoxSource");
             this.comboBoxSource.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
             this.comboBoxSource.FormattingEnabled = true;
-            resources.ApplyResources(this.comboBoxSource, "comboBoxSource");
             this.comboBoxSource.Name = "comboBoxSource";
             this.comboBoxSource.Sorted = true;
             this.toolTip.SetToolTip(this.comboBoxSource, resources.GetString("comboBoxSource.ToolTip"));
@@ -151,9 +153,9 @@ namespace Honememo.Wptscs
             // 
             // groupBoxSaveDirectory
             // 
+            resources.ApplyResources(this.groupBoxSaveDirectory, "groupBoxSaveDirectory");
             this.groupBoxSaveDirectory.Controls.Add(this.textBoxSaveDirectory);
             this.groupBoxSaveDirectory.Controls.Add(this.buttonSaveDirectory);
-            resources.ApplyResources(this.groupBoxSaveDirectory, "groupBoxSaveDirectory");
             this.groupBoxSaveDirectory.Name = "groupBoxSaveDirectory";
             this.groupBoxSaveDirectory.TabStop = false;
             this.toolTip.SetToolTip(this.groupBoxSaveDirectory, resources.GetString("groupBoxSaveDirectory.ToolTip"));
@@ -194,6 +196,7 @@ namespace Honememo.Wptscs
             this.textBoxLog.Name = "textBoxLog";
             this.textBoxLog.ReadOnly = true;
             this.textBoxLog.TabStop = false;
+            this.toolTip.SetToolTip(this.textBoxLog, resources.GetString("textBoxLog.ToolTip"));
             // 
             // buttonStop
             // 
@@ -241,71 +244,80 @@ namespace Honememo.Wptscs
             // 
             // statusStrip
             // 
+            resources.ApplyResources(this.statusStrip, "statusStrip");
             this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.toolStripStatusLabelStatus,
             this.toolStripStatusLabelStopwatch,
             this.toolStripDropDownButtonLanguage,
             this.toolStripDropDownButtonConfig});
-            resources.ApplyResources(this.statusStrip, "statusStrip");
             this.statusStrip.Name = "statusStrip";
+            this.toolTip.SetToolTip(this.statusStrip, resources.GetString("statusStrip.ToolTip"));
             // 
             // toolStripStatusLabelStatus
             // 
-            this.toolStripStatusLabelStatus.Name = "toolStripStatusLabelStatus";
             resources.ApplyResources(this.toolStripStatusLabelStatus, "toolStripStatusLabelStatus");
+            this.toolStripStatusLabelStatus.Name = "toolStripStatusLabelStatus";
             this.toolStripStatusLabelStatus.Spring = true;
             // 
             // toolStripStatusLabelStopwatch
             // 
-            this.toolStripStatusLabelStopwatch.Name = "toolStripStatusLabelStopwatch";
             resources.ApplyResources(this.toolStripStatusLabelStopwatch, "toolStripStatusLabelStopwatch");
+            this.toolStripStatusLabelStopwatch.Name = "toolStripStatusLabelStopwatch";
             // 
             // toolStripDropDownButtonLanguage
             // 
+            resources.ApplyResources(this.toolStripDropDownButtonLanguage, "toolStripDropDownButtonLanguage");
             this.toolStripDropDownButtonLanguage.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
             this.toolStripDropDownButtonLanguage.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.toolStripMenuItemEnglishUS,
             this.toolStripMenuItemEnglishGB,
             this.toolStripMenuItemJapanese,
             this.toolStripMenuItemAuto});
-            resources.ApplyResources(this.toolStripDropDownButtonLanguage, "toolStripDropDownButtonLanguage");
             this.toolStripDropDownButtonLanguage.Name = "toolStripDropDownButtonLanguage";
             // 
             // toolStripMenuItemEnglishUS
             // 
-            this.toolStripMenuItemEnglishUS.Name = "toolStripMenuItemEnglishUS";
             resources.ApplyResources(this.toolStripMenuItemEnglishUS, "toolStripMenuItemEnglishUS");
+            this.toolStripMenuItemEnglishUS.Name = "toolStripMenuItemEnglishUS";
             this.toolStripMenuItemEnglishUS.Click += new System.EventHandler(this.ToolStripMenuItemEnglishUS_Click);
             // 
+            // toolStripMenuItemEnglishGB
+            // 
+            resources.ApplyResources(this.toolStripMenuItemEnglishGB, "toolStripMenuItemEnglishGB");
+            this.toolStripMenuItemEnglishGB.Name = "toolStripMenuItemEnglishGB";
+            this.toolStripMenuItemEnglishGB.Click += new System.EventHandler(this.ToolStripMenuItemEnglishGB_Click);
+            // 
             // toolStripMenuItemJapanese
             // 
-            this.toolStripMenuItemJapanese.Name = "toolStripMenuItemJapanese";
             resources.ApplyResources(this.toolStripMenuItemJapanese, "toolStripMenuItemJapanese");
+            this.toolStripMenuItemJapanese.Name = "toolStripMenuItemJapanese";
             this.toolStripMenuItemJapanese.Click += new System.EventHandler(this.ToolStripMenuItemJapanese_Click);
             // 
             // toolStripMenuItemAuto
             // 
-            this.toolStripMenuItemAuto.Name = "toolStripMenuItemAuto";
             resources.ApplyResources(this.toolStripMenuItemAuto, "toolStripMenuItemAuto");
+            this.toolStripMenuItemAuto.Name = "toolStripMenuItemAuto";
             this.toolStripMenuItemAuto.Click += new System.EventHandler(this.ToolStripMenuItemAuto_Click);
             // 
             // toolStripDropDownButtonConfig
             // 
-            this.toolStripDropDownButtonConfig.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
             resources.ApplyResources(this.toolStripDropDownButtonConfig, "toolStripDropDownButtonConfig");
+            this.toolStripDropDownButtonConfig.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+            this.toolStripDropDownButtonConfig.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.toolStripMenuItemNew});
             this.toolStripDropDownButtonConfig.Name = "toolStripDropDownButtonConfig";
             // 
+            // toolStripMenuItemNew
+            // 
+            resources.ApplyResources(this.toolStripMenuItemNew, "toolStripMenuItemNew");
+            this.toolStripMenuItemNew.Name = "toolStripMenuItemNew";
+            this.toolStripMenuItemNew.Click += new System.EventHandler(this.ToolStripMenuItemNew_Click);
+            // 
             // timerStatusStopwatch
             // 
             this.timerStatusStopwatch.Interval = 1000;
             this.timerStatusStopwatch.Tick += new System.EventHandler(this.TimerStatusStopwatch_Tick);
             // 
-            // toolStripMenuItemEnglishGB
-            // 
-            this.toolStripMenuItemEnglishGB.Name = "toolStripMenuItemEnglishGB";
-            resources.ApplyResources(this.toolStripMenuItemEnglishGB, "toolStripMenuItemEnglishGB");
-            this.toolStripMenuItemEnglishGB.Click += new System.EventHandler(this.ToolStripMenuItemEnglishGB_Click);
-            // 
             // MainForm
             // 
             resources.ApplyResources(this, "$this");
@@ -315,6 +327,7 @@ namespace Honememo.Wptscs
             this.Controls.Add(this.groupBoxSaveDirectory);
             this.Controls.Add(this.groupBoxTransfer);
             this.Name = "MainForm";
+            this.toolTip.SetToolTip(this, resources.GetString("$this.ToolTip"));
             this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.MainForm_FormClosed);
             this.Load += new System.EventHandler(this.MainForm_Load);
             this.groupBoxTransfer.ResumeLayout(false);
@@ -362,6 +375,7 @@ namespace Honememo.Wptscs
         private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButtonConfig;
         private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemAuto;
         private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemEnglishGB;
+        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemNew;
     }
 }
 
index 0f8e39b..6b2b468 100644 (file)
@@ -64,7 +64,7 @@ namespace Honememo.Wptscs
 
         #endregion
 
-        #region 各イベントのメソッド
+        #region フォームの各イベントのメソッド
 
         /// <summary>
         /// フォームロード時の処理。初期化。
@@ -73,24 +73,18 @@ namespace Honememo.Wptscs
         /// <param name="e">発生したイベント。</param>
         private void MainForm_Load(object sender, EventArgs e)
         {
-            // 設定ファイルの読み込み
-            if (!this.LoadConfig())
-            {
-                // 読み込み失敗時はどうしようもないのでそのまま終了
-                this.Close();
-            }
-
-            this.translator = null;
+            // フォームの初期設定
             Control.CheckForIllegalCrossThreadCalls = false;
 
-            // コンボボックス・表示言語選択メニューの初期設定
-            this.InitializeComboBox();
+            // 表示言語選択メニュー、設定選択メニューの初期設定
             this.InitializeDropDownButtonLanguage();
+            this.InitializeDropDownButtonConfig();
+
+            // 設定ファイルの読み込みと関連項目の初期設定
+            this.InitializeByConfig();
 
-            // å\89\8då\9b\9eã\81®å\87¦ç\90\86ç\8a¶æ\85\8bを復元
+            // å\87ºå\8a\9bå\85\88ã\83\95ã\82©ã\83«ã\83\80ã\81®è¨­å®\9aを復元
             this.textBoxSaveDirectory.Text = Settings.Default.SaveDirectory;
-            this.comboBoxSource.SelectedItem = Settings.Default.LastSelectedSource;
-            this.comboBoxTarget.SelectedItem = Settings.Default.LastSelectedTarget;
         }
 
         /// <summary>
@@ -100,10 +94,16 @@ namespace Honememo.Wptscs
         /// <param name="e">発生したイベント。</param>
         private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
         {
-            // 現在の出力先フォルダ、翻訳元/先言語、また必要であれば表示言語を保存
-            this.SaveSettings();
+            // 現在の出力先フォルダ、翻訳元/先言語、
+            // また更新されていれば表示言語や設定ファイルの選択を保存
+            this.SetSettings();
+            Settings.Default.Save();
         }
 
+        #endregion
+
+        #region 翻訳元/先言語グループのイベントのメソッド
+
         /// <summary>
         /// 翻訳元コンボボックス変更時の処理。
         /// </summary>
@@ -112,25 +112,14 @@ namespace Honememo.Wptscs
         private void ComboBoxSource_SelectedIndexChanged(object sender, EventArgs e)
         {
             // ラベルに言語名を表示する
-            this.labelSource.Text = String.Empty;
-            this.linkLabelSourceURL.Text = "http://";
-            if (!String.IsNullOrWhiteSpace(this.comboBoxSource.Text))
-            {
-                // その言語の、ユーザーが使用している言語での表示名を表示
-                // (日本語環境だったら日本語を、英語だったら英語を)
-                Language.LanguageName name;
-                this.labelSource.Text = String.Empty;
-                if (this.config.GetWebsite(this.comboBoxSource.Text) != null &&
-                    this.config.GetWebsite(this.comboBoxSource.Text).Language.Names.TryGetValue(
-                    Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName,
-                    out name))
-                {
-                    this.labelSource.Text = name.Name;
-                }
+            Website site = this.config.GetWebsite(this.comboBoxSource.Text);
+            this.SetLanguageNameLabel(this.labelSource, site);
 
-                // サーバーURLの表示
-                this.linkLabelSourceURL.Text = this.config.GetWebsite(
-                    this.comboBoxSource.Text).Location;
+            // サーバーURLの表示
+            this.linkLabelSourceURL.Text = "http://";
+            if (site != null)
+            {
+                this.linkLabelSourceURL.Text = site.Location;
             }
         }
 
@@ -153,19 +142,7 @@ namespace Honememo.Wptscs
         private void ComboBoxTarget_SelectedIndexChanged(object sender, EventArgs e)
         {
             // ラベルに言語名を表示する
-            this.labelTarget.Text = String.Empty;
-            if (!String.IsNullOrWhiteSpace(this.comboBoxTarget.Text))
-            {
-                this.comboBoxTarget.Text = this.comboBoxTarget.Text.Trim().ToLower();
-
-                // その言語の、ユーザーが使用している言語での表示名を表示
-                // (日本語環境だったら日本語を、英語だったら英語を)
-                if (this.config.GetWebsite(this.comboBoxTarget.Text) != null)
-                {
-                    this.labelTarget.Text = this.config.GetWebsite(this.comboBoxTarget.Text)
-                        .Language.Names[Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName].Name;
-                }
-            }
+            this.SetLanguageNameLabel(this.labelTarget, this.config.GetWebsite(this.comboBoxTarget.Text));
         }
 
         /// <summary>
@@ -175,23 +152,80 @@ namespace Honememo.Wptscs
         /// <param name="e">発生したイベント。</param>
         private void ButtonConfig_Click(object sender, EventArgs e)
         {
+            // 現在の画面の表示状態を保存
+            this.SetSettings();
+
             // 設定画面を開く
-            ConfigForm form = new ConfigForm(this.config);
-            form.ShowDialog();
+            using (ConfigForm form = new ConfigForm(this.config))
+            {
+                form.ShowDialog();
+            }
 
-            // 戻ってきたら設定ファイルを再読み込み
+            // 戻ってきたら設定ファイルを再読み込みして表示を更新
             // ※ キャンセル時もインスタンスは更新されてしまうので
-            this.LoadConfig();
+            this.InitializeByConfig();
+        }
 
+        #region イベント実装支援用メソッド
+
+        /// <summary>
+        /// 翻訳元/先言語コンボボックスの初期化処理。
+        /// </summary>
+        private void InitializeComboBox()
+        {
             // コンボボックス設定
-            string backupSourceSelected = this.comboBoxSource.Text;
-            string backupSourceTarget = this.comboBoxTarget.Text;
-            this.InitializeComboBox();
-            this.comboBoxSource.SelectedItem = backupSourceSelected;
-            this.comboBoxTarget.SelectedItem = backupSourceTarget;
+            this.comboBoxSource.Items.Clear();
+            this.comboBoxTarget.Items.Clear();
+
+            // 設定ファイルに存在する全言語を選択肢として登録する
+            foreach (Website site in this.config.Websites)
+            {
+                this.comboBoxSource.Items.Add(site.Language.Code);
+                this.comboBoxTarget.Items.Add(site.Language.Code);
+            }
+
+            // 選択されていた項目を選択中に復元
+            this.comboBoxSource.SelectedItem = Settings.Default.LastSelectedSource;
+            this.comboBoxTarget.SelectedItem = Settings.Default.LastSelectedTarget;
+
+            // コンボボックス変更時の処理をコール
+            // ※ 項目が存在する場合は↑で自動的に呼ばれるが、無い場合は呼ばれないため
+            this.ComboBoxSource_SelectedIndexChanged(this.comboBoxSource, new EventArgs());
+            this.ComboBoxTarget_SelectedIndexChanged(this.comboBoxTarget, new EventArgs());
         }
 
         /// <summary>
+        /// ウェブサイトの言語の表示名ラベルの表示を設定する。
+        /// </summary>
+        /// <param name="label">言語の表示名用ラベル。</param>
+        /// <param name="site">選択されている言語のウェブサイト。</param>
+        private void SetLanguageNameLabel(Label label, Website site)
+        {
+            // ラベルを初期化
+            label.Text = String.Empty;
+            if (site == null)
+            {
+                return;
+            }
+
+            // ウェブサイトが空でない場合、その言語の、ユーザーが使用している言語での表示名を表示
+            // (日本語環境だったら日本語を、英語環境だったら英語を)
+            Language.LanguageName name;
+            if (site.Language.Names.TryGetValue(
+                Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName,
+                out name))
+            {
+                label.Text = name.Name;
+            }
+        }
+
+        #endregion
+
+        #endregion
+
+        #region フォルダの選択グループのイベントのメソッド
+
+        /// <summary>
         /// 参照ボタン押下時の処理。
         /// </summary>
         /// <param name="sender">イベント発生オブジェクト。</param>
@@ -223,6 +257,10 @@ namespace Honememo.Wptscs
             this.textBoxSaveDirectory.Text = this.textBoxSaveDirectory.Text.Trim();
         }
 
+        #endregion
+
+        #region 記事を指定して実行グループのイベントのメソッド
+
         /// <summary>
         /// 実行ボタン押下時の処理。
         /// </summary>
@@ -312,17 +350,7 @@ namespace Honememo.Wptscs
                 this.textBoxLog.AppendText(String.Format(Resources.LogMessageStart, FormUtils.ApplicationName(), DateTime.Now));
 
                 // 翻訳支援処理ロジックのオブジェクトを生成
-                try
-                {
-                    this.translator = Translator.Create(this.config, this.comboBoxSource.Text, this.comboBoxTarget.Text);
-                }
-                catch (NotImplementedException)
-                {
-                    // 設定ファイルに対応していないパターンが書かれている場合の例外、将来の拡張用
-                    this.textBoxLog.AppendText(String.Format(Resources.InformationMessageDevelopingMethod, "MediaWiki以外の処理"));
-                    FormUtils.InformationDialog(Resources.InformationMessageDevelopingMethod, "MediaWiki以外の処理");
-                    return;
-                }
+                this.translator = Translator.Create(this.config, this.comboBoxSource.Text, this.comboBoxTarget.Text);
 
                 // ログ・処理状態更新通知を受け取るためのイベント登録
                 // 処理時間更新用にタイマーを起動
@@ -400,172 +428,7 @@ namespace Honememo.Wptscs
             this.Release();
         }
 
-        /// <summary>
-        /// ステータスバー処理時間更新タイマー処理。
-        /// </summary>
-        /// <param name="sender">イベント発生オブジェクト。</param>
-        /// <param name="e">発生したイベント。</param>
-        private void TimerStatusStopwatch_Tick(object sender, EventArgs e)
-        {
-            // 処理時間をステータスバーに反映
-            this.toolStripStatusLabelStopwatch.Text = String.Format(Resources.ElapsedTime, this.translator.Stopwatch.Elapsed);
-        }
-
-        /// <summary>
-        /// 表示言語選択メニュー日本語クリック時の処理。
-        /// </summary>
-        /// <param name="sender">イベント発生オブジェクト。</param>
-        /// <param name="e">発生したイベント。</param>
-        private void ToolStripMenuItemJapanese_Click(object sender, EventArgs e)
-        {
-            // 表示言語を日本語に設定し再起動する
-            this.ChangeCultureAndRestart("ja-JP");
-        }
-
-        /// <summary>
-        /// 表示言語選択メニュー英語(US)クリック時の処理。
-        /// </summary>
-        /// <param name="sender">イベント発生オブジェクト。</param>
-        /// <param name="e">発生したイベント。</param>
-        private void ToolStripMenuItemEnglishUS_Click(object sender, EventArgs e)
-        {
-            // 表示言語を英語(US)に設定し再起動する
-            this.ChangeCultureAndRestart("en-US");
-        }
-
-        /// <summary>
-        /// 表示言語選択メニュー英語(GB)クリック時の処理。
-        /// </summary>
-        /// <param name="sender">イベント発生オブジェクト。</param>
-        /// <param name="e">発生したイベント。</param>
-        private void ToolStripMenuItemEnglishGB_Click(object sender, EventArgs e)
-        {
-            // 表示言語を英語(GB)に設定し再起動する
-            this.ChangeCultureAndRestart("en-GB");
-        }
-
-        /// <summary>
-        /// 表示言語選択メニュー自動クリック時の処理。
-        /// </summary>
-        /// <param name="sender">イベント発生オブジェクト。</param>
-        /// <param name="e">発生したイベント。</param>
-        private void ToolStripMenuItemAuto_Click(object sender, EventArgs e)
-        {
-            // 表示言語を空欄に設定し再起動する
-            this.ChangeCultureAndRestart(String.Empty);
-        }
-
-        #endregion
-
-        #region それ以外のメソッド
-
-        /// <summary>
-        /// 翻訳元/先言語コンボボックスの初期化処理。
-        /// </summary>
-        private void InitializeComboBox()
-        {
-            // コンボボックス設定
-            this.comboBoxSource.Items.Clear();
-            this.comboBoxTarget.Items.Clear();
-
-            // 設定ファイルに存在する全言語を選択肢として登録する
-            foreach (Website site in this.config.Websites)
-            {
-                this.comboBoxSource.Items.Add(site.Language.Code);
-                this.comboBoxTarget.Items.Add(site.Language.Code);
-            }
-        }
-
-        /// <summary>
-        /// 表示言語選択メニューの初期化処理。
-        /// </summary>
-        private void InitializeDropDownButtonLanguage()
-        {
-            // 選択中の言語のメニュー項目を抽出
-            ToolStripMenuItem item;
-            switch (Settings.Default.LastSelectedLanguage)
-            {
-                case "en-US":
-                    item = this.toolStripMenuItemEnglishUS;
-                    break;
-                case "en-GB":
-                    item = this.toolStripMenuItemEnglishGB;
-                    break;
-                case "ja-JP":
-                    item = this.toolStripMenuItemJapanese;
-                    break;
-                default:
-                    item = this.toolStripMenuItemAuto;
-                    break;
-            }
-
-            // 選択中の項目をチェック状態&押下不能とする
-            item.Checked = true;
-            item.Enabled = false;
-            if (item != this.toolStripMenuItemAuto)
-            {
-                // 自動以外の場合、ステータスバーの表示も更新
-                this.toolStripDropDownButtonLanguage.Text = item.Text;
-            }
-        }
-
-        /// <summary>
-        /// 設定ファイル読み込み。
-        /// </summary>
-        /// <returns>読み込み成功時は<c>true</c>。</returns>
-        private bool LoadConfig()
-        {
-            // 設定ファイルの読み込み
-            // ※ 微妙に時間がかかるので、ステータスバーに通知
-            try
-            {
-                this.toolStripStatusLabelStatus.Text = Resources.StatusConfigReading;
-                try
-                {
-                    this.config = Config.GetInstance(Settings.Default.ConfigurationFile);
-                }
-                finally
-                {
-                    this.toolStripStatusLabelStatus.Text = String.Empty;
-                }
-            }
-            catch (FileNotFoundException ex)
-            {
-                // 設定ファイルが見つからない場合
-                System.Diagnostics.Debug.WriteLine(
-                    "MainForm.LoadConfig > 設定ファイル読み込み失敗 : " + ex.Message);
-                FormUtils.ErrorDialog(
-                    Resources.ErrorMessageConfigNotFound,
-                    Settings.Default.ConfigurationFile);
-
-                return false;
-            }
-            catch (Exception ex)
-            {
-                System.Diagnostics.Debug.WriteLine(
-                    "MainForm.LoadConfig > 設定ファイル読み込み時エラー : " + ex.ToString());
-                FormUtils.ErrorDialog(
-                    Resources.ErrorMessageConfigLordFailed,
-                    ex.Message);
-
-                return false;
-            }
-
-            return true;
-        }
-
-        /// <summary>
-        /// アプリケーション設定保存。
-        /// </summary>
-        private void SaveSettings()
-        {
-            // 現在の出力先フォルダ、翻訳元/先言語を保存
-            // ※ 表示言語については必要な場合のみ更新するため、変更したタイミングで更新、ここでは反映だけ
-            Settings.Default.SaveDirectory = this.textBoxSaveDirectory.Text;
-            Settings.Default.LastSelectedSource = this.comboBoxSource.Text;
-            Settings.Default.LastSelectedTarget = this.comboBoxTarget.Text;
-            Settings.Default.Save();
-        }
+        #region イベント実装支援用メソッド
 
         /// <summary>
         /// 画面をロック中に移行。
@@ -671,7 +534,7 @@ namespace Honememo.Wptscs
             bool success = false;
             for (int i = 0; i < 100000; i++)
             {
-                // ※100000まで試して空きが見つからないことは無いはず、もし見つからなかったら最後のを上書き
+                // ※ 100000まで試して空きが見つからないことは無いはず、もし見つからなかったら最後のを上書き
                 if (!File.Exists(Path.Combine(dir, fileName))
                     && !File.Exists(Path.Combine(dir, logName)))
                 {
@@ -715,19 +578,311 @@ namespace Honememo.Wptscs
             this.toolStripStatusLabelStatus.Text = this.translator.Status;
         }
 
+        #endregion
+
+        #endregion
+
+        #region ステータスバーのイベントのメソッド
+
+        /// <summary>
+        /// ステータスバー処理時間更新タイマー処理。
+        /// </summary>
+        /// <param name="sender">イベント発生オブジェクト。</param>
+        /// <param name="e">発生したイベント。</param>
+        private void TimerStatusStopwatch_Tick(object sender, EventArgs e)
+        {
+            // 処理時間をステータスバーに反映
+            this.toolStripStatusLabelStopwatch.Text = String.Format(Resources.ElapsedTime, this.translator.Stopwatch.Elapsed);
+        }
+
+        /// <summary>
+        /// 表示言語選択メニュー日本語クリック時の処理。
+        /// </summary>
+        /// <param name="sender">イベント発生オブジェクト。</param>
+        /// <param name="e">発生したイベント。</param>
+        private void ToolStripMenuItemJapanese_Click(object sender, EventArgs e)
+        {
+            // 表示言語を日本語に設定し再起動する
+            this.ChangeCultureAndRestart("ja-JP");
+        }
+
+        /// <summary>
+        /// 表示言語選択メニュー英語(US)クリック時の処理。
+        /// </summary>
+        /// <param name="sender">イベント発生オブジェクト。</param>
+        /// <param name="e">発生したイベント。</param>
+        private void ToolStripMenuItemEnglishUS_Click(object sender, EventArgs e)
+        {
+            // 表示言語を英語(US)に設定し再起動する
+            this.ChangeCultureAndRestart("en-US");
+        }
+
+        /// <summary>
+        /// 表示言語選択メニュー英語(GB)クリック時の処理。
+        /// </summary>
+        /// <param name="sender">イベント発生オブジェクト。</param>
+        /// <param name="e">発生したイベント。</param>
+        private void ToolStripMenuItemEnglishGB_Click(object sender, EventArgs e)
+        {
+            // 表示言語を英語(GB)に設定し再起動する
+            this.ChangeCultureAndRestart("en-GB");
+        }
+
+        /// <summary>
+        /// 表示言語選択メニュー自動クリック時の処理。
+        /// </summary>
+        /// <param name="sender">イベント発生オブジェクト。</param>
+        /// <param name="e">発生したイベント。</param>
+        private void ToolStripMenuItemAuto_Click(object sender, EventArgs e)
+        {
+            // 表示言語を空欄に設定し再起動する
+            this.ChangeCultureAndRestart(String.Empty);
+        }
+
+        /// <summary>
+        /// 設定選択メニュークリック時の処理。
+        /// </summary>
+        /// <param name="sender">イベント発生オブジェクト。</param>
+        /// <param name="e">発生したイベント。</param>
+        private void ToolStripMenuItemConfig_Click(object sender, EventArgs e)
+        {
+            // メニュー項目を一旦全て未選択状態に更新
+            foreach (ToolStripMenuItem i in this.toolStripDropDownButtonConfig.DropDownItems)
+            {
+                i.Checked = false;
+                i.Enabled = true;
+            }
+
+            // メニュー項目名から設定ファイル名を作成、再読み込みする
+            ToolStripMenuItem item = (ToolStripMenuItem)sender;
+            Settings.Default.LastSelectedConfiguration = item.Text;
+            this.SetSettings();
+            this.InitializeByConfig();
+        }
+
+        /// <summary>
+        /// 設定選択メニュー追加クリック時の処理。
+        /// </summary>
+        /// <param name="sender">イベント発生オブジェクト。</param>
+        /// <param name="e">発生したイベント。</param>
+        private void ToolStripMenuItemNew_Click(object sender, EventArgs e)
+        {
+            // 重複チェック用の登録済みの設定一覧を用意
+            IList<string> configNames = new List<string>();
+            foreach (ToolStripMenuItem item in this.toolStripDropDownButtonConfig.DropDownItems)
+            {
+                if (item != this.toolStripMenuItemNew)
+                {
+                    configNames.Add(item.Text);
+                }
+            }
+
+            // 設定追加用ダイアログで言語コードを入力
+            using (AddConfigDialog form = new AddConfigDialog(configNames))
+            {
+                if (form.ShowDialog() == DialogResult.OK)
+                {
+                    // 設定選択メニューに新しい設定を追加。
+                    // 設定ファイルが作成されているため、それを読み込みなおす。
+                    this.ToolStripMenuItemConfig_Click(
+                        this.AddToolStripDropDownButtonConfigItem(form.ConfigName),
+                        e);
+                }
+            }
+        }
+
+        #region イベント実装支援用メソッド
+
+        /// <summary>
+        /// 表示言語選択メニューの初期化処理。
+        /// </summary>
+        private void InitializeDropDownButtonLanguage()
+        {
+            // 選択中の言語のメニュー項目を抽出
+            ToolStripMenuItem item;
+            switch (Settings.Default.LastSelectedLanguage)
+            {
+                case "en-US":
+                    item = this.toolStripMenuItemEnglishUS;
+                    break;
+                case "en-GB":
+                    item = this.toolStripMenuItemEnglishGB;
+                    break;
+                case "ja-JP":
+                    item = this.toolStripMenuItemJapanese;
+                    break;
+                default:
+                    item = this.toolStripMenuItemAuto;
+                    break;
+            }
+
+            // 選択中の項目をチェック状態&押下不能とする
+            item.Checked = true;
+            item.Enabled = false;
+            if (item != this.toolStripMenuItemAuto)
+            {
+                // 自動以外の場合、ステータスバーの表示も更新
+                this.toolStripDropDownButtonLanguage.Text = item.Text;
+            }
+        }
+
+        /// <summary>
+        /// 設定ファイル選択メニューの初期化処理。
+        /// </summary>
+        private void InitializeDropDownButtonConfig()
+        {
+            // exeまたはユーザーフォルダにある設定ファイルをメニュー項目としてリストアップ
+            foreach (string file in FormUtils.GetFilesAtUserAppData(
+                "*" + Settings.Default.ConfigurationExtension,
+                Settings.Default.ConfigurationCompatible))
+            {
+                try
+                {
+                    // 関係ないXMLファイルを除外するため、読み込めるフォーマットかをチェック
+                    // ※ ちょっと時間がかかるが・・・
+                    Config.GetInstance(file);
+
+                    // 問題なければファイル名を見出しにメニューに追加
+                    this.AddToolStripDropDownButtonConfigItem(Path.GetFileNameWithoutExtension(file));
+                }
+                catch (Exception ex)
+                {
+                    System.Diagnostics.Debug.WriteLine(
+                        "MainForm.InitializeDropDownButtonConfig : " + ex.Message);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 設定選択メニューに新しい設定を追加する。
+        /// </summary>
+        /// <param name="name">設定名。</param>
+        /// <returns>追加したメニュー。</returns>
+        /// <remarks>追加メニューがあるのでその後ろに登録する。</remarks>
+        private ToolStripMenuItem AddToolStripDropDownButtonConfigItem(string name)
+        {
+            // 設定変更のイベントを設定する
+            ToolStripMenuItem item = new ToolStripMenuItem();
+            item.Text = name;
+            item.Click += new EventHandler(this.ToolStripMenuItemConfig_Click);
+            this.toolStripDropDownButtonConfig.DropDownItems.Insert(
+                this.toolStripDropDownButtonConfig.DropDownItems.Count - 1,
+                item);
+            return item;
+        }
+
         /// <summary>
         /// アプリケーションの現在の表示言語を変更、再起動する。
         /// </summary>
         /// <param name="name">変更先カルチャ名。</param>
+        /// <remarks>このメソッドを呼び出すとアプリケーションが一旦終了します。</remarks>
         private void ChangeCultureAndRestart(string name)
         {
-            // 表示言語設定を保存した後、アプリケーションを再起動
+            // 現在の画面表示と表示言語設定を保存した後、アプリケーションを再起動
+            this.SetSettings();
             Settings.Default.LastSelectedLanguage = name;
-            this.SaveSettings();
+            Settings.Default.Save();
             Application.Restart();
             this.Close();
         }
 
         #endregion
+
+        #endregion
+
+        #region その他のメソッド
+
+        /// <summary>
+        /// 設定ファイルによる初期化処理。
+        /// </summary>
+        /// <remarks>
+        /// 読み込みに失敗した場合、空の設定を登録し、操作の大半をロックする。
+        /// (設定変更メニューから正しい設定に変更されることを期待。)
+        /// </remarks>
+        private void InitializeByConfig()
+        {
+            // 設定ファイルの読み込み
+            this.LoadConfig();
+            if (this.config == null)
+            {
+                // 読み込みに失敗した場合、空の設定を作成(設定値には適当な値を設定)
+                // 設定選択メニューの表示を更新し、画面をほぼ操作不可に変更
+                this.config = new Config();
+                this.groupBoxTransfer.Enabled = false;
+                this.groupBoxSaveDirectory.Enabled = false;
+                this.groupBoxRun.Enabled = false;
+                this.toolStripDropDownButtonConfig.Text = Resources.DropDownConfigLoadConfigFailed;
+            }
+            else
+            {
+                // 設定選択メニューの表示を更新し、画面を操作可能な状態に戻す
+                this.groupBoxTransfer.Enabled = true;
+                this.groupBoxSaveDirectory.Enabled = true;
+                this.groupBoxRun.Enabled = true;
+                this.toolStripDropDownButtonConfig.Text = Path.GetFileNameWithoutExtension(this.config.File);
+                foreach (ToolStripMenuItem item in this.toolStripDropDownButtonConfig.DropDownItems)
+                {
+                    // 読み込んだ設定を選択中(チェック状態&押下不能)に更新
+                    if (item != this.toolStripMenuItemNew
+                        && item.Text == this.toolStripDropDownButtonConfig.Text)
+                    {
+                        item.Checked = true;
+                        item.Enabled = false;
+                    }
+                }
+            }
+
+            // コンボボックスを読み込んだ設定で初期化
+            this.InitializeComboBox();
+        }
+
+        /// <summary>
+        /// 設定ファイル読み込み。
+        /// </summary>
+        private void LoadConfig()
+        {
+            // 設定ファイルの読み込み
+            // ※ 微妙に時間がかかるので、ステータスバーに通知
+            string file = Settings.Default.LastSelectedConfiguration + Settings.Default.ConfigurationExtension;
+            try
+            {
+                this.toolStripStatusLabelStatus.Text = Resources.StatusConfigReading;
+                try
+                {
+                    this.config = Config.GetInstance(file);
+                }
+                finally
+                {
+                    this.toolStripStatusLabelStatus.Text = String.Empty;
+                }
+            }
+            catch (FileNotFoundException ex)
+            {
+                // 設定ファイルが見つからない場合、エラーメッセージを表示
+                System.Diagnostics.Debug.WriteLine(
+                    "MainForm.LoadConfig > 設定ファイル読み込み失敗 : " + ex.Message);
+                FormUtils.ErrorDialog(Resources.ErrorMessageConfigNotFound, file);
+            }
+            catch (Exception ex)
+            {
+                // その他の例外(権限が無いとかファイルが壊れているとか)
+                System.Diagnostics.Debug.WriteLine(
+                    "MainForm.LoadConfig > 設定ファイル読み込み時エラー : " + ex.ToString());
+                FormUtils.ErrorDialog(Resources.ErrorMessageConfigLordFailed, ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 現在の出力先フォルダ、翻訳元/先言語をアプリケーション設定に反映。
+        /// </summary>
+        /// <remarks>表示言語や設定ファイルの選択については必要な場合のみ別途実施。</remarks>
+        private void SetSettings()
+        {
+            Settings.Default.SaveDirectory = this.textBoxSaveDirectory.Text;
+            Settings.Default.LastSelectedSource = this.comboBoxSource.Text;
+            Settings.Default.LastSelectedTarget = this.comboBoxTarget.Text;
+        }
+
+        #endregion
     }
 }
\ No newline at end of file
index e9bacbd..e22b309 100644 (file)
   <data name="labelTarget.Size" type="System.Drawing.Size, System.Drawing">
     <value>101, 21</value>
   </data>
+  <data name="labelArrow.ToolTip" xml:space="preserve">
+    <value />
+  </data>
   <data name="linkLabelSourceURL.Location" type="System.Drawing.Point, System.Drawing">
     <value>193, 21</value>
   </data>
   <data name="groupBoxTransfer.Text" xml:space="preserve">
     <value>翻訳元→先の言語を設定</value>
   </data>
-  <data name="groupBoxSaveDirectory.Size" type="System.Drawing.Size, System.Drawing">
-    <value>344, 49</value>
-  </data>
-  <data name="groupBoxSaveDirectory.Text" xml:space="preserve">
-    <value>処理結果を出力するフォルダの選択</value>
-  </data>
   <data name="textBoxSaveDirectory.Location" type="System.Drawing.Point, System.Drawing">
     <value>64, 18</value>
   </data>
   <data name="buttonSaveDirectory.Text" xml:space="preserve">
     <value>参照...</value>
   </data>
-  <data name="groupBoxRun.Text" xml:space="preserve">
-    <value>翻訳する記事を指定して、実行</value>
+  <data name="groupBoxSaveDirectory.Size" type="System.Drawing.Size, System.Drawing">
+    <value>344, 49</value>
+  </data>
+  <data name="groupBoxSaveDirectory.Text" xml:space="preserve">
+    <value>処理結果を出力するフォルダの選択</value>
+  </data>
+  <data name="textBoxLog.ToolTip" xml:space="preserve">
+    <value />
   </data>
   <data name="buttonStop.Text" xml:space="preserve">
     <value>中止</value>
   <data name="labelArticle.Text" xml:space="preserve">
     <value>記事名</value>
   </data>
+  <data name="groupBoxRun.Text" xml:space="preserve">
+    <value>翻訳する記事を指定して、実行</value>
+  </data>
   <data name="folderBrowserDialogSaveDirectory.Description" xml:space="preserve">
     <value>処理結果を出力するフォルダを選択してください。</value>
   </data>
   <data name="toolStripStatusLabelStatus.Size" type="System.Drawing.Size, System.Drawing">
-    <value>306, 19</value>
+    <value>229, 19</value>
   </data>
   <data name="toolStripStatusLabelStopwatch.Size" type="System.Drawing.Size, System.Drawing">
     <value>86, 19</value>
   <data name="toolStripStatusLabelStopwatch.Text" xml:space="preserve">
     <value>実行時間 0:00</value>
   </data>
-  <data name="toolStripDropDownButtonLanguage.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
-        U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
-        VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
-        QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
-        /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
-        cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
-        3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
-        dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
-        NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
-        s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
-</value>
+  <data name="toolStripMenuItemEnglishUS.Size" type="System.Drawing.Size, System.Drawing">
+    <value>152, 22</value>
+  </data>
+  <data name="toolStripMenuItemEnglishGB.Size" type="System.Drawing.Size, System.Drawing">
+    <value>152, 22</value>
+  </data>
+  <data name="toolStripMenuItemJapanese.Size" type="System.Drawing.Size, System.Drawing">
+    <value>152, 22</value>
+  </data>
+  <data name="toolStripMenuItemAuto.Size" type="System.Drawing.Size, System.Drawing">
+    <value>152, 22</value>
   </data>
   <data name="toolStripDropDownButtonLanguage.Size" type="System.Drawing.Size, System.Drawing">
     <value>57, 22</value>
   <data name="toolStripDropDownButtonLanguage.Text" xml:space="preserve">
     <value>日本語</value>
   </data>
-  <data name="toolStripDropDownButtonConfig.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
-        U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
-        VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
-        QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
-        /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
-        cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
-        3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
-        dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
-        NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
-        s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
-</value>
+  <data name="toolStripMenuItemNew.Text" xml:space="preserve">
+    <value>(追加...)</value>
+  </data>
+  <data name="statusStrip.ToolTip" xml:space="preserve">
+    <value />
   </data>
   <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
   <data name="$this.Text" xml:space="preserve">
     <value>Wikipedia 翻訳支援ツール</value>
   </data>
+  <data name="$this.ToolTip" xml:space="preserve">
+    <value />
+  </data>
 </root>
\ No newline at end of file
index b80b7e3..a9b9f24 100644 (file)
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-  <data name="buttonConfig.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="buttonConfig.Location" type="System.Drawing.Point, System.Drawing">
-    <value>226, 61</value>
-  </data>
-  <data name="buttonConfig.Size" type="System.Drawing.Size, System.Drawing">
-    <value>63, 23</value>
-  </data>
-  <data name="buttonConfig.TabIndex" type="System.Int32, mscorlib">
-    <value>5</value>
-  </data>
-  <data name="buttonConfig.Text" xml:space="preserve">
-    <value>Settings...</value>
-  </data>
-  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>464, 17</value>
-  </metadata>
-  <data name="buttonConfig.ToolTip" xml:space="preserve">
-    <value>サーバーやツールの設定を行います。</value>
-  </data>
-  <data name="&gt;&gt;buttonConfig.Name" xml:space="preserve">
-    <value>buttonConfig</value>
-  </data>
-  <data name="&gt;&gt;buttonConfig.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name="&gt;&gt;buttonConfig.Parent" xml:space="preserve">
-    <value>groupBoxTransfer</value>
-  </data>
-  <data name="&gt;&gt;buttonConfig.ZOrder" xml:space="preserve">
-    <value>0</value>
-  </data>
-  <data name="labelTarget.Location" type="System.Drawing.Point, System.Drawing">
-    <value>76, 64</value>
-  </data>
-  <data name="labelTarget.Size" type="System.Drawing.Size, System.Drawing">
-    <value>135, 21</value>
-  </data>
-  <data name="labelTarget.TabIndex" type="System.Int32, mscorlib">
-    <value>6</value>
-  </data>
-  <data name="labelTarget.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
-    <value>MiddleLeft</value>
-  </data>
-  <data name="labelTarget.ToolTip" xml:space="preserve">
-    <value>翻訳先の言語です。</value>
-  </data>
-  <data name="&gt;&gt;labelTarget.Name" xml:space="preserve">
-    <value>labelTarget</value>
-  </data>
-  <data name="&gt;&gt;labelTarget.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name="&gt;&gt;labelTarget.Parent" xml:space="preserve">
-    <value>groupBoxTransfer</value>
+  <data name="&gt;&gt;toolStripStatusLabelStatus.Name" xml:space="preserve">
+    <value>toolStripStatusLabelStatus</value>
   </data>
-  <data name="&gt;&gt;labelTarget.ZOrder" xml:space="preserve">
+  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="labelSource.TabIndex" type="System.Int32, mscorlib">
     <value>1</value>
   </data>
-  <data name="comboBoxTarget.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 64</value>
-  </data>
-  <data name="comboBoxTarget.Size" type="System.Drawing.Size, System.Drawing">
-    <value>57, 20</value>
-  </data>
-  <data name="comboBoxTarget.TabIndex" type="System.Int32, mscorlib">
-    <value>2</value>
-  </data>
-  <data name="comboBoxTarget.ToolTip" xml:space="preserve">
-    <value>翻訳先の言語を選択、または入力します。
-入力の場合、Wikipediaで使用されている言語コードを入力してください。</value>
-  </data>
-  <data name="&gt;&gt;comboBoxTarget.Name" xml:space="preserve">
-    <value>comboBoxTarget</value>
+  <data name="&gt;&gt;toolStripMenuItemNew.Name" xml:space="preserve">
+    <value>toolStripMenuItemNew</value>
   </data>
-  <data name="&gt;&gt;comboBoxTarget.Type" xml:space="preserve">
+  <data name="&gt;&gt;comboBoxSource.Type" xml:space="preserve">
     <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;comboBoxTarget.Parent" xml:space="preserve">
+  <data name="&gt;&gt;labelArrow.Parent" xml:space="preserve">
     <value>groupBoxTransfer</value>
   </data>
-  <data name="&gt;&gt;comboBoxTarget.ZOrder" xml:space="preserve">
+  <data name="&gt;&gt;buttonRun.ZOrder" xml:space="preserve">
     <value>2</value>
   </data>
-  <data name="labelArrow.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="labelArrow.Location" type="System.Drawing.Point, System.Drawing">
-    <value>77, 46</value>
-  </data>
-  <data name="labelArrow.Size" type="System.Drawing.Size, System.Drawing">
-    <value>17, 12</value>
-  </data>
-  <data name="labelArrow.TabIndex" type="System.Int32, mscorlib">
-    <value>5</value>
-  </data>
-  <data name="labelArrow.Text" xml:space="preserve">
-    <value>↓</value>
-  </data>
-  <data name="&gt;&gt;labelArrow.Name" xml:space="preserve">
-    <value>labelArrow</value>
-  </data>
-  <data name="&gt;&gt;labelArrow.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="toolStripDropDownButtonLanguage.ToolTipText" xml:space="preserve">
+    <value>このツールの表示言語を選択します。</value>
   </data>
-  <data name="&gt;&gt;labelArrow.Parent" xml:space="preserve">
-    <value>groupBoxTransfer</value>
+  <data name="&gt;&gt;buttonSaveDirectory.Parent" xml:space="preserve">
+    <value>groupBoxSaveDirectory</value>
   </data>
-  <data name="&gt;&gt;labelArrow.ZOrder" xml:space="preserve">
-    <value>3</value>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="labelSource.Size" type="System.Drawing.Size, System.Drawing">
+    <value>135, 21</value>
   </data>
-  <data name="linkLabelSourceURL.Location" type="System.Drawing.Point, System.Drawing">
-    <value>226, 21</value>
+  <data name="textBoxLog.Size" type="System.Drawing.Size, System.Drawing">
+    <value>416, 207</value>
   </data>
   <data name="linkLabelSourceURL.Size" type="System.Drawing.Size, System.Drawing">
     <value>191, 20</value>
   </data>
-  <data name="linkLabelSourceURL.TabIndex" type="System.Int32, mscorlib">
-    <value>4</value>
-  </data>
-  <data name="linkLabelSourceURL.Text" xml:space="preserve">
-    <value>http://</value>
-  </data>
-  <data name="linkLabelSourceURL.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
-    <value>MiddleLeft</value>
+  <data name="&gt;&gt;timerStatusStopwatch.Name" xml:space="preserve">
+    <value>timerStatusStopwatch</value>
   </data>
-  <data name="linkLabelSourceURL.ToolTip" xml:space="preserve">
-    <value>翻訳元WikipediaのURLです。</value>
+  <data name="toolStripMenuItemEnglishGB.Text" xml:space="preserve">
+    <value>English (GB)</value>
   </data>
-  <data name="&gt;&gt;linkLabelSourceURL.Name" xml:space="preserve">
-    <value>linkLabelSourceURL</value>
+  <data name="toolStripMenuItemNew.ToolTipText" xml:space="preserve">
+    <value>新しい設定を作成します。
+追加された設定を使用できるようにするには、設定画面で言語やサーバーを登録する必要があります。</value>
   </data>
-  <data name="&gt;&gt;linkLabelSourceURL.Type" xml:space="preserve">
-    <value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;labelArticle.Name" xml:space="preserve">
+    <value>labelArticle</value>
   </data>
-  <data name="&gt;&gt;linkLabelSourceURL.Parent" xml:space="preserve">
+  <data name="&gt;&gt;labelTarget.Parent" xml:space="preserve">
     <value>groupBoxTransfer</value>
   </data>
-  <data name="&gt;&gt;linkLabelSourceURL.ZOrder" xml:space="preserve">
-    <value>4</value>
-  </data>
-  <data name="labelSource.Location" type="System.Drawing.Point, System.Drawing">
-    <value>76, 21</value>
-  </data>
-  <data name="labelSource.Size" type="System.Drawing.Size, System.Drawing">
-    <value>135, 21</value>
+  <data name="buttonSaveDirectory.Text" xml:space="preserve">
+    <value>Select folder...</value>
   </data>
-  <data name="labelSource.TabIndex" type="System.Int32, mscorlib">
-    <value>1</value>
+  <data name="comboBoxTarget.Size" type="System.Drawing.Size, System.Drawing">
+    <value>57, 20</value>
   </data>
-  <data name="labelSource.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
-    <value>MiddleLeft</value>
+  <data name="&gt;&gt;buttonRun.Parent" xml:space="preserve">
+    <value>groupBoxRun</value>
   </data>
-  <data name="labelSource.ToolTip" xml:space="preserve">
-    <value>翻訳元の言語です。</value>
+  <data name="toolStripDropDownButtonConfig.Size" type="System.Drawing.Size, System.Drawing">
+    <value>77, 22</value>
   </data>
-  <data name="&gt;&gt;labelSource.Name" xml:space="preserve">
-    <value>labelSource</value>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;labelSource.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="groupBoxRun.Text" xml:space="preserve">
+    <value>Input Title then Run</value>
   </data>
   <data name="&gt;&gt;labelSource.Parent" xml:space="preserve">
     <value>groupBoxTransfer</value>
   </data>
-  <data name="&gt;&gt;labelSource.ZOrder" xml:space="preserve">
-    <value>5</value>
-  </data>
-  <data name="comboBoxSource.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 21</value>
-  </data>
-  <data name="comboBoxSource.Size" type="System.Drawing.Size, System.Drawing">
-    <value>57, 20</value>
+  <data name="groupBoxSaveDirectory.Size" type="System.Drawing.Size, System.Drawing">
+    <value>386, 49</value>
   </data>
-  <data name="comboBoxSource.TabIndex" type="System.Int32, mscorlib">
-    <value>0</value>
+  <data name="&gt;&gt;comboBoxTarget.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="comboBoxSource.ToolTip" xml:space="preserve">
-    <value>翻訳元の言語を選択、または入力します。
-入力の場合、Wikipediaで使用されている言語コードを入力してください。</value>
+  <data name="textBoxSaveDirectory.Location" type="System.Drawing.Point, System.Drawing">
+    <value>103, 18</value>
   </data>
-  <data name="&gt;&gt;comboBoxSource.Name" xml:space="preserve">
-    <value>comboBoxSource</value>
+  <data name="&gt;&gt;textBoxSaveDirectory.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;comboBoxSource.Type" xml:space="preserve">
-    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="toolStripDropDownButtonConfig.ToolTipText" xml:space="preserve">
+    <value>このツールで処理する対象を選択します。</value>
   </data>
-  <data name="&gt;&gt;comboBoxSource.Parent" xml:space="preserve">
-    <value>groupBoxTransfer</value>
+  <data name="groupBoxRun.Size" type="System.Drawing.Size, System.Drawing">
+    <value>440, 276</value>
   </data>
-  <data name="&gt;&gt;comboBoxSource.ZOrder" xml:space="preserve">
-    <value>6</value>
+  <data name="labelSource.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
+    <value>MiddleLeft</value>
   </data>
-  <data name="groupBoxTransfer.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 12</value>
+  <data name="&gt;&gt;textBoxSaveDirectory.Parent" xml:space="preserve">
+    <value>groupBoxSaveDirectory</value>
   </data>
-  <data name="groupBoxTransfer.Size" type="System.Drawing.Size, System.Drawing">
-    <value>432, 96</value>
+  <data name="textBoxLog.Multiline" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="groupBoxTransfer.TabIndex" type="System.Int32, mscorlib">
+  <data name="&gt;&gt;textBoxSaveDirectory.ZOrder" xml:space="preserve">
     <value>0</value>
   </data>
-  <data name="groupBoxTransfer.Text" xml:space="preserve">
-    <value>Select Source and Destination</value>
+  <data name="labelArticle.Text" xml:space="preserve">
+    <value>Title:</value>
   </data>
-  <data name="groupBoxTransfer.ToolTip" xml:space="preserve">
-    <value>翻訳元・先の言語を選択してください。
-コンボボックスに目的の言語コードが存在しない場合は、設定画面で登録を行ってください。</value>
+  <data name="toolStripMenuItemNew.Size" type="System.Drawing.Size, System.Drawing">
+    <value>152, 22</value>
   </data>
-  <data name="&gt;&gt;groupBoxTransfer.Name" xml:space="preserve">
+  <data name="&gt;&gt;linkLabelSourceURL.Parent" xml:space="preserve">
     <value>groupBoxTransfer</value>
   </data>
-  <data name="&gt;&gt;groupBoxTransfer.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name="&gt;&gt;groupBoxTransfer.Parent" xml:space="preserve">
-    <value>$this</value>
-  </data>
-  <data name="&gt;&gt;groupBoxTransfer.ZOrder" xml:space="preserve">
-    <value>3</value>
-  </data>
-  <data name="textBoxSaveDirectory.Location" type="System.Drawing.Point, System.Drawing">
-    <value>103, 18</value>
+  <data name="buttonSaveDirectory.Size" type="System.Drawing.Size, System.Drawing">
+    <value>86, 23</value>
   </data>
-  <data name="textBoxSaveDirectory.Size" type="System.Drawing.Size, System.Drawing">
-    <value>256, 19</value>
+  <data name="&gt;&gt;textBoxLog.Name" xml:space="preserve">
+    <value>textBoxLog</value>
   </data>
-  <data name="textBoxSaveDirectory.TabIndex" type="System.Int32, mscorlib">
-    <value>1</value>
+  <data name="labelTarget.Location" type="System.Drawing.Point, System.Drawing">
+    <value>76, 64</value>
   </data>
-  <data name="textBoxSaveDirectory.ToolTip" xml:space="preserve">
-    <value>出力先フォルダはこちらに直接入力することもできます。</value>
+  <data name="&gt;&gt;toolStripMenuItemEnglishUS.Name" xml:space="preserve">
+    <value>toolStripMenuItemEnglishUS</value>
   </data>
-  <data name="&gt;&gt;textBoxSaveDirectory.Name" xml:space="preserve">
-    <value>textBoxSaveDirectory</value>
+  <data name="comboBoxSource.Location" type="System.Drawing.Point, System.Drawing">
+    <value>11, 21</value>
   </data>
-  <data name="&gt;&gt;textBoxSaveDirectory.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name="&gt;&gt;textBoxSaveDirectory.Parent" xml:space="preserve">
-    <value>groupBoxSaveDirectory</value>
-  </data>
-  <data name="&gt;&gt;textBoxSaveDirectory.ZOrder" xml:space="preserve">
-    <value>0</value>
-  </data>
-  <data name="buttonSaveDirectory.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
-  </data>
-  <data name="buttonSaveDirectory.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 16</value>
-  </data>
-  <data name="buttonSaveDirectory.Size" type="System.Drawing.Size, System.Drawing">
-    <value>86, 23</value>
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        AAAAAAAAAAAAAA3JicMNyYn/DcmJ/w3Jif8NyYl7AAAAAAAAAAAbG0sANzdiaDExXPwgIEr/FxdD/xUV
+        QP8WFkH/GxtI+B8fTGgRET0DERE9ARERPQYRET0AHx9MEhERPf8WFkH/FRVA/xcXQ/8gIEr/MTFc/Dc3
+        YmgAAAAAAAAAAAAAAAANyYm/DcmJ/w3Jif8NyYn/DcmJcQ3JiQANyYkwDcmJ+Q3Jif8NyYn/DcmJ2g3J
+        iTQAAAAAAAAAAAAAAAAAAAAAAAAAAA3JiYgNyYn/DcmJ/w3Jif8NyYm3AAAAAAAAAABAQHYmMTBd9yEh
+        Sv8WFkD/ExM//xMTP/8VFUH/FxdG/xcXR94XF0dcGBhJRRUVRY8XF0ciFxdHlhERPf8VFUH/ExM//xMT
+        P/8WFkD/ISFK/zEwXfdAQHYmAAAAAAAAAAANyYmGDcmJ/w3Jif8NyYn/DcmJqw3JiQANyYkADcmJSg3J
+        ie8NyYn/DcmJ/w3Jif8NyYnJDcmJiA3JiVgNyYk2DcmJGw3JiVQNyYn/DcmJ/w3Jif8NyYnwDcmJAgAA
+        AAA3N2fIJydR/xcXQf8SEj3/ERE9/xERPf8TEz//ExNA/xISP/0RET3/ERE9/xMTP/oRET3/EhI/+RMT
+        QP8TEz//ERE9/xERPf8SEj3/FxdB/ycnUf83N2fIAAAAAAAAAAANyYlMDcmJ/w3Jif8NyYn/DcmJ5A3J
+        iQANyYkADcmJAA3JiRcNyYmHDcmJ4g3Jif8NyYn/DcmJ/w3Jif8NyYn/DcmJ/w3Jif8NyYn/DcmJ/w3J
+        if8NyYn/DcmJLgAAAAAyMmL4Hh5I/xISPv8RET3/ERE9/xERPf8RET3/ERE9/xERPf8RET3/ERE9/xER
+        Pf8RET3/ERE9/xERPf8RET3/ERE9/xERPf8RET3/EhI+/x4eSP8yMmL4AAAAAAAAAAANyYkTDcmJ/w3J
+        if8NyYn/DcmJ/w3JiR4AAAAAAAAAAAAAAAAAAAAAAAAAAA3JiScNyYldDcmJiA3JiasNyYnIDcmJ3w3J
+        ifENyYn+DcmJ/w3Jif8NyYn/DcmJaQAAAAAuLlv9GxtF/xISPv8RET3/ERE9/xERPf8RET3/ERE9/xER
+        Pf8RET3/ERE9/xERPf8RET3/ERE9/xERPf8RET3/ERE9/xERPf8RET3/EhI+/xsbRf8uLlv9Ojl2CAAA
+        AAAAAAAADcmJ2Q3Jif8NyYn/DcmJ/w3JiVcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAANyYmBDcmJ/w3Jif8NyYn/DcmJnwAAAAAzM2PiHh5I/xISPv8RET3/ERE9/xER
+        Pf8RET3/ERE9/xERPf8RET3/ERE9/xERPf8RET3/ERE9/xERPf8RET3/ERE9/xERPf8RET3/EhI+/x4e
+        SP8zM2PiAAAAAAAAAAAAAAAADcmJnw3Jif8NyYn/DcmJ/w3JiZELsGAAC7BgAAuwYAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANyYmGDcmJ/w3Jif8NyYn/DcmJvwAAAAA8PG2cJydR/xcX
+        Qf8SEj3/ERE9/xERPf8TEz//ExNA/xISP/8TEj//ExM//xMTP/8TEj//EhI//xMTQP8TEz//ERE9/xER
+        Pf8SEj3/FxdB/ycnUf88PG2cAAAAAAAAAAAAAAAADcmJZQ3Jif8NyYn/DcmJ/w3JicoLsGAAC7BgAAuw
+        YAANyYnIDcmJpQ3JiWwNyYk7DcmJFw3JiQUNyYkGDcmJIw3JiW8NyYn1DcmJ/w3Jif8NyYn/DcmJtgAA
+        AABAQHYmMjFf5iEhSv8WFkD/ExM//xMTP/8VFUH/FxdG+xgYSMwYGEiLGBhJ6hYWRsgYGEikGBhIyxcX
+        RvsVFUH/ExM//xMTP/8WFkD/ISFK/zIxX+ZAQHYmAAAAAA3JiecNyYn/DcmJ/w3Jif8NyYn/DcmJ/w3J
+        ifoNyYkJC7BgAAuwYAANyYmiDcmJ/w3Jif8NyYn/DcmJ/w3Jif8NyYn/DcmJ/w3Jif8NyYn/DcmJ/w3J
+        if8NyYn/DcmJZwAAAAA6OnQAPj5tQDIyXewgIEr/FxdD/xUVQP8WFkH/GhpHyxkZSSMRET0CERE9PRER
+        PRIRET0GGRlJIhERPf8WFkH/FRVA/xcXQ/8gIEr/MjJd7D4+bUALsGAAC7BgAA3JibQNyYn/DcmJ/w3J
+        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
+        YAALsGAAC7BgAAAAAAAAAAAAC7BgAAuwYAALsGAAC7BgAAuwYAALsGAAC7BgAAuwYAALsGAAC7BgAAuw
+        YAALsGAAC7BgAAuwYAALsGAAC7BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALsGAAC7BgFguwYGwLsGCuC7Bg2guwYPALsGD8C7Bg9Quw
+        YNgLsGCqC7BgbAuwYCELsGAAC7BgAAuwYOMLsGD/C7Bg/wuwYP8LsGBUC7BgAAuwYAALsGAAC7BgAAuw
+        YAALsGAAC7Bg4wuwYP8LsGD/C7Bg/wuwYF0LsGAAC7BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuwYAMLsGB/C7Bg9guwYP8LsGD/C7Bg/wuw
+        YP8LsGD/C7Bg/wuwYP8LsGD/C7Bg/wuwYP8LsGBAAAAAAAuwYKkLsGD/C7Bg/wuwYP8LsGCNC7BgAAuw
+        YAALsGAAC7BgAAuwYAALsGAAC7BgqguwYP8LsGD/C7Bg/wuwYJkLsGAAC7BgAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuwYKcLsGD/C7Bg/wuw
+        YP8LsGD/C7Bg/wuwYP8LsGD/C7Bg/wuwYP8LsGD/C7Bg/wuwYP8LsGB4AAAAAAuwYG8LsGD/C7Bg/wuw
+        YP8LsGDGC7BgAAuwYAALsGAAAAAAAAuwYAALsGAAC7BgcAuwYP8LsGD/C7Bg/wuwYNULsGAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7BgVguw
+        YP8LsGD/C7Bg/wuwYP8LsGDeC7BgaAuwYCYLsGAIC7BgBAuwYCMLsGBjC7BgwwuwYP8LsGCuAAAAAAuw
+        YDQLsGD/C7Bg/wuwYP8LsGD4C7BgBgAAAAAAAAAAAAAAAAAAAAAAAAAAC7BgNwuwYP8LsGD/C7Bg/wuw
+        YP4LsGASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAC7BgvAuwYP8LsGD/C7Bg/wuwYNELsGAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuw
+        YD4LsGCyAAAAAAuwYAQLsGD1C7Bg/wuwYP8LsGD/C7BgOAAAAAAAAAAAAAAAAAAAAAAAAAAAC7BgBQuw
+        YPcLsGD/C7Bg/wuwYP8LsGBNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAC7Bg7wuwYP8LsGD/C7Bg/wuwYEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALsGDAC7Bg/wuwYP8LsGD/C7BgcQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAuwYMMLsGD/C7Bg/wuwYP8LsGCJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7Bg/QuwYP8LsGD/C7Bg/wuwYA4AAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALsGCGC7Bg/wuwYP8LsGD/C7BgqgAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuwYIoLsGD/C7Bg/wuwYP8LsGDFAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7Bg8QuwYP8LsGD/C7Bg/wuw
+        YAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALsGBLC7Bg/wuw
+        YP8LsGD/C7Bg4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuwYFALsGD/C7Bg/wuwYP8LsGD5C7BgCAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7BgzQuw
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP//Af///wAA//8A////
+        AAD//4B///8AAP//+D///wAA///8H///AAD///4f//8AAP///h8DDwAA///+HgAHAAD///4MAAcAAP3+
+        /wwfBwAA8Pw/DD+HAADg/B8MP4cAAMD8Dw4fgwAAgGgHBwPDAAAAAAOHgAMAAAAAA4f4AwAAAAADh//B
+        AAAAAAOD/8EAAAAAA8OfwQAAgAAGA4ADAADA/A4DwAMAAOD8HgPgDwAA8Pw/////AAD9/v////8AAP//
+        /+D//wAA////4P//AAD////w//8AAP////D//wAA////////AAD///////8AAPwHh/D//wAA8AGD8H//
+        AADAAcP4f/8AAMH4w/h//wAAg/7D+H//AACH/8P4P/8AAIf/wfg//wAAh//h/D//AACAAGH8P/8AAIAA
+        Yfw//wAAw/hg/B//AADD+HD8H/8AAODwcHwf/wAA8ADwAD//AAD4APAAP/8AAP4D+GB//wAA////////
+        AAA=
+</value>
   </data>
-  <data name="buttonSaveDirectory.TabIndex" type="System.Int32, mscorlib">
-    <value>0</value>
+  <data name="&gt;&gt;toolStripDropDownButtonLanguage.Name" xml:space="preserve">
+    <value>toolStripDropDownButtonLanguage</value>
   </data>
-  <data name="buttonSaveDirectory.Text" xml:space="preserve">
-    <value>Select folder...</value>
+  <data name="buttonRun.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
   </data>
-  <data name="buttonSaveDirectory.ToolTip" xml:space="preserve">
-    <value>処理結果を出力するフォルダを選択します。</value>
+  <data name="textBoxSaveDirectory.Size" type="System.Drawing.Size, System.Drawing">
+    <value>256, 19</value>
   </data>
-  <data name="&gt;&gt;buttonSaveDirectory.Name" xml:space="preserve">
-    <value>buttonSaveDirectory</value>
+  <data name="buttonStop.Text" xml:space="preserve">
+    <value>Stop</value>
   </data>
-  <data name="&gt;&gt;buttonSaveDirectory.Type" xml:space="preserve">
+  <data name="&gt;&gt;buttonConfig.Type" xml:space="preserve">
     <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;buttonSaveDirectory.Parent" xml:space="preserve">
-    <value>groupBoxSaveDirectory</value>
-  </data>
-  <data name="&gt;&gt;buttonSaveDirectory.ZOrder" xml:space="preserve">
-    <value>1</value>
+  <data name="&gt;&gt;buttonStop.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="groupBoxSaveDirectory.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 114</value>
+  <data name="labelTarget.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
+    <value>MiddleLeft</value>
   </data>
-  <data name="groupBoxSaveDirectory.Size" type="System.Drawing.Size, System.Drawing">
-    <value>386, 49</value>
+  <data name="&gt;&gt;statusStrip.Parent" xml:space="preserve">
+    <value>$this</value>
   </data>
-  <data name="groupBoxSaveDirectory.TabIndex" type="System.Int32, mscorlib">
+  <data name="&gt;&gt;buttonSaveDirectory.ZOrder" xml:space="preserve">
     <value>1</value>
   </data>
-  <data name="groupBoxSaveDirectory.Text" xml:space="preserve">
-    <value>Select Output folder</value>
-  </data>
-  <data name="groupBoxSaveDirectory.ToolTip" xml:space="preserve">
-    <value>処理結果を出力するフォルダを選択してください。
-指定されたフォルダに記事テキストとログを出力します。</value>
-  </data>
-  <data name="&gt;&gt;groupBoxSaveDirectory.Name" xml:space="preserve">
-    <value>groupBoxSaveDirectory</value>
-  </data>
-  <data name="&gt;&gt;groupBoxSaveDirectory.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name="&gt;&gt;groupBoxSaveDirectory.Parent" xml:space="preserve">
-    <value>$this</value>
-  </data>
-  <data name="&gt;&gt;groupBoxSaveDirectory.ZOrder" xml:space="preserve">
-    <value>2</value>
+  <data name="&gt;&gt;linkLabelSourceURL.Type" xml:space="preserve">
+    <value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-  <data name="groupBoxRun.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Bottom, Left, Right</value>
+  <data name="textBoxLog.MaxLength" type="System.Int32, mscorlib">
+    <value>0</value>
   </data>
-  <data name="textBoxLog.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Bottom, Left, Right</value>
+  <data name="labelTarget.Size" type="System.Drawing.Size, System.Drawing">
+    <value>135, 21</value>
   </data>
-  <data name="textBoxLog.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 56</value>
+  <data name="comboBoxSource.Size" type="System.Drawing.Size, System.Drawing">
+    <value>57, 20</value>
   </data>
-  <data name="textBoxLog.MaxLength" type="System.Int32, mscorlib">
+  <data name="&gt;&gt;statusStrip.ZOrder" xml:space="preserve">
     <value>0</value>
   </data>
-  <data name="textBoxLog.Multiline" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="&gt;&gt;labelArrow.ZOrder" xml:space="preserve">
+    <value>3</value>
   </data>
-  <data name="textBoxLog.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
-    <value>Vertical</value>
+  <data name="toolStripMenuItemEnglishUS.Text" xml:space="preserve">
+    <value>English (US)</value>
+  </data>
+  <data name="&gt;&gt;buttonRun.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="textBoxLog.Size" type="System.Drawing.Size, System.Drawing">
-    <value>416, 207</value>
+  <data name="toolStripMenuItemEnglishGB.Size" type="System.Drawing.Size, System.Drawing">
+    <value>147, 22</value>
   </data>
-  <data name="textBoxLog.TabIndex" type="System.Int32, mscorlib">
-    <value>4</value>
+  <data name="&gt;&gt;textBoxLog.Parent" xml:space="preserve">
+    <value>groupBoxRun</value>
   </data>
-  <data name="&gt;&gt;textBoxLog.Name" xml:space="preserve">
-    <value>textBoxLog</value>
+  <data name="&gt;&gt;comboBoxTarget.ZOrder" xml:space="preserve">
+    <value>2</value>
   </data>
-  <data name="&gt;&gt;textBoxLog.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;toolStripMenuItemNew.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;textBoxLog.Parent" xml:space="preserve">
+  <data name="&gt;&gt;comboBoxTarget.Parent" xml:space="preserve">
+    <value>groupBoxTransfer</value>
+  </data>
+  <data name="&gt;&gt;textBoxArticle.Parent" xml:space="preserve">
     <value>groupBoxRun</value>
   </data>
-  <data name="&gt;&gt;textBoxLog.ZOrder" xml:space="preserve">
-    <value>0</value>
+  <data name="&gt;&gt;toolTip.Name" xml:space="preserve">
+    <value>toolTip</value>
   </data>
-  <data name="buttonStop.Enabled" type="System.Boolean, mscorlib">
-    <value>False</value>
+  <data name="buttonSaveDirectory.ToolTip" xml:space="preserve">
+    <value>処理結果を出力するフォルダを選択します。</value>
   </data>
-  <data name="buttonStop.Location" type="System.Drawing.Point, System.Drawing">
-    <value>288, 18</value>
+  <data name="statusStrip.ToolTip" xml:space="preserve">
+    <value />
   </data>
-  <data name="buttonStop.Size" type="System.Drawing.Size, System.Drawing">
-    <value>43, 23</value>
+  <data name="&gt;&gt;backgroundWorkerRun.Type" xml:space="preserve">
+    <value>System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="buttonStop.TabIndex" type="System.Int32, mscorlib">
-    <value>3</value>
+  <data name="&gt;&gt;toolStripMenuItemEnglishGB.Name" xml:space="preserve">
+    <value>toolStripMenuItemEnglishGB</value>
   </data>
-  <data name="buttonStop.Text" xml:space="preserve">
-    <value>Stop</value>
+  <data name="&gt;&gt;buttonRun.Name" xml:space="preserve">
+    <value>buttonRun</value>
   </data>
-  <data name="buttonStop.ToolTip" xml:space="preserve">
-    <value>処理を中断します。</value>
+  <data name="textBoxLog.ToolTip" xml:space="preserve">
+    <value />
   </data>
-  <data name="&gt;&gt;buttonStop.Name" xml:space="preserve">
-    <value>buttonStop</value>
+  <data name="&gt;&gt;labelArrow.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;buttonStop.Type" xml:space="preserve">
+  <data name="&gt;&gt;buttonSaveDirectory.Type" xml:space="preserve">
     <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;buttonStop.Parent" xml:space="preserve">
-    <value>groupBoxRun</value>
+  <data name="&gt;&gt;labelSource.ZOrder" xml:space="preserve">
+    <value>5</value>
   </data>
-  <data name="&gt;&gt;buttonStop.ZOrder" xml:space="preserve">
-    <value>1</value>
+  <data name="&gt;&gt;labelArticle.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="buttonRun.Location" type="System.Drawing.Point, System.Drawing">
-    <value>230, 18</value>
+  <data name="&gt;&gt;groupBoxTransfer.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="buttonRun.Size" type="System.Drawing.Size, System.Drawing">
-    <value>43, 23</value>
+  <data name="textBoxSaveDirectory.ToolTip" xml:space="preserve">
+    <value>出力先フォルダはこちらに直接入力することもできます。</value>
   </data>
-  <data name="buttonRun.TabIndex" type="System.Int32, mscorlib">
-    <value>2</value>
+  <data name="&gt;&gt;toolStripMenuItemAuto.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="buttonRun.Text" xml:space="preserve">
-    <value>Run</value>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="groupBoxRun.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left, Right</value>
+  </data>
+  <data name="textBoxLog.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left, Right</value>
+  </data>
+  <data name="toolStripDropDownButtonLanguage.Text" xml:space="preserve">
+    <value>English</value>
   </data>
   <data name="buttonRun.ToolTip" xml:space="preserve">
     <value>記事にアクセスし、翻訳支援処理を行います。
 作成した翻訳支援ファイルとログは、出力先フォルダに出力されます。</value>
   </data>
-  <data name="&gt;&gt;buttonRun.Name" xml:space="preserve">
-    <value>buttonRun</value>
-  </data>
-  <data name="&gt;&gt;buttonRun.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name="&gt;&gt;buttonRun.Parent" xml:space="preserve">
-    <value>groupBoxRun</value>
+  <data name="groupBoxSaveDirectory.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
   </data>
-  <data name="&gt;&gt;buttonRun.ZOrder" xml:space="preserve">
-    <value>2</value>
+  <data name="buttonStop.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
   </data>
-  <data name="textBoxArticle.Location" type="System.Drawing.Point, System.Drawing">
-    <value>51, 20</value>
+  <data name="&gt;&gt;textBoxLog.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="textBoxArticle.MaxLength" type="System.Int32, mscorlib">
-    <value>255</value>
+  <data name="&gt;&gt;toolStripMenuItemEnglishUS.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="textBoxArticle.Size" type="System.Drawing.Size, System.Drawing">
-    <value>151, 19</value>
+  <data name="labelArticle.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
   </data>
-  <data name="textBoxArticle.TabIndex" type="System.Int32, mscorlib">
-    <value>1</value>
+  <data name="labelArticle.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="textBoxArticle.ToolTip" xml:space="preserve">
+  <data name="labelArticle.ToolTip" xml:space="preserve">
     <value>翻訳元Wikipediaでの記事名を入力します。</value>
   </data>
-  <data name="&gt;&gt;textBoxArticle.Name" xml:space="preserve">
-    <value>textBoxArticle</value>
+  <data name="buttonStop.Location" type="System.Drawing.Point, System.Drawing">
+    <value>288, 18</value>
   </data>
-  <data name="&gt;&gt;textBoxArticle.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="toolStripMenuItemAuto.ToolTipText" xml:space="preserve">
+    <value>使用中の環境にあわせた表示を行います。</value>
   </data>
-  <data name="&gt;&gt;textBoxArticle.Parent" xml:space="preserve">
-    <value>groupBoxRun</value>
+  <data name="&gt;&gt;labelTarget.Name" xml:space="preserve">
+    <value>labelTarget</value>
   </data>
-  <data name="&gt;&gt;textBoxArticle.ZOrder" xml:space="preserve">
+  <data name="&gt;&gt;groupBoxTransfer.ZOrder" xml:space="preserve">
     <value>3</value>
   </data>
-  <data name="labelArticle.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="labelTarget.ToolTip" xml:space="preserve">
+    <value>翻訳先の言語です。</value>
+  </data>
+  <data name="&gt;&gt;labelTarget.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;labelTarget.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
   <data name="labelArticle.Location" type="System.Drawing.Point, System.Drawing">
     <value>15, 23</value>
   </data>
-  <data name="labelArticle.Size" type="System.Drawing.Size, System.Drawing">
-    <value>30, 12</value>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>MainForm</value>
   </data>
-  <data name="labelArticle.TabIndex" type="System.Int32, mscorlib">
-    <value>0</value>
+  <data name="toolStripMenuItemJapanese.Size" type="System.Drawing.Size, System.Drawing">
+    <value>147, 22</value>
   </data>
-  <data name="labelArticle.Text" xml:space="preserve">
-    <value>Title:</value>
+  <data name="statusStrip.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
   </data>
-  <data name="labelArticle.ToolTip" xml:space="preserve">
-    <value>翻訳元Wikipediaでの記事名を入力します。</value>
+  <data name="&gt;&gt;labelArticle.ZOrder" xml:space="preserve">
+    <value>4</value>
   </data>
-  <data name="&gt;&gt;labelArticle.Name" xml:space="preserve">
-    <value>labelArticle</value>
+  <data name="&gt;&gt;textBoxLog.ZOrder" xml:space="preserve">
+    <value>0</value>
   </data>
-  <data name="&gt;&gt;labelArticle.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
+    <value>480, 480</value>
   </data>
-  <data name="&gt;&gt;labelArticle.Parent" xml:space="preserve">
-    <value>groupBoxRun</value>
+  <data name="buttonSaveDirectory.Location" type="System.Drawing.Point, System.Drawing">
+    <value>11, 16</value>
   </data>
-  <data name="&gt;&gt;labelArticle.ZOrder" xml:space="preserve">
-    <value>4</value>
+  <data name="toolStripStatusLabelStatus.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
+    <value>MiddleLeft</value>
   </data>
-  <data name="groupBoxRun.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 169</value>
+  <data name="groupBoxTransfer.ToolTip" xml:space="preserve">
+    <value>翻訳元・先の言語を選択してください。
+コンボボックスに目的の言語コードが存在しない場合は、設定画面で登録を行ってください。</value>
   </data>
-  <data name="groupBoxRun.Size" type="System.Drawing.Size, System.Drawing">
-    <value>440, 276</value>
+  <data name="&gt;&gt;comboBoxSource.Parent" xml:space="preserve">
+    <value>groupBoxTransfer</value>
   </data>
-  <data name="groupBoxRun.TabIndex" type="System.Int32, mscorlib">
+  <data name="comboBoxTarget.TabIndex" type="System.Int32, mscorlib">
     <value>2</value>
   </data>
-  <data name="groupBoxRun.Text" xml:space="preserve">
-    <value>Input Title then Run</value>
+  <data name="labelArrow.Text" xml:space="preserve">
+    <value></value>
   </data>
-  <data name="groupBoxRun.ToolTip" xml:space="preserve">
-    <value>目的の記事の、翻訳元言語のWikipediaでの記事名を入力し、実行ボタンを押してください。</value>
+  <data name="buttonRun.Size" type="System.Drawing.Size, System.Drawing">
+    <value>43, 23</value>
   </data>
-  <data name="&gt;&gt;groupBoxRun.Name" xml:space="preserve">
-    <value>groupBoxRun</value>
+  <data name="&gt;&gt;statusStrip.Type" xml:space="preserve">
+    <value>System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;groupBoxRun.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="textBoxLog.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 56</value>
   </data>
-  <data name="&gt;&gt;groupBoxRun.Parent" xml:space="preserve">
-    <value>$this</value>
+  <data name="toolStripMenuItemNew.Text" xml:space="preserve">
+    <value>(New...)</value>
   </data>
-  <data name="&gt;&gt;groupBoxRun.ZOrder" xml:space="preserve">
-    <value>1</value>
+  <data name="linkLabelSourceURL.Text" xml:space="preserve">
+    <value>http://</value>
   </data>
-  <metadata name="folderBrowserDialogSaveDirectory.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <data name="folderBrowserDialogSaveDirectory.Description" xml:space="preserve">
-    <value>Please select output folder.</value>
+  <data name="&gt;&gt;labelSource.Name" xml:space="preserve">
+    <value>labelSource</value>
   </data>
-  <metadata name="backgroundWorkerRun.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>274, 17</value>
-  </metadata>
-  <metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>557, 17</value>
-  </metadata>
-  <data name="toolStripStatusLabelStatus.Size" type="System.Drawing.Size, System.Drawing">
-    <value>212, 19</value>
+  <data name="&gt;&gt;labelSource.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="toolStripStatusLabelStatus.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
-    <value>MiddleLeft</value>
+  <data name="&gt;&gt;comboBoxSource.Name" xml:space="preserve">
+    <value>comboBoxSource</value>
   </data>
-  <data name="toolStripStatusLabelStopwatch.Size" type="System.Drawing.Size, System.Drawing">
-    <value>68, 19</value>
+  <data name="linkLabelSourceURL.Location" type="System.Drawing.Point, System.Drawing">
+    <value>226, 21</value>
   </data>
-  <data name="toolStripStatusLabelStopwatch.Text" xml:space="preserve">
-    <value>Time 0:00</value>
+  <data name="&gt;&gt;groupBoxTransfer.Name" xml:space="preserve">
+    <value>groupBoxTransfer</value>
   </data>
-  <data name="toolStripMenuItemEnglishUS.Size" type="System.Drawing.Size, System.Drawing">
-    <value>152, 22</value>
+  <data name="buttonRun.Text" xml:space="preserve">
+    <value>Run</value>
   </data>
-  <data name="toolStripMenuItemEnglishUS.Text" xml:space="preserve">
-    <value>English (US)</value>
+  <data name="toolStripDropDownButtonLanguage.Size" type="System.Drawing.Size, System.Drawing">
+    <value>61, 22</value>
   </data>
-  <data name="toolStripMenuItemEnglishGB.Size" type="System.Drawing.Size, System.Drawing">
-    <value>152, 22</value>
+  <data name="&gt;&gt;groupBoxSaveDirectory.Parent" xml:space="preserve">
+    <value>$this</value>
   </data>
-  <data name="toolStripMenuItemEnglishGB.Text" xml:space="preserve">
-    <value>English (GB)</value>
+  <data name="&gt;&gt;toolStripDropDownButtonConfig.Name" xml:space="preserve">
+    <value>toolStripDropDownButtonConfig</value>
   </data>
-  <data name="toolStripMenuItemJapanese.Size" type="System.Drawing.Size, System.Drawing">
-    <value>152, 22</value>
+  <data name="buttonConfig.Location" type="System.Drawing.Point, System.Drawing">
+    <value>226, 61</value>
   </data>
-  <data name="toolStripMenuItemJapanese.Text" xml:space="preserve">
-    <value>日本語</value>
+  <data name="&gt;&gt;buttonStop.Name" xml:space="preserve">
+    <value>buttonStop</value>
   </data>
-  <data name="toolStripMenuItemAuto.Size" type="System.Drawing.Size, System.Drawing">
-    <value>152, 22</value>
+  <data name="textBoxArticle.Location" type="System.Drawing.Point, System.Drawing">
+    <value>51, 20</value>
   </data>
   <data name="toolStripMenuItemAuto.Text" xml:space="preserve">
     <value>(auto)</value>
   </data>
-  <data name="toolStripDropDownButtonLanguage.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
-        U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
-        VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
-        QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
-        /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
-        cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
-        3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
-        dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
-        NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
-        s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
-</value>
+  <data name="linkLabelSourceURL.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
   </data>
-  <data name="toolStripDropDownButtonLanguage.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
-    <value>Magenta</value>
+  <data name="&gt;&gt;groupBoxSaveDirectory.ZOrder" xml:space="preserve">
+    <value>2</value>
   </data>
-  <data name="toolStripDropDownButtonLanguage.Size" type="System.Drawing.Size, System.Drawing">
-    <value>61, 22</value>
+  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+    <value>6, 12</value>
   </data>
-  <data name="toolStripDropDownButtonLanguage.Text" xml:space="preserve">
-    <value>English</value>
+  <data name="labelArrow.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
   </data>
-  <data name="toolStripDropDownButtonLanguage.ToolTipText" xml:space="preserve">
-    <value>このツールの表示言語を選択します。</value>
+  <data name="&gt;&gt;toolStripMenuItemJapanese.Name" xml:space="preserve">
+    <value>toolStripMenuItemJapanese</value>
   </data>
-  <data name="toolStripDropDownButtonConfig.Enabled" type="System.Boolean, mscorlib">
-    <value>False</value>
+  <data name="comboBoxTarget.ToolTip" xml:space="preserve">
+    <value>翻訳先の言語を選択、または入力します。
+入力の場合、Wikipediaで使用されている言語コードを入力してください。</value>
   </data>
-  <data name="toolStripDropDownButtonConfig.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
-        U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
-        VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
-        QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
-        /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
-        cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
-        3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
-        dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
-        NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
-        s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
-</value>
+  <data name="&gt;&gt;folderBrowserDialogSaveDirectory.Type" xml:space="preserve">
+    <value>System.Windows.Forms.FolderBrowserDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="toolStripDropDownButtonConfig.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
-    <value>Magenta</value>
+  <data name="textBoxLog.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
+    <value>Vertical</value>
   </data>
-  <data name="toolStripDropDownButtonConfig.Size" type="System.Drawing.Size, System.Drawing">
-    <value>77, 22</value>
+  <data name="textBoxArticle.Size" type="System.Drawing.Size, System.Drawing">
+    <value>151, 19</value>
   </data>
   <data name="toolStripDropDownButtonConfig.Text" xml:space="preserve">
     <value>Wikipedia</value>
   </data>
-  <data name="toolStripDropDownButtonConfig.ToolTipText" xml:space="preserve">
-    <value>このツールで処理する対象を選択します。</value>
+  <data name="&gt;&gt;textBoxArticle.Name" xml:space="preserve">
+    <value>textBoxArticle</value>
   </data>
-  <data name="toolStripDropDownButtonConfig.Visible" type="System.Boolean, mscorlib">
-    <value>False</value>
+  <data name="groupBoxTransfer.Size" type="System.Drawing.Size, System.Drawing">
+    <value>432, 96</value>
   </data>
-  <data name="statusStrip.Location" type="System.Drawing.Point, System.Drawing">
-    <value>0, 449</value>
+  <data name="groupBoxSaveDirectory.Text" xml:space="preserve">
+    <value>Select Output folder</value>
   </data>
-  <data name="statusStrip.Size" type="System.Drawing.Size, System.Drawing">
-    <value>464, 24</value>
+  <data name="&gt;&gt;comboBoxSource.ZOrder" xml:space="preserve">
+    <value>6</value>
   </data>
-  <data name="statusStrip.TabIndex" type="System.Int32, mscorlib">
-    <value>3</value>
+  <data name="&gt;&gt;comboBoxTarget.Name" xml:space="preserve">
+    <value>comboBoxTarget</value>
   </data>
-  <data name="&gt;&gt;statusStrip.Name" xml:space="preserve">
-    <value>statusStrip</value>
+  <data name="&gt;&gt;toolStripMenuItemJapanese.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;statusStrip.Type" xml:space="preserve">
-    <value>System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="groupBoxTransfer.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
   </data>
-  <data name="&gt;&gt;statusStrip.Parent" xml:space="preserve">
-    <value>$this</value>
+  <data name="$this.ToolTip" xml:space="preserve">
+    <value />
   </data>
-  <data name="&gt;&gt;statusStrip.ZOrder" xml:space="preserve">
-    <value>0</value>
+  <data name="&gt;&gt;linkLabelSourceURL.ZOrder" xml:space="preserve">
+    <value>4</value>
   </data>
-  <metadata name="timerStatusStopwatch.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>673, 17</value>
-  </metadata>
-  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <data name="&gt;&gt;toolStripStatusLabelStopwatch.Name" xml:space="preserve">
+    <value>toolStripStatusLabelStopwatch</value>
+  </data>
+  <data name="buttonConfig.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
-  </metadata>
-  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
-    <value>6, 12</value>
   </data>
-  <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
-    <value>464, 473</value>
+  <data name="toolStripDropDownButtonLanguage.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
   </data>
-  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        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
-        AAAAAAAAAAAAAA3JicMNyYn/DcmJ/w3Jif8NyYl7AAAAAAAAAAAbG0sANzdiaDExXPwgIEr/FxdD/xUV
-        QP8WFkH/GxtI+B8fTGgRET0DERE9ARERPQYRET0AHx9MEhERPf8WFkH/FRVA/xcXQ/8gIEr/MTFc/Dc3
-        YmgAAAAAAAAAAAAAAAANyYm/DcmJ/w3Jif8NyYn/DcmJcQ3JiQANyYkwDcmJ+Q3Jif8NyYn/DcmJ2g3J
-        iTQAAAAAAAAAAAAAAAAAAAAAAAAAAA3JiYgNyYn/DcmJ/w3Jif8NyYm3AAAAAAAAAABAQHYmMTBd9yEh
-        Sv8WFkD/ExM//xMTP/8VFUH/FxdG/xcXR94XF0dcGBhJRRUVRY8XF0ciFxdHlhERPf8VFUH/ExM//xMT
-        P/8WFkD/ISFK/zEwXfdAQHYmAAAAAAAAAAANyYmGDcmJ/w3Jif8NyYn/DcmJqw3JiQANyYkADcmJSg3J
-        ie8NyYn/DcmJ/w3Jif8NyYnJDcmJiA3JiVgNyYk2DcmJGw3JiVQNyYn/DcmJ/w3Jif8NyYnwDcmJAgAA
-        AAA3N2fIJydR/xcXQf8SEj3/ERE9/xERPf8TEz//ExNA/xISP/0RET3/ERE9/xMTP/oRET3/EhI/+RMT
-        QP8TEz//ERE9/xERPf8SEj3/FxdB/ycnUf83N2fIAAAAAAAAAAANyYlMDcmJ/w3Jif8NyYn/DcmJ5A3J
-        iQANyYkADcmJAA3JiRcNyYmHDcmJ4g3Jif8NyYn/DcmJ/w3Jif8NyYn/DcmJ/w3Jif8NyYn/DcmJ/w3J
-        if8NyYn/DcmJLgAAAAAyMmL4Hh5I/xISPv8RET3/ERE9/xERPf8RET3/ERE9/xERPf8RET3/ERE9/xER
-        Pf8RET3/ERE9/xERPf8RET3/ERE9/xERPf8RET3/EhI+/x4eSP8yMmL4AAAAAAAAAAANyYkTDcmJ/w3J
-        if8NyYn/DcmJ/w3JiR4AAAAAAAAAAAAAAAAAAAAAAAAAAA3JiScNyYldDcmJiA3JiasNyYnIDcmJ3w3J
-        ifENyYn+DcmJ/w3Jif8NyYn/DcmJaQAAAAAuLlv9GxtF/xISPv8RET3/ERE9/xERPf8RET3/ERE9/xER
-        Pf8RET3/ERE9/xERPf8RET3/ERE9/xERPf8RET3/ERE9/xERPf8RET3/EhI+/xsbRf8uLlv9Ojl2CAAA
-        AAAAAAAADcmJ2Q3Jif8NyYn/DcmJ/w3JiVcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAANyYmBDcmJ/w3Jif8NyYn/DcmJnwAAAAAzM2PiHh5I/xISPv8RET3/ERE9/xER
-        Pf8RET3/ERE9/xERPf8RET3/ERE9/xERPf8RET3/ERE9/xERPf8RET3/ERE9/xERPf8RET3/EhI+/x4e
-        SP8zM2PiAAAAAAAAAAAAAAAADcmJnw3Jif8NyYn/DcmJ/w3JiZELsGAAC7BgAAuwYAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANyYmGDcmJ/w3Jif8NyYn/DcmJvwAAAAA8PG2cJydR/xcX
-        Qf8SEj3/ERE9/xERPf8TEz//ExNA/xISP/8TEj//ExM//xMTP/8TEj//EhI//xMTQP8TEz//ERE9/xER
-        Pf8SEj3/FxdB/ycnUf88PG2cAAAAAAAAAAAAAAAADcmJZQ3Jif8NyYn/DcmJ/w3JicoLsGAAC7BgAAuw
-        YAANyYnIDcmJpQ3JiWwNyYk7DcmJFw3JiQUNyYkGDcmJIw3JiW8NyYn1DcmJ/w3Jif8NyYn/DcmJtgAA
-        AABAQHYmMjFf5iEhSv8WFkD/ExM//xMTP/8VFUH/FxdG+xgYSMwYGEiLGBhJ6hYWRsgYGEikGBhIyxcX
-        RvsVFUH/ExM//xMTP/8WFkD/ISFK/zIxX+ZAQHYmAAAAAA3JiecNyYn/DcmJ/w3Jif8NyYn/DcmJ/w3J
-        ifoNyYkJC7BgAAuwYAANyYmiDcmJ/w3Jif8NyYn/DcmJ/w3Jif8NyYn/DcmJ/w3Jif8NyYn/DcmJ/w3J
-        if8NyYn/DcmJZwAAAAA6OnQAPj5tQDIyXewgIEr/FxdD/xUVQP8WFkH/GhpHyxkZSSMRET0CERE9PRER
-        PRIRET0GGRlJIhERPf8WFkH/FRVA/xcXQ/8gIEr/MjJd7D4+bUALsGAAC7BgAA3JibQNyYn/DcmJ/w3J
-        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
-        YAALsGAAC7BgAAAAAAAAAAAAC7BgAAuwYAALsGAAC7BgAAuwYAALsGAAC7BgAAuwYAALsGAAC7BgAAuw
-        YAALsGAAC7BgAAuwYAALsGAAC7BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALsGAAC7BgFguwYGwLsGCuC7Bg2guwYPALsGD8C7Bg9Quw
-        YNgLsGCqC7BgbAuwYCELsGAAC7BgAAuwYOMLsGD/C7Bg/wuwYP8LsGBUC7BgAAuwYAALsGAAC7BgAAuw
-        YAALsGAAC7Bg4wuwYP8LsGD/C7Bg/wuwYF0LsGAAC7BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuwYAMLsGB/C7Bg9guwYP8LsGD/C7Bg/wuw
-        YP8LsGD/C7Bg/wuwYP8LsGD/C7Bg/wuwYP8LsGBAAAAAAAuwYKkLsGD/C7Bg/wuwYP8LsGCNC7BgAAuw
-        YAALsGAAC7BgAAuwYAALsGAAC7BgqguwYP8LsGD/C7Bg/wuwYJkLsGAAC7BgAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuwYKcLsGD/C7Bg/wuw
-        YP8LsGD/C7Bg/wuwYP8LsGD/C7Bg/wuwYP8LsGD/C7Bg/wuwYP8LsGB4AAAAAAuwYG8LsGD/C7Bg/wuw
-        YP8LsGDGC7BgAAuwYAALsGAAAAAAAAuwYAALsGAAC7BgcAuwYP8LsGD/C7Bg/wuwYNULsGAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7BgVguw
-        YP8LsGD/C7Bg/wuwYP8LsGDeC7BgaAuwYCYLsGAIC7BgBAuwYCMLsGBjC7BgwwuwYP8LsGCuAAAAAAuw
-        YDQLsGD/C7Bg/wuwYP8LsGD4C7BgBgAAAAAAAAAAAAAAAAAAAAAAAAAAC7BgNwuwYP8LsGD/C7Bg/wuw
-        YP4LsGASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAC7BgvAuwYP8LsGD/C7Bg/wuwYNELsGAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuw
-        YD4LsGCyAAAAAAuwYAQLsGD1C7Bg/wuwYP8LsGD/C7BgOAAAAAAAAAAAAAAAAAAAAAAAAAAAC7BgBQuw
-        YPcLsGD/C7Bg/wuwYP8LsGBNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAC7Bg7wuwYP8LsGD/C7Bg/wuwYEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALsGDAC7Bg/wuwYP8LsGD/C7BgcQAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAuwYMMLsGD/C7Bg/wuwYP8LsGCJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7Bg/QuwYP8LsGD/C7Bg/wuwYA4AAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALsGCGC7Bg/wuwYP8LsGD/C7BgqgAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuwYIoLsGD/C7Bg/wuwYP8LsGDFAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7Bg8QuwYP8LsGD/C7Bg/wuw
-        YAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALsGBLC7Bg/wuw
-        YP8LsGD/C7Bg4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuwYFALsGD/C7Bg/wuwYP8LsGD5C7BgCAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7BgzQuw
-        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
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP//Af///wAA//8A////
-        AAD//4B///8AAP//+D///wAA///8H///AAD///4f//8AAP///h8DDwAA///+HgAHAAD///4MAAcAAP3+
-        /wwfBwAA8Pw/DD+HAADg/B8MP4cAAMD8Dw4fgwAAgGgHBwPDAAAAAAOHgAMAAAAAA4f4AwAAAAADh//B
-        AAAAAAOD/8EAAAAAA8OfwQAAgAAGA4ADAADA/A4DwAMAAOD8HgPgDwAA8Pw/////AAD9/v////8AAP//
-        /+D//wAA////4P//AAD////w//8AAP////D//wAA////////AAD///////8AAPwHh/D//wAA8AGD8H//
-        AADAAcP4f/8AAMH4w/h//wAAg/7D+H//AACH/8P4P/8AAIf/wfg//wAAh//h/D//AACAAGH8P/8AAIAA
-        Yfw//wAAw/hg/B//AADD+HD8H/8AAODwcHwf/wAA8ADwAD//AAD4APAAP/8AAP4D+GB//wAA////////
-        AAA=
-</value>
+  <data name="buttonConfig.Size" type="System.Drawing.Size, System.Drawing">
+    <value>63, 23</value>
+  </data>
+  <data name="toolStripMenuItemJapanese.Text" xml:space="preserve">
+    <value>日本語</value>
+  </data>
+  <data name="&gt;&gt;toolStripDropDownButtonLanguage.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;toolTip.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolTip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
-    <value>480, 480</value>
+  <data name="groupBoxSaveDirectory.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 114</value>
   </data>
-  <data name="$this.Text" xml:space="preserve">
-    <value>Translation Support for Wikipedia</value>
+  <data name="&gt;&gt;toolStripMenuItemAuto.Name" xml:space="preserve">
+    <value>toolStripMenuItemAuto</value>
   </data>
-  <data name="&gt;&gt;folderBrowserDialogSaveDirectory.Name" xml:space="preserve">
-    <value>folderBrowserDialogSaveDirectory</value>
+  <data name="comboBoxSource.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
   </data>
-  <data name="&gt;&gt;folderBrowserDialogSaveDirectory.Type" xml:space="preserve">
-    <value>System.Windows.Forms.FolderBrowserDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="labelArrow.Location" type="System.Drawing.Point, System.Drawing">
+    <value>77, 46</value>
   </data>
-  <data name="&gt;&gt;backgroundWorkerRun.Name" xml:space="preserve">
-    <value>backgroundWorkerRun</value>
+  <data name="statusStrip.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 449</value>
   </data>
-  <data name="&gt;&gt;backgroundWorkerRun.Type" xml:space="preserve">
-    <value>System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;groupBoxTransfer.Parent" xml:space="preserve">
+    <value>$this</value>
   </data>
-  <data name="&gt;&gt;toolTip.Name" xml:space="preserve">
-    <value>toolTip</value>
+  <data name="toolStripMenuItemAuto.Size" type="System.Drawing.Size, System.Drawing">
+    <value>147, 22</value>
   </data>
-  <data name="&gt;&gt;toolTip.Type" xml:space="preserve">
-    <value>System.Windows.Forms.ToolTip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;groupBoxRun.ZOrder" xml:space="preserve">
+    <value>1</value>
   </data>
-  <data name="&gt;&gt;toolStripStatusLabelStatus.Name" xml:space="preserve">
-    <value>toolStripStatusLabelStatus</value>
+  <data name="&gt;&gt;toolStripMenuItemEnglishGB.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;toolStripStatusLabelStatus.Type" xml:space="preserve">
-    <value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="comboBoxSource.ToolTip" xml:space="preserve">
+    <value>翻訳元の言語を選択、または入力します。
+入力の場合、Wikipediaで使用されている言語コードを入力してください。</value>
   </data>
-  <data name="&gt;&gt;toolStripStatusLabelStopwatch.Name" xml:space="preserve">
-    <value>toolStripStatusLabelStopwatch</value>
+  <data name="labelSource.ToolTip" xml:space="preserve">
+    <value>翻訳元の言語です。</value>
+  </data>
+  <data name="labelArticle.Size" type="System.Drawing.Size, System.Drawing">
+    <value>30, 12</value>
+  </data>
+  <data name="labelArrow.ToolTip" xml:space="preserve">
+    <value />
+  </data>
+  <data name="labelArrow.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="&gt;&gt;statusStrip.Name" xml:space="preserve">
+    <value>statusStrip</value>
+  </data>
+  <data name="toolStripMenuItemEnglishUS.Size" type="System.Drawing.Size, System.Drawing">
+    <value>147, 22</value>
+  </data>
+  <data name="textBoxArticle.ToolTip" xml:space="preserve">
+    <value>翻訳元Wikipediaでの記事名を入力します。</value>
+  </data>
+  <data name="labelSource.Location" type="System.Drawing.Point, System.Drawing">
+    <value>76, 21</value>
+  </data>
+  <data name="textBoxSaveDirectory.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;buttonConfig.Parent" xml:space="preserve">
+    <value>groupBoxTransfer</value>
+  </data>
+  <data name="toolStripStatusLabelStopwatch.Size" type="System.Drawing.Size, System.Drawing">
+    <value>68, 19</value>
+  </data>
+  <data name="textBoxArticle.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;groupBoxRun.Name" xml:space="preserve">
+    <value>groupBoxRun</value>
+  </data>
+  <data name="&gt;&gt;labelArticle.Parent" xml:space="preserve">
+    <value>groupBoxRun</value>
+  </data>
+  <data name="groupBoxSaveDirectory.ToolTip" xml:space="preserve">
+    <value>処理結果を出力するフォルダを選択してください。
+指定されたフォルダに記事テキストとログを出力します。</value>
+  </data>
+  <data name="linkLabelSourceURL.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
+    <value>MiddleLeft</value>
+  </data>
+  <data name="&gt;&gt;linkLabelSourceURL.Name" xml:space="preserve">
+    <value>linkLabelSourceURL</value>
+  </data>
+  <data name="comboBoxTarget.Location" type="System.Drawing.Point, System.Drawing">
+    <value>11, 64</value>
   </data>
   <data name="&gt;&gt;toolStripStatusLabelStopwatch.Type" xml:space="preserve">
     <value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;toolStripDropDownButtonLanguage.Name" xml:space="preserve">
-    <value>toolStripDropDownButtonLanguage</value>
+  <data name="linkLabelSourceURL.ToolTip" xml:space="preserve">
+    <value>翻訳元WikipediaのURLです。</value>
   </data>
-  <data name="&gt;&gt;toolStripDropDownButtonLanguage.Type" xml:space="preserve">
-    <value>System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;textBoxArticle.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;toolStripMenuItemEnglishUS.Name" xml:space="preserve">
-    <value>toolStripMenuItemEnglishUS</value>
+  <data name="buttonStop.ToolTip" xml:space="preserve">
+    <value>処理を中断します。</value>
   </data>
-  <data name="&gt;&gt;toolStripMenuItemEnglishUS.Type" xml:space="preserve">
-    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="groupBoxRun.ToolTip" xml:space="preserve">
+    <value>目的の記事の、翻訳元言語のWikipediaでの記事名を入力し、実行ボタンを押してください。</value>
   </data>
-  <data name="&gt;&gt;toolStripMenuItemJapanese.Name" xml:space="preserve">
-    <value>toolStripMenuItemJapanese</value>
+  <data name="textBoxLog.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
   </data>
-  <data name="&gt;&gt;toolStripMenuItemJapanese.Type" xml:space="preserve">
-    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;groupBoxRun.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;toolStripMenuItemAuto.Name" xml:space="preserve">
-    <value>toolStripMenuItemAuto</value>
+  <data name="buttonSaveDirectory.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="&gt;&gt;toolStripMenuItemAuto.Type" xml:space="preserve">
-    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="buttonConfig.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
   </data>
-  <data name="&gt;&gt;toolStripDropDownButtonConfig.Name" xml:space="preserve">
-    <value>toolStripDropDownButtonConfig</value>
+  <data name="&gt;&gt;groupBoxRun.Parent" xml:space="preserve">
+    <value>$this</value>
   </data>
-  <data name="&gt;&gt;toolStripDropDownButtonConfig.Type" xml:space="preserve">
-    <value>System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
+    <value>464, 473</value>
   </data>
-  <data name="&gt;&gt;timerStatusStopwatch.Name" xml:space="preserve">
-    <value>timerStatusStopwatch</value>
+  <data name="buttonConfig.Text" xml:space="preserve">
+    <value>Settings...</value>
+  </data>
+  <data name="&gt;&gt;folderBrowserDialogSaveDirectory.Name" xml:space="preserve">
+    <value>folderBrowserDialogSaveDirectory</value>
+  </data>
+  <data name="&gt;&gt;toolStripStatusLabelStatus.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;labelArrow.Name" xml:space="preserve">
+    <value>labelArrow</value>
+  </data>
+  <data name="buttonSaveDirectory.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="groupBoxRun.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 169</value>
+  </data>
+  <data name="folderBrowserDialogSaveDirectory.Description" xml:space="preserve">
+    <value>Please select output folder.</value>
+  </data>
+  <data name="buttonConfig.ToolTip" xml:space="preserve">
+    <value>サーバーやツールの設定を行います。</value>
+  </data>
+  <data name="labelTarget.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
+  </data>
+  <data name="$this.Text" xml:space="preserve">
+    <value>Translation Support for Wikipedia</value>
+  </data>
+  <data name="buttonStop.Size" type="System.Drawing.Size, System.Drawing">
+    <value>43, 23</value>
+  </data>
+  <data name="toolStripDropDownButtonConfig.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="&gt;&gt;textBoxSaveDirectory.Name" xml:space="preserve">
+    <value>textBoxSaveDirectory</value>
+  </data>
+  <data name="buttonRun.Location" type="System.Drawing.Point, System.Drawing">
+    <value>230, 18</value>
+  </data>
+  <data name="&gt;&gt;groupBoxSaveDirectory.Name" xml:space="preserve">
+    <value>groupBoxSaveDirectory</value>
+  </data>
+  <data name="groupBoxTransfer.Text" xml:space="preserve">
+    <value>Select Source and Destination</value>
+  </data>
+  <data name="&gt;&gt;textBoxArticle.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="groupBoxTransfer.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 12</value>
+  </data>
+  <data name="&gt;&gt;groupBoxSaveDirectory.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;buttonSaveDirectory.Name" xml:space="preserve">
+    <value>buttonSaveDirectory</value>
+  </data>
+  <data name="groupBoxRun.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="buttonStop.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="statusStrip.Size" type="System.Drawing.Size, System.Drawing">
+    <value>464, 24</value>
+  </data>
+  <data name="&gt;&gt;buttonStop.Parent" xml:space="preserve">
+    <value>groupBoxRun</value>
+  </data>
+  <data name="&gt;&gt;backgroundWorkerRun.Name" xml:space="preserve">
+    <value>backgroundWorkerRun</value>
+  </data>
+  <data name="&gt;&gt;buttonConfig.ZOrder" xml:space="preserve">
+    <value>0</value>
   </data>
   <data name="&gt;&gt;timerStatusStopwatch.Type" xml:space="preserve">
     <value>System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;toolStripMenuItemEnglishGB.Name" xml:space="preserve">
-    <value>toolStripMenuItemEnglishGB</value>
+  <data name="labelArrow.Size" type="System.Drawing.Size, System.Drawing">
+    <value>17, 12</value>
   </data>
-  <data name="&gt;&gt;toolStripMenuItemEnglishGB.Type" xml:space="preserve">
-    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="textBoxArticle.MaxLength" type="System.Int32, mscorlib">
+    <value>255</value>
   </data>
-  <data name="&gt;&gt;$this.Name" xml:space="preserve">
-    <value>MainForm</value>
+  <data name="toolStripStatusLabelStopwatch.Text" xml:space="preserve">
+    <value>Time 0:00</value>
   </data>
-  <data name="&gt;&gt;$this.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;toolStripDropDownButtonConfig.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="toolStripStatusLabelStatus.Size" type="System.Drawing.Size, System.Drawing">
+    <value>243, 19</value>
   </data>
+  <data name="&gt;&gt;buttonConfig.Name" xml:space="preserve">
+    <value>buttonConfig</value>
+  </data>
+  <data name="&gt;&gt;buttonStop.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <metadata name="backgroundWorkerRun.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>274, 17</value>
+  </metadata>
+  <metadata name="folderBrowserDialogSaveDirectory.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="timerStatusStopwatch.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>673, 17</value>
+  </metadata>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>557, 17</value>
+  </metadata>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>464, 17</value>
+  </metadata>
 </root>
\ No newline at end of file
index 85eb829..da4ea31 100644 (file)
@@ -49,10 +49,10 @@ namespace Honememo.Wptscs.Models
         #region コンストラクタ
 
         /// <summary>
-        /// コンストラクタ
+        /// 空のインスタンスを生成する
         /// </summary>
-        /// <remarks>é\80\9a常ã\81¯<see cref="GetInstance(string)"/>ã\82\92使ç\94¨ã\81\99ã\82\8b。</remarks>
-        protected Config()
+        /// <remarks>é\80\9a常ã\81¯<see cref="GetInstance(string)"/>ã\81§è¨­å®\9aã\83\95ã\82¡ã\82¤ã\83«ã\81\8bã\82\89読ã\81¿è¾¼ã\82\80。</remarks>
+        public Config()
         {
         }
 
@@ -145,6 +145,7 @@ namespace Honememo.Wptscs.Models
         /// </summary>
         /// <param name="file">設定ファイル名。</param>
         /// <returns>作成したインスタンス。</returns>
+        /// <exception cref="FileNotFoundException">指定されたファイルがどこにも存在しない場合。</exception>
         public static Config GetInstance(string file)
         {
             // ユーザーごと・または初期設定用の設定ファイルを読み込み
@@ -152,7 +153,6 @@ namespace Honememo.Wptscs.Models
             if (String.IsNullOrEmpty(path))
             {
                 // どこにも無い場合は例外を投げる
-                // (空でnewしてもよいが、ユーザーが勘違いすると思うので。)
                 throw new FileNotFoundException(file + " is not found");
             }
 
index 3617bb9..aea1552 100644 (file)
@@ -3,7 +3,7 @@
 //      言語間の対訳表をあらわすモデルクラスソース</summary>
 //
 // <copyright file="TranslationTable.cs" company="honeplusのメモ帳">
-//      Copyright (C) 2011 Honeplus. All rights reserved.</copyright>
+//      Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
 // <author>
 //      Honeplus</author>
 // ================================================================================================
@@ -12,6 +12,7 @@ namespace Honememo.Wptscs.Models
 {
     using System;
     using System.Collections.Generic;
+    using System.Linq;
     using System.Xml;
     using System.Xml.Serialization;
     using Honememo.Utilities;
@@ -19,13 +20,14 @@ namespace Honememo.Wptscs.Models
     /// <summary>
     /// 言語間の対訳表をあらわすモデルクラスです。
     /// </summary>
-    public class TranslationTable : List<IDictionary<string, string>>, IXmlSerializable
+    public class TranslationTable : List<IDictionary<string, string[]>>, IXmlSerializable
     {
         #region プロパティ
         
         /// <summary>
         /// 翻訳元言語コード。
         /// </summary>
+        /// <remarks><see cref="GetWord(string)"/>の呼び出しを簡略化するためのプロパティ。</remarks>
         public string From
         {
             get;
@@ -35,6 +37,7 @@ namespace Honememo.Wptscs.Models
         /// <summary>
         /// 翻訳先言語コード。
         /// </summary>
+        /// <remarks><see cref="GetWord(string)"/>の呼び出しを簡略化するためのプロパティ。</remarks>
         public string To
         {
             get;
@@ -50,28 +53,31 @@ namespace Honememo.Wptscs.Models
         /// </summary>
         /// <param name="from">翻訳元言語コード。</param>
         /// <param name="to">翻訳先言語コード。</param>
-        /// <param name="word">翻訳元語。</param>
-        /// <returns>対訳語。登録されていない場合 <c>null</c>。</returns>
-        /// <remarks>大文字小文字は区別しない。</remarks>
+        /// <param name="word">翻訳元語句。</param>
+        /// <returns>対訳語句。登録されていない場合 <c>null</c>。</returns>
+        /// <exception cref="ArgumentNullException"><para>from</para>, <para>to</para>, <para>word</para>のいずれかが<c>null</c>の場合。</exception>
+        /// <remarks><para>word</para>の大文字小文字は区別しない。</remarks>
         public string GetWord(string from, string to, string word)
         {
             // nullは不可。以降でエラーになるためここでチェック
             Validate.NotNull(from, "from");
             Validate.NotNull(to, "to");
-            Validate.NotNull(word, "word");
+            string w = Validate.NotNull(word, "word").ToLower();
 
-            string w = word.ToLower();
-            foreach (IDictionary<string, string> record in this)
+            // 翻訳元言語の項目を探索
+            foreach (IDictionary<string, string[]> record in this)
             {
-                if (record.ContainsKey(from) && record[from].ToLower() == w)
+                if (record.ContainsKey(from) && CollectionUtils.ContainsIgnoreCase(record[from], w))
                 {
-                    string c = null;
+                    // 翻訳元を発見した場合、それに対応する翻訳先の語句を返す
+                    string s = null;
                     if (record.ContainsKey(to))
                     {
-                        c = record[to];
+                        // 代表で先頭の値を取得
+                        s = record[to].First();
                     }
 
-                    return c;
+                    return s;
                 }
             }
 
@@ -83,6 +89,7 @@ namespace Honememo.Wptscs.Models
         /// </summary>
         /// <param name="word">翻訳元語。</param>
         /// <returns>対訳語。登録されていない場合 <c>null</c>。</returns>
+        /// <exception cref="InvalidOperationException"><see cref="From"/>, <see cref="To"/>のいずれかが空の場合。</exception>
         /// <remarks>大文字小文字は区別しない。</remarks>
         public string GetWord(string word)
         {
@@ -123,11 +130,32 @@ namespace Honememo.Wptscs.Models
             this.Clear();
             foreach (XmlNode recordNode in tableElement.SelectNodes("Group"))
             {
-                IDictionary<string, string> record = new Dictionary<string, string>();
+                IDictionary<string, string[]> record = new Dictionary<string, string[]>();
                 foreach (XmlNode wordNode in recordNode)
                 {
+                    // 一つの言語に複数の値が登録可能なため、その場合配列に積む
                     XmlElement wordElement = wordNode as XmlElement;
-                    record[wordElement.GetAttribute("Lang")] = wordElement.InnerText;
+                    string lang = wordElement.GetAttribute("Lang");
+                    string word = wordElement.InnerText;
+                    List<string> list = new List<string>();
+                    string[] words;
+                    if (record.TryGetValue(lang, out words))
+                    {
+                        list.AddRange(words);
+                    }
+
+                    // 既に登録されている場合、代表であれば先頭に、それ以外なら後ろに追加
+                    bool head;
+                    if (bool.TryParse(wordElement.GetAttribute("Head"), out head) && head)
+                    {
+                        list.Insert(0, word);
+                    }
+                    else
+                    {
+                        list.Add(word);
+                    }
+
+                    record[lang] = list.ToArray();
                 }
 
                 this.Add(record);
@@ -141,15 +169,27 @@ namespace Honememo.Wptscs.Models
         public void WriteXml(XmlWriter writer)
         {
             // 各対訳の出力
-            foreach (IDictionary<string, string> record in this)
+            foreach (IDictionary<string, string[]> record in this)
             {
                 writer.WriteStartElement("Group");
-                foreach (KeyValuePair<string, string> word in record)
+                foreach (KeyValuePair<string, string[]> words in record)
                 {
-                    writer.WriteStartElement("Word");
-                    writer.WriteAttributeString("Lang", word.Key);
-                    writer.WriteValue(word.Value);
-                    writer.WriteEndElement();
+                    bool first = true;
+                    foreach (string word in words.Value)
+                    {
+                        writer.WriteStartElement("Word");
+                        writer.WriteAttributeString("Lang", words.Key);
+                        if (first && words.Value.Length > 1)
+                        {
+                            // 先頭項目は変換先として使用されるため、複数ある場合は代表フラグを出力
+                            // ※ 2番目以降は同格のため、先頭以外の並び順は保障しない
+                            writer.WriteAttributeString("Head", bool.TrueString);
+                            first = false;
+                        }
+
+                        writer.WriteValue(word);
+                        writer.WriteEndElement();
+                    }
                 }
 
                 writer.WriteEndElement();
index fcbd4e8..b421526 100644 (file)
@@ -37,4 +37,4 @@ using System.Runtime.InteropServices;
 //      Minor Version 
 //      Build Number
 //      Revision
-[assembly: AssemblyVersion("1.11.*")]
+[assembly: AssemblyVersion("1.20.*")]
index 3529983..ab9d38a 100644 (file)
@@ -79,6 +79,15 @@ namespace Honememo.Wptscs.Properties {
         }
         
         /// <summary>
+        ///   (load failed) に類似しているローカライズされた文字列を検索します。
+        /// </summary>
+        internal static string DropDownConfigLoadConfigFailed {
+            get {
+                return ResourceManager.GetString("DropDownConfigLoadConfigFailed", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Time: {0:m\:ss} に類似しているローカライズされた文字列を検索します。
         /// </summary>
         internal static string ElapsedTime {
@@ -160,15 +169,6 @@ namespace Honememo.Wptscs.Properties {
         }
         
         /// <summary>
-        ///   {0} is not supported. に類似しているローカライズされた文字列を検索します。
-        /// </summary>
-        internal static string InformationMessageDevelopingMethod {
-            get {
-                return ResourceManager.GetString("InformationMessageDevelopingMethod", resourceCulture);
-            }
-        }
-        
-        /// <summary>
         ///   Information に類似しているローカライズされた文字列を検索します。
         /// </summary>
         internal static string InformationTitle {
@@ -422,6 +422,15 @@ namespace Honememo.Wptscs.Properties {
         }
         
         /// <summary>
+        ///   Name is already. に類似しているローカライズされた文字列を検索します。
+        /// </summary>
+        internal static string WarningMessageDuplicateConfigName {
+            get {
+                return ResourceManager.GetString("WarningMessageDuplicateConfigName", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Language code is already. に類似しているローカライズされた文字列を検索します。
         /// </summary>
         internal static string WarningMessageDuplicateLanguageCode {
@@ -449,6 +458,15 @@ namespace Honememo.Wptscs.Properties {
         }
         
         /// <summary>
+        ///   Name may not be empty. に類似しているローカライズされた文字列を検索します。
+        /// </summary>
+        internal static string WarningMessageEmptyConfigName {
+            get {
+                return ResourceManager.GetString("WarningMessageEmptyConfigName", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Please input language code. に類似しているローカライズされた文字列を検索します。
         /// </summary>
         internal static string WarningMessageEmptyLanguageCode {
@@ -530,6 +548,17 @@ namespace Honememo.Wptscs.Properties {
         }
         
         /// <summary>
+        ///   Name is invalid.
+        ///
+        ///Invalid chars : {0} に類似しているローカライズされた文字列を検索します。
+        /// </summary>
+        internal static string WarningMessageInvalidConfigName {
+            get {
+                return ResourceManager.GetString("WarningMessageInvalidConfigName", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Please select source. に類似しているローカライズされた文字列を検索します。
         /// </summary>
         internal static string WarningMessageNotSelectedSource {
index 68acf09..e680521 100644 (file)
     <value>&lt;!-- {0}、[[:{1}:{2}]]({3}(UTC))より --&gt;</value>
     <comment>変換した記事の末尾に付けるフッター</comment>
   </data>
+  <data name="DropDownConfigLoadConfigFailed" xml:space="preserve">
+    <value>(読込失敗)</value>
+    <comment>設定ファイル読み込み失敗時の状態</comment>
+  </data>
   <data name="ElapsedTime" xml:space="preserve">
     <value>実行時間: {0:m\:ss}</value>
     <comment>ステータスバー処理時間のフォーマット</comment>
     <value>エラー</value>
     <comment>エラーダイアログのタイトル</comment>
   </data>
-  <data name="InformationMessageDevelopingMethod" xml:space="preserve">
-    <value>このバージョンは{0}には未対応です。</value>
-    <comment>未実装の機能が呼ばれた際のメッセージ</comment>
-  </data>
   <data name="InformationTitle" xml:space="preserve">
     <value>お知らせ</value>
     <comment>お知らせダイアログのタイトル</comment>
   <data name="WarningMessageDuplicateCodeColumn" xml:space="preserve">
     <value>言語コードが重複しています。</value>
   </data>
+  <data name="WarningMessageDuplicateConfigName" xml:space="preserve">
+    <value>指定された設定は既に登録されています。</value>
+    <comment>設定の追加で設定名が重複している場合のバリデートNGメッセージ</comment>
+  </data>
   <data name="WarningMessageDuplicateLanguageCode" xml:space="preserve">
     <value>指定された言語は既に登録されています。</value>
     <comment>言語コード追加でのコード重複バリデートNGメッセージ</comment>
   <data name="WarningMessageEmptyCodeColumn" xml:space="preserve">
     <value>言語コードは必須です。</value>
   </data>
+  <data name="WarningMessageEmptyConfigName" xml:space="preserve">
+    <value>設定名を入力してください。</value>
+    <comment>設定の追加で設定名が空の場合のバリデートNGメッセージ</comment>
+  </data>
   <data name="WarningMessageEmptyLanguageCode" xml:space="preserve">
     <value>言語コードを入力してください。</value>
     <comment>言語追加でのコード未入力バリデートNGメッセージ</comment>
   <data name="WarningMessageIgnoreSaveDirectory" xml:space="preserve">
     <value>出力先フォルダが存在しないか無効なパスです。出力先を確認してください。</value>
   </data>
+  <data name="WarningMessageInvalidConfigName" xml:space="preserve">
+    <value>設定名に使用できない文字が含まれています。以下の文字は使用できません。
+
+{0}</value>
+    <comment>設定の追加で設定名に使用できない文字が含まれる場合のバリデートNGメッセージ</comment>
+  </data>
   <data name="WarningMessageNotSelectedSource" xml:space="preserve">
     <value>翻訳元の言語を指定してください。</value>
   </data>
index c26ded1..dafad57 100644 (file)
     <value>Error</value>
     <comment>エラーダイアログのタイトル</comment>
   </data>
-  <data name="InformationMessageDevelopingMethod" xml:space="preserve">
-    <value>{0} is not supported.</value>
-    <comment>未実装の機能が呼ばれた際のメッセージ</comment>
-  </data>
   <data name="InformationTitle" xml:space="preserve">
     <value>Information</value>
     <comment>お知らせダイアログのタイトル</comment>
@@ -348,4 +344,22 @@ Process stopped. Log: {0}
     <value>{0} is not supported page name.</value>
     <comment>ページ名絡みの既知の不具合用の暫定メッセージ</comment>
   </data>
+  <data name="DropDownConfigLoadConfigFailed" xml:space="preserve">
+    <value>(load failed)</value>
+    <comment>設定ファイル読み込み失敗時の状態</comment>
+  </data>
+  <data name="WarningMessageDuplicateConfigName" xml:space="preserve">
+    <value>Name is already.</value>
+    <comment>設定の追加で設定名が重複している場合のバリデートNGメッセージ</comment>
+  </data>
+  <data name="WarningMessageEmptyConfigName" xml:space="preserve">
+    <value>Name may not be empty.</value>
+    <comment>設定の追加で設定名が空の場合のバリデートNGメッセージ</comment>
+  </data>
+  <data name="WarningMessageInvalidConfigName" xml:space="preserve">
+    <value>Name is invalid.
+
+Invalid chars : {0}</value>
+    <comment>設定の追加で設定名に使用できない文字が含まれる場合のバリデートNGメッセージ</comment>
+  </data>
 </root>
\ No newline at end of file
index 881542e..ad0f132 100644 (file)
@@ -25,15 +25,6 @@ namespace Honememo.Wptscs.Properties {
         
         [global::System.Configuration.ApplicationScopedSettingAttribute()]
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("config.xml")]
-        public string ConfigurationFile {
-            get {
-                return ((string)(this["ConfigurationFile"]));
-            }
-        }
-        
-        [global::System.Configuration.ApplicationScopedSettingAttribute()]
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
         [global::System.Configuration.DefaultSettingValueAttribute("WikipediaTranslationSupportTool/{0}.{1:D2}")]
         public string DefaultUserAgent {
             get {
@@ -234,7 +225,7 @@ namespace Honememo.Wptscs.Properties {
         
         [global::System.Configuration.ApplicationScopedSettingAttribute()]
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("1.11.0.0")]
+        [global::System.Configuration.DefaultSettingValueAttribute("1.20.0.0")]
         public string ConfigurationCompatible {
             get {
                 return ((string)(this["ConfigurationCompatible"]));
@@ -355,5 +346,26 @@ namespace Honememo.Wptscs.Properties {
                 this["LastSelectedLanguage"] = value;
             }
         }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("Wikipedia")]
+        public string LastSelectedConfiguration {
+            get {
+                return ((string)(this["LastSelectedConfiguration"]));
+            }
+            set {
+                this["LastSelectedConfiguration"] = value;
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute(".xml")]
+        public string ConfigurationExtension {
+            get {
+                return ((string)(this["ConfigurationExtension"]));
+            }
+        }
     }
 }
index c5927ca..cc1d7cd 100644 (file)
@@ -2,9 +2,6 @@
 <SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Honememo.Wptscs.Properties" GeneratedClassName="Settings">
   <Profiles />
   <Settings>
-    <Setting Name="ConfigurationFile" Type="System.String" Scope="Application">
-      <Value Profile="(Default)">config.xml</Value>
-    </Setting>
     <Setting Name="DefaultUserAgent" Type="System.String" Scope="Application">
       <Value Profile="(Default)">WikipediaTranslationSupportTool/{0}.{1:D2}</Value>
     </Setting>
       <Value Profile="(Default)">15.00:00:00</Value>
     </Setting>
     <Setting Name="ConfigurationCompatible" Type="System.String" Scope="Application">
-      <Value Profile="(Default)">1.11.0.0</Value>
+      <Value Profile="(Default)">1.20.0.0</Value>
     </Setting>
     <Setting Name="MediaWikiMetaApi" Type="System.String" Scope="Application">
       <Value Profile="(Default)">/w/api.php?format=xml&amp;action=query&amp;meta=siteinfo&amp;siprop=namespaces|namespacealiases|interwikimap</Value>
     <Setting Name="LastSelectedLanguage" Type="System.String" Scope="User">
       <Value Profile="(Default)" />
     </Setting>
+    <Setting Name="LastSelectedConfiguration" Type="System.String" Scope="User">
+      <Value Profile="(Default)">Wikipedia</Value>
+    </Setting>
+    <Setting Name="ConfigurationExtension" Type="System.String" Scope="Application">
+      <Value Profile="(Default)">.xml</Value>
+    </Setting>
   </Settings>
 </SettingsFile>
\ No newline at end of file
index c8dd558..d7c9123 100644 (file)
@@ -1,7 +1,7 @@
 =====================================================================
 【タイトル】 Wikipedia 翻訳支援ツール
-【ファイル】 wptscs111.zip
-【作成月日】 2012/2/19
+【ファイル】 wptscs120.zip
+【作成月日】 2012/x/xx
 【制 作 者】 Honeplus
 【動作環境】 Windows Vista/7 での動作を確認。要.NET Framework 4.0 Client Profile
 【配布形態】 修正BSDライセンス
@@ -23,7 +23,7 @@ wptscs.exe              : 実行ファイル
 ja/wptscs.resources.dll : 日本語リソースdll
 hmlib.dll               : 共通ライブラリdll
 wptscs.exe.config       : デフォルト値やプログラム的な設定ファイル
-config.xml              : Wikipediaの各サーバーに関する設定ファイル
+Wikipedia.xml           : Wikipedia用の設定ファイル
 
 アプリケーション上で設定した内容は、上記設定ファイルには反映されません。
 ユーザーごとのフォルダに出力されます。
@@ -162,6 +162,12 @@ Ver1.11  2012/02/19 英語リソースの追加(ツールチップは除く)
                     トランスレータ周りのソース中心にリファクタリングを実施。
                     ※ 1.10とは設定ファイルの互換性がありません。
 
+Ver1.20  2012/0x/xx Wiktionaryでの動作に対応。
+                    設定の切り替え/追加機能を追加。
+                    見出しの置き換えに改行区切りで複数の語句を登録できるよう改良。
+                    画面表示周りの処理の改善/小不具合を修正。
+                    ※ 1.11とは設定ファイル名が変化しており、古い設定は自動で読み込まれません。
+
 
 
 ・仕様上の制限
index 4e29f37..77a1dbe 100644 (file)
@@ -15,6 +15,7 @@ namespace Honememo.Wptscs.Utilities
     using System.IO;
     using System.Reflection;
     using System.Windows.Forms;
+    using Honememo.Models;
 
     // ※ プロパティを含むので、そのまま他のプロジェクトに流用することはできない
     using Honememo.Wptscs.Properties;
@@ -50,6 +51,7 @@ namespace Honememo.Wptscs.Utilities
         /// <remarks>アセンブリ名が変わっている場合、旧バージョンは探索不可。</remarks>
         public static string SearchUserAppData(string fileName, string compatible)
         {
+            // ※ 以下GetFilesAtUserAppDataと共通化してもよいが、性能に影響あるかと考え自前で処理
             // 現在の UserAppDataPath を探索
             string path = Path.Combine(Application.UserAppDataPath, fileName);
             if (File.Exists(path))
@@ -60,32 +62,13 @@ namespace Honememo.Wptscs.Utilities
             // 可能であれば、旧バージョンの UserAppDataPath を探索
             if (!String.IsNullOrEmpty(compatible))
             {
-                // UserAppDataPath は
-                // <ベースパス>\<CompanyName>\<ProductName>\<ProductVersion>
-                // という構成のはずなので、一つ上のフォルダから自分より前のフォルダを探索
-                string parent = Path.GetDirectoryName(Application.UserAppDataPath);
-                if (!String.IsNullOrEmpty(parent))
+                // ファイルが見つかるまで探索
+                foreach (string dir in FormUtils.GetCompatibleUserAppDataPaths(compatible))
                 {
-                    // 現在のバージョンのフォルダ名
-                    string now = Path.GetFileName(Application.UserAppDataPath);
-
-                    // 同じ階層のフォルダをすべて取得し、降順にソート
-                    string[] directories = Directory.GetDirectories(parent);
-                    Array.Sort(directories);
-                    Array.Reverse(directories);
-
-                    // ファイルが見つかるまで探索
-                    foreach (string dir in directories)
+                    path = Path.Combine(dir, fileName);
+                    if (File.Exists(path))
                     {
-                        string ver = Path.GetFileName(dir);
-                        if (compatible.CompareTo(ver) <= 0 && ver.CompareTo(now) < 0)
-                        {
-                            path = Path.Combine(dir, fileName);
-                            if (File.Exists(path))
-                            {
-                                return path;
-                            }
-                        }
+                        return path;
                     }
                 }
             }
@@ -113,6 +96,78 @@ namespace Honememo.Wptscs.Utilities
         }
 
         /// <summary>
+        /// UserAppDataPath
+        /// → 旧バージョンのUserAppDataPath
+        /// → StartupPath から、指定した検索パターンに一致するファイル名を返す。
+        /// </summary>
+        /// <param name="searchPattern">ファイル名と対応させる検索文字列。</param>
+        /// <param name="compatible">探索する旧バージョンの最大。</param>
+        /// <returns>
+        /// 指定した検索パターンに一致するファイル名を格納するString配列。ファイル名には完全パスを含む。
+        /// 同名のファイルが複数のパスに存在する場合、最初に発見したもののみを返す。
+        /// </returns>
+        /// <exception cref="ArgumentException"><para>searchPattern</para>に有効なパターンが含まれていない場合。</exception>
+        /// <exception cref="ArgumentNullException"><para>searchPattern</para>が<c>null</c>の場合。</exception>
+        /// <exception cref="UnauthorizedAccessException">呼び出し元に、必要なアクセス許可がない場合。</exception>
+        /// <remarks>アセンブリ名が変わっている場合、旧バージョンは探索不可。</remarks>
+        public static string[] GetFilesAtUserAppData(string searchPattern, string compatible)
+        {
+            // 現在の UserAppDataPath を探索
+            List<string> files = new List<string>();
+            IgnoreCaseSet names = new IgnoreCaseSet();
+            if (Directory.Exists(Application.UserAppDataPath))
+            {
+                FormUtils.MergeFiles(files, names, Directory.GetFiles(Application.UserAppDataPath, searchPattern));
+            }
+
+            // 可能であれば、旧バージョンの UserAppDataPath を探索
+            if (!String.IsNullOrEmpty(compatible))
+            {
+                // 各ディレクトリのファイル名を取得
+                foreach (string dir in FormUtils.GetCompatibleUserAppDataPaths(compatible))
+                {
+                    FormUtils.MergeFiles(files, names, Directory.GetFiles(dir, searchPattern));
+                }
+            }
+
+            // 最後に、exeと同じフォルダを探索
+            FormUtils.MergeFiles(files, names, Directory.GetFiles(Application.StartupPath, searchPattern));
+            return files.ToArray();
+        }
+
+        /// <summary>
+        /// UserAppDataPath
+        /// → StartupPath から、指定した検索パターンに一致するファイル名を返す。
+        /// </summary>
+        /// <param name="searchPattern">ファイル名と対応させる検索文字列。</param>
+        /// <returns>
+        /// 指定した検索パターンに一致するファイル名を格納するString配列。ファイル名には完全パスを含む。
+        /// 同名のファイルが複数のパスに存在する場合、最初に発見したもののみを返す。
+        /// </returns>
+        /// <exception cref="ArgumentException"><para>searchPattern</para>に有効なパターンが含まれていない場合。</exception>
+        /// <exception cref="ArgumentNullException"><para>searchPattern</para>が<c>null</c>の場合。</exception>
+        /// <exception cref="UnauthorizedAccessException">呼び出し元に、必要なアクセス許可がない場合。</exception>
+        public static string[] GetFilesAtUserAppData(string searchPattern)
+        {
+            // オーバーロードメソッドをコール
+            return FormUtils.GetFilesAtUserAppData(searchPattern, null);
+        }
+
+        /// <summary>
+        /// UserAppDataPath → StartupPath から、全ファイル名を返す。
+        /// </summary>
+        /// <returns>
+        /// フォルダ内の全ファイル名を格納するString配列。ファイル名には完全パスを含む。
+        /// 同名のファイルが複数のパスに存在する場合、最初に発見したもののみを返す。
+        /// </returns>
+        /// <exception cref="UnauthorizedAccessException">呼び出し元に、必要なアクセス許可がない場合。</exception>
+        public static string[] GetFilesAtUserAppData()
+        {
+            // オーバーロードメソッドをコール
+            return FormUtils.GetFilesAtUserAppData("*", null);
+        }
+
+        /// <summary>
         /// 文字列中のファイル名に使用できない文字を「_」に置換。
         /// また、&amp;nbsp;由来の半角スペース (u00a0) も普通の半角スペース (u0020) に置換する。
         /// </summary>
@@ -268,5 +323,69 @@ namespace Honememo.Wptscs.Utilities
         }
 
         #endregion
+
+        #region 内部メソッド
+
+        /// <summary>
+        /// 指定されたバージョン以上の旧バージョンのUserAppDataPathを取得する。
+        /// </summary>
+        /// <param name="compatible">探索する旧バージョンの最大。</param>
+        /// <returns>旧バージョンと自バージョンの間のフォルダ名を格納するString配列。フォルダ名には完全パスを含む。</returns>
+        /// <remarks>
+        /// フォルダが異なる同じファイル名のパスが存在する場合、登録しない。
+        /// アセンブリ名が変わっている場合、旧バージョンは探索不可。
+        /// </remarks>
+        private static string[] GetCompatibleUserAppDataPaths(string compatible)
+        {
+            // UserAppDataPath は
+            // <ベースパス>\<CompanyName>\<ProductName>\<ProductVersion>
+            // という構成のはずなので、一つ上のフォルダから自分より前のフォルダを探索
+            List<string> paths = new List<string>();
+            string parent = Path.GetDirectoryName(Application.UserAppDataPath);
+            if (!String.IsNullOrEmpty(parent))
+            {
+                // 現在のバージョンのフォルダ名
+                string now = Path.GetFileName(Application.UserAppDataPath);
+
+                // 同じ階層のフォルダをすべて取得し、降順にソート
+                string[] directories = Directory.GetDirectories(parent);
+                Array.Sort(directories);
+                Array.Reverse(directories);
+
+                // 指定された互換バージョンと自バージョンの間のパスのみを取得
+                foreach (string dir in directories)
+                {
+                    string ver = Path.GetFileName(dir);
+                    if (compatible.CompareTo(ver) <= 0 && ver.CompareTo(now) < 0)
+                    {
+                        paths.Add(dir);
+                    }
+                }
+            }
+
+            return paths.ToArray();
+        }
+
+        /// <summary>
+        /// <see cref="GetFilesAtUserAppData(string, string)"/>用のファイル名リストのマージを行う。
+        /// </summary>
+        /// <param name="mergeto">マージ先ファイル名リスト。</param>
+        /// <param name="names">比較高速化用のパスを含まないファイル名セット。</param>
+        /// <param name="mergefrom">マージ元ファイル名リスト。</param>
+        /// <remarks>フォルダが異なる同じファイル名のパスが存在する場合、登録しない。</remarks>
+        private static void MergeFiles(IList<string> mergeto, IgnoreCaseSet names, IList<string> mergefrom)
+        {
+            foreach (string file in mergefrom)
+            {
+                string name = Path.GetFileName(file);
+                if (!names.Contains(name))
+                {
+                    mergeto.Add(file);
+                    names.Add(name);
+                }
+            }
+        }
+
+        #endregion
     }
 }
similarity index 92%
rename from Wptscs/config.xml
rename to Wptscs/Wikipedia.xml
index 5416258..bd2d3c7 100644 (file)
             <Name>French language</Name>
             <ShortName>French</ShortName>
           </LanguageName>
+          <LanguageName Code="de">
+            <Name>Französische Sprache</Name>
+            <ShortName>Französisch</ShortName>
+          </LanguageName>
           <LanguageName Code="fr">
             <Name>Français</Name>
             <ShortName />
       <Location>http://zh.wikipedia.org</Location>
       <Language Code="zh">
         <Names>
+          <LanguageName Code="de">
+            <Name>Chinesische Sprachen</Name>
+            <ShortName>Chinesische</ShortName>
+          </LanguageName>
           <LanguageName Code="en">
             <Name>Chinese language</Name>
             <ShortName>Chinese</ShortName>
     </MediaWiki>
   </Websites>
   <ItemTables>
+    <ItemTable From="en" To="de">
+      <Item From="Template:Doc" To="Vorlage:Dokumentation" Redirect="Template:Documentation" />
+      <Item From="Template:Documentation" To="Vorlage:Dokumentation" />
+      <Item From="Template:Template doc" To="Vorlage:Dokumentation" Redirect="Template:Documentation" />
+    </ItemTable>
+    <ItemTable From="en" To="fr">
+      <Item From="Template:Doc" To="Modèle:Documentation" Redirect="Template:Documentation" />
+      <Item From="Template:Documentation" To="Modèle:Documentation" />
+      <Item From="Template:Template doc" To="Modèle:Documentation" Redirect="Template:Documentation" />
+    </ItemTable>
     <ItemTable From="en" To="ja">
-      <Item From="Template:Refend" To="Template:Refend" />
-      <Item From="Template:Documentation" To="Template:Documentation" />
+      <Item From="Template:?" To="Template:?" />
       <Item From="Template:Doc" To="Template:Documentation" Redirect="Template:Documentation" />
-      <Item From="Template:Template doc" To="Template:Documentation" Redirect="Template:Documentation" />
+      <Item From="Template:Documentation" To="Template:Documentation" />
+      <Item From="Template:Free" To="Template:Free" />
       <Item From="Template:Multicol-break" To="Template:Multicol-break" />
       <Item From="Template:Multicol-end" To="Template:Multicol-end" />
-      <Item From="Template:Yes-No" To="Template:Yes-No" />
-      <Item From="Template:Won" To="Template:Won" />
       <Item From="Template:Nom" To="Template:Nom" />
-      <Item From="Template:Partial" To="Template:Partial" />
-      <Item From="Template:Free" To="Template:Free" />
       <Item From="Template:Nonfree" To="Template:Nonfree" />
-      <Item From="Template:?" To="Template:?" />
+      <Item From="Template:Partial" To="Template:Partial" />
       <Item From="Template:Pending" To="Template:Pending" />
-    </ItemTable>
-    <ItemTable From="ja" To="en">
       <Item From="Template:Refend" To="Template:Refend" />
-      <Item From="Template:Documentation" To="Template:Documentation" />
+      <Item From="Template:Template doc" To="Template:Documentation" Redirect="Template:Documentation" />
+      <Item From="Template:Won" To="Template:Won" />
+      <Item From="Template:Yes-No" To="Template:Yes-No" />
+    </ItemTable>
+    <ItemTable From="en" To="ru">
+      <Item From="Template:Doc" To="Шаблон:Doc" Redirect="Template:Documentation" />
+      <Item From="Template:Documentation" To="Шаблон:Doc" />
+      <Item From="Template:Template doc" To="Шаблон:Doc" Redirect="Template:Documentation" />
+    </ItemTable>
+    <ItemTable From="en" To="zh">
       <Item From="Template:Doc" To="Template:Documentation" Redirect="Template:Documentation" />
+      <Item From="Template:Documentation" To="Template:Documentation" />
       <Item From="Template:Template doc" To="Template:Documentation" Redirect="Template:Documentation" />
-      <Item From="Template:Multicol-break" To="Template:Multicol-break" />
-      <Item From="Template:Multicol-end" To="Template:Multicol-end" />
-      <Item From="Template:Col-begin-small" To="Template:Col-begin-small" />
-      <Item From="Template:Col-break" To="Template:Col-break" />
-      <Item From="Template:Col-end" To="Template:Col-end" />
+    </ItemTable>
+    <ItemTable From="ja" To="en">
       <Item From="Template:Col-2" To="Template:Col-2" />
       <Item From="Template:Col-3" To="Template:Col-3" />
       <Item From="Template:Col-4" To="Template:Col-4" />
       <Item From="Template:Col-5" To="Template:Col-5" />
+      <Item From="Template:Col-begin-small" To="Template:Col-begin-small" />
+      <Item From="Template:Col-break" To="Template:Col-break" />
+      <Item From="Template:Col-end" To="Template:Col-end" />
       <Item From="Template:Column" To="Template:Column" />
       <Item From="Template:Columns-end" To="Template:Columns-end" />
-      <Item From="Template:Won" To="Template:Won" />
+      <Item From="Template:Doc" To="Template:Documentation" Redirect="Template:Documentation" />
+      <Item From="Template:Documentation" To="Template:Documentation" />
+      <Item From="Template:Multicol-break" To="Template:Multicol-break" />
+      <Item From="Template:Multicol-end" To="Template:Multicol-end" />
       <Item From="Template:Nom" To="Template:Nom" />
       <Item From="Template:Pending" To="Template:Pending" />
+      <Item From="Template:Refend" To="Template:Refend" />
+      <Item From="Template:Template doc" To="Template:Documentation" Redirect="Template:Documentation" />
+      <Item From="Template:Won" To="Template:Won" />
     </ItemTable>
   </ItemTables>
   <HeadingTable>
       <Word Lang="ja">批判</Word>
     </Group>
     <Group>
+      <Word Lang="de">Kultur</Word>
+      <Word Lang="en">Culture</Word>
+      <Word Lang="ja">文化</Word>
+      <Word Lang="zh">文化</Word>
+    </Group>
+    <Group>
       <Word Lang="en">Disadvantages</Word>
       <Word Lang="ja">欠点</Word>
     </Group>
     <Group>
+      <Word Lang="en">Economy</Word>
+      <Word Lang="ja">経済</Word>
+      <Word Lang="zh">經濟</Word>
+    </Group>
+    <Group>
       <Word Lang="en">Example</Word>
       <Word Lang="ja">例</Word>
     </Group>
       <Word Lang="zh">外部連結</Word>
     </Group>
     <Group>
+      <Word Lang="en">Further reading</Word>
+      <Word Lang="ja" Head="True">関連文献</Word>
+      <Word Lang="ja">推薦文献</Word>
+      <Word Lang="ja">推奨文献</Word>
+      <Word Lang="ja">関連資料</Word>
+    </Group>
+    <Group>
       <Word Lang="en">History</Word>
       <Word Lang="es">Historia</Word>
       <Word Lang="fr">Histoire</Word>
       <Word Lang="en">Notes</Word>
       <Word Lang="es">Notas</Word>
       <Word Lang="fr">Notes</Word>
-      <Word Lang="ja">脚注</Word>
+      <Word Lang="ja" Head="True">脚注</Word>
+      <Word Lang="ja">注釈</Word>
+      <Word Lang="ja">注</Word>
       <Word Lang="pl">Przypisy</Word>
       <Word Lang="ru">Примечания</Word>
       <Word Lang="zh">注釋</Word>
     </Group>
     <Group>
       <Word Lang="de">Literatur</Word>
-      <Word Lang="en">References</Word>
+      <Word Lang="en" Head="True">References</Word>
+      <Word Lang="en">Bibliography</Word>
       <Word Lang="es">Referencias</Word>
       <Word Lang="fr">Bibliographie</Word>
       <Word Lang="it">Bibliografia</Word>
-      <Word Lang="ja">参考文献</Word>
+      <Word Lang="ja" Head="True">参考文献</Word>
+      <Word Lang="ja">参照文献</Word>
+      <Word Lang="ja">出典</Word>
       <Word Lang="ko">참고 자료</Word>
       <Word Lang="pl">Bibliografia</Word>
       <Word Lang="ru">Ссылки</Word>
diff --git a/Wptscs/Wiktionary.xml b/Wptscs/Wiktionary.xml
new file mode 100644 (file)
index 0000000..9c648a8
--- /dev/null
@@ -0,0 +1,281 @@
+<?xml version="1.0"?>
+<Config>
+  <Translator>MediaWikiTranslator</Translator>
+  <Websites>
+    <MediaWiki>
+      <Location>http://ja.wiktionary.org</Location>
+      <Language Code="ja">
+        <Names>
+          <LanguageName Code="de">
+            <Name>Japanisch</Name>
+            <ShortName />
+          </LanguageName>
+          <LanguageName Code="en">
+            <Name>Japanese</Name>
+            <ShortName />
+          </LanguageName>
+          <LanguageName Code="ja">
+            <Name>日本語</Name>
+            <ShortName>日</ShortName>
+          </LanguageName>
+          <LanguageName Code="zh">
+            <Name>日語</Name>
+            <ShortName />
+          </LanguageName>
+        </Names>
+        <Bracket>($1)</Bracket>
+      </Language>
+      <MetaApi />
+      <ExportPath>/wiki/%E7%89%B9%E5%88%A5:%E3%83%87%E3%83%BC%E3%82%BF%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97/$1</ExportPath>
+      <Redirect>#転送</Redirect>
+      <TemplateNamespace />
+      <CategoryNamespace />
+      <FileNamespace />
+      <MagicWords />
+      <InterwikiPrefixs />
+      <DocumentationTemplates>
+        <DocumentationTemplate DefaultPage="/doc">テンプレート:Documentation</DocumentationTemplate>
+      </DocumentationTemplates>
+      <LinkInterwikiFormat />
+      <LangFormat>{{lang|$1|$2}}</LangFormat>
+    </MediaWiki>
+    <MediaWiki>
+      <Location>http://en.wiktionary.org</Location>
+      <Language Code="en">
+        <Names>
+          <LanguageName Code="de">
+            <Name>Englisch</Name>
+            <ShortName />
+          </LanguageName>
+          <LanguageName Code="en">
+            <Name>English</Name>
+            <ShortName />
+          </LanguageName>
+          <LanguageName Code="ja">
+            <Name>英語</Name>
+            <ShortName>英</ShortName>
+          </LanguageName>
+          <LanguageName Code="zh">
+            <Name>英語</Name>
+            <ShortName />
+          </LanguageName>
+          <LanguageName Code="fr">
+            <Name>Anglais</Name>
+            <ShortName />
+          </LanguageName>
+          <LanguageName Code="ru">
+            <Name>Английский язык</Name>
+            <ShortName />
+          </LanguageName>
+        </Names>
+        <Bracket />
+      </Language>
+      <MetaApi />
+      <ExportPath />
+      <Redirect />
+      <TemplateNamespace />
+      <CategoryNamespace />
+      <FileNamespace />
+      <MagicWords />
+      <InterwikiPrefixs />
+      <DocumentationTemplates>
+        <DocumentationTemplate DefaultPage="/doc">Template:documentation</DocumentationTemplate>
+      </DocumentationTemplates>
+      <LinkInterwikiFormat />
+      <LangFormat />
+    </MediaWiki>
+    <MediaWiki>
+      <Location>http://de.wiktionary.org</Location>
+      <Language Code="de">
+        <Names>
+          <LanguageName Code="de">
+            <Name>Deutsch</Name>
+            <ShortName />
+          </LanguageName>
+          <LanguageName Code="en">
+            <Name>German</Name>
+            <ShortName />
+          </LanguageName>
+          <LanguageName Code="ja">
+            <Name>ドイツ語</Name>
+            <ShortName>独</ShortName>
+          </LanguageName>
+          <LanguageName Code="zh">
+            <Name>德语</Name>
+            <ShortName />
+          </LanguageName>
+        </Names>
+        <Bracket />
+      </Language>
+      <MetaApi />
+      <ExportPath />
+      <Redirect>#WEITERLEITUNG</Redirect>
+      <TemplateNamespace />
+      <CategoryNamespace />
+      <FileNamespace />
+      <MagicWords />
+      <InterwikiPrefixs />
+      <DocumentationTemplates>
+        <DocumentationTemplate DefaultPage="/Doku">Vorlage:Dokumentation</DocumentationTemplate>
+      </DocumentationTemplates>
+      <LinkInterwikiFormat />
+      <LangFormat>{{lang|$1|$2}}</LangFormat>
+    </MediaWiki>
+    <MediaWiki>
+      <Location>http://zh.wikipedia.org</Location>
+      <Language Code="zh">
+        <Names>
+          <LanguageName Code="de">
+            <Name>Chinesisch</Name>
+            <ShortName />
+          </LanguageName>
+          <LanguageName Code="en">
+            <Name>Chinese</Name>
+            <ShortName />
+          </LanguageName>
+          <LanguageName Code="ja">
+            <Name>中国語</Name>
+            <ShortName>中</ShortName>
+          </LanguageName>
+          <LanguageName Code="zh">
+            <Name>中文</Name>
+            <ShortName />
+          </LanguageName>
+        </Names>
+        <Bracket />
+      </Language>
+      <MetaApi />
+      <ExportPath>/wiki/Special:%E5%AF%BC%E5%87%BA%E9%A1%B5%E9%9D%A2/$1</ExportPath>
+      <Redirect />
+      <TemplateNamespace />
+      <CategoryNamespace />
+      <FileNamespace />
+      <MagicWords />
+      <InterwikiPrefixs />
+      <DocumentationTemplates>
+        <DocumentationTemplate DefaultPage="/doc">Template:documentation</DocumentationTemplate>
+        <DocumentationTemplate DefaultPage="/doc">Template:doc</DocumentationTemplate>
+      </DocumentationTemplates>
+      <LinkInterwikiFormat />
+      <LangFormat>{{語|$1|$2}}</LangFormat>
+    </MediaWiki>
+    <MediaWiki>
+      <Location>http://ru.wiktionary.org</Location>
+      <Language Code="ru">
+        <Names>
+          <LanguageName Code="en">
+            <Name>Russian</Name>
+            <ShortName />
+          </LanguageName>
+          <LanguageName Code="ja">
+            <Name>ロシア語</Name>
+            <ShortName>露</ShortName>
+          </LanguageName>
+          <LanguageName Code="ru">
+            <Name>русский язык</Name>
+            <ShortName>русский</ShortName>
+          </LanguageName>
+          <LanguageName Code="zh">
+            <Name>俄语</Name>
+            <ShortName />
+          </LanguageName>
+        </Names>
+        <Bracket />
+      </Language>
+      <MetaApi />
+      <ExportPath>/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:Export/$1</ExportPath>
+      <Redirect>#перенаправление</Redirect>
+      <TemplateNamespace />
+      <CategoryNamespace />
+      <FileNamespace />
+      <MagicWords />
+      <InterwikiPrefixs />
+      <DocumentationTemplates>
+        <DocumentationTemplate DefaultPage="">Шаблон:doc</DocumentationTemplate>
+      </DocumentationTemplates>
+      <LinkInterwikiFormat />
+      <LangFormat />
+    </MediaWiki>
+    <MediaWiki>
+      <Location>http://fr.wiktionary.org</Location>
+      <Language Code="fr">
+        <Names>
+          <LanguageName Code="de">
+            <Name>Französisch</Name>
+            <ShortName />
+          </LanguageName>
+          <LanguageName Code="en">
+            <Name>French</Name>
+            <ShortName />
+          </LanguageName>
+          <LanguageName Code="fr">
+            <Name>Français</Name>
+            <ShortName />
+          </LanguageName>
+          <LanguageName Code="ja">
+            <Name>フランス語</Name>
+            <ShortName>仏</ShortName>
+          </LanguageName>
+          <LanguageName Code="zh">
+            <Name>法语</Name>
+            <ShortName />
+          </LanguageName>
+        </Names>
+        <Bracket />
+      </Language>
+      <MetaApi />
+      <ExportPath>/wiki/Sp%C3%A9cial:Exporter/$1</ExportPath>
+      <Redirect>#REDIRECTION</Redirect>
+      <TemplateNamespace />
+      <CategoryNamespace />
+      <FileNamespace />
+      <MagicWords />
+      <InterwikiPrefixs />
+      <DocumentationTemplates />
+      <LinkInterwikiFormat />
+      <LangFormat />
+    </MediaWiki>
+  </Websites>
+  <ItemTables>
+    <ItemTable From="en" To="de">
+      <Item From="Template:documentation" To="Vorlage:Dokumentation" />
+    </ItemTable>
+    <ItemTable From="en" To="ja">
+      <Item From="Template:documentation" To="テンプレート:Documentation" />
+    </ItemTable>
+    <ItemTable From="en" To="ru">
+      <Item From="Template:documentation" To="Шаблон:doc" />
+    </ItemTable>
+    <ItemTable From="en" To="zh">
+      <Item From="Template:documentation" To="Template:documentation" />
+    </ItemTable>
+    <ItemTable From="ja" To="en">
+      <Item From="テンプレート:Documentation" To="Template:documentation" />
+    </ItemTable>
+  </ItemTables>
+  <HeadingTable>
+    <Group>
+      <Word Lang="en">English</Word>
+      <Word Lang="ja">英語</Word>
+      <Word Lang="zh">英语</Word>
+    </Group>
+    <Group>
+      <Word Lang="en">Etymology</Word>
+      <Word Lang="ja">語源</Word>
+    </Group>
+    <Group>
+      <Word Lang="en">Japanese</Word>
+      <Word Lang="ja">日本語</Word>
+    </Group>
+    <Group>
+      <Word Lang="en">Pronunciation</Word>
+      <Word Lang="ja">発音</Word>
+      <Word Lang="zh">发音</Word>
+    </Group>
+    <Group>
+      <Word Lang="de">Übersetzungen</Word>
+      <Word Lang="en">Translations</Word>
+      <Word Lang="ja">翻訳</Word>
+    </Group>
+  </HeadingTable>
+</Config>
\ No newline at end of file
index 6c75c86..bde1bf2 100644 (file)
       <DependentUpon>ConfigForm.cs</DependentUpon>
       <ExcludeFromStyleCop>true</ExcludeFromStyleCop>
     </Compile>
-    <Compile Include="InputLanguageCodeDialog.cs">
+    <Compile Include="AddConfigDialog.cs">
       <SubType>Form</SubType>
     </Compile>
-    <Compile Include="InputLanguageCodeDialog.Designer.cs">
-      <DependentUpon>InputLanguageCodeDialog.cs</DependentUpon>
+    <Compile Include="AddConfigDialog.Designer.cs">
+      <DependentUpon>AddConfigDialog.cs</DependentUpon>
+      <ExcludeFromStyleCop>true</ExcludeFromStyleCop>
+    </Compile>
+    <Compile Include="AddLanguageDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="AddLanguageDialog.Designer.cs">
+      <DependentUpon>AddLanguageDialog.cs</DependentUpon>
       <ExcludeFromStyleCop>true</ExcludeFromStyleCop>
     </Compile>
     <Compile Include="Logics\Logger.cs" />
       <SubType>Designer</SubType>
       <DependentUpon>ConfigForm.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="InputLanguageCodeDialog.ja.resx">
-      <DependentUpon>InputLanguageCodeDialog.cs</DependentUpon>
+    <EmbeddedResource Include="AddConfigDialog.ja.resx">
+      <DependentUpon>AddConfigDialog.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="InputLanguageCodeDialog.resx">
-      <DependentUpon>InputLanguageCodeDialog.cs</DependentUpon>
+    <EmbeddedResource Include="AddConfigDialog.resx">
+      <DependentUpon>AddConfigDialog.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="AddLanguageDialog.ja.resx">
+      <DependentUpon>AddLanguageDialog.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="AddLanguageDialog.resx">
+      <DependentUpon>AddLanguageDialog.cs</DependentUpon>
     </EmbeddedResource>
     <EmbeddedResource Include="MainForm.ja.resx">
       <DependentUpon>MainForm.cs</DependentUpon>
     <Content Include="App.ico" />
     <Content Include="License.txt" />
     <Content Include="Readme.txt" />
-    <Content Include="config.xml">
+    <Content Include="Wikipedia.xml">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
       <SubType>Designer</SubType>
     </Content>
+    <Content Include="Wiktionary.xml">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\HmLib\HmLib.csproj">
index d7ca961..48ff581 100644 (file)
@@ -10,9 +10,6 @@
   </configSections>
   <applicationSettings>
     <Honememo.Wptscs.Properties.Settings>
-      <setting name="ConfigurationFile" serializeAs="String">
-        <value>config.xml</value>
-      </setting>
       <setting name="DefaultUserAgent" serializeAs="String">
         <value>WikipediaTranslationSupportTool/{0}.{1:D2}</value>
       </setting>
         <value>6</value>
       </setting>
       <setting name="ConfigurationCompatible" serializeAs="String">
-        <value>1.11.0.0</value>
+        <value>1.20.0.0</value>
       </setting>
       <setting name="MediaWikiMetaApi" serializeAs="String">
         <value>/w/api.php?format=xml&amp;action=query&amp;meta=siteinfo&amp;siprop=namespaces|namespacealiases|interwikimap</value>
           </ArrayOfString>
         </value>
       </setting>
+      <setting name="ConfigurationExtension" serializeAs="String">
+        <value>.xml</value>
+      </setting>
     </Honememo.Wptscs.Properties.Settings>
   </applicationSettings>
   <userSettings>
       <setting name="LastSelectedLanguage" serializeAs="String">
         <value />
       </setting>
+      <setting name="LastSelectedConfiguration" serializeAs="String">
+        <value>Wikipedia</value>
+      </setting>
     </Honememo.Wptscs.Properties.Settings>
   </userSettings>
 <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup></configuration>
index d937097..fe90c23 100644 (file)
@@ -90,9 +90,9 @@ namespace Honememo.Wptscs.Logics
 
             // 見出しの変換パターンを設定
             translator.HeadingTable = new TranslationTable();
-            IDictionary<string, string> dic = new Dictionary<string, string>();
-            dic["en"] = "External links";
-            dic["ja"] = "外部リンク";
+            IDictionary<string, string[]> dic = new Dictionary<string, string[]>();
+            dic["en"] = new string[] { "External links" };
+            dic["ja"] = new string[] { "外部リンク" };
             translator.HeadingTable.Add(dic);
             translator.HeadingTable.From = "ja";
             translator.HeadingTable.To = "en";
@@ -321,9 +321,9 @@ namespace Honememo.Wptscs.Logics
 
             // 見出しの変換パターンを設定
             translator.HeadingTable = new TranslationTable();
-            IDictionary<string, string> dic = new Dictionary<string, string>();
-            dic["en"] = "External links";
-            dic["ja"] = "外部リンク";
+            IDictionary<string, string[]> dic = new Dictionary<string, string[]>();
+            dic["en"] = new string[] { "External links" };
+            dic["ja"] = new string[] { "外部リンク" };
             translator.HeadingTable.Add(dic);
             translator.HeadingTable.From = "en";
             translator.HeadingTable.To = "ja";
@@ -475,9 +475,9 @@ namespace Honememo.Wptscs.Logics
 
             // 見出しの変換パターンを設定
             translator.HeadingTable = new TranslationTable();
-            IDictionary<string, string> dic = new Dictionary<string, string>();
-            dic["en"] = "External links";
-            dic["ja"] = "外部リンク";
+            IDictionary<string, string[]> dic = new Dictionary<string, string[]>();
+            dic["en"] = new string[] { "External links" };
+            dic["ja"] = new string[] { "外部リンク" };
             translator.HeadingTable.Add(dic);
             translator.HeadingTable.From = "en";
             translator.HeadingTable.To = "ja";
@@ -517,7 +517,7 @@ namespace Honememo.Wptscs.Logics
 
             // 見出しの変換パターンを設定
             translator.HeadingTable = new TranslationTable();
-            IDictionary<string, string> dic = new Dictionary<string, string>();
+            IDictionary<string, string[]> dic = new Dictionary<string, string[]>();
             translator.HeadingTable.Add(dic);
             translator.HeadingTable.From = "ja";
             translator.HeadingTable.To = "en";
@@ -535,8 +535,8 @@ namespace Honememo.Wptscs.Logics
             Assert.AreEqual("=== [[Space tourism|宇宙旅行]]{{En icon}} ===", translator.ReplaceHeading(heading, parent).ToString());
 
             // 対訳表に登録されている見出しの場合、入れ子は処理されない
-            dic["ja"] = "[[宇宙旅行]]{{ref-en}}";
-            dic["en"] = "[[弾道飛行]]{{ref-en}}";
+            dic["ja"] = new string[] { "[[宇宙旅行]]{{ref-en}}" };
+            dic["en"] = new string[] { "[[弾道飛行]]{{ref-en}}" };
             heading.Clear();
             heading.Add(new TextElement(" "));
             heading.Add(new MediaWikiLink("宇宙旅行"));
@@ -596,9 +596,9 @@ namespace Honememo.Wptscs.Logics
 
             // 見出しの変換パターンを設定
             translator.HeadingTable = new TranslationTable();
-            IDictionary<string, string> dic = new Dictionary<string, string>();
-            dic["en"] = "See also";
-            dic["ja"] = "関連項目";
+            IDictionary<string, string[]> dic = new Dictionary<string, string[]>();
+            dic["en"] = new string[] { "See also" };
+            dic["ja"] = new string[] { "関連項目" };
             translator.HeadingTable.Add(dic);
             translator.HeadingTable.From = "en";
             translator.HeadingTable.To = "ja";
@@ -632,9 +632,9 @@ namespace Honememo.Wptscs.Logics
 
             // 見出しの変換パターンを設定
             translator.HeadingTable = new TranslationTable();
-            IDictionary<string, string> dic = new Dictionary<string, string>();
-            dic["en"] = "See also";
-            dic["ja"] = "関連項目";
+            IDictionary<string, string[]> dic = new Dictionary<string, string[]>();
+            dic["en"] = new string[] { "See also" };
+            dic["ja"] = new string[] { "関連項目" };
             translator.HeadingTable.Add(dic);
             translator.HeadingTable.From = "en";
             translator.HeadingTable.To = "ja";
@@ -689,9 +689,9 @@ namespace Honememo.Wptscs.Logics
 
             // 見出しの変換パターンを設定
             translator.HeadingTable = new TranslationTable();
-            IDictionary<string, string> dic = new Dictionary<string, string>();
-            dic["en"] = "See also";
-            dic["ja"] = "関連項目";
+            IDictionary<string, string[]> dic = new Dictionary<string, string[]>();
+            dic["en"] = new string[] { "See also" };
+            dic["ja"] = new string[] { "関連項目" };
             translator.HeadingTable.Add(dic);
             translator.HeadingTable.From = "en";
             translator.HeadingTable.To = "ja";
@@ -728,17 +728,17 @@ namespace Honememo.Wptscs.Logics
 
             // 見出しの変換パターンを設定
             translator.HeadingTable = new TranslationTable();
-            IDictionary<string, string> dic = new Dictionary<string, string>();
-            dic["en"] = "See Also";
-            dic["ja"] = "関連項目";
+            IDictionary<string, string[]> dic = new Dictionary<string, string[]>();
+            dic["en"] = new string[] { "See Also" };
+            dic["ja"] = new string[] { "関連項目" };
             translator.HeadingTable.Add(dic);
-            dic = new Dictionary<string, string>();
-            dic["en"] = "External links";
-            dic["ja"] = "外部リンク";
+            dic = new Dictionary<string, string[]>();
+            dic["en"] = new string[] { "External links" };
+            dic["ja"] = new string[] { "外部リンク" };
             translator.HeadingTable.Add(dic);
-            dic = new Dictionary<string, string>();
-            dic["en"] = "Notes";
-            dic["ja"] = "脚注";
+            dic = new Dictionary<string, string[]>();
+            dic["en"] = new string[] { "Notes" };
+            dic["ja"] = new string[] { "脚注" };
             translator.HeadingTable.Add(dic);
             translator.HeadingTable.From = "ja";
             translator.HeadingTable.To = "en";
index becb709..6231088 100644 (file)
@@ -37,6 +37,120 @@ namespace Honememo.Wptscs.Models
 
         #endregion
 
+        #region プロパティテストケース
+
+        /// <summary>
+        /// Fileプロパティテストケース。
+        /// </summary>
+        [Test]
+        public void TestFile()
+        {
+            // 初期状態ではnull、設定すれば設定した値が返る
+            Config config = new Config();
+            Assert.IsNull(config.File);
+            config.File = "text.xml";
+            Assert.AreEqual("text.xml", config.File);
+            config.File = null;
+            Assert.IsNull(config.File);
+        }
+
+        /// <summary>
+        /// Translatorプロパティテストケース。
+        /// </summary>
+        [Test]
+        public void TestTranslator()
+        {
+            // 初期状態ではnull、設定すれば設定した値が返る
+            Config config = new Config();
+            Assert.IsNull(config.Translator);
+            config.Translator = typeof(Translator);
+            Assert.AreEqual(typeof(Translator), config.Translator);
+            config.Translator = null;
+            Assert.IsNull(config.Translator);
+        }
+
+        /// <summary>
+        /// Websitesプロパティテストケース(正常系)。
+        /// </summary>
+        [Test]
+        public void TestWebsites()
+        {
+            // 初期状態では空のリスト、設定すれば設定した値が返る
+            Config config = new Config();
+            Assert.AreEqual(0, config.Websites.Count);
+            config.Websites.Add(new MediaWiki(new Language("en")));
+            Assert.AreEqual(1, config.Websites.Count);
+            IList<Website> list = new Website[] { new MediaWiki(new Language("ja")) };
+            config.Websites = list;
+            Assert.AreSame(list, config.Websites);
+        }
+
+        /// <summary>
+        /// Websitesプロパティテストケース(null)。
+        /// </summary>
+        [Test]
+        [ExpectedException(typeof(ArgumentNullException))]
+        public void TestWebsitesNull()
+        {
+            new Config() { Websites = null };
+        }
+
+        /// <summary>
+        /// ItemTablesプロパティテストケース(正常系)。
+        /// </summary>
+        [Test]
+        public void TestItemTables()
+        {
+            // 初期状態では空のリスト、設定すれば設定した値が返る
+            Config config = new Config();
+            Assert.AreEqual(0, config.ItemTables.Count);
+            config.ItemTables.Add(new TranslationDictionary("en", "ja"));
+            Assert.AreEqual(1, config.ItemTables.Count);
+            IList<TranslationDictionary> list = new TranslationDictionary[] { new TranslationDictionary("ja", "en") };
+            config.ItemTables = list;
+            Assert.AreSame(list, config.ItemTables);
+        }
+
+        /// <summary>
+        /// ItemTablesプロパティテストケース(null)。
+        /// </summary>
+        [Test]
+        [ExpectedException(typeof(ArgumentNullException))]
+        public void TestItemTablesNull()
+        {
+            new Config() { ItemTables = null };
+        }
+
+        /// <summary>
+        /// HeadingTableプロパティテストケース(正常系)。
+        /// </summary>
+        [Test]
+        public void TestHeadingTable()
+        {
+            // 初期状態では空のオブジェクト、設定すれば設定した値が返る
+            Config config = new Config();
+            Assert.AreEqual(0, config.HeadingTable.Count);
+            config.HeadingTable.Add(new Dictionary<string, string[]>());
+            Assert.AreEqual(1, config.HeadingTable.Count);
+            TranslationTable table = new TranslationTable();
+            config.HeadingTable = table;
+            Assert.AreSame(table, config.HeadingTable);
+        }
+
+        /// <summary>
+        /// HeadingTableプロパティテストケース(null)。
+        /// </summary>
+        [Test]
+        [ExpectedException(typeof(ArgumentNullException))]
+        public void TestHeadingTableNull()
+        {
+            new Config() { HeadingTable = null };
+        }
+
+        #endregion
+
+        //// TODO: メソッドのテストケースが未実装
+
         #region XMLシリアライズ用メソッドケース
 
         /// <summary>
@@ -72,14 +186,14 @@ namespace Honememo.Wptscs.Models
         public void TestWriteXml()
         {
             // TODO: シリアライズでも細かい動作の差異があるので、もう少しテストケースが必要
-            Config config = new DummyConfig();
+            Config config = new Config();
             config.Translator = typeof(MediaWikiTranslator);
             TranslationDictionary dic = new TranslationDictionary("en", "ja");
             dic.Add("dicKey", new TranslationDictionary.Item { Word = "dicTest" });
             config.ItemTables.Add(dic);
             config.HeadingTable = new TranslationTable();
-            IDictionary<string, string> record = new SortedDictionary<string, string>();
-            record["recordKey"] = "recordValue";
+            IDictionary<string, string[]> record = new SortedDictionary<string, string[]>();
+            record["recordKey"] = new string[] { "recordValue" };
             config.HeadingTable.Add(record);
 
             // TODO: 全然未実装
@@ -124,17 +238,5 @@ namespace Honememo.Wptscs.Models
         }
 
         #endregion
-
-        #region モッククラス
-
-        /// <summary>
-        /// Configテスト用のモッククラスです。
-        /// </summary>
-        /// <remarks>そのままではnewすることができないため。</remarks>
-        public class DummyConfig : Config
-        {
-        }
-
-        #endregion
     }
 }
index ccc7ed8..330ad5c 100644 (file)
@@ -13,6 +13,7 @@ namespace Honememo.Wptscs.Models
     using System;
     using System.Collections.Generic;
     using System.IO;
+    using System.Linq;
     using System.Text;
     using System.Xml;
     using System.Xml.Serialization;
@@ -33,14 +34,15 @@ namespace Honememo.Wptscs.Models
         public void TestGetWord()
         {
             TranslationTable table = new TranslationTable();
-            IDictionary<string, string> record = new Dictionary<string, string>();
-            record["en"] = "See also";
-            record["ja"] = "関連項目";
+            IDictionary<string, string[]> record = new Dictionary<string, string[]>();
+            record["en"] = new string[] { "See also", "See" };
+            record["ja"] = new string[] { "関連項目" };
             table.Add(record);
             table.From = "en";
             table.To = "ja";
             Assert.AreEqual("関連項目", table.GetWord("See also"));
             Assert.AreEqual("関連項目", table.GetWord("see also"));
+            Assert.AreEqual("関連項目", table.GetWord("see"));
             Assert.IsNull(table.GetWord("test"));
             Assert.IsNull(table.GetWord(String.Empty));
             Assert.AreEqual("See also", table.GetWord("ja", "en", "関連項目"));
@@ -106,18 +108,19 @@ namespace Honememo.Wptscs.Models
             TranslationTable table;
             using (XmlReader r = XmlReader.Create(
                 new StringReader(
-                    "<TranslationTable><Group><Word Lang=\"en\">See Also</Word><Word Lang=\"ja\">関連項目</Word></Group>"
+                    "<TranslationTable><Group><Word Lang=\"en\">See</Word><Word Lang=\"en\" Head=\"true\">See Also</Word><Word Lang=\"ja\">関連項目</Word></Group>"
                     + "<Group><Word Lang=\"en\">History</Word><Word Lang=\"fr\">Histoire</Word></Group></TranslationTable>")))
             {
                 table = new XmlSerializer(typeof(TranslationTable)).Deserialize(r) as TranslationTable;
             }
 
             Assert.AreEqual(2, table.Count);
-            Assert.AreEqual("See Also", table[0]["en"]);
-            Assert.AreEqual("関連項目", table[0]["ja"]);
+            Assert.AreEqual("See Also", table[0]["en"].FirstOrDefault());
+            Assert.AreEqual("See", table[0]["en"].ElementAtOrDefault(1));
+            Assert.AreEqual("関連項目", table[0]["ja"].FirstOrDefault());
             Assert.IsFalse(table[0].ContainsKey("fr"));
-            Assert.AreEqual("History", table[1]["en"]);
-            Assert.AreEqual("Histoire", table[1]["fr"]);
+            Assert.AreEqual("History", table[1]["en"].FirstOrDefault());
+            Assert.AreEqual("Histoire", table[1]["fr"].FirstOrDefault());
             Assert.IsFalse(table[1].ContainsKey("ja"));
         }
 
@@ -139,13 +142,13 @@ namespace Honememo.Wptscs.Models
 
             Assert.AreEqual("<TranslationTable />", b.ToString());
 
-            IDictionary<string, string> record = new SortedDictionary<string, string>();
-            record["en"] = "See Also";
-            record["ja"] = "関連項目";
+            IDictionary<string, string[]> record = new SortedDictionary<string, string[]>();
+            record["en"] = new string[] { "See Also", "See" };
+            record["ja"] = new string[] { "関連項目" };
             table.Add(record);
-            record = new SortedDictionary<string, string>();
-            record["en"] = "History";
-            record["fr"] = "Histoire";
+            record = new SortedDictionary<string, string[]>();
+            record["en"] = new string[] { "History" };
+            record["fr"] = new string[] { "Histoire" };
             table.Add(record);
 
             StringBuilder b2 = new StringBuilder();
@@ -155,7 +158,7 @@ namespace Honememo.Wptscs.Models
             }
 
             Assert.AreEqual(
-                "<TranslationTable><Group><Word Lang=\"en\">See Also</Word><Word Lang=\"ja\">関連項目</Word></Group>"
+                "<TranslationTable><Group><Word Lang=\"en\" Head=\"True\">See Also</Word><Word Lang=\"en\">See</Word><Word Lang=\"ja\">関連項目</Word></Group>"
                 + "<Group><Word Lang=\"en\">History</Word><Word Lang=\"fr\">Histoire</Word></Group></TranslationTable>",
                 b2.ToString());
         }
index f7b6df3..0621381 100644 (file)
@@ -42,4 +42,4 @@ using System.Runtime.InteropServices;
 // すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を 
 // 既定値にすることができます:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.11.*")]
+[assembly: AssemblyVersion("1.20.*")]
index d4a1744..4c9b435 100644 (file)
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
   </ItemGroup>
+  <Import Project="$(ProgramFiles)\MSBuild\Microsoft\StyleCop\v4.4\Microsoft.StyleCop.Targets" />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.