MSYS2 用 pacman の日本語メッセージの翻訳手順

## 背景

MSYS2 の pacman には、本家の pacman には無い MSYS2 固有のメッセージがいくつか含まれています。
しばらく前に、これらの MSYS2 固有のメッセージのうち一部が更新されたため、日本語訳も更新する必要が出てきました。

前回、[日本語訳を作成](https://github.com/msys2/MSYS2-packages/pull/1786)してから時間が経ち、手順を忘れてしまっていたため、次回更新する際に困らないように、メモを残しておくことにしました。

今回更新した日本語訳は [PR #1992](https://github.com/msys2/MSYS2-packages/pull/1992) として提出してあります。

## 作業手順

スタートメニューから `MSYS2 64-bit` → `MSYS2 MSYS` を選択して、端末を開く。

必要なパッケージをインストール。(インストール済みなら不要。)

```
pacman -S --needed base-devel msys2-devel
pacman -S git
```

MSYS2 パッケージのリポジトリをクローン。

```
git clone https://github.com/msys2/MSYS2-packages.git
```

pacman のディレクトリに移り、ビルド。
ビルドの際に、`-s` オプションを付けて、依存パッケージを自動インストールする。また、`check()` に失敗するため、`--nocheck` オプションを付けて、チェックはスキップする。

```
cd MSYS2-packages/pacman
makepkg --nocheck -s
```

このとき、次のようなエラーが出ることがある。

```
==> gpg でソースファイルの署名を検証...
    pacman-5.2.1.tar.gz ... 失敗 (不明な公開鍵 XXXXXXXXXXXXXXXX)
==> エラー: PGP 鍵を検証できませんでした！
```

この場合は、gpg で公開鍵をインポートし、再度ビルドする。

```
gpg --recv-keys XXXXXXXXXXXXXXXX
makepkg --nocheck
```

これで、現状のパッケージがビルドできているはず。
`src` ディレクトリ以下には、MSYS2 用のパッチが当たった状態のソースコードが含まれている。

<details><summary>(旧手順)</summary>

~~日本語メッセージ用のパッチを作るために、パッチが当たっていないオリジナルのソースコードを抽出しておく。~~ (pacman-6.1.0 では git でソースコードがチェックアウトされるようになっているので、git コマンドでそのままパッチ生成可能。)

```
tar xf pacman-5.2.1.tar.gz
mv pacman-5.2.1{,-orig}
```

</details>

日本語メッセージファイル (ja.po) を最新のソースコードに追従。
<details><summary>(旧手順)</summary>

~~少し前に pacman のビルドは、configure + make から meson + ninja に変更されたようだが、meson + ninja で ja.po を更新する方法が分からなかったため、旧来の configure + make を使う。~~

```
cd src/pacman-5.2.1/
PKG_CONFIG="/usr/bin/pkg-config --static" ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-static --disable-shared --enable-doc --enable-doxygen --disable-git-version --with-scriptlet-shell=/usr/bin/bash --with-pkg-ext=.pkg.tar.xz
cd src/pacman/po/
make -B ja.po
```
</details>

meson コマンドで pacman.pot と ja.po (およびその他の言語の po ファイル)を更新する。(参照: <https://mesonbuild.com/Localisation.html>)

```
cd src/pacman-6.1.0/build-x86_64/
meson compile pacman-pot
meson compile pacman-update-po
```

ja.po が更新されたら、未翻訳のメッセージを翻訳していく。
未翻訳のメッセージは、Vim 上で `/fuzzy\|^msgstr ""\(\n"\)\@!` で検索するとよい。

翻訳が終わったら、行番号などの余計な差分を取り除いてからパッチを生成。

<details><summary>(旧手順)</summary>

```
cd ../../../..
diff -u ../pacman-5.2.1-orig/src/pacman/po/ja.po pacman-5.2.1/src/pacman/po/ja.po > ../0011-update-ja-po-for-msys2.patch 
cd ..
```

~~作業の手順上、ディレクトリ階層が一致していないため、パッチを手で修正。~~ 
</details>

```shell
cd src/pacman-6.1.0/
git add -p -- src/pacman/ja.po  # 必要な部分のみコミット対象に追加
git commit
git format-patch -1 -o ../../../../
```

生成されたパッチファイルは他のファイルと様式（ファイル名や Subject 行の表記）を合わせておく。

次に、`PKGBUILD` に記載されているハッシュを合わせるために、`makepkg -g` を実行。

```
makepkg -g > /dev/clipboard
```

クリップボードにハッシュが `sha256sums=( ... )` の形式でコピーされるので、`PKGBUILD` 内の古いハッシュを上書きして保存。

`PKGBUILD` 内の `pkgrel` は 1 つ増やしておく。

`pacman-5.2.1/src/pacman/po/ja.po` をバックアップした上で、makepkg でパッケージが正しくビルドできることを確認。作業ディレクトリを一旦削除するために `-C` オプションを付ける。

```
makepkg --nocheck -C
```

ビルドできたらインストールして動作確認。

```
pacman -U pacman-5.2.1-10-x86_64.pkg.tar.xz
```

元のバージョンに戻して、その際に今回更新したメッセージが正しく表示されることを確認。

```
pacman -Suu
```

## Pull Request の作成

1. まずは [msys2-pacman](https://github.com/msys2/msys2-pacman) リポジトリに PR を作成する。
   例: <https://github.com/msys2/msys2-pacman/pull/53>
2. それがマージされたら [MSYS2-packages](https://github.com/msys2/MSYS2-packages) リポジトリに PR を作成する。
   例: <https://github.com/msys2/MSYS2-packages/pull/4905>