◀マクロトップへ
  • 512 .po ファイルのソースを参照したい
    • 513 Re:.po ファイルのソースを参照したい
      • 514 Re2:.po ファイルのソースを参照したい
        • 515 Re3:.po ファイルのソースを参照したい
  • [512] .po ファイルのソースを参照したい Belgae 2011年02月12日 00:37

    はじめまして。

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

    よろしくお願いします。
    • [513] Re:.po ファイルのソースを参照したい 普段ROMってます 2011年02月12日 21:08

      ▼ 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);
      };
      // ファイルがない場合は勝手に作成されます。保存しないで閉じてください。

      //★ここまで
      • [514] Re2:.po ファイルのソースを参照したい Belgae 2011年02月12日 21:52

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

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

        そこで、GetLineStr()の引数を1ではなく0(現在の行)に変えて
        実行したところ、希望通りの動作になりました。
        ありがとうございました。
        • [515] Re3:.po ファイルのソースを参照したい 普段ROMってます 2011年02月13日 00:10

          ▼ Belgaeさん
          こりゃ失敬。.poの中身をよく理解してなかった私が悪いですな。
          行指定があるって事は1ファイルにエントリがずらっと並ぶものだと今更気がつきました。
          何はともあれ動いたようで何よりです。