[スレッド全体]

2011/2/12 (土) 00:37:54  
[512] .po ファイルのソースを参照したい

はじめまして。

.po ファイルを翻訳する際、そのエントリがどの.cファイルで使用されているか
参照したいのですが、どのようにしたらよいでしょうか。

.poファイルの各エントリは以下のような形になっています。

#: common/version.c:59
msgid "version "
msgstr "バージョン "

コメント行にソースファイルのパスと行が書いてあるので、
これを利用すればいいと思い、以下のppaマクロを書きました。

var
        Src: String;        // ソースファイルのパスと行
begin
        S_GoLineTop(0);        // 行頭に移動(折り返し単位)
        S_WordRight(0);        // 単語の右端に移動
        S_GoLineEnd_Sel(0);        // (選択)行末に移動(折り返し単位)
        Src := S_GetSelectedString(0);        //ファイルパスを取得
        S_FileOpen(Src);        //ファイルを開く
end

しかしこれでは、上記の例では"version.c:59"という名前のファイルを
新規作成して開いてしまうようです。

たぶん、":"を" -Y="に置換できればコマンドラインオプションの
形式に合致してうまくいくと思うのですが、ここで詰まってしまいました。
マクロを作るのは初めてなので、実は簡単な方法があるのかもしれませんが、
見つけられませんでした。

よろしくお願いします。
Belgae
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.94 Safari/534.13


2011/2/12 (土) 21:08:44  
[513] Re:.po ファイルのソースを参照したい

▼ Belgaeさん
はじめまして。

.poファイルのあるフォルダにcommonフォルダ、
そのcommonフォルダの中にversion.cがあり、.poファイルを開いた状態で
マクロを実行→version.cの59行目を開きたい、という仮定で組んでみました。
JScriptで組んでいますので、拡張子を.jsにしてマクロを登録してみてください。
とりあえず手元では動いています(sakura Ver1.6.6.0、WinXP)。
(グダグダしていて明快なコードじゃなくてごめんなさい)


//★ここから

// ファイルの親フォルダパスを取得
var filePath = ExpandParameter("$/");
var i = filePath.lastIndexOf("/");
var folderPath = filePath.substr(0, i+1);

// 1行目を取得して、.cのパスと行数を取得
var L1 = GetLineStr(1);
var reg =/#: (.+):(\d+)/;
if ( reg.test(L1) ) {
        // ファイルパスと行数が取得できたっぽい
        var openFilePath = folderPath + RegExp.$1;
        var line = RegExp.$2;
 
        // サクラエディタを呼び出して指定行数で開く
        var sakura = ExpandParameter("$S");
        ExecCommand(sakura + ' "' + openFilePath + '" -Y=' + line, 0);
};
// ファイルがない場合は勝手に作成されます。保存しないで閉じてください。

//★ここまで
普段ROMってます
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729; .NET4.0E)


2011/2/12 (土) 21:52:17  
[514] Re2:.po ファイルのソースを参照したい

▼ 普段ROMってますさん
ご返答ありがとうございます。

最初は動きませんでした。頂いたマクロをよく見たところ、パスがファイルの
1行目に書かれている前提になっていたためでした。私の説明が足りませんでした。
.poファイルにはエントリがたくさんあって、それぞれのエントリにコメントとして
その翻訳対象語が使用されているファイルのパスが付いているのです。

そこで、GetLineStr()の引数を1ではなく0(現在の行)に変えて
実行したところ、希望通りの動作になりました。
ありがとうございました。
Belgae
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13


2011/2/13 (日) 00:10:29  
[515] Re3:.po ファイルのソースを参照したい

▼ Belgaeさん
こりゃ失敬。.poの中身をよく理解してなかった私が悪いですな。
行指定があるって事は1ファイルにエントリがずらっと並ぶものだと今更気がつきました。
何はともあれ動いたようで何よりです。
普段ROMってます
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729; .NET4.0E)

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81