OSDN Git Service

#35906 CResource.csの登録漏れ。
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Sun, 17 Jul 2016 12:56:25 +0000 (12:56 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Sun, 17 Jul 2016 12:56:25 +0000 (12:56 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@998 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXManiaプロジェクト/コード/全体/CResources.cs [new file with mode: 0644]

diff --git a/DTXManiaプロジェクト/コード/全体/CResources.cs b/DTXManiaプロジェクト/コード/全体/CResources.cs
new file mode 100644 (file)
index 0000000..52b2bd5
--- /dev/null
@@ -0,0 +1,279 @@
+using System;\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+using System.Text;\r
+using System.Threading.Tasks;\r
+using System.Resources;\r
+using System.Diagnostics;\r
+\r
+\r
+namespace DTXMania\r
+{\r
+       public class CResources\r
+       {\r
+               private string csvFileName = "resources.csv";\r
+\r
+               private string[] csvHeader = null;\r
+               private Dictionary<string, string> dict = new Dictionary<string, string>();\r
+\r
+               private string[] langcodelist = null, langlist = null;\r
+\r
+               public string strLanguageCode;\r
+\r
+\r
+               /// <summary>\r
+               /// 表示に使用する言語情報を取得/設定する\r
+               /// 例: Language("ja-JP") など。\r
+               /// </summary>\r
+               public string Language\r
+               {\r
+                       get {\r
+                               if ( strLanguageCode == "" || strLanguageCode == null )\r
+                               {\r
+                                       string s = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;\r
+                                       if ( s == "" || !csvHeader.Contains( s+".title" ) )\r
+                                       {\r
+                                               strLanguageCode = "default";\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               strLanguageCode = s;\r
+                                       }\r
+\r
+                               }\r
+Debug.WriteLine( "Get: strLanguageCode: " + strLanguageCode );\r
+                               return strLanguageCode;\r
+                       }\r
+                       set\r
+                       {\r
+                               if ( value == "" || value == null )\r
+                               {\r
+                                       string s = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;\r
+                                       if ( s == "" || !csvHeader.Contains( s + ".title" ) )\r
+                                       {\r
+                                               strLanguageCode = "default";\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               strLanguageCode = s;\r
+                                       }\r
+                               }\r
+                               else\r
+                               {\r
+                                       if ( !csvHeader.Contains( value + ".title" ) )\r
+                                       {\r
+                                               strLanguageCode = "default";\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               strLanguageCode = value;\r
+                                       }\r
+                               }\r
+                               if ( CDTXMania.Instance.ConfigIni != null )\r
+                               {\r
+                                       CDTXMania.Instance.ConfigIni.strLanguage.Value = strLanguageCode;\r
+Debug.WriteLine( "strLang.Value=" + CDTXMania.Instance.ConfigIni.strLanguage.Value );\r
+                               }\r
+Debug.WriteLine( "Set: strLanguageCode: " + strLanguageCode );\r
+                       }\r
+               }\r
+\r
+               /// <summary>\r
+               /// 使用可能な\r
+               /// </summary>\r
+               public string[] LanguageList\r
+               {\r
+                       get\r
+                       {\r
+                               return langlist;\r
+                       }\r
+               }\r
+               public string[] LanguageCodeList\r
+               {\r
+                       get\r
+                       {\r
+                               return langcodelist;\r
+                       }\r
+               }\r
+               public int LanguageCodeIndex\r
+               {\r
+                       get\r
+                       {\r
+                               int index = Array.IndexOf( langcodelist, strLanguageCode );\r
+                               if ( index < 0 ) index = 0;\r
+                               return index;\r
+                       }\r
+               }\r
+               \r
+               public string Label( string key )\r
+               {\r
+                       return Resource( key, "title", strLanguageCode );\r
+               }\r
+               public string Label( string key, string strLang )\r
+               {\r
+                       return Resource( key, "title", strLang );\r
+               }\r
+               public string Explanation( string key )\r
+               {\r
+                       return Resource( key, "value", strLanguageCode );\r
+               }\r
+               public string Items( string key )\r
+               {\r
+                       return Resource( key, "items", strLanguageCode );\r
+               }\r
+\r
+               public string Resource(string key, string strType)\r
+               {\r
+                       return Resource( key, strType, strLanguageCode );\r
+               }\r
+\r
+               public string Resource( string key, string strType, string strLangCode )\r
+               {\r
+                       if (strType != "" && strType != "title" && strType != "value" && strType != "items")\r
+                       {\r
+                               throw new ArgumentOutOfRangeException( "CResources.Resource: 引数が正しくありません。(" + strType + ")" );\r
+                       }\r
+                       string key_ = key + "." + strLangCode + "." + strType;\r
+                       string value = "";\r
+\r
+//Debug.WriteLine( "strLangCode=" + strLangCode );\r
+//Debug.WriteLine( "key_=" + key_ );\r
+                       if ( !dict.ContainsKey( key_ ) )                                // keyかvalueが存在しない場合\r
+                       {\r
+                               value = "";\r
+                       }\r
+                       else\r
+                       {\r
+                               value = dict[ key_ ];\r
+//Debug.WriteLine( "value =" + value );\r
+\r
+                               if (value == "")        // もし未定義なら、defaultの文字列にfallbackする\r
+                               {\r
+                                       if ( strLangCode == "default" )\r
+                                       {\r
+                                               value = "";\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               return Resource( key, strType, "default" );\r
+                                       }\r
+                               }\r
+                       }\r
+                       return value;\r
+               }\r
+\r
+               public CResources()\r
+               {\r
+//            this.csvPath = excelPath;\r
+        }\r
\r
+        // language="ja-JP"とか。\r
+        public void LoadResources(string language = "")\r
+        {\r
+                       // 参考: http://dobon.net/vb/dotnet/file/readcsvfile.html\r
+\r
+                       Microsoft.VisualBasic.FileIO.TextFieldParser tfp =\r
+                               new Microsoft.VisualBasic.FileIO.TextFieldParser(\r
+                                       csvFileName,\r
+                                       System.Text.Encoding.Unicode\r
+                       );\r
+                       //フィールドが文字で区切られているとする\r
+                       //デフォルトでDelimitedなので、必要なし\r
+                       tfp.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;\r
+                       //区切り文字を,とする\r
+                       tfp.Delimiters = new string[] { "," };\r
+                       //フィールドを"で囲み、改行文字、区切り文字を含めることができるか\r
+                       //デフォルトでtrueなので、必要なし\r
+                       tfp.HasFieldsEnclosedInQuotes = true;\r
+                       //フィールドの前後からスペースを削除する\r
+                       //デフォルトでtrueなので、必要なし\r
+                       tfp.TrimWhiteSpace = true;\r
+\r
+                       bool bAlreadyReadFirstLine = false;\r
+                       while ( !tfp.EndOfData )\r
+                       {\r
+                               string[] fields = tfp.ReadFields();\r
+\r
+                               if ( !bAlreadyReadFirstLine )\r
+                               {\r
+                                       //csvHeader.Add( fields );\r
+                                       csvHeader = fields;\r
+                                       bAlreadyReadFirstLine = true;\r
+                               }\r
+                               else\r
+                               {\r
+                                       string strItemName = fields[ 0 ];\r
+                                       if (strItemName == "" || strItemName.Contains("/") )\r
+                                       {\r
+                                               continue;\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               for ( int i = 0; i < fields.GetLength( 0 ); i++ )\r
+                                               {\r
+                                                       string key = strItemName + "." + csvHeader[ i ];\r
+                                                       string value = fields[ i ];\r
+\r
+                                                       value = value.Replace( "\r", "" ).Replace( "\n", "" );          // 文字コードとしての改行は削除して、\r
+                                                       value = value.Replace( "\\n", Environment.NewLine );            // "\n" と書かれたところを改行文字に置換する\r
+                                                       dict[ key ] = value;\r
+                                               }\r
+                                       }\r
+\r
+                               }\r
+                       }\r
+\r
+                       //後始末\r
+                       tfp.Close();\r
+\r
+                       //foreach ( string key in dict.Keys )\r
+                       //{\r
+                       //      Console.WriteLine( "{0} : {1}", key, dict[ key ] );\r
+                       //}\r
+\r
+\r
+                       #region [ langcodelist, langlist 生成 ]\r
+                       List<string> lstLangCodeList = new List<string>();\r
+                       List<string> lstLangList = new List<string>();\r
+\r
+                       for ( int i = 1; i < csvHeader.Length; i++ )            // 0から開始、ではない (0は名称定義)\r
+                       {\r
+                               string s = csvHeader[ i ].Replace( ".title", "" ).Replace( ".value", "" ).Replace( ".items", "" );\r
+                               if ( !lstLangCodeList.Contains( s ) )\r
+                               {\r
+                                       lstLangCodeList.Add( s );\r
+                                       lstLangList.Add( Label("strCfgLanguageName", s ) );\r
+                               }\r
+                       }\r
+                       langcodelist = lstLangCodeList.ToArray();\r
+                       langlist = lstLangList.ToArray();\r
+                       #endregion\r
+\r
+\r
+                       Language = language;\r
+        }\r
+\r
+       \r
+       \r
+               #region [ Dispose-Finallizeパターン実装 ]\r
+               //-----------------\r
+               public void Dispose()\r
+               {\r
+                       this.Dispose( true );\r
+                       GC.SuppressFinalize( this );\r
+               }\r
+               protected void Dispose( bool bManagedDispose )\r
+               {\r
+                       dict = null;\r
+                       csvHeader = null;\r
+                       langcodelist = null;\r
+                       langlist = null;\r
+               }\r
+               ~CResources()\r
+               {\r
+                       this.Dispose( false );\r
+               }\r
+               //-----------------\r
+               #endregion\r
+       }\r
+}\r