gettext の .po 翻訳ファイルを編集するには、Emacs の po-mode が非常に便利です。お馴染みの font-lock による強調表示で読みやすいですし、最初に簡単ないくつかのキーバインドさえ覚えてしまえば編集も効率的です。
例えばポイントの下の「fuzzy なエントリを unfuzzy する」なら、M-x po-unfuzzy、もしくはこのコマンドの既定のキーバインド <TAB> で済んでしまいます。つまりタブを一回タイプするだけでいいのです。
さらに、大きな .po ファイルを編集する際に「多くのエントリを一度に unfuzzy する」という操作をしたくなります。指定方法としては、リージョンで囲んでそこに含まれるエントリを削除する、というのが良さそうです。そのための関数 po-unfuzzy-region を作成しました:
(require 'po-mode)
(defun po-unfuzzy-region (beg end)
"Remove the fuzzy attribute for entries in region."
(interactive "r")
(save-excursion
(goto-char beg)
(let ((here beg))
(while (and (< 0 po-fuzzy-counter)
(< here end))
(po-unfuzzy)
(goto-char here)
(cond ((re-search-forward po-fuzzy-regexp end t)
(setq here (match-end 0))
(goto-char (match-beginning 0)))
(t
(setq here end)))
))))
これをそのまま M-x po-unfuzzy-region と呼ぶか、あるいはさらに
(defadvice po-unfuzzy (around po-unfuzzy-with-or-without-region activate)
(if (and (interactive-p)
mark-active)
(po-unfuzzy-region (region-beginning) (region-end))
ad-do-it))
を追加して <TAB> に引っ掛けておくのもオススメです。いずれにしても関数 po-undo は期待通り動作します。