←
▼
▲
/SyncFilesT/ModuleFiles
(1つ)
モジュールを構成するファイルの集合
@module_name
子ノードに指定するファイルが所属するモジュールの名前。
/SyncFilesT/ModuleFiles/TargetFiles
(1つ、または、複数)
ターゲット。 モジュールの子ノード
@index
@target_name
@path
ターゲットの名前。 表の列のタイトルに表示されます。
ファイルが入ったフォルダーのパス。 相対パスの基準は、設定ファイルが
入っているフォルダー。
このターゲットに対応する description 属性の値の中の要素番号。 先頭は 1。
複数のターゲットで同じ要素番号を共有することも可能です。
/SyncFilesT/ModuleFiles/File
(1つ、または、複数)
ファイル。 モジュールの子ノード
@kind
@description
@name
@line_num
Kind値。 ファイルの種類を表す番号。 ターゲットが異なるときにファイル名が
異なるときに、同じ番号を割り当て、比較対象にします。
Description値。 同じ内容であるべきファイルを表す文字の並び。CSV形式。
空白文字は、ファイルが存在しないことを表します。
ファイル名。
FA File Name 形式
設定ファイル内の行番号。 自動的に更新されます。
/SyncFilesT/ModuleFiles/CommittedFile
(0、1つ、または、複数)
コミットしたファイルのリビジョン
@hash
ファイルの内容のハッシュ値。 MD5形式。
@revision
リビジョン。 形式は、モジュール名\Kind値\リビジョン番号\Description値。
例: ModuleX\1\01\A
/SyncFilesT/HashList
(0、または、1つ)
コミットしたファイルの場所
@path
のパス
1つのモジュールに対して、複数の ModuleFiles タグを指定できます。
。 同じ名前のファイルが1つしかないときは、
フォルダー名を指定する必要はありません。
詳細
参考
←
▼
▲
同じ、または、ほぼ同じ内容に保つことが求められる2つのファイルがあるとき、その片方または両方
の内容がそれぞれで更新されても、改めて同じ、または、同様の差分があるように戻す(同期する)
ことを支援します。 前回 同期したときの内容のとの差分も確認できるので、差分が追加すべき内容
なのか、削除すべき内容なのかを確認することもできます。
'------------------------------------------------------------[FileInScript.xml]
'<SyncFilesX>
'<SynchronizingSet
' base_name="ModuleX : 環境A"
' work_name="ModuleX : 環境B"
' base="..\Project\Base"
' path="..\Project\Work"
' synced_base="_synced\1_Base"
' synced_path="_synced\1_Work">
'
'<File path="Image.bmp"/>
'<File path="SourceCpp.cpp" base="Source.c"/>
'
'<Folder same="yes" path="SubFolder"/>
'<File same="no" path="SubFolder\porting.c"/>
'
'<Folder same="clone" path="CloneFolder"/>
'
'</SynchronizingSet>
'</SyncFilesX>
'-----------------------------------------------------------[/FileInScript.xml]
Sub Main( Opt, AppKey )
SyncFilesX_App AppKey, new_FilePathForFileInScript( Empty )
End Sub
'--- start of vbslib include ------------------------------
: (vbslib をインクルードして main を呼び出すコード)
環境A用フォルダー
環境B用フォルダー
ほぼ同じ内容に保つ
Image.bmp
Image.bmp
Source.c
SourceCpp.cpp
printf( "Hello!\n" );
std::cout << "Hello!" << std::endl;
( Source.c とペア)
ペアとなるファイルの内容が適切な関係にある状態(同期された状態)になったら、コミットと呼ぶ
操作をします。 SyncFilesX におけるコミットは、同期された状態のコピーを作成することです。
コミットした後は、ペアの片方のファイルを更新しても、コミット時のファイルのコピーがあるので、
それを参考に、もう片方のファイルを更新することができます。 ただし、更新をどのように反映
させるべきかは Diff ツールを使って人間が反映させてください。
同期管理フォルダー (_patch or _synced)
SyncFilesX (メイン・スクリプト)
前回、同期したときの環境A用フォルダー
前回、同期したときの環境B用フォルダー
コミットしたらここにコピーされる
SyncFilesX.vbs
SyncFilesX を使うときは、Diff ツールが必要です。
設定部分の行頭には、' が必要です。
関連
<SyncFilesX>
<Variable name="${Synced}" value="_synced"/>
<SynchronizingSet
base_name="ModuleX : 環境A"
work_name="ModuleX : 環境B"
base="B"
path="W"
synced_base="${Synced}\BaseSub"
synced_path="${Synced}\WorkSub">
<File path="UpdateBoth.txt"/>
</SynchronizingSet>
</SyncFilesX>
FileInScript.xml に書く設定には、以下の SynchronizingSet タグを使用できます。
SynchronizingSet タグがあるときは、どの SynchronizingSet タグのセットを選択するかの
メニューが追加されます。
${Synced} は、Variable タグの変数の値に
置き換わります。
つまり、左の場合、
synced_base="_synced\BaseSub" になります。
Image.bmp ファイルに対するそれぞれのパスは次のようになります。
..\Project\Base\Image.bmp
環境A:
環境B:
前回、コミットしたときの環境B:
前回、コミットしたときの環境A:
_synced\Base\Image.bmp
..\Project\Work\Image.bmp
_synced\Work\Image.bmp
SourceCpp.cpp (Source.c) ファイルに対するそれぞれのパスは次のようになります。
same="no" が設定されているこのファイルは、同期しても内容が異なります。 ただし、
前回、同期した内容との差分を、同期相手に反映する必要があります。 same 属性
は、yes か no を明示的に指定することもできますが、省略すると前回の同期内容が
同じかどうかと今回の同期内容が同じかどうかが異なるときに警告します。
_synced\Work\SourceCpp.cpp
..\Project\Work\SourceCpp.cpp
_synced\Base\Source.c
前回、コミットしたときの環境A:
前回、コミットしたときの環境B:
環境B:
..\Project\Base\Source.c
環境A:
UpdateBoth.txt ファイルに対するそれぞれのパスは次のようになります。
_synced\WorkSub\UpdateBoth.txt
W\UpdateBoth.txt
_synced\BaseSub\UpdateBoth.txt
前回、コミットしたときの環境A:
前回、コミットしたときの環境B:
環境B:
B\UpdateBoth.txt
環境A:
また、Variable タグを使って、変数を定義できます。
Variable タグで定義した変数の参照は、
path, base, synced_path, synced_base
に指定できます。
File タグと Folder タグについての補足
SubFolder フォルダーは、フォルダーの中にある(サブフォルダーも含めた)ファイルが
同期対象です。 ただし、SubFolder\porting.c ファイルは、同期しても内容が異なります。
前回、コミットしたときのファイルやフォルダーのパスを指定するときは、synced_base
属性や synced_path 属性を記述します。
同期をとるファイルやフォルダーを設定します。
環境Aをアプリケーション環境(統合)、環境Bを個別環境(ベース以外の単体)とすることが
よくあります。
下記のサンプルのような .vbs ファイルを作成してください。
親子関係(統合-個別関係)ではないときは、更新が多い方のフォルダーの中の同期管理フォル
ダーに、「SyncFilesX による同期は、関係先のフォルダーにあります」のようなメモだけあると
よいでしょう。 そこに、関係先のモジュール名の一覧があるとよいでしょう。
構成するモジュールごとに、同期管理フォルダーを作成するとよいでしょう。
SynchronizingSet タグの ID 属性を指定すると、その値が画面に表示されます。
例: <SynchronizingSet ID="A" ... と指定すると 1. [A] と表示。
SyncFilesX タグの used_ID 属性を指定すると、ID 属性が一致する SynchronizingSet タグ
だけ有効になります。
例: <SyncFilesX used_ID="A" ... と指定すると、<SynchronizingSet ID="A" ... のみ有効。
ソース
番号またはコマンド >SyncFilesX
-------------------------------------------------------------------------------
>SyncFilesX
同じ、または、ほぼ同じ2つのフォルダー(またはファイル)があって、その両方または
片方の内容を更新したときに、その2つを同期(マージ)することを支援します。 ただ
し、この作業では、前回同期したときの2つのバックアップが必要です。
4つのパス(NewWork, NewBase, SynchronizedWork, SynchronizedBase)を入力してくだ
さい。
NewWork:新しいワークのフォルダーまたはファイルのパス>
NewBase:新しいベースのフォルダーのパス>
SynchronizedWork:前回同期したときのワークのフォルダーのパス>
SynchronizedBase:前回同期したときのベースのフォルダーのパス>
前回コミット時のベース: "_synced\Base"
前回コミット時のワーク: "_synced\Work"
*:同期されていないファイル、=:未同期でワークとペースの内容が同じ
-------------------------------------------------------------------------------
■ベース(ModuleX : 環境A): "..\Project\Base"
■ワーク(ModuleX : 環境B): "..\Project\Work"
1. .=. Image.bmp
2. *!. SourceCpp.cpp
91. 再スキャンして一覧する
92. ルート・フォルダーを開く
99. 終了
番号 >2
-------------------------------------------------------------------------------
ベース:C:\ProjectX\Project\Base\Source.c"
ワーク:C:\ProjectX\Project\Work\SourceCpp.cpp"
ベース・ファイルとワーク・ファイルは「同じ内容」でした
手動で同期したら、コミットしてください。
-------------------------------------------------------------------------------
★ベース(ModuleX : 環境A): Source.c (変更)
★ワーク(ModuleX : 環境B): SourceCpp.cpp (不変)
1. Diff で開く:同期するファイル (*異なる) [ ベース / ワーク ]
2. Diff で開く:前回の同期 (=同じ) [ ベース / ワーク ]
4. Diff で開く:ベース (変更) [ 前回コミット時 / 現在 ]
5. Diff で開く:ワーク (不変) [ 前回コミット時 / 現在 ]
44.Diff で開く:[ 前回コミット時のベース / ベース / ワーク ]
55.Diff で開く:[ ベース / ワーク / 前回コミット時のワーク ]
6. ファイルまたはフォルダーを開く
7. 再スキャンする
8. 同期をコミットする
9 または Enter : 戻る
番号 >
SyncFilesX
の更新内容を見ることにも使えます。
テスト
<File path="SourceCpp.cpp" base="Source.c"
synced_path="OldSourceCpp.cpp" synced_base="OldSource.c"/>
→ SyncFilesMenuLib.vbs
→ T_SyncFilesX フォルダー
→ ModuleAssort
また、フォルダーを同期するときは、同期をとる必要があるファイルを一覧します。
ペアにするファイル名や相対パスが異なるときでも対応できます。
←
▼
▲
Base
Merged
Right
Left
NewBase
OldWork
NewWork
OldBase
SyncFilesX 内部
Patch&BackUp
OldTarget
NewTarget
Patch
BackUp
ModuleNew
TargetMerged
ModuleSync
TargetSync
path
synced_base
synced_path
base
←
▼
▲
CrossBefore フォルダーを作成する。
CrossBefore フォルダーとは、
Before から全部or一部を移動しただけのファイルが入ったフォルダーです。 内容は変更されていません。
CrossBefore\1A、CrossBefore\2A は、1A のファイル構成に従います。
CrossBefore\1B、CrossBefore\2B は、1B のファイル構成に従います。
Natural Docs のタグが追加されたり、キーワードが修正されたりすることもあります。
MakeCrossOld.vbs を実行。
初回は、CrossByTool にできます。 そのコピーが、CrossBefore にできます。
また、1A, 1B, 2A, 2B を、Before、BeforeNoTag にコピーします。
SyncFilesX.vbs を CrossBefore にコピーして起動したとき、追加・削除のファイルは無いはずです。
2回目は、CrossByToolNew にできます。
diff "CrossTool\*", "CrossToolNew\*" の差分を
diff "CrossTool\*", "CrossToolNew\*", "CrossBefore\*" へ反映させてください。
diff "Before\*", "CrossByToolNew\*"
1A のファイル構成を変えていないときは、"Before\1A", "CrossBefore\1A" に差分は無いはずです。
1B のファイル構成を変えていないときは、"Before\1B", "CrossBefore\1B" に差分は無いはずです。(後記)
2回目の MakeCrossOld.vbs で差分が追加されたときは、1A、1B が Before からコピーされていない
可能性があります。
__Moved_Sections.txt でエラーが出たとき(差分が出たとき)は、
● Before\*、1A、1B の中に、Natural Docs のタグを追加、または、編集する
● MakeCrossOld.vbs に改名を設定
して、MakeCrossOld.vbs を再実行してください。 (●1A、1B は、未編集なら Before からコピーできます)
CrossByToolNew\*\__Moved_Sections.txt で、ERROR NotFoundInBefore や ERROR NotRequestedFromNew
になっているキーワードについては、全文検索して、状況と合うように同様の対処をします。
たとえば、Function: Foo の場合、Function と Foo の両方が検索のキーになります。
新規追加されたセクション(NotFoundInBefore エラー)は、もし余分だったら後で同期するときに分かるので、
クロス処理(ここ)においては無視できますが、前回のファイルに Natural Docs のタグだけがないとき
(grep で見つかるとき)は対処する必要があります。
削除されたセクション(NotRequestedFromNew エラー)は、削除が正しいなら無視してよい。
以上の問題がなくなったら、次へ。
SyncFilesX.vbs で 1A、1B について、最新のファイル名や内部構成(内容以外)になるように、
ファイル名を変更したり、テキスト セクションを移動したりします。 Natural Docs のキーワードやコードは
変更しません。 ファイルのコミットはしません。
確認したら、CrossBefore、CrossByTool、CrossByToolNew を削除し、一度だけ、MakeCrossOld.vbs を
再実行します。
diff "Before\*", "CrossBefore\*"
以下は、対処されているはずです。 そうでなければ、diff "Before\*", "CrossByToolNew\*" へ戻る。
"Before" にあるファイルの内容がすべて "CrossBefore" にあること。 失っていないこと。
CrossByToolNew\*\__Moved_Sections.txt にリストアップされている内容が同じであること。
diff "Before", "CrossBefore" の右は、1つのセクションだけ CrossBefore からコピーした一時新規ファイル
2A, 2B を削除して代わりに CrossBefore\2A、CrossBefore\2B からコピーする。
(元の 2A, 2B は、BeforeNoTag にあります)
1A, 1B は CrossBefore\1A、CrossBefore\1B とすでに同じはずです。
__Moved_Sections.txt は 2A, 2B に入れません。
● SyncFilesX で同期を実行。
SyncFilesX を起動、または、再スキャンする。 ただし、起動直後に追加・削除のファイルがないはず。
同期したら、1A, 1B を Masters に入れます。 .moas にSynchronized タグの追加が必要なら追加します。
● CrossBefore\* も Masters に入れます。 * は、1A, 1B, 2A, 2B です。
CrossBefore と BeforeNoTag に差分がなければ、入れる必要はありません。
Masters 内のフォルダー名は、同期前のリビジョン番号+_xfor_+今回できた最新のリビジョン番号。 _Tmp は外す。
*_xfor_* フォルダーは、上記 CrossBefore フォルダーのバックアップです。
1A の例:02_xfor_03、 1B の例: 01_xfor_03。 すでにあるときは、同じ内容のはずです。
CrossBefore にできている __Moved_Sections.txt も Masters に入れます。
SyncFilesX
CrossBack
Before
CrossTool
CrossToolNew
現在作業中の SyncFilesX に、<Folder path="."/> がないと、新規または削除が表示されない
ことがあるので注意してください。
1A
1B
2B
2A
… SyncFilsX 開始時の 1A〜2B
… Back からファイルの移動だけ行った結果。 マージ開始時の 1A〜2B
… Back からファイルの移動だけを自動的に行った結果(前回)
… Back からファイルの移動だけを自動的に行った結果(今回)
… 4way マージ
前回同期したときのファイルと新しいファイルの中で、一部のコードが別のファイルに移動していたりしたときは、
その移動だけを行った中間リビジョンを作成しなければ、前回との差分を知ることができません。
中間リビジョンを作成して同期する方法を示します。
←
▼
▲
環境A, B とも、同期する関数AがファイルAに、同期する関数BがファイルBにあるとき、
環境Aでは関数CがファイルAに、環境Bでは関数CがファイルBに存在すると、同期が
難しくなります。 なぜなら、ファイルの対応関係が1対1ではなくなるからです。 その場合、
ファイルCを新規に作成するなど、ファイルを分けてください。
(関数Cが環境Aで存在し、環境Bで存在しないときは、ファイルの対応関係が1対1になる
ので難しくありません。)
環境A
環境B
ファイルA
ファイルB
関数A
関数C
関数B
関数B
関数C
関数A
ファイルB
ファイルA
環境Aでは関数CがライブラリーAに存在、環境Bでは関数CがライブラリーBに存在する
場合は、管理が難しくなることが予想されます。 ライブラリーCを新規に作成するか、
統合的なライブラリーに含めるとよいでしょう。
ベースとなる環境から、複数のモジュールを追加する場合、SyncFilesX を使うとよいでしょう。
環境Aをアプリケーション環境(統合)、環境Bを個別環境(ベース以外の単体)とすることが
よくあります。 この構造の場合、片方向の参照関係となり、環境Aをリリースするときだけ
SyncFilesX を使って同期を取ればよくなります。
環境A
環境B
ModuleA
ModuleB
ModuleC
ModuleC
両方向の参照関係がある状態でもリリースするときだけ同期を取ればよくするには、
SyncFilesX のメイン・スクリプトを相互に作成します。 更新する環境だけで更新された
内容は、同期する必要はありません。
ModuleB
ModuleC
ModuleA
ModuleC
環境B
環境A
アプリケーション環境(統合)が、ベースとなる環境から、1つのモジュールだけを追加する
場合は、SyncFilesX を使わなくとも、一般的なパッチをあてるだけで構いません。
ベースを更新する場合は、パッチをあてたときにエラーにならないようにパッチを調整します。
追加モジュールを更新する場合は、更新されたパッチをあてます。
ModuleA
ベース
ModuleB
+
パッチ
統合
<File path="Source.c" base="sub\OldSource.c"/>
ただし、ファイルの場所の移動や改名があるときは、一般的なパッチではベースとなるファイル
の内容が更新されたときにモジュールに反映されなくなるので、SyncFilesX も併用すると
よいでしょう。
つまり、パッチからエラーが出なくなった後で、SyncFilesX を使って確認します。
←
▼
▲
単体テストを実行するスクリプトです。
ダブルクリックすると、
が開きます。
←
▼
▲
3ウェイ マージ(3方向マージ)をします。
番号またはコマンド >ThreeWayMerge
-------------------------------------------------------------------------------
3ウェイ マージ(3方向マージ)をします。
ベースにするファイル >C:\Base.txt
更新したベースにするファイル(左側) >C:\Left.txt
更新したベースにするファイル(右側) >C:\Right.txt
マージした結果の出力先ファイル(★上書きします) >C:\_Merged.txt
Enter のみ:マージの設定ファイルを使わない。
マージの設定ファイル >
ThreeWayMerge
C:\Base.txt
C:\Left.txt
C:\Right.txt
C:\_Merged.txt
<?xml version="1.0" encoding="Shift_JIS"?>
<ThreeWayMerge>
<ThreeWayMergeSet
left_name ="左"
right_name="右"
base_path ="00_Base"
left_path ="01_Left"
right_path="02_Right"
merged_path="03_Merged">
<Folder base_path="." left_path="." right_path="." merged_path="."/>
</ThreeWayMergeSet>
<BreakStepNum></BreakStepNum>
<IsAutoMergeEx>True</IsAutoMergeEx>
<IsOutEach>True</IsOutEach>
<SingletonKeywords>Single</SingletonKeywords>
<SingletonKeywords>#include</SingletonKeywords>
<UniqueLineKeywords>Unique</UniqueLineKeywords>
<ReplaceTemplate before="#Before" after="#After"/>
<Text id="Before"><![CDATA[
/* Function: ${FunctionName} */
]]></Text>
<Text id="After"><![CDATA[
/* Func: ${FunctionName} */
]]></Text>
</ThreeWayMerge>
サンプル
その他のタグ名は、
関連
(src)
番号またはコマンド >ThreeWayMerge
-------------------------------------------------------------------------------
3ウェイ マージ(3方向マージ)をします。
Setting オプションで、設定ファイルを入力します。 例:/Setting:C:\Merge.xml
ベースにするファイル >/Setting:Files\Merge\MergeSetting.xml
に ThreeWayMergeSet タグがあれば、比較するフォルダーを毎回入力
しなくても済むようになります。
ThreeWayMerge
/Setting:Files\Merge\MergeSetting.xml
ThreeWayMergeSet タグには、比較するフォルダーのパスを指定します。
が使えます。 属性名は、base_path、left_path、right_path、merged_path で
には、自動的にマージした後で置き換えるテキストを設定します。
のメンバー変数名と同じです。(一部除く)
下記のように ThreeWayMergeSet タグを設定をすれば、00_Base フォルダーをベース、
01_Left フォルダーをある人の更新、02_Right フォルダーを別の人の更新、という3つの
フォルダーをマージした 03_Merged フォルダーを作成し、そのマージ結果を確認することが
できます。
を使って、変数を使うこともできます。
それぞれ名前が異なるファイルをマージできます。
のタグも使えます。
ThreeWayMerge_sth
ThreeWayMerge
SyncFilesX_Class::Merge
SyncFilesX_Class::OpenCUI
(src)
(src)
設定ファイルに <ThreeWayMergeSet> があるとき:
それ以外のとき:
CopyFilesToLeafPathDictionary
ThreeWayMerge
(src)
ThreeWayMerge_autoMergeExSub
ThreeWayMerge_replaceByMergeTmplateSub
'// AutoMerge for "bracket_A" set
'// AutoMerge for "bracket_B" set
ReplaceTemplateClass::RunReplace
(上記)
// コンフリクトを自動解決する
関連
更新するパッチをターゲットにあてます
古いパッチを新しいターゲットにあてます
base_path,
left_path,
right_path,
merged_path
は、すべて
同じ値でも
それぞれ
指定が必要
です。
左は旧パッチ、右は新ベース
手動で 3ウェイ マージをします。
←
▼
▲
XML ファイルを Diff ツールで比較できるように、空白やタブを同じように整形します。
番号またはコマンド >ToRegularXML
-------------------------------------------------------------------------------
整形する XML ファイルのパス >
ToRegularXML
サンプル
<ROOT>
<A/>
</ROOT>
<ROOT>
<A/>
</ROOT>
参考
→ save (IXMLDOMDocument)
ソース
→ vbslib Prompt.vbs
←
▼
▲
番号またはコマンド >Translate
英訳します。
翻訳ファイル (*.trans) のパス、または、フォルダーのパス >C:\folder\sample.trans
次のファイルを上書きします。
sample.txt
続行するには Enter キーを押してください . . .
C:\folder\sample.trans
Translate
翻訳ファイルの記述に従って、テキストファイルを、英訳します。
サンプル
→ Samples\Translate フォルダー
関連
すべて英訳されるか調べる
<?xml version="1.0" encoding="UTF-16"?>
<Translate>
<BaseFolder>SubFolder</BaseFolder>
<File>sample1.txt</File>
<File>sample2.c</File>
<T><JP>日本語</JP><EN>Japanese</EN></T>
<T><JP>英語</JP><EN>English</EN></T>
</Translate>
<?xml version="1.0" encoding="UTF-16"?>
<Translate>
<File>sample.txt</File>
<T><JP>日本語</JP><EN>Japanese</EN></T>
<T><JP>英語</JP>
<EN>English</EN></T>
</Translate>
サンプル
sample.txt の翻訳前
日本語から英語に変換します。
sample.txt の翻訳後
JapaneseからEnglishに変換します。
JapaneseToEnglish.trans (翻訳ファイル)
スクリプト
Translate "sample.trans", "JP", "EN"
スクリプト
Translate "JapaneseToEnglish.trans", "EN", "JP"
英語 から 日本語 へ
sample1.txt の翻訳後
English から Japanese へ
sample1.txt の翻訳前
sample2.c の翻訳前
sample2.c の翻訳後
French から 日本語 へ
French から Japanese へ
File タグに指定したファイルを翻訳します。
File タグは、T タグの後に置くこともできます。
<JP> 〜 </JP> の間と、<EN> 〜 </EN> の間は、複数行にしないでください。
補足
翻訳前の単語が長い単語から置き換えが行われます。 これにより、翻訳ファイルに指定する
順番によって結果が変わる可能性が少なくなります。
BaseFolder は、File タグに指定した相対パス
のベース・フォルダーのパスです。
省略時は、.trans ファイルが入っている
フォルダーのパスになります。
BaseFolder は、
の in_out_Config.BaseFolderPath が指定されると、
無視されます。
→ T_Translate.vbs # [T_Translate1]
テスト
ソース
→ vbslib Prompt.vbs
フォルダー全体に英語以外が無いか調べる
あるファイルに1つでも日本語が残っていると、エラーとなり、残りのファイルは翻訳
しません。 フォルダーの中のすべてのファイルに対して、残っている日本語を
一覧するときは、
をお使いください。
<T><JP>英語</JP>
<EN>English</EN>
<Line>16</Line>
<File>sample.txt</File>
</T>
を通すと、翻訳するファイル名と行番号が追記され、行番号の順番でソートされます。
→ T_Translate.vbs # [T_Translate1]
テスト
<?xml version="1.0" encoding="UTF-16"?>
<Translate>
<File>MultiLine.txt</File>
<T><JP cut_indent="yes" indent="1*	"><![CDATA[
// メイン
// 関数
]]></JP><EN cut_indent="yes" indent="1*	"><![CDATA[
// Main
// Function
]]></EN></T>
<T><JP cut_indent="yes" indent="4* "><![CDATA[
// サブ
// 関数
]]></JP><EN cut_indent="yes" indent="4* "><![CDATA[
// Sub
// Function
]]></EN></T>
</Translate>
JapaneseToEnglish.trans (翻訳ファイル)
スクリプト
Translate "JapaneseToEnglish.trans", "EN", "JP"
int main()
{
// Main
// Function
}
int sub()
{
// Sub
// Function
}
MultiLine.txt の翻訳後
int main()
{
// メイン
// 関数
}
int sub()
{
// サブ
// 関数
}
MultiLine.txt の翻訳前
複数行の置き換えをするときは、cut_indent="yes" と、
indent="…" を XML タグに付けてください。
cut_indent 属性により、XML タグの直後の改行と
すべての行のインデントが翻訳テキストの指定から
外れます。 indent 属性により、すべての行のインデ
ントが翻訳テキストの指定に追加されます(置き換わります)。
翻訳するファイルの文字コードセットを指定するときは、File タグの charset 属性に指定します。
<File charset="utf-8">sample.txt</File>
<Translate skip_not_english_error="yes">
英語以外が残っていてもエラーにしないようにするには、次のようにします。
翻訳前のテキストを単純な単語にしてから、翻訳後のテキストを編集することで、cut_indent や
indent の効果をいろいろ試すことができます。
置き換える対象のテキストの改行コードは、CR+LF に設定してください。