回答編集履歴
2
コードの明らかな間違いを修正
answer
CHANGED
@@ -22,10 +22,10 @@
|
|
22
22
|
|
23
23
|
例えば
|
24
24
|
```C#
|
25
|
-
public JSonDataFileReader {
|
25
|
+
public class JSonDataFileReader {
|
26
26
|
public IEnumerable<Entry> Load(string filename) {
|
27
27
|
var data = File.ReadAllText(filename);
|
28
|
-
|
28
|
+
var result = new List<Entry>();
|
29
29
|
// ループ: dataの中身を正規表現を使って1画面分ずつマッチさせる
|
30
30
|
var viewname = // 画面名に該当する要素を正規表現で取り出す
|
31
31
|
// ループ: マッチさせた1画面分の文字列から、各要素ごとにマッチさせる
|
1
変更
answer
CHANGED
@@ -1,30 +1,44 @@
|
|
1
|
-
> どのようにすれば、
|
2
|
-
> 画面┳キー━文言
|
3
|
-
> ┳キー━文言
|
4
|
-
> ┗キー━文言
|
5
|
-
|
1
|
+
質問欄のやりとりを見て回答を変更します。
|
6
2
|
|
3
|
+
最終的にやりたいのは
|
4
|
+
1. JSON形式のテキストファイルを読み込む
|
7
|
-
|
5
|
+
2. 読み込んだデータは「画面名-項目名-現地語のテキスト」の形式として編集できるようにする
|
6
|
+
3. JSON形式のテキストファイルとして書き出す
|
8
7
|
|
8
|
+
という話みたいなので、2の部分は
|
9
|
+
```C#
|
10
|
+
public class Entry {
|
11
|
+
pubilc string ViewName { get; set;}
|
12
|
+
pubilc string ItemName { get; set;}
|
13
|
+
pubilc string Text { get; set;}
|
14
|
+
}
|
15
|
+
```
|
9
|
-
|
16
|
+
みたいなやつを`List<Entry>`みたいにリストに突っ込んで扱えれば十分だと思います。
|
10
|
-
2.項目名は増える可能性がある(つまり1のクラス・構造体のメンバが増える)
|
11
|
-
3.画面単位で key-value のリスト(つまりDictionary)で読み込みたい(この部分は2の変更があっても修正せずに済むようにしたい)
|
12
17
|
|
13
|
-
と
|
18
|
+
問題は1と3ですが、これを無理やりJSONをデシリアライズ・シリアライズでやろうとしているあたりが苦労しているポイントだと思います。
|
14
19
|
|
20
|
+
Zuishinさんがコメントされていたとおり、JSONはただのテキストファイルです。
|
15
|
-
|
21
|
+
これを読み込んで、上記のクラスのインスタンスが作れたり、書き出せたりすれば十分なはずです。
|
16
22
|
|
23
|
+
例えば
|
24
|
+
```C#
|
25
|
+
public JSonDataFileReader {
|
26
|
+
public IEnumerable<Entry> Load(string filename) {
|
27
|
+
var data = File.ReadAllText(filename);
|
28
|
+
var result = new List<Entry>();
|
29
|
+
// ループ: dataの中身を正規表現を使って1画面分ずつマッチさせる
|
30
|
+
var viewname = // 画面名に該当する要素を正規表現で取り出す
|
31
|
+
// ループ: マッチさせた1画面分の文字列から、各要素ごとにマッチさせる
|
32
|
+
var obj = new Entry {
|
33
|
+
ViewName = viewName,
|
34
|
+
ItemName = // 項目名に該当する要素を正規表現で取り出す
|
35
|
+
Text = // テキストに該当する要素を正規表現で取り出す
|
36
|
+
};
|
37
|
+
result.Add(obj);
|
17
38
|
|
18
|
-
|
39
|
+
return result;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
```
|
19
43
|
|
20
|
-
> VS2008、Frameworkは3.5、文言はjson形式で管理する方式で決まっています。
|
21
|
-
|
22
|
-
|
44
|
+
みたいな感じで読めますよね。(書き出す方は省略)
|
23
|
-
|
24
|
-
VB.NETの経験があればご存知だと思いますので、なぜそう決まったのかわからないのですが、.NETで多言語対応する時の標準的なやり方はResourceファイルを使う方法なので、そこで苦労するぐらいなら最初から key-value の形でkeyを「画面名_項目名」とかにしてResourceファイルにゴリゴリ書いた方が良いような気がします。
|
25
|
-
|
26
|
-
コメントもつけられるから、キー名だけで分かりづらくても意図は伝えられるので、管理上もメリットがありますし。(今の形式のJSONだと開発者=翻訳者じゃないと辛そう)
|
27
|
-
|
28
|
-
Visual Studioのリソースエディタ画面の内容をそのままExcelやテキストエディタ等に相互にコピペできますので、開発者≠翻訳者になった場合に、作業をお願いする時にも都合が良い気がします。
|
29
|
-
|
30
|
-
JSONがすでに作成済みだったり、何らかのシステムで吐き出されるものだとしても、テキストエディタ使って文字列置換すれば表形式に変更するのは秒殺でできるので、可能ならちょっと思い直した方が良い気がします。
|