Linux あれこれ

Linux 関連(一部 Windows11 )の備忘録です。

「VirtualBox 7.2.2」に、「Arch Linux」(Xfce) をインストール〈H122-5〉

登録日: 2026-04-01 / 更新日: 2026-04-09

-

今回は、 「VirtualBox 7.2.2」に「Arch Linux」の「Xfce」デスクトップ環境を、インストーラの「archinstall」を使ってインストールしました:

-

「Arch Linux」を選んだのは、「Void Linux」に一番パッケージ名が近いので、アプリの移植の参考にしやすいから。深く知れば、それだけ参考にできるかも。

-

現在は、優れた Linux ディストリビューションのひとつですが、初めて触れた 2021/07 当時は、

ライブ立ち上げの「コンソール」画面で(キーボードデバイスの検出が敏感すぎて)余計な改行を繰り返したり、cat や less を使ったら操作できなくなるなど、マイナス面が目立っていました。

たぶん、使用環境(接続しているキーボード、マウス等)の影響?があると思われますが、その辺りも含めて確認のつもり。

-

その備忘録です。

-

-

使用したPC は、新しく購入した ミニPC「MINISFORUM NAB5」で
プロセッサは「Core i5-12450H」で、メモリ 16GB、SSD 512GB です。

-

(注)リンクを戻るときはブラウザの左上の「←」をクリック
Android スマホであれば「ホーム」ボタン隣の「<」をタップ

-

-


目次

-

今回の作業:

-

1. 「ゲストOS」のISO イメージをダウンロード:

2. 「仮想マシン」の作成:

3. 「Arch Linux」をインストール:

  3-a.  インストーラを「日本語化」せずに実行する場合:

  3-b.  インストーラを「日本語化」して実行する場合:

4.  システム更新:

5.  AUR ヘルパーの「paru」をインストール:

6. 「Firefox ESR」ブラウザをインストール:

7. 「ホーム」フォルダを作成:

8. 「VirtualBox Guest Additions」のインストール:

9.  日本語入力:

  9-a. 「fcitx5-mozc」を使う場合:

  9-b. 「ibus-mozc」を使う場合:

10.  パネルの設定:

11.  デスクトップの設定:

12.  ファイルマネージャ「thunar」の設定:

13.  スクリプトで「フォント」のインストール:

14.  スクリプトで「アプリ」のインストール:

15.  スクリプトで「ゲーム」のインストール:

16. 「flatpak」で「アプリ」をインストール:

-

参考になりそうな作業:

  1. 「フォント」のインストールの詳細:

  2. 「アプリ」のインストールの詳細:

  3. 「ゲーム」のインストールの詳細:

  4.  ゲームの起動メニューの「日本語化」を行う、「パッチ」を作成:

  5. 「pacman」コマンドについて:

  6. 「paru」コマンドについて:

-

「まとめ へ」

「目次詳細 へ」

-

-


- --- - --- - --- - --- - --- - --- - --- -

ホストOS の「Xubuntu 24.04 LTS」を立ち上げ:

-

「VirtualBox 7.2.2」を起動:

今回作成した仮想マシンの「Arch-Linux」:

-

「Arch Linux」(Xfce) を起動:

項番 10.」と 「項番 11.」で、色々とカスタマイズ:

-

デスクトップ環境が「Xfce」だと、同じカスタマイズで、「Void Linux」でも、「Arch Linux」でも、見た目も(レスポンスが同じなら)GUI での使い勝手も同じです:

-

ただし、今回は、その GUI から更に「chroot」環境を起動して、アプリを起動するので、レスポンスは落ちます。

-

-


- --- - --- - --- - --- - --- - --- - --- --

「VirtualBox」について:

-

「VirtualBox 」は、Oracle(オラクル)社が開発している「仮想マシン」を構築するためのソフトウェアです。

-

  • 仮想マシンを使うことで、ハードウェアで問題となりそうなPC でも、最新のLinux ディストリビューションをインストールできる可能性が高くなります。

-

-


- --- - --- - --- - --- - --- - --- - --- ---

「Arch Linux」について:

-

公式サイト:

Arch Linux

ArchWiki メインページ

-

特徴:

  • Arch Linux は、シンプルで、最新で、実用的で、ユーザ中心で、汎用なことを目指しています:

  • Arch は、多くの人よりも、貢献している人のニーズを満たすことを目指しており、
     積極的な(自分で行う)姿勢を持った人をターゲットにしています。

  • Arch Linux は、「ローリングリリース」と呼ばれるリリース方式を採用し、
     常に最新の安定バージョンを提供するよう努めています。

 →「ローリングリリース」は、更新を多めにすることが、安定度を保つコツです:

  • ソースコードのビルドおよびバイナリパッケージの作成を自動化する「Arch Build System」(ABS)が提供されています:

  • アプリの移植を容易に、参加しやすく、公開により、使われた頻度が見えることで、開発者のモチベーションを保ちながら、アプリの品質もアップするよう考えられた、「AUR」リポジトリ がサポートされています:

-

初期のアップがあるため未成熟で不安定な要素が増えるので、「AUR」は公式にサポートされません。
使えるアプリが増えると便利ですが、逆に AUR アプリが増えることで、セキュリティリスク等は増え、
安定度も下がります。使用は自己責任です。

-

-


現在のOS のバージョンを表示:

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

ホストOS : 「Xubuntu 24.04.4 LTS」

2026-04-02 現在

-

カーネル:
$ uname -r
:
6.8.0-107-generic

→LTS版は安定志向なので、更新の回数は少なめです:

-

リリース:
$ cat /etc/lsb-release
:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=24.04
DISTRIB_CODENAME=noble
DISTRIB_DESCRIPTION="Ubuntu 24.04.4 LTS"

→LTS 版の更新(ポイントリリース)は、ほぼ 半年で、
 現在は「24.04.4」です

-

「x11」と「Wayland」のどちらで動作してるか確認:
$ echo $XDG_SESSION_TYPE
:
x11

→「Wayland」ではなく、「x11」で動作しています。

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

ゲストOS : 「Arch Linux」

2026-04-02 現在

-

カーネル:
$ uname -r
6.19.10-arch1-1

→Ubuntu よりも進んでいます:

-

リリース:
$ cat /etc/os-release
:
NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo

→ローリングリリースです:

-

「x11」と「Wayland」のどちらで動作してるか確認:
$ echo $XDG_SESSION_TYPE
x11

→「Wayland」ではなく、「x11」で動作しています。

-

-


- --- - --- - --- - --- - --- - --- - --- ----

1. 「ゲストOS」のISO イメージをダウンロード:

-


1). ダウンロードサイト:

Arch Linux Downloads

-


2). 中ほどの「HTTP Direct Downloads」にある、

青色のリンク「mirror sites listed below」をクリック:

-

下にスクロールして、→「Japan

ミラーサイト(任意): jaist.ac.jp

-

Index of /pub/Linux/ArchLinux/iso/latest」画面:

-


3). 「ファイル」をダウンロード:

2026-03-17 現在:

-

(1). archlinux-x86_64.iso 2026-03-01 19:45 1.4G

 →ダウンロードしたファイルを、「~/ダウンロード/arch/」フォルダに移動:

-

(2). sha256sums.txt 2026-03-01 19:46 398

 →クリックすると、「ブラウザ」に表示:

-

抜粋:

569f7331bbcb882d130035324ab5feb1cd9807ccc9a49aa61102d40121518db6  archlinux-x86_64.iso

-


4). チェックサムの確認:

ファイルの確認:
$ cd ~/ダウンロード/arch
$ ls
:
archlinux-x86_64.iso

-

チェックサムの確認:
$ cd ~/ダウンロード/arch/
$ sha256sum archlinux-x86_64.iso
:
569f7331bbcb882d130035324ab5feb1cd9807ccc9a49aa61102d40121518db6  archlinux-x86_64.iso

→OK

-

-


- --- - --- - --- - --- - --- - --- - --- -----

2. 「仮想マシン」の作成:

-


1). メニュー→「システム」→「Orcle VirtualBox」

-

「VirtualBox マネージャ」が起動:

→すでに作成した「仮想マシン」があります:

-


2). 右上の水色の「新規」ボタンをクリック:

-


3). 「仮想マシンの名前とOS」:

-

(1). 作成したい「ゲストOS」の名前を入力:
VM 名:Arch-Linux   ←(好みの英字の名前)

-

(2). ISO イメージファイルを指定:

ISO イメージ: <選択されていません>

右端の「▼」をクリック →その他 →「ダウンロード」→下記のファイルを指定:

「/home/ubn/ダウンロード/arch/archlinux-x86_64.iso」

-

(3). OS を指定:
OS:Linux
OS ディストリビューション: ArchLinux   ←「自動入力」
OS バージョン:Arch Linux (64-bit)   ←「自動入力」

-

(4). 「無人インストールを実行」にチェックしません

→グレー表示でチェックできません:

-


4). 「無人ゲストOS インストールの設定」をクリック:

→グレー表示で選べません。

-

ちなみに、「無人インストール」が使えるのは、 (OS のxml 情報を提供できる)Ubuntu などのメジャーな Linux ディストリビューションのみです:

-


5). まだ設定していない、「仮想ハードウェアを指定」をクリック:

-

(1). メインメモリー:

今回は、メモリ 16GB を分割して、約 8 GB を割当てました:(以前のマシンでは 4 GB の指定)

(バーをクリックしてから、「→」キーで微調整)

7936 MB  ←(メモリに余裕がないときに大きくしすぎると、 ホストOS が不調になります)

-

(2). プロセッサー数:

8 CPU  ←(パソコンのプロセッサによって上限は変わります: 今回は最大 16)
       (以前のマシンでは 2 CPU の指定)

-

(3). 「EFIを使用(一部のOSのみ)」にチェック:

仮想環境で使うならどちらに設定してもかまいません。

→手持ちのPC が、UEFI 立ち上げなので、
(USB でインストールするときの)実際のOS の動きを確認したいのでチェックしています。

-

OS インストール後は、(パーティションの構成が変わるため)変更できないので注意:

-


6). まだ設定していない、「仮想ハードディスクを指定」をクリック:

-

「新しい仮想ハードディスクを作成」にチェックされていることを確認:

30 GB ←(増やしました)

-

→右下の「完了」

-

通常であれば「25 GB」で良いですが、「xbps-src」でアプリの移植にトライするので増やしました:

-


7). 仮想マシンの「Arch-Linux」が作成されました:

-

下記のように設定値を後から変更できるので、うまく動かないときはリトライできます。

-


8). ★「Arch Linux」の仮想マシンを作成する場合は、「ディスプレイ」の設定を見直し:

「Arch Linux」の仮想マシンを作成する場合は色々と問題が出るので、回避するため、「3Dアクセラレーション」のチェックを外して、「グラフィックコントローラー」を 「VBoxSVGA」に変更します:

-

(1). 「ディスプレイ」をクリック →「スクリーン」タブ

-

(2). 「VBoxSVGA」に設定:

-

(3). 「3D アクセラレーション」のチェックを外します:

-

(4). ビデオメモリーを「128MB」に変更:
- ビデオメモリー: 16MB           →「128MB」に変更
- グラフィックコントローラー: VMSVGA           →「VBoxSVGA」に変更

-

今までの設定:

-

→OK

-


9). 「システム」→「マザーボード」タブ を確認:

  • ポインティングデバイス: 「USB タブレット」 に変更:

  • 起動順序: 「光学」(光学ドライブ)にもチェックがあることを確認:

 →ただし、グレー表示で変更できなくなっています

-

→OK

-


10). 画面が最初に戻るので、最終的な設定を確認できます:

→「ストレージ」の項目の、光学ドライブに「archlinux-x86_64.iso」
 がセットされていることを確認:

-

この CD イメージでライブ立ち上げされます。

-

-


- --- - --- - --- - --- - --- - --- - --- ----- -

3. 「Arch Linux」のインストール:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- --

3-1a. インストーラを「日本語化」せずに実行する場合:

-

日本語化しなくても、それほど支障はないので、こちらの手順が手軽です:

-


1). 「仮想マシン」を選択して、「起動」(緑色の右矢印)ボタンをクリック:

-


2). 「ブート選択」画面が表示:

→しばらく待つか、Enter

-

(CD-ROM での立ち上げです)

-

「UEFI Firmware Settings」メニューが含まれています:

-


3). ライブ立ち上げの、カラフルな「コンソール」画面が表示:

自動ログインされます:

root@archiso ~ #

-

表示されている説明によると、

インストールガイド:

https://wiki.archlinux.org/title/Installation_guide

-

Wi-Fi 接続の場合は、「iwctl」ユーティリティを使って接続
モバイルブロードバンドの場合は、「mmcli」ユーティリティを使って接続
有線LAN の場合は、DHCP で自動接続

-


4). インストーラの起動:

# archinstall

-

設定画面が表示:

インストーラの設定項目を入力:

-


(1). 「Archinstall language」(Archinstall を表示する言語の設定)

「Archinstall language」が選択されていますが、

-

ライブ立ち上げの「Linux コンソール」では(日本語フォントがあったとしても)日本語が文字化けします(この項目は SSH 接続時に使う項目みたい):

-

日本語にせずに、「英語」で作業します:

「↓」で、次の項目へ:

-


(2). 「Locales」(日本語指定)

「Locales」が選択されているので、Enter

-

Keyboard layout: 「us」→「jp106」

Locale language: 「en_US.UTF-8」→「ja_JP.UTF-8」

Locale encoding: 「UTF-8」→「そのまま」

-

「← Back」でEnter して、戻ります

-


(3). 「Mirrors and repositories」(ミラー設定)

「Mirrors and repositories」を選択して、Enter

-

「Mirror regions」にて、

「Japan」を選んで、Enter

-

→いくつかの URL が表示されますが、個別の選択はできないみたい:

-


(4). 「Disk configuration」(ディスク分割)

「Disk configuration」を選択して、Enter

-

「Partitioning」を選択して、Enter

「Use a best-effort default partition layout」を選んで、Enter

-

仮想ディスク「ATA VBOX HARDDISK」が選択されているので、Enter

「ext4」を選んで、Enter

-

「← Back」でEnter して、戻ります

-

参考:

/dev/sda1 size:1G;fstype:vfat
/dev/sda2 size:29G;fstype:ext4

-


(5). 「Swap」(スワップ設定)

「Swap」は「デフォルト」の設定のままで、

Swap on zram: Enabled
Compression algorithm: zstd

-

「↓」で、次の項目へ:

-


(6). 「Bootloader」(ブートローダー)

「Bootloader」は「デフォルト」の設定のままで、

Bootloader: Systemd-boot
UKI: Disabled

-

「↓」で、次の項目へ:

-


(7). 「Kernels」(カーネル)

「Kernels」は「デフォルト」の設定のままで、

Kernel: linux

-

「↓」で、次の項目へ:

-


(8). 「Hostname」(ホスト名、コンピュータ名)

「Hostname」を選んで、Enter

-

任意; 「userPC5」

SSH 接続するかもしれないので、
同一ネットワーク上のPC と重ならない「名前」にしました:

-


(9). 「Authentication」(認証)

「Authentication」を選んで、Enter

-

「Root password」を選んで、Enter (root のパスワード入力)

→パスワードを 2回入力

-

「User account」を選んで、Enter

「Add a user」を選んで、Enter (ユーザの追加)

-

Username: 任意のユーザ名 「user」Enter

→パスワードを 2回入力 (user のパスワード入力)

-

Should be a superuser (sudo)? (sudo が使えるユーザですか)

→Yes

-

「Confirm and exit」(確認して終了)で、Enter

-

「← Back」でEnter して、戻ります

-


(10). 「Profile」(デスクトップの設定)

「Profile」を選んで、Enter

-

「Type」が選択されているので、Enter (デスクトップ有り/無しの設定)

-

Main profile: 「Desktop」を選んで、Enter (デスクトップ有り)

「Xfce4」を選んで、Enter   (Xfce デスクトップ環境の選択)

-

参考:

インストールされるパッケージ:

Installed packages:
  - gvfs
  - htop
  - iwd
  - nano
  - openssh
  - pavucontrol
  - smartmontools
  - vim
  - wget
  - wireless_tools
  - xarchiver
  - xdg-utils
  - xfce4
  - xfce4-googies

-

「← Back」でEnter して、戻ります

-


(11). 「Appkications」(使用するアプリ)

「Appkications」を選んで、Enter

-

「Audio」を選んで、Enter

任意: 「pulseaudio」を選んで、Enter

-

「← Back」でEnter して、戻ります

-


(12). 「Network configuration」(ネットワーク設定)

「Network configuration」を選んで、Enter

-

任意: 「Copy ISO network configuration to installation」を選んで、Enter

-

「← Back」でEnter して、戻ります

-


(13). 「Additional packages」(追加のパッケージ)

ここではインストールしないので、「↓」で、次の項目へ:

-


(14). 「Timezone」(タイムゾーンの設定)

「Timezone」を選んで、Enter

-

「Asia/Tokyo」を選んで、Enter

-


(15). 「Automatic time sync (NTP)」(時刻の同期)

デフォルトの「NTP: Enabled」のまま、「↓」で、次の項目へ:

-


(16). 「Save configuration」(入力した設定項目を保存)

多量のインストールをしないなら、不要です:

-

もし、使うときは、

「Save configuration」を選んで、Enter

-

「Save all」を選んで、Enter

user_configuration.json
user_credentials.json

-

ディレクトリ名を入力

任意: 「/root/」

なぜか入力を受け付けないときは、一度「/tmp」にして、「/root/」でやり直し

Yes

Yes

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:

デフォルトの保存先は、「/var/log/archinstall/user_configuration.json」で、
パスワード等がある場合は別のファイルの「user_credentials.json」に保存されるようです:

ですが、保存するディレクトリを聞いてきて、入力しないと次に進みませんが、
ディレクトリがないと言って、拒否されます:

一度「/tmp」にして、「/root/」でやり直したら行けました:

-

再利用するには、ライブを再起動する前に「外部に保存」しないと消えるので注意:

ただし、SSH 接続のときなら、データは外部のファイルに貼付けできそうです:

-

再利用する場合:

「インストーラ」の起動時に指定すると、読み込みます:

# archinstall --config user_configuration.json --creds user_credentials.json

-

-


(17). 「Install」

「Install」を選んで、Enter

-

→Yes

-


(18). インストール完了:

-

「Reboot system」(再起動)を選んで、Enter

-

→再起動されました:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ---

3-1b. 参考: インストーラを「日本語化」して実行する場合:

-

日本語表示するには、 SSH 接続するのが簡単です:

ですが、シンプルな作りなので、英語のままで支障はありません。
準備にひと手間かかるので、
「項番 3-1a.」の「英語」のまま使うのが早いです:

-


1). 「仮想マシン」の場合は、ネットワークを「ブリッジアダプタ」に変更します:

表示される IP アドレスが変わります:

-


2). 「仮想マシン」を CD-ROM (ISO) イメージ から起動:

-


3). 「SSH 接続」の準備:

-

(1). 有線LANの場合、自動的にネットワーク接続されます:

-

(2). IPアドレスを確認
# ip a

→例 192.168.1.19( lo でない方)

-

(3). 仮の root パスワードを設定:
# passwd

-

(4). SSH サーバー(sshd)を起動:
# systemctl start sshd

確認:

# systemctl status sshd

→active (running)

ちなみに、

# systemctl status ssh

→「Unit ssh.service could not be found.」
 これだとエラーしますが無視:

再起動すれば、たぶん一致すると思いますが、再起動すると水の泡です:

-

-


4). 同じネットワークの、(日本語環境の)「他のPC」で操作:

-

「仮想マシン」(対象PC)に「SSH 接続」:
$ ssh root@192.168.1.19
:
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes  ←(初回のみ)
root@192.168.1.19's password:   ←(仮に設定したパスワード)
root@archiso ~ # 

プロンプトが変わりました:

-

-


5). インストーラを実行:

# archinstall

-

設定画面が表示:

インストーラの設定項目を入力:

-


(1). 「Archinstall language」(Archinstall を表示する言語の設定)

「Archinstall language」を選択して、Enter

-

Japanese」を選んで、Enter

-

→メニューが日本語化されました:

操作している「他のPC」の「端末」アプリで日本語が表示される環境であれば、
「archinstall」画面が日本語化されます:

-

メニューは日本語化されていますが、

後は、「項番 3-1a.」の 4). の (2) 以降の手順と同じです:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----

3-2. インストール後の再起動:

-


1). GUI の「ログイン」画面が表示:

「日本語フォント」がインストールされていないので、
 右下の「ログイン」の文字がトーフに「文字化け」しています:

→パスワード入力:

-


2). デスクトップ画面が表示:

「日本語フォント」がインストールされていないので、トーフに「文字化け」しています:

-


3). 「日本語フォント」のインストール:

$ LANG=C sudo pacman -S noto-fonts-cjk

-


4). ログアウト:

-


5). 「ログイン」画面が表示:

右下の「ログイン」の文字がちゃんと表示されました:

→パスワード入力:

-


6). CD-ROM 取り外し:

-

デスクトップのCD-ROM アイコン「ARCH_202603」を右クリック→「ボリュームを安全に取り外す」

-


7). 画面が狭いので、解像度の変更:

アプリケーション→設定→ディスプレイ

「1600x900」に変更:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- -----

4. システム更新:

-


システム更新:

$ sudo pacman -Syu

-

補足:

pacman」コマンドについては、「項番 30.」を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- -

5. AUR ヘルパーの「paru」をインストール:

-

「paru」は、「pacman」のラッパー(内部で pacman を使いながら強化するアプリ)として動作する、 高機能な「AURヘルパー」です。

→内部で「pacman」をキックしているので、「pacman」がないと動きません。

公式リポジトリ」に加え、非公式の「AUR リポジトリ」の両方のパッケージを操作できます:

ちなみに、「paru」は非公式で「AUR アプリ」になるので、手動でダウンロードしてインストールする必要があります。

-

補足:

paru」コマンドについては、「項番 31.」を参照:

-

ちなみに、先頭を
「paru --repo」とすると、対象が公式リポジトリのみになるので、pacman とほぼ同じ動作になります:
「paru --aur」または「paru -a」とすると、対象が AUR リポジトリのみになります:

-


1). インストール:

-

作業ディレクトリを作成:

$ mkdir -p ~/git/
$ cd ~/git/

-

ダウンロード:

$ sudo pacman -S --needed base-devel git
$ git clone https://aur.archlinux.org/paru.git
$ cd paru
$ ls -1Ap
:
.SRCINFO
.git/
PKGBUILD

-

インストール:

$ makepkg -si
:
paru の提案パッケージ
    bat: colored pkgbuild printing
    devtools: build in chroot and downloading pkgbuilds

-


2). システム更新:

$ paru
:
[sudo] user のパスワード:
:: パッケージデータベースの同期中...
 core は最新です
 extra                   8.0 MiB  9.33 MiB/s 00:01 [######################] 100%
:: システム全体の更新を開始...
 何も行うことがありません
:: Looking for PKGBUILD upgrades...
:: AUR の更新を確認しています...
:: 開発の更新を確認しています...
 何も行うことがありません

→「公式 パッケージ」と非公式の「AUR パッケージ」の両方の更新を行います:

「sudo」と「-Syu」が要らないことに注目:

-

補足:

AUR は使えるアプリが増えて便利なのですが、
逆に「PKGBUILD」に悪意のあるコードが含まれるリクスがあります:

それを防ぐため、「paru」は AUR パッケージのインストール時に、
デフォルトで「PKGBUILD」(ビルドスクリプト)の差分を表示します:

安全のため、AUR パッケージを扱う際は、「PKGBUILD」に悪意のあるコードが含まれていないか、
しっかり目を通す習慣をつけることが推奨されます。

-


3). 「bat」のインストール:

paru でデフォルトで表示される、「PKGBUILD の差分」を見やすく表示(シンタックスハイライト)します:

$ sudo pacman -S bat
:
パッケージ (2) oniguruma-6.9.10-1  bat-0.26.1-2

→もうひとつの「devtools」はビルド環境の支援ツールです。
 インストールについては、次回の投稿〈H122-6〉を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- --

6. 「Firefox ESR」(延長サポート版) をインストール:

-

firefox-esr (ソースからビルド) よりも
firefox-esr-bin (バイナリ) の方がインストール時間が短く推奨されます:

-


1). インストール:

$ paru -S firefox-esr-bin

-


2). 起動:

アプリケーション→「インターネット」→「Firefox ESR」

→初期値は「英語」です:

-


3). 日本語に変更:

新しいタブを開いて、右上の「設定」ボタン→Settings(設定)

「言語」を「日本語」に変更:

-


4). 日本語で表示されました:

→後は「拡張機能」と「ブックマーク」を登録:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ---

7. 「ホーム」フォルダを作成:

-

「ホーム」に「フォルダ」がないので作成:

-


1). ファイルの確認:

$ cd
$ ls
Desktop  Downloads  git  memo.md

-


2). フォルダの作成:

$ mkdir -p {ダウンロード,ドキュメント,ピクチャ,ミュージック,公開}

英語にしても OK

-

確認:

 $ ls -1p
:
Desktop/
Downloads/
git/
memo.md
ダウンロード/
ドキュメント/
ピクチャ/
ミュージック/
公開/

-


3). Firefox-esr のダウンロード先を「Downloads」から「ダウンロード」に変更:

-


4). ファイルマネージャで、ファイルを整理:

$ ls -1p
:
Desktop/
git/
ダウンロード/
ドキュメント/
ピクチャ/
ミュージック/
公開/

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----

8. ゲストOS に「VirtualBox Guest Additions」をインストール:

-

Arch LinuxをゲストOSとして使用している場合、

VirtualBox公式のISOイメージ(「Guest Additions CD イメージの挿入」)を使用するよりも、 Arch Linuxの公式リポジトリにあるパッケージを利用するのが推奨されています:

-


1). パッケージのインストール:

デスクトップ環境を使用する場合:

$ sudo pacman -S virtualbox-guest-utils
 :
パッケージ (2) xorg-xrandr-1.5.3-1  virtualbox-guest-utils-7.2.6-1

-


2). サービスの有効化:

システム起動時に Guest Additions のサービスが自動で開始されるように設定:

$ sudo systemctl enable --now vboxservice.service
:
Created symlink '/etc/systemd/system/multi-user.target.wants/vboxservice.service' → '/usr/lib/systemd/system/vboxservice.service'.

-


3). (共有フォルダ利用時)ユーザを「vboxsf」グループに追加:

$ sudo usermod -aG vboxsf user

→「user」は、ユーザ名で任意です:

-


4). 「クリップボードの共有」機能の設定:

デバイス →「クリップボードの共有」
→「無効」を「双方向」に変更:

-


5). 「ドラッグ & ドロップ」機能の設定:

デバイス→「ドラッグ & ドロップ」
→「無効」を「双方向」に変更:

-


6). 電源オフ:

「アプリケーション」→「ログアウト」→「シャットダウン」

-


7). ホストOS「Xubuntu 24.04 LTS」を再起動:

「クリップボードの共有」機能は、ホストOS との連携で動作するので、1度ホストOS 側の再起動が必要です。

-


8). 「仮想マシン」を起動:

-


9). ログイン画面:

→パスワード入力

-


10). デスクトップ画面:

-


11). 自動でウィンドウがリサイズされるか確認:

右上の「+」で、全画面にしてみます:

→リアルタイムにリサイズされます:

-

全画面を解除後、右隅をドラッグして画面の半分にして、右端に移動:

→リアルタイムにリサイズされます:

-

リアルタイムに解像度を変更する場合は、壁紙は無色にするのが無難です:

-


12). 「クリップボードの共有」機能が使えるか確認:

右の、「端末」の内容を範囲指定して 右クリック→コピー後、
左の、ホスト OS の「テキストエディタ」で右クリック→貼付け:

→「クリップボードの共有」機能が使えました:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- -----

9. 日本語入力:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- -

9-1a.「fcitx5-mozc」を使う場合:

-

項番 9-1b.」の「ibus-mozc」のインストールはビルド処理が走るので、
こちらの「fcitx5-mozc」を使う方がインストールは楽です:

-


1). 「fcitx5-mozc」がインストールできるか確認:

$ pacman -Ss mozc
:
extra/fcitx5-mozc 3.33.6089.2-1
    Fcitx5 Module of A Japanese Input Method for Chromium OS, Windows, Mac and
    Linux (the Open Source Edition of Google Japanese Input)

-


2).インストール:

$ sudo pacman -S fcitx5-mozc fcitx5-configtool 
:
パッケージ (11) enchant-2.8.15-1  fcitx5-5.1.19-1  fcitx5-qt-5.1.13-1
                kdbusaddons-6.24.0-1  kitemviews-6.24.0-1
                kwidgetsaddons-6.24.0-1  kwindowsystem-6.24.0-1
                xcb-imdkit-1.0.9-1  yoga-3.2.1-1  fcitx5-configtool-5.1.13-1
                fcitx5-mozc-3.33.6089.2-1

-


3). 「Fcitx5 設定」

「メニュー」→「設定」→「Fcitx5 設定」

または、

$ fcitx5-configtool

-

初回は、「Fcitx5を実行する」ボタンが表示されるので、ボタンを押して、起動します:

-


4). 「Fcitx の設定」画面:

左の「現在の入力メソッド」が、下記であることを確認:

キーボード - 日本語
Mozc

→閉じる

-


5). 設定ファイルの修正:

$ sudo mousepad /etc/environment

↓ ファイルの最後に追記:

export LANG="ja_JP.UTF-8"
export XMODIFIERS="@im=fcitx"
export XMODIFIER="@im=fcitx"
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export DefaultIMModule=fcitx

→Ctrl+S で保存:

-

確認:

$ cat /etc/environment
#
# This file is parsed by pam_env module
#
# Syntax: simple "KEY=VAL" pairs on separate lines
#
export LANG="ja_JP.UTF-8"
export XMODIFIERS="@im=fcitx"
export XMODIFIER="@im=fcitx"
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export DefaultIMModule=fcitx

-


6). ログアウト→ログイン:

-


7). デスクトップ画面:

→デスクトップのパネルに「キーボード」アイコンが表示:

-


8). 日本語入力の確認:

テキストエディタ (mousepad) を起動:

-

「半角/全角」キー、もしくは、「Ctrl+スペース」にて、入力切り替え:

デスクトップのパネルの「キーボード」アイコンが日本語のときに「あ」になります:

-

→日本語入力できました:

-


9). 任意: 別々のキーに、日本語オン・オフを割り当て:

「メニュー」→「設定」→「Fcitx5 設定」

-

「グローバルオプション」タブ
入力メソッドを有効にする: 右の空き(もしくは、ハングル Hanja)をクリック
 →「…」→「ひらがな」キーを押します  →「ひらがな カタカナ」

-

入力メソッドをオフにする: 右の空き(もしくは、ハングル Romaja)をクリック
 →「…」→「無変換」キーを押します   →「無変換」

-

→「適用」→「閉じる」

-

これで、キーボードアイコンを見なくても操作ができます:

 「ひらがな」キー →日本語オン
 「無変換」キー  →日本語オフ

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- --

9-1b.「ibus-mozc」を使う場合:

-

こちらのインストールでは「ビルド」処理が走り、時間がかかります。
項番 9-1a.」の「fcitx5-mozc」を使う方がインストールは楽です:

-

AUR パッケージの詳細: ibus-mozc 3.33.6133-1

-


1). 「ibus-mozc」がインストールできるか確認:

$ pacman -Ss ibus-mozc
$

→公式リポジトリにありません:

-

AUR で確認:
$ paru -Ss ibus-mozc
:
aur/ibus-mozc 3.33.6133-1 [+16 ~0.00] 
    The Open Source edition of Google Japanese Input (IBus module)
aur/ibus-mozc-with-jp-dict 3.33.6089.2-2 [+10 ~0.52]
    Ibus engine module for Mozc(the Open Source Edition of Google Japanese 
    Input) with SudachiDict and MeCab UniDic Neologd and MeCab IpaDic Neologd
aur/ibus-mozc-ut-full 2.32.5994.102.20251218-1 [+8 ~0.23]
    IBus engine module for Mozc with UT dictionary

→バイナリではないので、ビルドにどれくらい時間がかかるかはやってみないとわかりません:

-


2). 「ibus-mozc」のインストール:

ビルドに 6時間ほどかかったので、ネットと PC の空いている時間帯に行って下さい:

更新が多いし、更新があるたびに、ビルドされると大変なので、ビルド完了後、更新を「保留」に設定しました:

-

$ sudo pacman -S ibus
:
パッケージ (2) libibus-1.5.33-3  ibus-1.5.33-3

-

$ paru -S ibus-mozc
:
リポジトリ (10) double-conversion-3.4.0-1  libb2-0.98.1-3  md4c-0.5.2-1  
        tslib-1.24-1  xcb-util-renderutil-0.3.10-2  xcb-util-image-0.4.1-3  
        xcb-util-cursor-0.1.6-1  xcb-util-wm-0.4.2-2  qt6-translations-6.10.2-1
        qt6-base-6.10.2-1
リポジトリ ビルド (4) hwloc-2.13.0-1  onetbb-2022.3.0-4  libblake3-1.8.3-1  
        mold-2.40.4-3
Aur (2) mozc-3.33.6133-1  ibus-mozc-3.33.6133-1

→完了するまで、だいぶ待たされました:

バーが振れて、PC で軽い「メモ書き」くらいしかできなくなるので、実行するタイミング(寝る前かな)は大切:

-


3).ビルド完了後、「ibus-mozc」の更新を「保留」に設定:

mozc は google 由来でセキュリティの更新が多く、その影響で更新される可能性が高い上に、ビルドに時間がかかるので、更新を保留にしました:

-

依存の確認:
$ paru -Qi ibus-mozc | grep 依存
:
依存パッケージ         : ibus  mozc>=3.33.6133  qt6-base

→「=」でなく「>=」なので、mozc の更新があっても影響なさそう。

-

修正:
$ sudo nano /etc/pacman.conf

-

#IgnorePkg   = 

↓ コメント解除し、「ibus-mozc」の更新を保留:

IgnorePkg   = ibus-mozc

複数ある場合はスペースで区切ります

-

修正の確認:
$ cat /etc/pacman.conf | grep ibus
:
IgnorePkg   = ibus-mozc

-


4). IBus を有効化:

$ nano ~/.bashrc

↓ ファイルのお尻に追記:

export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export GTK_IM_MODULE=ibus

-

確認:
$ cat ~/.bashrc
#
# ~/.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

alias ls='ls --color=auto'
alias grep='grep --color=auto'
PS1='[\u@\h \W]\$ '

export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export GTK_IM_MODULE=ibus

-


5). IBus デーモンを起動:

$ ibus-daemon -drx

-


6). IBus デーモンを「自動起動アプリケーション」に登録:

アプリケーション→「設定マネージャ」→「セッションと起動」

-

-

「自動起動アプリケーション」タブ:

「+追加」

名前: IBus デーモン  
コマンド: ibus-daemon -drx  
トリガー: ログイン時  

-


7). 「ibus の設定」を変更:

$ ibus-setup

-

-

「入力メソッド」タブ

「追加」→「日本語」→「Mozc」 は、不要でした:

いくつかの設定が、すでに登録されていました:

日本語 - Mozc     ←(注目 1)
日本語 - Mozc:A_   ←(注目 2)
日本語 - Mozc:あ   ←(注目 3)
日本語 - 日本語

-

「一般」タブ

-

キーボードショートカット

次の入力メソッド: →「Zenkaku_Hankaku」(全角/半角キー)に変更:

-

-

→閉じる

-


8). 任意:「日本語 キーボード」の別々のキーに割当を定義:

  • 「半角/全角」キーのみで、日本語オン(あ)、オフ(A)を切り替えるなら、この作業は不要です。

-

(1). キーボードアイコンを「あ」にして、クリック→「ツール」→「プロパティ」

「Mozc プロパティ」画面:

-

(2). 「一般」タブ

左下の「初期値に戻す」 →OK

-

(3). 下にある、キー設定の選択: →「カスタム」を選んで右の「編集…」

-

(4). →「Mozc キー設定」画面が表示:

-

(5). 左下の「編集」→「定義済みのキーマップからインポート」→「MS-IME」→OK

-

(6). 再び、「編集…」

ウィンドウの右隅をマウスでつかんで広げておくと、作業しやすくなります:

-

上段にある表題の「入力キー」の項目名をクリックして、ソート

-

(7). 下記のキーのコマンドを修正:
モード 入力キー コマンド 備考
変換前入力中 Hiragana IME を有効化
変換中 Hiragana IME を有効化
直接入力 Hiragana IME を有効化
入力文字なし Hiragana IME を有効化
:
変換前入力中 Muhenkan IME を無効化
変換中 Muhenkan IME を無効化
直接入力 Muhenkan IME を無効化 編集→エントリーを追加が必要
入力文字なし Muhenkan IME を無効化

-

→OK →OK

→適用 →OK

-

→「閉じる」

-

(8). これで「あ」を見なくても操作できます:

「テキストエディタ」アプリを起動してから、「半角/全角」キーを押して、

  • 「ひらがな」キー(Hiragana)で「IME オン」→日本語
  • 「無変換」キー(Muhenkan)で「IME オフ」→英語

-

(9). 「ひらがな」キー(Hiragana)で「IME オン」にならないときは「英数」(Caps Lock) キーを押してください。

-


9). ログアウト→ログイン:

-


10). デスクトップ画面:

-


11). 日本語入力の確認:

テキストエディタ (mousepad) を起動:

-

「半角/全角」キーにて、入力切り替え:

-

→日本語入力できました:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ---

10. パネルの設定:

-

この辺りは好みなので、使いたい設定だけ行えば OK:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----

10-1a. パネルの「アプリケーション」メニューをそのまま使う場合:

-


1). パネルの「アプリケーション」メニューの「アプリケーション」文字を変更:

パネルの「アプリケーション」メニューを右クリック→「プロパティ」

-

ボタンタイトル:
「アプリケーション」の文字を →「メニュー」、もしくは「Menu」に変更:

-

-

もしくは、

「アプリケーション」の文字を →「半角スペース」で、クリックできる横幅を調整:

-

→「閉じる」

-

例:「Menu」に設定した場合:

↓ 拡大:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- -----

10-1b. パネルの「メニュー」を「Whisker Menu」に変更する場合:

-

アプリケーションメニューに「Whisker Menu」アイテムを使うと、「お気に入り」カテゴリにアプリを登録できます:

-


1). 画面の上、または下のパネルバーの空きで右クリック →パネル →パネルの設定

-

「パネル 1」を選んでおきます:

-

「アイテム」タブ

-


2). アイテムの「Wisker Menu」を 追加:

-


3). アイテムの追加後に、アイテムを左端に移動:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- -

10-2. パネルの「メニュー」 (Whisker Menu) の設定を変更:

-

パネル左の「メニュー」(ねずみ)ボタンを右クリック→「プロパティ」

-


1). 「全般」(General)タブ

  • 上段の 3つのボタンにて、「Show as list」をチェック
  • 「カテゴリ名を表示する」にチェック
  • 「アプリケーションにツールチップを表示する」のチェックをなしに変更
  • 「アプリケーションの説明を表示する」のチェックをなしに変更

-


2). 「外観」タブ

-

(1). メニュー:
  • 「カテゴリを左に表示する」(Position categories on left) にチェック

-

(2). パネルボタン(Panel Button):
  • 表示: 「アイコン」になっているか確認:

  • アイコン:「画像」をクリック  →アイコンの検索「xfce4_xicon3」→表示された「xfce4_xicon3」を選択

-

→OK

-

→「閉じる」

-


3). 「お気に入り」カテゴリにアプリを登録

-

(1). よく使うアプリを一度実行します。

-

(2). メニューの「最近使ったもの」カテゴリにアプリが登録されます。

-

(3). そのアプリ名を右クリック →「お気に入りに追加」

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- --

10-3. パネルの「時計」の設定:

-


1). パネルの「時計」の表示を変更:

パネルの右にある「時計」を右クリック→「プロパティ」

-

時計のオプション:

レイアウト:「日付のみ」に変更:

日付

フォント: 「Sans Bold 11」に変更

フォーマット:「カスタム」に変更

その下の入力欄:「 %H:%M」に変更

→「閉じる」

-

表示を確認:

18:08

-


2). パネルの「時計」にマウスを置いたときの、Tips の表示を変更:

パネルの右にある「時計」を右クリック→「プロパティ」

-

外観

ツールチップの形式:

「カスタム」→「%Y年%B%d日 (%a)」に変更:

-

表示を確認:

「時計」にマウスを置くと、年月日曜日を確認できます:

2026年2月19日 (木)

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ---

10-4. パネルに、「ランチャー」を追加:

-

よく使う「アプリ」をインストールしておいてから、「ランチャー」を登録すると、設定の手間を減らせます:

-


1). 画面の上、または下のパネルバーの空きで右クリック →パネル →パネルの設定

-

「パネル 1」を選んでおきます:

-

「アイテム」タブ

-


2). アイテムの「ランチャー」を 複数追加:

  • 複数の「アイテム」を追加して、並び順を変更しやすくしました

  • 複数インストールした「テキストエディタ」アプリをひとつの「ランチャー」にまとめました:

-


3). アイテムの追加後に、アイテムを任意の位置に移動:

→「ウィンドウボタン」の上の 5つが「ランチャー」アイテムで、表示されているアプリが登録されています:

-


4). 「スパナ」アイコン →「+」でアプリを選んで「+追加」、 「ランチャー」にアプリを登録できます:

-

  • Wisker Menu
  • セパレーター(透明)
  • ランチャー(Thuynar ファイルマネージャ)
  • ランチャー(Firefox Web Browser)
  • ランチャー(Xfce 端末)
  • ランチャー(Featherpad、Mousepad、gedit) ★複数を登録
  • ランチャー(スクリーンショット)
  • ウィンドウボタン
  • セパレーター(透明)

★ひとつの「ランチャー」に複数のアプリを登録すると、1番上がデフォルト(例えば「Featherpad」)で、 残りのエディタは、メニューから選択することになります。

→設定時の並びを変えるだけで、デフォルトのアプリを変更できて便利です。

-


5). 「セパレーター」アイテムを置く位置で、微妙に見やすさが変わります:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----

10-5. パネルに、便利なアイテムを追加:

-

使い勝手を良くするアイテムを追加しました:

-


1). 画面の上のパネルバーの空きで右クリック →パネル →パネルの設定

-

「パネル 1」を選んでおきます:

-

「アイテム」タブ

-


2). アイテムの「ワークスペーススイッチャー」を追加:

-

(1). アイテムの追加後に、アイテムを任意の位置に移動:

-

(2). 「仮想デスクトップ」のデフォルトは 4つですが、2つに減らしました:

パネルの「仮想デスクトップ」を右クリック→「ワークスペースの設定」→「全般」タブ:

レイアウト

ワークスペースの数: 「4」→「2」に変更:

→「閉じる」

-

(3). パネルの「仮想デスクトップ」を右クリック→「プロパティ」

「外観」タブ:

「マウスホイールを使ってワークスペースを切り替える」をオフ(青色を消します)

→「閉じる」

-


3). アイテムの「CPU グラフ」を追加して、CPU 負荷を表示:

CPU 負荷に応じて、縦棒が振れます:

縦棒をクリックすると「タスクマネージャ」が表示されます:

-

(1). 「アイテム」タブにて、

「CPU グラフ」を選んで、「+追加」

→「閉じる」

-

(2). パネル右端の「CPU グラフ」を右クリック→「移動」

「時計」の右に移動

-

(3). パネル右端の「CPU グラフ」を右クリック→「プロパティ」

下記の設定に変更:

-

  • CPU グラフ

左の設定画面が「外観」タブ

右の設定画面が「高度な設定」タブ

-


4). パネルに「スピーカ」アイコン(音量調整)を追加:

パネルの空きで右クリック→「パネル」→「パネルの設定」→「アイテム」タブ:

左下の「+追加」をクリック→「PulseAudio プラグイン」→「+追加」→「閉じる」

-

「PulseAudio プラグイン」を選んで、右の「上矢印」で、時計の上の、セパレーターの上まで移動:

-

-

→「閉じる」

-

「ゲーム」アプリで、音量調整できるか確認:

「アプリケーション」→「ゲーム」→「Kajongg 中国式四人麻雀」を起動:

「Play」で開始

→牌を捨てるときに英語の音声が出るので、音量調整できるか確認:

-


5). アイテムの「アクションボタン」を追加:

電源オフ、再起動、ログアウト、などの操作が楽になります。

パネル右端の「ユーザ名」の部分です:

-

(1). アイテムの追加後に、アイテムを任意の位置に移動:

(右端なので、そのまま)

-

(2). 右クリック →プロパティ:

→「ログアウト…」(…付き)は特別で、メニューからの選択になります。
 操作の手間減らしたいので、今回は使っていません。

-

(3). 動作:

→パネル右端の「ユーザ名」から、「画面のロック、シャットダウン、再起動、ログアウト」が(すぐに)できるようになりました:

-


6). 上にあったパネルを画面下に移動:

-

(1). 上のパネルを移動する前に、下のパネルを削除します:

下のパネルの空きで右クリック→「パネル」→「パネルの設定」→一番上に「パネル2」が表示されていることを確認:

右上の「ー」をクリックして、「パネル2」を削除:

-

もし、「パネル2」(ドック)を残したいのであれば、パネルを右か左に移動:

ロックを解除してから、モードを「垂直」に変更して、移動します:

-

(2). 「パネルの設定」画面の、一番上に「パネル1」が表示:

「パネルをロックする」のチェックを外します:

→パネルが赤枠で囲まれ、行頭と行末に「縦棒」が表示されます:

-

(3). マウスでその「縦棒」をつかむと手のひらになるので、そのまま画面下に移動します:

-

(4). 画面下に移動できたら、先ほどの「パネルの設定」画面にて、

「パネルをロックする」にチェックします:

-

→「閉じる」

-

移動後:

-

(5). 参考: もし、パネルを右か左に移動したい場合は、

ロックを解除してから、モードを「垂直」に変更して、移動します:

-


7). パネルの背景色を変更:

この辺りは、好みです:

-

「アプリケーション」 →「設定」→「パネル」→「外観」タブ

全般

ダークモード   右(オン)

→パネルがダークモードになっているので、以下の設定はいらないかも:

-

背景

スタイル: 「なし(システムスタイルを使用)」(黒色)のままか、

-

もしくは、

スタイル: 「単一色」に変更:

配色: 右端をクリック→一番下の「作成した色」の「右から 2つ目の濃い水色」に変更:

→「選択」

-

→「閉じる」

-

パネルを確認:

→パネルの色は、デスクトップの壁紙と色合いが合うものが良さそう:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- -----

11. デスクトップの設定:

-

この辺りは好みなので、使いたい設定だけ行えば OK:

-


1). ショートカットキー: ウィンドウ画面をタイル表示:

「グローバルアクション」の定義で、「左のWindows」キーは使われているので、
「左のWindows」キーを使った設定をしても無効です。

なので、代わりに「Ctrl+Shift」キーを使ってみました:

-

ショートカットキーを修正:

「メニュー」 →「設定」→「ウィンドウマネージャー」→「キーボード」タブ

-

(1/2 画面で、左に移動)
  • 「ウィンドウを画面左にタイル表示」→「編集」
 「Ctrl+Shift」+ 「←」   表示: Shift + Ctrl + Left

-

(1/2 画面で、右に移動)
  • 「ウィンドウを画面右にタイル表示」→「編集」
 「Ctrl+Shift」+ 「→」   表示: Shift + Ctrl + Right

-

(1/4 画面で、右上に移動)
  • 「ウィンドウを画面右上にタイル表示」→「編集」
 「Ctrl+Shift」+ 「↑」   表示: Shift + Ctrl + Up

-

(1/4 画面で、右下に移動)
  • 「ウィンドウを画面右下にタイル表示」→「編集」
 「Ctrl+Shift」+ 「↓」    表示: Shift + Ctrl + Down

-

→「閉じる」

-

もう一度、同じ組み合わせを押せば、元の位置とサイズに戻ります:

-


2). ショートカットキー: 「Windows + Enter」で、「端末」を起動:

-

ショートカットキーを追加:

「メニュー」→「設定」→「キーボード」→「アプリケーションショートカットキー」タブ:

左下の「+追加」

コマンド: exo-open --launch TerminalEmulator
ショートカット: Super+Return    ←(Windows+Enter)

-

→「閉じる」

-

ちなみに、ウィンドウのタイトルバーをダブルクリックすると、全画面表示:

-

-


3). ショートカットキー: 「Windows + T」で、「テキストエディタ」を起動:

-

ショートカットキーを追加:

「アプリケーション」→「設定」→「キーボード」→「アプリケーションショートカットキー」タブ:

左下の「+追加」

-

「mousepad」を起動したい場合:

コマンド: mousepad

もしくは、

「featherpad」を起動したい場合:

コマンド: featherpad

-

ショートカット: Super+T    ←(Windows+T)

-

→「閉じる」

-


4). ショートカットキー: 「Windows + W」で、「ブラウザ」を起動:

-

ショートカットキーを追加:

「アプリケーション」→「設定」→「キーボード」→「アプリケーションショートカットキー」タブ:

左下の「+追加」

-

既存の「firefox」を起動したい場合:

もしくは、

ダウンロードしてインストールした、最新の「firefox」を起動したい場合:

コマンド: firefox

-

ショートカット: Super+W    ←(Windows+W)

-

→「閉じる」

-


5). ショートカットキー: 「Windows + N」で、「ファイルマネージャ」を起動:

-

ショートカットキーを追加:

「アプリケーション」→「設定」→「キーボード」→「アプリケーションショートカットキー」タブ:

左下の「+追加」

コマンド: thunar
ショートカット: Super+N    ←(Windows+N)

-

→「閉じる」

-


6). ウィンドウのタイトルバーの「巻き上げ」ボタンを移動:

すでに「巻き上げ」ボタンは追加されていますが、ボタンの位置がイマイチなので、左に移動しました:

-

「アプリケーション」→「設定」→「ウィンドウマネージャー」

「スタイル」タブ:

-

ボタンの配置:

右下の「表示する:」にある、「↑」ボタンに注目:

「タイトル」「↑」

↓ マウスでドラッグして、移動:

「↑」「タイトル」

-

→「閉じる」

-


7). デスクトップのアイコンを「ゴミ箱」のみにしました:

デスクトップの空きで右クリック→「デスクトップの設定」→「ファイル/ランチャーアイコン」タブ:

-

デフォルトのアイコン:

「ホーム」と「ファイルシステム」のみ、チェックを外しました:

→「閉じる」

-

「ゴミ箱」のみのデスクトップ:

-


8). ウィンドウのタイトルバーとウィンドウ枠の「テーマ」を変更:

この辺りは、好みです:

-

「アプリケーション」 →「設定」→「ウィンドウマネージャー」→「スタイル」タブ

-

テーマ

たくさんのテーマが登録されているので、お好きなものを、

微妙に違います:

-

「Smoothwall」に変更した場合: ★

-

「Wallis」に変更した場合:

-

「Waza」に変更した場合:

→枠なし:

-

→「閉じる」

-

「端末」画面にて、ウィンドウのタイトルバーを確認:

→選択されているウィンドウがわかりやすいし、タイトルバーが細いです:
 色違いのテーマがあると良いかも:

-


9). デスクトップにて「単一色」の壁紙を準備して、「壁紙」を設定:

設定で、デスクトップは「単一色」にできますが、ログイン画面は以前に「デスクトップ」の壁紙に設定した壁紙のままです:

-

壁紙は「単一色」でなく、お気に入りの画像でも良いですが、縦横比が問題になるかも:

-

(1). 「壁紙」を準備:

「単一色」のデスクトップのスクリーンショットを撮って、それを加工しました:

-

(2). 準備した「壁紙」をシステムにコピー:
$ sudo cp ~/ダウンロード/kabegami/bule-screen.jpg /usr/share/backgrounds/xfce/

→デフォルトの「xfce」フォルダに、壁紙が追加されました:

-

(3). デスクトップの空きで、右クリック→「デスクトップの設定…」→「背景」タブ:

デスクトップの壁紙: 追加した「壁紙」を選択:

-

フォルダ: 「Xfce」

スタイル: 「短辺を画面に合わせる」  ←(ポイント)

-

→「閉じる」

-

デスクトップの壁紙が、「単一色」になったことを確認:

-

(4). ログアウトして、確認:

-

ログイン画面の壁紙が、「単一色」になったことを確認:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- -

12. ファイルマネージャ「thunar」の設定:

-


1). 日付の形式を変更:

-

ファイルマネージャで、「編集」→「設定」

→「Thunar の設定」画面

「表示」タブ

-

日付

  • 形式: 「今日」→「2026-03-19 20:54:35」に変更

→「閉じる」

-


2). USB メモリの自動マウント:

-

ファイルマネージャ (thunar) にて、USB メモリを自動マウントするように設定:
  • 一部のthunar 機能は、リムーバブルメディアの管理をする「gvfs」パッケージがインストールされて、有効にされている場合にのみ使えます。

 (ゴミ箱、リムーバブルメディア、リモートファイルシステムのサポートなど)

-

(1). 必要なパッケージがインストールされているか確認:

-

$ pacman -Qs gvfs
:
local/gvfs 1.58.3-1 (gnome)
    Virtual filesystem implementation for GIO

→これが表示されたということは、インストール済です。
 これがないとデスクトップに「ゴミ箱」が表示されません:

-

(2). ファイルマネージャで、「編集」→「設定」

→「ファイルマネージャーの設定」画面

「詳細」タブ

-

「ボリューム管理」 (一番下)

→「ボリューム管理を有効にする」にチェック:

-

(3). 青色の「設定」の文字のリンクをクリック:

→「リムーバフルドライブとメディア」画面

「ストレージ」タブ

-

「リムーバフルストレージ」

  • 「リムーバフルドライブがホットプラクされたらマウントする」にチェック
  • 「リムーバフルメディアが挿入されたらマウントする」にチェック
  • 「リムーバフルメディアが挿入されたら参照する」にチェック

→「閉じる」

-


3). 「ここでターミナルを開く」メニューを追加:

既存のメニューで英語の「Open Terminal Here」があるので、
日本語の「ここでターミナルを開く」に修正:

-

(1). ファイルマネージャで、「編集」→「カスタムアクションを設定…」

→「カスタムアクション」画面:

-

(2). 英語の「Open Terminal Here」を選んで、

右側の「歯車」ボタン→「アクションの編集」画面:

-

「基本」タブ:

名前: Open Terminal Here
コマンド: exo-open --working-directory %f --launch TerminalEmulator

↓修正:

名前: ここでターミナルを開く
コマンド: exo-open --working-directory %f --launch TerminalEmulator

-

ちなみに、

「表示する条件」タブ:

ファイルのパターン: *
以下を選択した場合に表示する: 「ディレクトリ」にチェック

→「OK」

-


4). 「root で開く」メニューを追加:

-

(1). ファイルマネージャで、「編集」→「カスタムアクションを設定…」

→「カスタムアクション」画面:

-

(2). 右側一番上の「+」ボタン→「アクションの作成」画面:

-

「基本」タブ:

名前: root で開く
コマンド: pkexec thunar %f

「表示する条件」タブ:

ファイルのパターン: *
以下を選択した場合に表示する: 「ディレクトリ」と「テキストファイル」にチェック

→「OK」

-


5). 「ここに展開」、「別の場所に展開…」、「アーカイブを作成…」のメニューを追加:

-

(1). ファイルの解凍ができるように「file-roller」パッケージをインストール:

-

検索:

$ pacman -Ss file-roller
:
extra/file-roller 44.6-1 (gnome-extra) [インストール済み]
    Create and modify archives

→インストール済でした:

-

もし、インストールする場合:

$ sudo pacman -S file-roller
:
パッケージ (6) appstream-1.1.2-1  libadwaita-1:1.8.4-1  libfyaml-0.9.6-1
               libnautilus-extension-49.5-1  libxmlb-0.3.25-1
               file-roller-44.6-1

→コンテキストメニューアイテム(右クリック)を使って「圧縮ファイル」を作成したり解凍できます:

圧縮ファイルを直接作成・解凍するのではなく File Roller (file-roller) など他のプログラムのフロントエンドとして動作します。

-

(2). 「thunar-archive-plugin」プラグインをインストール:

確認:

$ pacman -Ss thunar-archive-plugin
:
extra/thunar-archive-plugin 0.6.0-1 (xfce4-goodies) [インストール済み]
    Adds archive operations to the Thunar file context menus

→インストール済でした:

→プラグインのインストールで、右クリックで「ここに展開」、「別の場所に展開…」、「アーカイブを作成…」のメニューが表示されます:

-

「thunar-archive-plugin」は単体では機能しません。
 実際の圧縮・解凍作業は外部のアーカイブマネージャ(例: file-roller)に依存します。

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- --

13. 参考: インストール作業を楽にする「スクリプト」の作成:

-

「スクリプト」を使うかは自由です:

不要なパッケージやアプリがあれば、スクリプトから削除してください。

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ---

13-1. よく使う「フォント」をインストールする「スクリプト」:

-

ついでに、こちらの投稿関連の「ブックマーク」も出力:

-


1). 「スクリプト」の作成:

$ cd
$ nano 01.fonts-install.sh

↓ すべて貼付け(すべて選択後、Ctrl+C して マウスの中央ボタンで貼付け):

#!/bin/bash

echo
echo "===================="
echo "Installing frequently used fonts:(よく使うフォントをインストール:)"
eval 'sudo echo "Press _Enter except for the _password.(パスワード or Enter)"'
echo
echo "Start the installation:(インストール開始:)"
echo "==== System Updates ===="
echo
echo "$ paru"
eval "paru"
echo
echo "==== tools ======"
echo "$ sudo pacman -S dpkg curl wget"
eval "LANG=C sudo pacman -S dpkg curl wget"
echo
echo "==== fonts 1 ========="
echo "$ sudo pacman -S noto-fonts"
eval "LANG=C sudo pacman -S noto-fonts"
echo
echo "==== fonts 2 ========="
echo "$ sudo pacman -S noto-fonts-cjk"
eval "LANG=C sudo pacman -S noto-fonts-cjk"
echo
echo "==== fonts 3 ========="
echo "$ sudo pacman -S ttf-dejavu"
eval "LANG=C sudo pacman -S ttf-dejavu"
echo
echo "==== fonts 4 ========="
echo "$ sudo pacman -S ttf-roboto"
eval "LANG=C sudo pacman -S ttf-roboto"
echo
echo "==== fonts 5 ========="
echo "$ sudo pacman -S ttf-roboto-mono"
eval "LANG=C sudo pacman -S ttf-roboto-mono"
echo
echo "==== fonts 6 ========="
echo "$ sudo pacman -S adobe-source-code-pro-fonts"
eval "LANG=C sudo pacman -S adobe-source-code-pro-fonts"
echo
echo "==== MigMix fonts ======"
echo "$ curl http://archive.ubuntu.com/ubuntu/pool/universe/f/fonts-migmix/fonts-migmix_20200307-1_all.deb --output /tmp/fonts-migmix_20200307-1_all.deb"
eval "curl http://archive.ubuntu.com/ubuntu/pool/universe/f/fonts-migmix/fonts-migmix_20200307-1_all.deb --output /tmp/fonts-migmix_20200307-1_all.deb"
echo
echo "$ sudo dpkg -i /tmp/fonts-migmix_20200307-1_all.deb"
eval "LANG=C sudo dpkg -i /tmp/fonts-migmix_20200307-1_all.deb"
echo
echo "==== My-Bookmark ======="
echo "https://furuya7.hatenablog.com/entry/2026/04/01/033917 H122-5" >> ~/my-bookmark.txt
echo "https://furuya7.hatenablog.com/archive/2025 昨年" >> ~/my-bookmark.txt
echo "https://furuya7.hatenablog.com/archive/2026 今年" >> ~/my-bookmark.txt
echo >> ~/my-bookmark.txt
echo "https://furuya7.hatenablog.com/entry/2026/04/01/033917#------------------------------------------------------------------------------------------------------------------- pacmanヘルプ" >> ~/my-bookmark.txt
echo >> ~/my-bookmark.txt
echo "https://furuya7.hatenablog.com/entry/2026/04/01/033917#-------------------------------------------------------------------------------------------------------------------- paruヘルプ" >> ~/my-bookmark.txt
echo >> ~/my-bookmark.txt
echo
echo "===================="
echo "Installation complete:(インストール完了:)"
echo

→Ctrl+O 後、ファイルを確認して Enter:

→Ctrl+X で終了:

-

「Arch Linux」のブラウザに登録したい「ブックマーク」があれば、末尾の「~/my-bookmark.txt」に url を追記すれば送れます:

-


2). 「スクリプト」の実行:

確認:

$ cd
$ ls -1 *.sh
:
01.fonts-install.sh

-

実行:

$ bash 01.fonts-install.sh

↓ 表示:

====================
Installing frequently used fonts:(よく使うフォントをインストール:)
[sudo] user のパスワード:

→パスワード入力:

-

Do you want to continue? [Y/n] 

→パスワードの入力以外は、Enter を入力:

-

====================
Installation complete:(インストール完了:)

-

-

確認:

$ ls -1
:
01.fonts-install.sh
my-bookmark.txt

-

「my-bookmark.txt」

→取りあえず使えるブックマーク:

$ cat my-bookmark.txt

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

インストールの詳細:

「フォント」のインストールは「項番 14.」を参照:

スクリプトでインストールされるのは「MigMix」フォントのみです:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----

13-2. よく使う「アプリ」をインストールする「スクリプト」:

-


1). 「スクリプト」の作成:

$ cd
$ nano 02.app-install.sh

↓ すべて貼付け(すべて選択後、Ctrl+C して マウスの中央ボタンで貼付け):

#!/bin/bash

echo
echo "===================="
echo "Installing frequently used apps:(よく使うアプリをインストール:)"
eval 'sudo echo "Press _Enter except for the _password.(パスワード or Enter)"'
echo
echo "Start the installation:(インストール開始:)"
echo "==== System Updates ===="
echo
echo "$ paru"
eval "paru"
echo
echo "==== featherpad ======="
echo "$ sudo pacman -S featherpad"
eval "LANG=C sudo pacman -S featherpad"
echo
echo "==== gufw =========="
echo "$ sudo pacman -S gufw"
eval "LANG=C sudo pacman -S gufw"
echo
echo "==== disk =========="
echo "$ sudo pacman -S gnome-disk-utility"
eval "LANG=C sudo pacman -S gnome-disk-utility"
echo
echo "==== gparted =========="
echo "$ sudo pacman -S gparted"
eval "sudo pacman -S gparted"
echo
echo "==== audacious ==========="
echo "$ sudo pacman -S audacious"
eval "LANG=C sudo pacman -S audacious"
echo
echo "==== kolourpaint ========="
echo "$ sudo pacman -S kolourpaint"
eval "LANG=C sudo pacman -S kolourpaint"
echo
echo "==== qpdfview ==========="
echo "$ paru -S qpdfview"
eval "LANG=C paru -S qpdfview"
echo
echo "===================="
echo "Installation complete:(インストール完了:)"
echo

→Ctrl+O 後、ファイルを確認して Enter:

→Ctrl+X で終了:

-


2). 「スクリプト」の実行:

確認:

$ cd
$ ls -1 *.sh
:
01.fonts-install.sh
02.app-install.sh

-

実行:

$ bash 02.app-install.sh

↓ 表示:

====================
Installing frequently used apps:(よく使うアプリをインストール:)
[sudo] user のパスワード:

→パスワード入力:

-

Do you want to continue? [Y/n] 

→パスワードの入力以外は、Enter を入力:

-

====================
Installation complete:(インストール完了:)

-

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

インストールの詳細:

「アプリ」のインストールは「項番 15.」を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- -----

13-3. よく使う「ゲーム」をインストールする「スクリプト」:

-

よく使う「ゲーム」をインストールします:

任意」なので、インストールしなくても OK です。

-

「ゲーム」の「起動メニュー」を日本語化するスクリプトも含めました:

-


1). 事前の「ダウンロード」作業:

「game 7」の「kobodeluxe 宇宙船スクロールシューティング」ゲームをインストールしたい場合:

自動だとダウンロードに失敗するので、手動でダウンロードを行っておきます:

このゲームをインストールしない場合は不要です:

-

(1). 手動でダウンロード:
$ firefox-esr "http://www.olofson.net/kobodl/download/KoboDeluxe-0.5.1.tar.bz2"

-

(2). ブラウザが起動したら、「私はロボットではありません」にチェック:"

-

(3). ダウンロードされたか確認:
$ ls ~/ダウンロード | grep bz2
:
KoboDeluxe-0.5.1.tar.bz2

-


2). 「スクリプト」の作成:

$ cd
$ nano 03.game-install.sh

↓ すべて貼付け(すべて選択後、Ctrl+C して マウスの中央ボタンで貼付け):

#!/bin/bash

echo
echo "===================="
echo "Install the game:(ゲームをインストール:)"
eval 'sudo echo "Press _Enter except for the _password.(パスワード or Enter)"'
echo
echo "Start the installation:(インストール開始:)"
echo "==== System Updates ===="
echo
echo "$ paru"
eval "paru"
echo
echo "==== tools ======"
echo "$ sudo pacman -S pacman-contrib"
eval "LANG=C sudo pacman -S pacman-contrib"
echo
echo "$ sudo pacman -S patch"
eval "LANG=C sudo pacman -S patch"
echo
echo "==== game 1 =========="
echo "$ sudo pacman -S swell-foop"
eval "LANG=C sudo pacman -S swell-foop"
echo
echo "==== game 2 =========="
echo "$ sudo pacman -S kmines"
eval "LANG=C sudo pacman -S kmines"
echo
echo "==== game 3 =========="
echo "$ sudo pacman -S aisleriot"
eval "LANG=C sudo pacman -S aisleriot"
echo
echo "==== game 4 =========="
echo "$ sudo pacman -S kshisen"
eval "LANG=C sudo pacman -S kshisen"
echo
echo "==== game 5 =========="
echo "$ sudo pacman -S kmahjongg"
eval "LANG=C sudo pacman -S kmahjongg"
echo
echo "==== game 6 =========="
echo "$ sudo pacman -S kajongg"
eval "LANG=C sudo pacman -S kajongg"
echo
echo "==== game 7 =========="
echo "$ paru -S kobodeluxe"
# eval "LANG=C paru -S kobodeluxe"
echo
echo "「項番 1).」にて、「KoboDeluxe-0.5.1.tar.bz2」のダウンロードは行いましたか?"
echo
echo "ダウンロードしており、"
read -p "インストールを行う場合は「y」を入力して下さい: " ANSWER
case "$ANSWER" in
    [yY]*)
echo "インストール処理を開始します......"
# ここにYes 時の処理を記述:
echo
eval "mkdir -p ~/git/"
eval "cd ~/git/"
eval "git clone https://aur.archlinux.org/kobodeluxe.git"
eval "cd ~/git/kobodeluxe/"
echo
echo "---- cp KoboDeluxe-0.5.1.tar.bz2 -----"
eval "cp ~/ダウンロード/KoboDeluxe-0.5.1.tar.bz2 ./"
echo
echo "---- Make game-7.patch -----"
echo
echo "--- a/PKGBUILD    2026-03-24 23:22:38.455789839 +0900" >> game-7.patch
echo "+++ b/PKGBUILD    2026-03-24 23:28:58.182672660 +0900" >> game-7.patch
echo "@@ -17,7 +17,7 @@" >> game-7.patch
echo "   'sdl_image'" >> game-7.patch
echo " )" >> game-7.patch
echo " source=(" >> game-7.patch
echo '-  "http://www.olofson.net/kobodl/download/KoboDeluxe-${pkgver}.tar.gz"' >> game-7.patch
echo '+  "KoboDeluxe-${pkgver}.tar.bz2"' >> game-7.patch
echo '   "http://deb.debian.org/debian/pool/main/k/$_pkgname/${_pkgname}_${pkgver}-${_debrel}.debian.tar.xz"' >> game-7.patch
echo " )" >> game-7.patch
echo " sha256sums=(" >> game-7.patch
echo >> game-7.patch
echo >> game-7.patch
echo
echo "---- edit PKGBUILD /game-7.patch ----------"
echo "$ sudo patch -p1 < game-7.patch"
eval "sudo patch -p1 < game-7.patch"
echo
echo "$ updpkgsums"
eval "LANG=C updpkgsums"
echo
cat PKGBUILD
echo
echo
echo "---- Install game-7 ----------"
echo "$ makepkg -si"
eval "LANG=C makepkg -si"
echo
    ;;
  [nN]*)
    echo "インストール処理をスキップしました。"
    ;;
  *)
    echo "y または n で入力してください。"
    ;;
esac
echo
echo "==== game 8 =========="
echo "$ sudo pacman -S lbreakout2"
eval "LANG=C sudo pacman -S lbreakout2"
echo
echo "==== game 9 =========="
echo "$ paru -S ltris2"
eval "LANG=C paru -S ltris2"
echo
echo "==== Make ~/game-ja.patch ====="
echo
echo "--- a/usr/share/applications/kobodeluxe.desktop   2026-03-24 20:52:53.095536308 +0900" >> ~/game-ja.patch
echo "+++ b/usr/share/applications/kobodeluxe.desktop   2026-03-24 20:13:18.802075845 +0900" >> ~/game-ja.patch
echo "@@ -1,6 +1,7 @@" >> ~/game-ja.patch
echo " [Desktop Entry]" >> ~/game-ja.patch
echo " Encoding=UTF-8" >> ~/game-ja.patch
echo " Name=KoboDeluxe" >> ~/game-ja.patch
echo "+Name[ja]=kobodeluxe 宇宙船スクロールシューティング" >> ~/game-ja.patch
echo " GenericName=Arcade Game" >> ~/game-ja.patch
echo " Comment=An excellent 2D Shootem-up game." >> ~/game-ja.patch
echo " Exec=kobodeluxe" >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo "--- a/usr/share/applications/lbreakout2.desktop   2026-03-24 03:16:42.041515236 +0900" >> ~/game-ja.patch
echo "+++ b/usr/share/applications/lbreakout2.desktop   2026-03-24 03:23:26.561989315 +0900" >> ~/game-ja.patch
echo "@@ -2,6 +2,7 @@" >> ~/game-ja.patch
echo " Type=Application" >> ~/game-ja.patch
echo " Encoding=UTF-8" >> ~/game-ja.patch
echo " Name=Linux Breakout 2" >> ~/game-ja.patch
echo "+Name[ja]=lbreakout2 ブロックくずし" >> ~/game-ja.patch
echo " Comment=Breakout and Arkanoid style arcade game" >> ~/game-ja.patch
echo " Icon=/usr/share/pixmaps/lbreakout2.png" >> ~/game-ja.patch
echo " TryExec=lbreakout2" >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo "--- a/usr/share/applications/ltris2.desktop   2026-03-24 20:37:51.693637050 +0900" >> ~/game-ja.patch
echo "+++ b/usr/share/applications/ltris2.desktop   2026-03-24 20:40:35.218176348 +0900" >> ~/game-ja.patch
echo "@@ -1,5 +1,6 @@" >> ~/game-ja.patch
echo " [Desktop Entry]" >> ~/game-ja.patch
echo " Name=LTris2" >> ~/game-ja.patch
echo "+Name[ja]=ltris2 テトリス" >> ~/game-ja.patch
echo " Comment=A tetris clone with nice graphics." >> ~/game-ja.patch
echo " Exec=ltris2" >> ~/game-ja.patch
echo " Icon=ltris2" >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo "--- a/usr/share/applications/org.gnome.SwellFoop.desktop  2026-03-24 21:06:59.676327194 +0900" >> ~/game-ja.patch
echo "+++ b/usr/share/applications/org.gnome.SwellFoop.desktop  2026-03-24 21:10:01.171572967 +0900" >> ~/game-ja.patch
echo "@@ -30,7 +30,7 @@" >> ~/game-ja.patch
echo " Name[hu]=Swell Foop" >> ~/game-ja.patch
echo " Name[id]=Swell Foop" >> ~/game-ja.patch
echo " Name[it]=Swell Foop" >> ~/game-ja.patch
echo "-Name[ja]=Swell Foop" >> ~/game-ja.patch
echo "+Name[ja]=Swell Foop さめざめもどき" >> ~/game-ja.patch
echo " Name[ka]=Swell Foop" >> ~/game-ja.patch
echo " Name[kk]=Swell Foop" >> ~/game-ja.patch
echo " Name[km]=Swell Foop" >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo "--- a/usr/share/applications/org.kde.kajongg.desktop  2026-03-24 03:17:00.173836957 +0900" >> ~/game-ja.patch
echo "+++ b/usr/share/applications/org.kde.kajongg.desktop  2026-03-24 03:29:52.795120823 +0900" >> ~/game-ja.patch
echo "@@ -25,6 +25,7 @@" >> ~/game-ja.patch
echo " Name[ia]=Re Kajongg" >> ~/game-ja.patch
echo " Name[is]=Kajongg" >> ~/game-ja.patch
echo " Name[it]=Kajongg" >> ~/game-ja.patch
echo "+Name[ja]=Kajongg 中国式四人麻雀" >> ~/game-ja.patch
echo " Name[ka]=Kajongg" >> ~/game-ja.patch
echo " Name[kk]=Kajongg" >> ~/game-ja.patch
echo " Name[km]=​Kajongg" >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo "--- a/usr/share/applications/org.kde.kmahjongg.desktop    2026-03-24 03:17:08.189132412 +0900" >> ~/game-ja.patch
echo "+++ b/usr/share/applications/org.kde.kmahjongg.desktop    2026-03-24 03:31:37.607395248 +0900" >> ~/game-ja.patch
echo "@@ -30,7 +30,7 @@" >> ~/game-ja.patch
echo " Name[id]=KMahjong" >> ~/game-ja.patch
echo " Name[is]=KMahjongg" >> ~/game-ja.patch
echo " Name[it]=KMahjongg" >> ~/game-ja.patch
echo "-Name[ja]=KMahjongg" >> ~/game-ja.patch
echo "+Name[ja]=KMahjongg 上海" >> ~/game-ja.patch
echo " Name[ka]=KMahjongg" >> ~/game-ja.patch
echo " Name[kk]=KMahjongg" >> ~/game-ja.patch
echo " Name[km]=KMahjongg" >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo "--- a/usr/share/applications/org.kde.kmines.desktop   2026-03-24 03:17:16.678182748 +0900" >> ~/game-ja.patch
echo "+++ b/usr/share/applications/org.kde.kmines.desktop   2026-03-24 03:32:50.334373210 +0900" >> ~/game-ja.patch
echo "@@ -32,7 +32,7 @@" >> ~/game-ja.patch
echo " Name[id]=KMines" >> ~/game-ja.patch
echo " Name[is]=KMines" >> ~/game-ja.patch
echo " Name[it]=KMines" >> ~/game-ja.patch
echo "-Name[ja]=KMines" >> ~/game-ja.patch
echo "+Name[ja]=KMines マインスイーパ" >> ~/game-ja.patch
echo " Name[ka]=KMines" >> ~/game-ja.patch
echo " Name[kk]=KMines" >> ~/game-ja.patch
echo " Name[km]=KMines" >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo "--- a/usr/share/applications/org.kde.kshisen.desktop  2026-03-24 03:17:27.423192845 +0900" >> ~/game-ja.patch
echo "+++ b/usr/share/applications/org.kde.kshisen.desktop  2026-03-24 03:34:39.055099965 +0900" >> ~/game-ja.patch
echo "@@ -35,7 +35,7 @@" >> ~/game-ja.patch
echo " Name[id]=Shisen-Sho" >> ~/game-ja.patch
echo " Name[is]=Shisen-Sho" >> ~/game-ja.patch
echo " Name[it]=Shisen-Sho" >> ~/game-ja.patch
echo "-Name[ja]=Shisen-Sho" >> ~/game-ja.patch
echo "+Name[ja]=kshisen 四川省 (Shisen-Sho)" >> ~/game-ja.patch
echo " Name[ka]=Shisen-Sho" >> ~/game-ja.patch
echo " Name[kk]=Сисен-сё" >> ~/game-ja.patch
echo " Name[km]=Shisen-Sho" >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo
echo "==== make /game-ja.patch =========="
echo "$ sudo cp ~/game-ja.patch /"
eval "sudo cp ~/game-ja.patch /"
echo
echo "==== patch /game-ja.patch =========="
echo "$ cd /"
eval "cd /"
echo "$ sudo patch -p1 < game-ja.patch"
eval "sudo patch -p1 < game-ja.patch"
echo
echo "$ rm ~/game-ja.patch"
eval "rm ~/game-ja.patch"
echo "$ sudo rm /game-ja.patch"
eval "sudo rm /game-ja.patch"
echo
echo "===================="
echo "Installation complete:(インストール完了:)"
echo

→Ctrl+O 後、ファイルを確認して Enter:

→Ctrl+X で終了:

-


3). 「スクリプト」の実行:

確認:

$ cd
$ ls -1 *.sh
:
01.fonts-install.sh
02.app-install.sh
03.game-install.sh

-

実行:

$ bash 03.game-install.sh

↓ 表示:

====================
Install the game:(ゲームをインストール:)
[sudo] user のパスワード: 

→パスワード入力:

-

Do you want to continue? [Y/n] 

→パスワードの入力以外は、Enter を入力:

-

==== make /game-ja.patch ==========
$ sudo cp ~/game-ja.patch /

==== patch /game-ja.patch ==========
$ cd /
$ sudo patch -p1 < game-ja.patch
patching file usr/share/applications/kobodeluxe.desktop
patching file usr/share/applications/lbreakout2.desktop
patching file usr/share/applications/ltris2.desktop
patching file usr/share/applications/org.gnome.SwellFoop.desktop
patching file usr/share/applications/org.kde.kajongg.desktop
patching file usr/share/applications/org.kde.kmahjongg.desktop
patching file usr/share/applications/org.kde.kmines.desktop
patching file usr/share/applications/org.kde.kshisen.desktop

$ rm ~/game-ja.patch
$ sudo rm /game-ja.patch

====================
Installation complete:(インストール完了:)

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

インストールの詳細:

「ゲーム」のインストールは「項番 16.」を参照:

「ゲーム」の起動メニューの「日本語化」は「項番 17.」を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- -

13-4. 後始末:

-


不要になったスクリプトの削除:

確認:

$ cd
$ ls -1
:
01.fonts-install.sh
02.app-install.sh
03.game-install.sh
my-bookmark.txt

-

削除:

$ rm *-*.sh

-

確認:

$ ls -1
:
my-bookmark.txt

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- --

14. 「フォント」のインストール:

-

「フォント」は好みがあるので、インストールは任意です。

-


「フォント」のインストールについて:

-

(1). 参考: 「Void Linux」の公式ドキュメントにて、

Fonts

抜粋:

何を選択すればよいかわからない場合は、「dejavu-fonts-ttf」または「xorg-fonts」が良いです:

「noto-fonts-ttf」には、多くの言語とスクリプトのフォントが含まれます。
「noto-fonts-cjk」はこれを中国語、日本語、韓国語のフォントで拡張します。
「noto-fonts-emoji」は絵文字を提供します。
「nerd-fonts」は、カスタム アイコンなどの特殊文字を含むフォントを提供します。

-

(2). リポジトリから入手できないフォントは、
 システム全体で使うなら「/usr/share/fonts/」、
 ユーザ指定で使うなら「~/.local/share/fonts/」に手動で配置します:

-

(3). 参考: 本番 PC の「Xubuntu 24.04 LTS」で使っているフォント:

使い慣れたフォントが使いやすいです:

  • 「端末」のフォント: Dejavu Sans Mono Book 10
  • 「firefox」のフォント: Noto Sans CJK JP 16
  • 「featherpad」のフォント: Noto Sans Mono CJK JP 9

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ---

14-1. 「IPA」フォントのインストール:

システムのサイズを小さくするとき、「日本語フォント」をひとつに絞りたいときの選択肢のひとつ:

リポジトリから簡単にインストールできますが、日本語の一部が誤表示するのが惜しいところ。

-


1). インストールできるか確認:

$ pacman -Ss font | grep ipa
:
extra/otf-ipaexfont 004.01-5 (ipa-fonts)
extra/otf-ipafont 003.03-9 (ipa-fonts)
extra/otf-ipamjfont 006.01-3 (ipa-fonts)

-

$ pacman -Ss otf-ipafont
:
extra/otf-ipafont 003.03-9 (ipa-fonts)
    Japanese outline fonts by Information-technology Promotion Agency, Japan
    (IPA)

-


2). インストール:

$ sudo pacman -S otf-ipafont
:
パッケージ (1) otf-ipafont-003.03-9

-


3). もし、ダウンロードしてインストールする場合:

IPA Font Ver.003.003

→4つの書体からダウンロードするフォントを選択:

  • IPA明朝(Ver.003.03)
  • IPA P明朝(Ver.003.03)
  • IPAゴシック(Ver.003.03)
  • IPA Pゴシック(Ver.003.03)

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----

14-2. 「IPAex」フォントのインストール:

「IPA」フォントの最新版で不具合が修正されています:

品質を保つため、ライセンスの同意が必要なので、インストールをスクリプト化しにくいのが惜しいです:

-


1). インストールできるか確認:

$ pacman -Ss font | grep ipa
:
extra/otf-ipaexfont 004.01-5 (ipa-fonts)
extra/otf-ipafont 003.03-9 (ipa-fonts)
extra/otf-ipamjfont 006.01-3 (ipa-fonts)

-

$ pacman -Ss otf-ipaexfont
]
extra/otf-ipaexfont 004.01-5 (ipa-fonts)
    Japanese outline fonts following the tradition of Japanese printing font

-


2). インストール:

$ sudo pacman -S otf-ipaexfont
:
パッケージ (1) otf-ipaexfont-004.01-5

-


3). もし、ダウンロードしてインストールする場合:

-

(1). ダウンロード:

IPAexフォント Ver.004.01

→ライセンスに同意してから、ダウンロードを選択:

  • IPAex明朝 (Ver.004.01)
  • IPAexゴシック(Ver.004.01)

-

→「IPAexゴシック」をダウンロードした場合:

-

(2). ダウンロードした「ipaexg00401.zip」ファイルを「~/ダウンロード/fonts/」に移動:

-

(3). 「ipaexg00401.zip」ファイルを右クリック→「ここで展開(zip)」
$ ls -1 ~/ダウンロード/fonts/ipa*
:
/home/user/ダウンロード/fonts/ipaexg00401.zip

/home/user/ダウンロード/fonts/ipaexg00401:
IPA_Font_License_Agreement_v1.0.txt
Readme_ipaexg00401.txt
ipaexg.ttf   ←(必要なフォント)

-

(4). システム全体で使えるようにインストール:

フォルダの作成:

$ sudo mkdir -p /usr/share/fonts/IPAex/

-

コピー:

$ cd ~/ダウンロード/fonts/
$ sudo cp ipaexg00401/ipaexg.ttf /usr/share/fonts/IPAex/

-

確認:

$ ls -1 /usr/share/fonts/IPAex/
:
ipaexg.ttf

-

(5). フォントキャッシュをクリア:
$ sudo fc-cache -fv
:
fc-cache: succeeded

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- -----

14-3. 「Takaoフォント」のインストール:

「IPAフォント」からの派生で、コミュニティによって不具合などを独自に修正できるように
「フォント名」を変えて Launchpad のプロジェクトサイトで配布:

「IPAフォント」のライセンスの同意が完全には解除されていないので注意:

-

詳細は、Takao Fonts を参照:

-


1). インストールできるか確認:

$ pacman -Ss font | grep akao
$

→公式リポジトリにありません:

-

$ paru -Ss font | grep akao
:
aur/otf-takao 15.03-3 [+52 ~0.00]
aur/otf-takaoex 15.03-3 [+1 ~0.00]
aur/otf-takaomj 15.03-3 [+0 ~0.00]

-

$ paru -Ss otf-takao
:
aur/otf-takao 15.03-3 [+52 ~0.00]
    Japanese outline fonts based on IPA Fonts (otf-ipafont)
aur/otf-takaoex 15.03-3 [+1 ~0.00]
    Japanese outline fonts based on IPAex Fonts (otf-ipaexfont)
aur/otf-takaomj 15.03-3 [+0 ~0.00]
    Japanese outline fonts based on IPAmj Fonts (otf-ipamjfont)

-


2). インストール:

-

「otf-ipafont」ベース:
$ paru -S otf-takao

もしくは、

「otf-ipaexfont」 ベース:
$ paru -S otf-takaoex

-


3). もし、ダウンロードしてインストールする場合:

-

(1). 最新のダウンロード:

TakaoFonts_00303.01.zip

たぶん、「IPA」フォントの不具合は修正されていると思われます:

-

(2). ダウンロードした「TakaoFonts_00303.01.zip」ファイルを「~/ダウンロード/fonts/」に移動:

-

(3). 「TakaoFonts_00303.01.zip」ファイルを右クリック→「ここで展開(zip)」
$ ls -1 ~/ダウンロード/fonts/Takao*
:
/home/ubn/ダウンロード/fonts/TakaoFonts_00303.01.zip

/home/ubn/ダウンロード/fonts/TakaoFonts_00303.01:
ChangeLog
IPA_Font_License_Agreement_v1.0.txt ←(IPAフォントのライセンス同意)
README
README.ja
TakaoGothic.ttf   ←(必要なフォント)
TakaoMincho.ttf   ←(必要なフォント)
TakaoPGothic.ttf   ←(必要なフォント)
TakaoPMincho.ttf   ←(必要なフォント)

-

(4). システム全体で使えるようにインストール:

フォルダの作成:

$ sudo mkdir -p /usr/share/fonts/Takao/

-

コピー:

$ cd ~/ダウンロード/fonts/
$ sudo cp TakaoFonts_00303.01/*.ttf  /usr/share/fonts/Takao/

-

確認:

$ ls -1 /usr/share/fonts/Takao/
:
TakaoGothic.ttf
TakaoMincho.ttf
TakaoPGothic.ttf
TakaoPMincho.ttf

-

(5). フォントキャッシュをクリア:
$ sudo fc-cache -fv
:
fc-cache: succeeded

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- -

14-4. 「Noto Sans JP」フォントのインストール:

「noto-fonts-cjk-sans」は、中国語、日本語、韓国語の文字をすべて含み、それぞれの言語の太さが異なることがあります。
一方、「Noto Sans JP」は日本語に最適化されており、欧文と和文のウェイトが自然に見えるように調整されています。

-

Noto フォントで、「日本語フォント」をひとつだけインストールしたい場合にオススメです:

-


1). インストールできるか確認:

$ pacman -Ss font | grep ans | grep oto
$ 

→公式リポジトリにありません:

-

$ paru -Ss font | grep ans | grep oto
:
aur/nerd-fonts-noto-sans-regular-complete 2.2.2-0 [+3 ~0.00] [古いバージョン: 2023-01-19] [孤児]
    Noto Sans Regular Nerd Font complete
    Various unicode fonts for Sanskrit (Scripts: Devanagari, Kannada, Tamil, Telugu, Malayalam, Oriya). Fonts include: Siddhanta, Chandas, Uttara, Sanskrit2003, Noto Sans Devanagari.
aur/nerd-fonts-noto-sans-mono 3.2.1-1 [+2 ~0.00]
    Noto Sans Mono fonts, patched with Nerd Fonts Patcher
    Swei Gothic-derived from Noto Sans CJK font family with a more concise & modern look.
aur/otf-noto-sans-cjk 2.004-3 [+0 ~0.00]
    Noto CJK fonts (Sans, Static OTC)
aur/otf-noto-sans-cjk-vf 2.004-3 [+0 ~0.00]
    Noto CJK fonts (Sans, Variable OTF)
aur/otf-noto-sans-cuneiform 2.001-1 [+0 ~0.00]
    Noto Cuneiform fonts (Sans, Static OTC)
aur/otf-noto-sans-mono-cjk-vf 2.004-3 [+0 ~0.00]
    Noto CJK fonts (Sans Mono, Variable OTF)
aur/ttf-noto-sans-cjk-vf 2.004-1 [+0 ~0.00]
    Noto CJK fonts (Sans, Variable TTF/OTC)
aur/ttf-noto-sans-egyptian-hieroglyphs 2.002-0 [+0 ~0.00]
    Noto Sans font for egyptian hieroglyphs
aur/ttf-noto-sans-javanese-variable 2.005-1 [+0 ~0.00]
    Noto Sans Javanese fonts.
aur/ttf-noto-sans-mongolian 3.002-1 [+0 ~0.00]
    Noto Sans Mogolian fonts.
aur/ttf-noto-sans-mono-cjk-vf 2.004-1 [+0 ~0.00]
    Noto CJK fonts (Sans Mono, Variable TTF/OTC)
aur/ttf-noto-sans-mono-vf 2026.03.01-1 [+0 ~0.00]
    Google Noto Sans Mono font (Variable weight and width, TTF)
aur/ttf-noto-sans-vf 2026.03.01-1 [+0 ~0.00]
    Google Noto Sans font (Variable weight and width, TTF)

→AUR にもなさそう:

-


2). ダウンロードしてインストール:

-

(1). Google Fonts の「Noto Sans Jp」をダウンロード:

ダウンロードページ

→全画面表示にして、右上にある水色の「Get font」をクリック

→表示された、「Download all (1)」をクリック

-

(2). ダウンロードした「Noto_Sans_JP.zip」ファイルを「~/ダウンロード/fonts/」に移動:

-

(3). 「Noto_Sans_JP.zip」ファイルを右クリック→「ここで展開(zip)」

項番 12.」のファイルマネージャの設定が済んでいることが前提です:

-

(4). 確認:
$ cd ~/ダウンロード/fonts/
$ ls -1p
:
NotoSansJP-VariableFont_wght.ttf ←(バリアブルフォント)
Noto_Sans_JP.zip ←(展開前)
OFL.txt
README.txt
SourceHanCodeJP.ttc ←(別件のフォント)
static/ ←(バリアブルでないフォントのフォルダ)

→展開時の名前で「フォルダ」が作られないので注意:

-

バリアブルでないフォントのフォルダの中身を確認:

$ ls -1p static/
:
NotoSansJP-Black.ttf
NotoSansJP-Bold.ttf
NotoSansJP-ExtraBold.ttf
NotoSansJP-ExtraLight.ttf
NotoSansJP-Light.ttf
NotoSansJP-Medium.ttf
NotoSansJP-Regular.ttf
NotoSansJP-SemiBold.ttf
NotoSansJP-Thin.ttf

→いくつかの太さのフォントが揃っています。
 Regular と Bold があれば良さそう:

-

(5). システム全体で使えるようにインストール:

フォルダの作成:

$ sudo mkdir -p /usr/share/fonts/NotoSansJP/

-

コピー:

$ cd ~/ダウンロード/fonts/
$ sudo cp static/NotoSansJP-Bold.ttf /usr/share/fonts/NotoSansJP/
$ sudo cp static/NotoSansJP-Regular.ttf /usr/share/fonts/NotoSansJP/

-

確認:

$ ls -1 /usr/share/fonts/NotoSansJP/
:
NotoSansJP-Bold.ttf
NotoSansJP-Regular.ttf

-

(6). フォントキャッシュをクリア:
$ sudo fc-cache -fv
:
fc-cache: succeeded

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- --

14-5. 「MiguMix」フォントのインストール:

-

項番 13-1.」のスクリプトで「フォント」のインストールをしていたら、インストール済なので、
こちらの作業は要りません:

-

「MigMix」フォントは、横幅が狭いので、狭い画面で多くの情報を表示できるのが利点です:

-

「MigMix」パッケージには、次のフォントが含まれています:

- プロポーショナルフォント(ブラウザ用)→ Migu 1P、Migu 1C、MigMix 1P、MigMix 2P
- 等幅フォント(テキストエディタ用)   → Migu 1M、Migu 2M、MigMix 1M、MigMix 2M

-


1). インストールできるか確認:

$ pacman -Ss migmix
$

→公式リポジトリにありません:

-

$ paru -Ss migmix
$

→AUR にもなし:

-


2). ツールのインストール:

$ sudo pacman -S dpkg curl

-


3). 「MigMix」をダウンロード:

$ curl http://archive.ubuntu.com/ubuntu/pool/universe/f/fonts-migmix/fonts-migmix_20200307-1_all.deb --output /tmp/fonts-migmix_20200307-1_all.deb

→「.deb」ファイルを「/tmp/」にダウンロード:

-


4). 「MigMix」を「dpkg」でインストール:

$ sudo dpkg -i /tmp/fonts-migmix_20200307-1_all.deb
:
パスワード: 
以前に未選択のパッケージ fonts-migmix を選択しています。
(データベースを読み込んでいます ... 現在 0 個のファイルとディレクトリがインストールされています。)
.../fonts-migmix_20200307-1_all.deb を展開する準備をしています ...
fonts-migmix (20200307-1) を展開しています...
fonts-migmix (20200307-1) を設定しています ...

-


5). dpkg でインストールされた、パッケージ一覧を表示:

$ dpkg -l --no-pager | grep font
:
ii  fonts-migmix  20200307-1   all   High quality Japanese font based on M+ fonts and IPA fonts

→grep で余計な行を表示させていません:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ---

14-6. 「源ノ角ゴシック Code JP」フォントのインストール:

「源ノ角ゴシック Code JP」フォントは、

英数字と日本語が「2 : 3」の幅の「等幅フォント」です。
日本語と英数字が混在しても、バランスが良く見やすいです;

-

9 ポイントくらいに小さくすると、見やすくて、多くの情報が表示できます。

「1 : 2」ではないので、「端末」等では使えません:

-


1). インストールできるか確認:

$ pacman -Ss font | grep code-jp
$

→公式リポジトリにありません:

-

$ paru -Ss font | grep code-jp
:
aur/otf-source-han-code-jp 2.012-1 [+6 ~0.00]

-


2). インストール:

$ paru -S otf-source-han-code-jp
:
リポジトリ (1) xorg-mkfontscale-1.2.3-1
Aur (1) otf-source-han-code-jp-2.012-1

-

参考:

AUR/ Package Details: otf-source-han-code-jp 2.012-1

-

PKGBUILD の確認:
$ paru -Gp otf-source-han-code-jp
# Maintainer : boronology <boronology at gmail dot com>
pkgname=otf-source-han-code-jp
pkgver=2.012
pkgrel=1
depends=('fontconfig' 'xorg-mkfontscale')
pkgdesc="Japanese OpenType font for developers. Made by mixing SourceHanSans and SourceCodePro"
arch=('any')
license=('custom')
url="https://github.com/adobe-fonts/source-han-code-jp"
source=("https://github.com/adobe-fonts/source-han-code-jp/archive/2.012R.tar.gz")

install=$pkgname.install

package() {
      # install fonts
      cd "$srcdir"/source-han-code-jp-2.012R/

      #install OpenType Fonts
      for OTF in $(ls OTF/*.otf); do
          install -Dm644 $OTF "$pkgdir/usr/share/fonts/$OTF"
    done
      
      # install License
      cd "$srcdir"/source-han-code-jp-2.012R/
      install -Dm644 LICENSE.txt \
          "$pkgdir/usr/share/licenses/$pkgname/LICENSE.txt"
}

md5sums=('1de1386bdcc357d9939d7352234945f9')

→ライセンス添付は必須ですね:

-

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:
Arch Linux の「PKGBUILD」と「.SRCINFO」の関係:

AUR にパッケージを公開する際、通常、この 2つのファイルがセットで必要になります。
「PKGBUILD」はビルド(実行)、「.SRCINFO」はパッケージ情報(表示・処理)に特化しています:

-

「PKGBUILD」はパッケージのビルド方法を記述したシェルスクリプトです。

「.SRCINFO」は「PKGBUILD」から生成される、依存関係やメタデータを含む静的な情報ファイルで、
「makepkg --printsrcinfo > .SRCINFO」コマンドで、「PKGBUILD」の内容に基づいて自動生成されます。

「.SRCINFO」は AUR ヘルパー が解析しやすく、高速に依存関係を確認したり、
 AUR サーバー 上でパッケージ情報を表示したりするために使用されます。

-


3). もし、ダウンロードしてインストールする場合:

-

(1). ツールのインストール:
$ sudo xbps-install -S wget
:
Name Action    Version       New version        Download size
wget install   -             1.25.0_1           805KB 

-

(2). 「SourceHanCodeJP.ttc」フォントのダウンロード:
$ mkdir -p ~/ダウンロード/fonts
$ cd ~/ダウンロード/fonts/
$ wget https://github.com/adobe-fonts/source-han-code-jp/releases/download/2.012R/SourceHanCodeJP.ttc

→ダウンロードに時間がかかるので、ネットが空いている時間帯に行うのが良いです:

-

確認:

$ ls -1 ~/ダウンロード/fonts/
SourceHanCodeJP.ttc

-

(3). システム全体で使えるようにインストール:

フォルダの作成:

$ sudo mkdir -p /usr/share/fonts/

-

コピー:

$ cd ~/ダウンロード/fonts/
$ sudo cp SourceHanCodeJP.ttc /usr/share/fonts/

-

確認:

$ ls -1p /usr/share/fonts/
:
NotoSansJP/
OTF/
SIL/
SourceHanCodeJP.ttc
TTF/
X11/
cantarell/
noto/
noto-emoji/
roboto/
truetype/

-

(4). フォントキャッシュをクリア:
$ sudo fc-cache -fv
:
fc-cache: succeeded

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----

15. 「アプリ」のインストール:

-

項番 13-2.」のスクリプトで「アプリ」のインストールをしていたら、インストール済なので、
こちらの作業は要りません:

不要なアプリがあれば削除してください。

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- -----

15-1. PC の詳細確認に便利な「screenfetch」をインストール:

-

たぶん、一度実行したら、実行する機会はほとんどないと思います:

-


1). インストールできるか確認:

$ pacman -Ss screenf
:
extra/screenfetch 3.9.9-1
    CLI Bash script to show system/theme info in screenshots
extra/screenkey 1.5-7
    A screencast tool to display your keys inspired by Screenflick

-


2). インストール:

$ sudo pacman -S screenfetch
:
パッケージ (2) bc-1.08.2-1  screenfetch-3.9.9-1
:
screenfetch の提案パッケージ
    scrot: to take screenshot
    xorg-xdpyinfo: resolution detection
    xorg-xprop: desktop environment detection [インストール済み]

-


3). PC 使用情報の表示(ロゴ表示なし):

$ screenfetch -n
:
 user@userPC5                           ←(ユーザ名@コンピュータ名)
 OS: Arch Linux                           ←(ディストリビューション)
 Kernel: x86_64 Linux 6.19.8-arch1-1      ←(カーネル)64bit
 Uptime: 5m
 Packages: 578
 Shell: bash
 Resolution: No X Server                 ←(VertualBox での解像度)★
 DE: Xfce4                                ←(デスクトップは Xfce)
 WM: Xfwm4                               ←(ウィンドウマネージャは Xfwm4)
 WM Theme: Smoothwall                    ←(ウィンドウのテーマ)
 GTK Theme: Adwaita [GTK2]
 Icon Theme: elementary
 Font: Sans 10
 Disk: 14G / 30G (47%)
 CPU: 12th Gen Intel Core i5-12450H @ 8x 2.496GHz
 GPU: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter
 RAM: 722MiB / 7663MiB

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- -

15-2. テキストエディタ「featherpad」のインストール:

-

高機能なテキストエディタで、「Qt アプリ」です:

-


1). 確認:

$ pacman -Ss featherpad
:
extra/featherpad 1.6.3-1 
    Lightweight Qt plain text editor

-


2). インストール:

$ sudo pacman -S featherpad
:
Packages (1) featherpad-1.6.3-1

-


3). バージョンの確認:

$ featherpad --version
:
FeatherPad 1.6.3

-


4). 設定は「こちら」を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- --

15-3. ファイアウォール「gufw」のインストール:

-


1). インストールできるか確認:

$ pacman -Ss gufw
:
extra/gufw 26.04-2
    Uncomplicated way to manage your Linux firewall

-


2). インストール:

$ sudo pacman -S gufw
:
Packages (1) gufw-26.04-2

-


3). 設定は、「こちら」を参照:

-

補足:

「ssh 接続」して使う場合は、リンク先の「項番 2)」のファイアウォールの開始: は行いません:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ---

15-4. ディスクの管理の「disks」のインストール:

-


1). インストールできるか確認:

$ pacman -Ss gnome-disk
:
extra/gnome-disk-utility 46.1-2 (gnome) 
    Disk Management Utility for GNOME

-


2). インストール:

$ sudo pacman -S gnome-disk-utility
:
Packages (1) gnome-disk-utility-46.1-2

-


3). 起動して動作確認:

「アプリケーション」→「アクセサリ」→「ディスク」

-

-


4). 使い方は、「こちら」を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----

15-5. ディスクのパーティション管理の「gparted」のインストール:

-


1). インストールできるか確認:

$ pacman -Ss gparted
:
extra/gparted 1.8.1-1
    A Partition Magic clone, frontend to GNU Parted

-


2). インストール:

$ sudo pacman -S gparted
:
パッケージ (1) gparted-1.8.1-1

-


3). 起動して動作確認:

「アプリケーション」→「システム」→「Gparted」

-

→「スワップパーティション」があることに注目:

-


4). 使い方は、「こちら」を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- -----

15-6. 音楽プレーヤの「audacious」のインストール:

-


1). インストールできるか確認:

$ pacman -Ss audacious
:
extra/audacious 4.5.1-1
    Lightweight, advanced audio player focused on audio quality
extra/audacious-plugins 4.5.1-2 
    Plugins for Audacious
extra/playerctl 2.4.1-5
    mpris media player controller and lib for spotify, vlc, audacious, bmp,
    xmms2, and others.

-


2). インストール:

$ sudo pacman -S audacious
:
Packages (1) audacious-4.5.1-1

-


3). インストールされたかの確認:

$ pacman -Ss audacious
:
extra/audacious 4.5.1-1 [インストール済み]
    Lightweight, advanced audio player focused on audio quality
extra/audacious-plugins 4.5.1-2 [インストール済み]
    Plugins for Audacious
extra/playerctl 2.4.1-5
    mpris media player controller and lib for spotify, vlc, audacious, bmp,
    xmms2, and others.

-


4). バージョンの確認:

$ audacious --version
:
Audacious 4.5.1 (Arch Linux)

-


5). 起動して動作確認:

「アプリケーション」→「マルチメディア」→「Audacious」

-


6). 詳細は、「こちら」を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- -

15-7. 画像加工の「kolourpaint」のインストール:

-


1). インストールできるか確認:

$ pacman -Ss kolou
:
extra/kolourpaint 25.12.3-1 (kde-applications kde-graphics) 
    Paint Program

-


2). インストール:

$ sudo pacman -S kolourpaint
:
Packages (1) kolourpaint-25.12.3-1

-


3). バージョンの確認:

$ kolourpaint --version
:
kolourpaint 25.12.3

-


4). 起動して動作確認:

「アプリケーション」→「グラフィックス」→「KolourPaint」

-


5). 詳細は、「こちら」を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- --

15-8. PDF ビュワー「qpdfview」のインストール:

-


1). インストールできるか確認:

$ pacman -Ss qpdfv
$

→公式リポジトリにありません:

-

$ paru -Ss qpdfview
:
aur/qpdfview 0.5.0-3 [+56 ~0.21] 
    A tabbed PDF viewer using the poppler library
aur/qpdfview-bzr 2070-1 [+8 ~0.00]
    A tabbed PDF viewer using the poppler library (development version)

-


2). インストール:

$ paru -S qpdfview
:
Aur (1) qpdfview-0.5.0-3

→インストールされたのは、「qpdfview 0.5.0」です:

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「Void Linux」の xbps-src では「Qt6」への移行の影響で qpdfview はビルドに失敗します:

参考に、インストールせずに PKGBUILD を表示:
$ paru -Gp qpdfview
# Maintainer: Carlos Aznarán <caznaranl@uni.pe>
# Contributor: Antonio Rojas <arojas@archlinux.org>
# Contributor: Alad Wenter <alad@mailbox.org>
# Contributor: Adam Reichold <adam.reichold@t-online.de>
pkgname=qpdfview
pkgver=0.5.0
pkgrel=3
pkgdesc="A tabbed PDF viewer using the poppler library"
url="https://launchpad.net/${pkgname}"
arch=(x86_64 aarch64)
license=(GPL-2.0-or-later)
depends=(libcups libsynctex poppler-qt6 qt6-svg)
makedepends=(qt6-tools libspectre djvulibre)
optdepends=('libspectre: for PostScript support'
  'djvulibre: for DjVu support')
source=(${url}/trunk/${pkgver}/+download/${pkgname}-${pkgver::-2}.tar.gz{,.asc})
sha512sums=('1b6b479bb42f4568c21b5f6cb0c552c4323739ba9fe46cea80cc199f48b0b49a278e0a2fb0d21f83bafb467e43dd37352b99ef41795d140220bb82d704e03926'
  'SKIP')
validpgpkeys=('1F521FF0F87E9E1CDE46B8A9F4928C4DD24D4DF8') # Adam Reichold <adam.reichold@t-online.de>

prepare() {
  sed -i 's/CONFIG += c++11/CONFIG += c++17/' ${pkgname}-${pkgver::-2}/qpdfview.pri
}

build() {
  cd ${pkgname}-${pkgver::-2}
  /usr/lib/qt6/bin/lrelease qpdfview.pro
  qmake6 qpdfview.pro
  make
}

package() {
  cd ${pkgname}-${pkgver::-2}
  make INSTALL_ROOT="$pkgdir" install
}

→「Void Linux」では使えない、「qmake6」が使われています:

-

参考:

Qt6 では、ビルドシステムは「qmake」から「cmake」に移行しました:

なので(今のところ)「Void Linux」では「qmake5」までで、「qmake6」はサポートされていません:

メンテされていない古いアプリの移行(移植 ?)が大変です:

なので「Arch Linux」では要望が多くてサポートされているのか、現在は使えるようになったのかな。

-

「qmake6」を入れたパッケージを確認:
$ whereis qmake6
:
qmake6: /usr/bin/qmake6

-

$ sudo pacman -Qo /usr/bin/qmake6
:
/usr/bin/qmake6 は qt6-base 6.10.2-1 によって所有されています

-

$ pacman -Ss qt6-base
extra/qt6-base 6.10.2-1 (qt6) [インストール済み]
    A cross-platform application and UI framework
→「qt6-base」をインストールすれば、「qmake6」が使えるようになるみたい:

-


3). 起動して確認:

「アプリケーション」→「オフィス」→「qpdfview」を起動:

-

→ヘルプ以外は日本語化されています:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---

16. 「ゲーム」のインストール:

-

項番 13-3.」のスクリプトで「ゲーム」のインストールをしていたら、インストール済なので、
こちらの作業は要りません:

不要なアプリがあれば削除してください。

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----

16-1. 「swell-foop」をインストール:

-

「さめざめ」もどきで、音が出ないのが惜しいです。

-


1). インストールできるか確認:

$ pacman -Ss swell-f
:
extra/swell-foop 48.1-2 (gnome-extra)
    Clear the screen by removing groups of colored and shaped tiles

→検索する「アプリ名」か「説明文」の、一部がわかれば、ヒットします:

-


2). インストール:

$ sudo pacman -S swell-foop
:
パッケージ (3) libgee-0.20.8-1  libgnome-games-support-2-2.0.2-1
               swell-foop-48.1-2

-


3). メニューの修正:

$ sudo featherpad /usr/share/applications/org.gnome.SwellFoop.desktop

↓ 行を修正:

Name[ja]=Swell Foop さめざめもどき

-


4). 起動して動作確認:

「アプリケーション」→「ゲーム」→「Swell Foop さめざめもどき」

-

実行時の画面:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----

16-2. 「マインスイーパ」のインストール:

-


1). インストールできるか確認:

$ pacman -Ss kmines
:
extra/kmines 25.12.3-1 (kde-applications kde-games)
    The classic Minesweeper game

-


2). インストール:

$ sudo pacman -S kmines
:
パッケージ (10) attica-6.24.0-1  kcmutils-6.24.0-1  kdnssd-6.24.0-1
                kirigami-6.24.0-1  knewstuff-6.24.0-1  kpackage-6.24.0-1
                libkdegames-25.12.3-1  openal-1.25.1-1  syndication-6.24.0-1
                kmines-25.12.3-1

-


3). メニューの修正:

$ sudo featherpad /usr/share/applications/org.kde.kmines.desktop

↓ 行を修正:

Name[ja]=KMines マインスイーパ

-


4). 起動して動作確認:

「アプリケーション」→「ゲーム」→「KMines マインスイーパ」

-

実行時の画面:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -

16-3. 「ソリティア」(クロンダイク)のインストール:

-

カードゲーム集なので、いくつかのカードゲームで遊べます:

-


1). インストールできるか確認:

$ pacman -Ss aisleriot
:
extra/aisleriot 3.22.35-1
    A collection of patience games written in guile scheme

-


2). インストール:

$ sudo pacman -S aisleriot
:
パッケージ (1) aisleriot-3.22.35-1

-


3). 起動して動作確認:

「アプリケーション」→「ゲーム」→「AisleRiot ソリティア」

-

実行時の画面:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- --

16-4. 「四川省」(kshisen) のインストール:

-


1). インストールできるか確認:

$ pacman -Ss shisen
:
extra/kshisen 25.12.3-1 (kde-applications kde-games)
    A solitaire-like game played using the standard set of Mahjong tiles

-


2). インストール:

$ sudo pacman -S kshisen
:
パッケージ (11) attica-6.24.0-1  kcmutils-6.24.0-1  kdnssd-6.24.0-1
                kirigami-6.24.0-1  knewstuff-6.24.0-1  kpackage-6.24.0-1
                libkdegames-25.12.3-1  libkmahjongg-25.12.3-1  openal-1.25.1-1
                syndication-6.24.0-1  kshisen-25.12.3-1

-


3). メニューの修正:

$ sudo featherpad /usr/share/applications/org.kde.kshisen.desktop
GenericName[ja]=四川省マージャン牌ゲーム

↓ 行を追記:

Name[ja]=kshisen 四川省 (Shisen-Sho)

-


4). 起動して動作確認:

「アプリケーション」→「ゲーム」→「kshisen 四川省 (Shisen-Sho)」

-

実行時の画面:

2回以内の折れで、同じパイを消して行きます。パイが無くなると重力で落ちます。

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---

16-5. 「上海」 (KMahjongg) のインストール:

-


1). インストールできるか確認:

$ pacman -Ss kmahjongg
:
extra/kmahjongg 25.12.3-1 (kde-applications kde-games)
    A tile matching game for one or two players
extra/libkmahjongg 25.12.3-1
    Common code, backgrounds and tile sets for games using Mahjongg tiles

-


2). インストール:

$ sudo pacman -S kmahjongg
:
パッケージ (11) attica-6.24.0-1  kcmutils-6.24.0-1  kdnssd-6.24.0-1
                kirigami-6.24.0-1  knewstuff-6.24.0-1  kpackage-6.24.0-1
                libkdegames-25.12.3-1  libkmahjongg-25.12.3-1  openal-1.25.1-1
                syndication-6.24.0-1  kmahjongg-25.12.3-1

-


3). メニューの修正:

$ sudo featherpad /usr/share/applications/org.kde.kmahjongg.desktop

↓ 行を修正:

Name[ja]=KMahjongg 上海

-


4). 起動して動作確認:

「アプリケーション」→「ゲーム」→「KMahjongg 上海」

-

実行時の画面:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----

16-6. 「中国式四人麻雀」 (kajongg) のインストール:

-


1). インストールできるか確認:

$ pacman -Ss kajongg
:
extra/kajongg 25.12.3-1 (kde-applications kde-games)
    The ancient Chinese board game for 4 players

-


2). インストール:

$ sudo pacman -S kajongg
:
パッケージ (20) clang21-21.1.8-1  compiler-rt21-21.1.8-1  llvm-22.1.1-1
                llvm21-21.1.8-1  llvm21-libs-21.1.8-1  pyside6-6.10.2-4
                python-attrs-26.1.0-1  python-automat-25.4.16-2
                python-click-8.3.2-1  python-constantly-23.10.4-3
                python-hyperlink-21.0.0-8  python-idna-3.11-2
                python-incremental-24.7.2-4  python-packaging-26.0-1
                python-qtpy-2.4.3-7  python-twisted-24.7.0-3
                python-typing_extensions-4.15.0-3  python-zope-interface-8.2-1
                shiboken6-6.10.2-4  kajongg-25.12.3-1

-

音声機能をインストール:
$ sudo pacman -S vorbis-tools
:
パッケージ (2) libao-1.2.2-7  vorbis-tools-1.4.3-1

-


3). メニューの修正:

$ sudo featherpad /usr/share/applications/org.kde.kajongg.desktop

↓ 追記:

Name[ja]=Kajongg 中国式四人麻雀

-


4). 起動して動作確認:

「アプリケーション」→「ゲーム」→「Kajongg 中国式四人麻雀」

-

実行時の画面:

→日本語化されていません:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----

16-7. frozen-bubble(フローズン・バブル)のインストール:

-

「frozen-bubble」は楽しいアプリですが、移植では、依存する「sdl」関連の解決で苦労するアプリです:

→依存の sdl が sdl3 に更新された影響なのか、現在、aur の「perl-sdl-2.548-15」のビルドで失敗します:

-

依存に「aur パッケージ」が含まれていると、更新によりビルドで失敗する確率が高くなります:

これは「Void Linux」に「frozen-bubble」がなかなか移植されない?理由のひとつ:

まず、依存する複数の「aur パッケージ」の移植が必要で、その移植ができないと前に進めません。
移植できても、更新で使えなくなるリスクがあるので、継続は大変です。

→「sdl」関連を勉強したいときは別ですが、
 使いたいときは、使用環境に左右されない「Flatpak」版が楽 です。

-


1). インストールできるか確認:

$ pacman -Ss frozen-bubble
$

→公式リポジトリにありません:

-

$ paru -Ss frozen-bubble
:
aur/frozen-bubble 2.212-2 [+9 ~0.00]
    A game in which you throw colorful bubbles and build groups to destroy the 
    bubbles

-


2). インストール:

$ paru
$ paru -S frozen-bubble
:
リポジトリ (11) perl-capture-tiny-0.50-4  perl-file-which-1.27-8  
        perl-class-inspector-1.36-10  perl-file-sharedir-1.118-8  
        perl-tie-simple-1.04-16  sdl_net-1.2.8-6  sdl_ttf-2.0.11-8  
        sdl_image-1.2.12-9  sdl_gfx-2.0.27-1  perl-ipc-system-simple-1.30-9  
        perl-compress-bzip2-2.28-8
リポジトリ ビルド (21) perl-file-slurp-9999.32-5  
        perl-locale-maketext-lexicon-1.00-5  perl-inc-latest-0.500-15  
        perl-module-build-0.4234-6  perl-class-data-inheritable-0.10-1  
        perl-devel-stacktrace-2.05-4  perl-exception-class-1.45-7  
        perl-test-nowarnings-1.06-4  perl-test-deep-1.205-1  
        perl-algorithm-diff-1:1.201-8  perl-text-diff-1.45-3  
        perl-test-differences-0.72-3  perl-sub-uplevel-0.2800-5  
        perl-test-exception-0.43-13  perl-file-slurper-0.014-6  
        perl-tree-dag-node-1.35-1  perl-test-warn-0.37-2  perl-test-most-0.38-6
        perl-archive-extract-0.88-8  perl-archive-zip-1.68-12  
        perl-text-patch-1.8-16
Aur (4) perl-alien-sdl-1.446-17  sdl_pango-0.1.2-10  perl-sdl-2.548-15
        frozen-bubble-2.212-2

→依存が多いだけでなく、複数の aur パッケージも必要です:

-

エラー:

:
t/core.t ........................ 1/28 
#   Failed test '[get_error] got error '
#   at t/core.t line 67.
#          got: ''
#     expected: anything else
# Looks like you failed 1 test of 28.
t/core.t ........................ Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/28 subtests 
    (3 TODO tests unexpectedly succeeded)
:
Files=59, Tests=3833, 156 wallclock secs ( 0.30 usr  0.12 sys + 71.91 cusr  4.88 csys = 77.21 CPU)
Result: FAIL
Failed 1/59 test programs. 1/3833 subtests failed.
==> エラー: check() で問題が発生しました。
    中止...
エラー: 'perl-sdl-2.548-15' のビルドに失敗しました: 
エラー: 依存関係perl-sdlが満たされないため、frozen-bubble-2.212-2をビルドできませんでした
エラー: パッケージのビルドに失敗しました: perl-sdl-2.548-15  frozen-bubble-2.212-2
[user@userPC5 ~]$ 

→依存の「perl-sdl-2.548-15」のビルドに失敗:

-


3). 「$ LANG=C paru -Ss frozen-bubble」で実行してエラーを(検索がヒットしやすい)英語で表示:

「error: failed to build 'perl-sdl-2.548-15':」でネット検索:

github-pr308-fix-reference-counting-in-set_event_filter.diff や、SurfaceXSに関するパッチが適用されているか確認

-


4). 依存パッケージのみをビルドしてみる:

$ paru -S perl-sdl
:
Aur (1) perl-sdl-2.548-15
:
==> check() を開始...
[Alien::SDL] Build option used:
    Already installed SDL ver=1.2.68 path=/usr
Building SDL
t/00-load.t ..................... ok    
t/colorpm.t ..................... ok     
t/config.t ...................... ok   
t/core.t ........................ 1/28 
#   Failed test '[get_error] got error '
#   at t/core.t line 67.
#          got: ''
#     expected: anything else
# Looks like you failed 1 test of 28.
t/core.t ........................ Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/28 subtests 
    (3 TODO tests unexpectedly succeeded)
t/core_audio.t .................. ok     
t/core_audiospec.t .............. skipped: author tests not required for installation
t/core_cd.t ..................... 1/? INFO: This app is looking for CD-ROM drives, but no path was specified
INFO: Set the SDL12COMPAT_FAKE_CDROM_PATH environment variable to a directory
INFO: of MP3 files named trackXX.mp3 where XX is a track number in two digits
INFO: from 01 to 99
t/core_cd.t ..................... ok    
t/core_error.t .................. ok   
t/core_events.t ................. ok     
t/core_joystick.t ............... ok    
t/core_mouse.t .................. ok   
t/core_multi.t .................. ok   
t/core_overlay.t ................ ok   
t/core_palette.t ................ ok     
t/core_rect.t ................... ok     
t/core_rwops.t .................. ok    
t/core_surface.t ................ ok     
t/core_timer.t .................. ok   
t/core_version.t ................ ok   
t/core_video.t .................. ok     
t/core_video_convert_surface.t .. ok   
t/core_video_gamma.t ............ ok   
t/extendingrect.t ............... ok   
t/gfx.t ......................... ok   
t/gfx_fpsmanager.t .............. ok     
t/gfx_framerate.t ............... ok   
t/gfx_imagefilter.t ............. ok   
t/gfx_primitives.t .............. ok    
t/gfx_primitives2.t ............. ok    
t/gfx_rotozoom.t ................ ok     
t/image.t ....................... ok    
t/image_xpm_array.t ............. ok   
t/mixer.t ....................... ok    
t/mixer_channels.t .............. ok    
t/mixer_effects.t ............... ok    
t/mixer_groups.t ................ ok    
t/mixer_mixchunk.t .............. ok   
t/mixer_mixmusic.t .............. ok   
t/mixer_music.t ................. ok    
t/mixer_samples.t ............... ok    
t/pango.t ....................... ok    
t/sdlgamerect.t ................. ok     
t/sdlx_app.t .................... ok   
t/sdlx_controller.t ............. ok      
t/sdlx_controller_interface.t ... ok    
t/sdlx_fps.t .................... ok    
t/sdlx_layermanager.t ........... ok    
t/sdlx_music.t .................. ok    
t/sdlx_rect.t ................... ok    
t/sdlx_sfont.t .................. ok   
t/sdlx_sound.t .................. ok   
t/sdlx_sprite.t ................. ok    
t/sdlx_sprite_animated.t ........ ok     
t/sdlx_surface.t ................ ok     
t/sdlx_text.t ................... ok    
t/sdlx_validate.t ............... ok    
t/smpeg.t ....................... skipped: smpeg support not compiled
t/ttf.t ......................... ok    
t/ttf_font.t .................... ok   

Test Summary Report
-------------------
t/core.t                      (Wstat: 256 (exited 1) Tests: 28 Failed: 1)
  Failed test:  20
  TODO passed:   21-22, 27
  Non-zero exit status: 1
t/core_multi.t                (Wstat: 0 Tests: 4 Failed: 0)
  TODO passed:   3
t/core_timer.t                (Wstat: 0 Tests: 6 Failed: 0)
  TODO passed:   6
t/core_video.t                (Wstat: 0 Tests: 110 Failed: 0)
  TODO passed:   57, 59
t/gfx_imagefilter.t           (Wstat: 0 Tests: 8 Failed: 0)
  TODO passed:   7
Files=59, Tests=3833, 159 wallclock secs ( 0.32 usr  0.12 sys + 71.54 cusr  5.81 csys = 77.79 CPU)
Result: FAIL
Failed 1/59 test programs. 1/3833 subtests failed.
==> エラー: check() で問題が発生しました。
    中止...
エラー: 'perl-sdl-2.548-15' のビルドに失敗しました: 
エラー: パッケージのビルドに失敗しました: perl-sdl-2.548-15
[user@userPC5 ~]$ 

→当然ながら、同じエラー:

-


5). PKGBUILD の確認:

$ paru -Gp perl-sdl
# Contributor:  Marcell Meszaros < marcell.meszaros AT runbox.eu >
# Contributor: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
# Contributor: Allan McRae <allan@archlinux.org>
# Contributor: Sarah Hay <sarahhay@mb.sympatico.ca>

pkgname=perl-sdl
pkgver=2.548
pkgrel=15
pkgdesc='Simple DirectMedia Layer for Perl'
arch=('x86_64')
license=('LGPL')
url='https://metacpan.org/dist/SDL'
depends=(
  'perl>=5.008'
  'perl-alien-sdl>=1.446'
  'perl-cpan>=1.92'
  'perl-file-sharedir>=1.00'
  'perl-tie-simple'
  'perl-scalar-list-utils'
  'sdl_net'
  'sdl_ttf'
  'sdl_image'
  'sdl_mixer'
  'sdl_gfx'
  'sdl_pango'
)
makedepends=(
  'perl-capture-tiny'
  'perl-extutils-cbuilder'
  'perl-module-build>=0.40'
  'perl-test-most>=0.21'
  'perl-test-simple>=0.88'
)
options=('!emptydirs')
_cpan_author='FROGGS'
readonly -a patches=(         ←(適用されている複数のパッチ)
  github-pr304-dont-use-deprecated-macro.diff
  github-pr306-distinguish-owned-and-borrowed.diff
  github-pr308-fix-reference-counting-in-set_event_filter.diff
  surface-xs-declare-calc-offset-earlier.diff
  avoid-undefined-import.diff
  github-pr309-fix-boot-sdl-declaration.diff
  github-pr310-core-surface-test-use-4bpp.diff
)
source=(
  "https://cpan.metacpan.org/authors/id/${_cpan_author::1}/${_cpan_author::2}/$_cpan_author/SDL-$pkgver.tar.gz"
  "${patches[@]}"
)
sha512sums=(
  'bafc49dddb7e592861f822920915c73bf0c5eea3a6c567623b48a2332c7644caf1451e457545e6666adea5e314b23bcd85a3f3a52c770abfd498c0e4c0feae85'
  '9ac9d6185f0b1fba3c70f8eb32c2324619688bc12ce13792be24c006b7f93e9997b60f14bf8a92e3739653a2433ac52ddedb3eac35982b7e54e31d4559e9e11d'
  '02e448fcee25983f944f9fda42a79766226d2ff01bc3abc7ee3f712534e88c34fb91ee527d36044a53792e1b39a5303d60e69037df26f8ad9ac2e7966885b322'
  '2840f9a7173cdf3b1fb714c24f25d8d5da2fb11197a12104a07839679d2968c5ed78f32ac8487bc78f60725ffd3b86bbbdf168048c3e1a2ec2181757ad0c9e71'
  'c26a53e711b4f5c14430956afec0a2c8cd8c6280c471d428ba3bd3f8c20f337622023aac77b1679aad2ef9260207013d4cd9fd5af196cc6c1e409891fea69758'
  'de367c05c2bd0074c279b61679b5cbf012dbf70716b130c13a144dd20c4ea8fe27e0d6dfafb51237f16c5d8ee2b252baddefa87d51218a7daf43456b45b04bc8'
  '1f6f93a9b05dab10787b6cc0add4a359fb02b4686b1bef2f967f7eb9ad6a1e5588e63a7c61ae00fc66f1d9c163cb7838ed5dffb2b02c503e1a748b2c1f80e297'
  'ec13e27c2d66776e10ab1f15ac7750f2fd37b6d0d2cdd1e1ea1bd92f5c206461a768f815f7b74c6eb8beebfd19b80b2267ec8c99133df5c660d3334d5730522b'
)

prepare() {
  cd SDL-$pkgver

  for p in "${patches[@]}"; do
    patch -p1 -i "../${p}"
  done
}

build() {
  cd SDL-$pkgver
  # Perl selects the proper CFLAGS set for binary modules
  unset CFLAGS
  # install module in vendor directories
  perl Build.PL installdirs=vendor
  perl Build
}

check() {
  cd SDL-$pkgver
  perl Build test
}

package() {
  cd SDL-$pkgver
  perl Build install destdir="$pkgdir"
}

→パッチも多いです:

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「perl-sdl」のパッチについて:

これらのパッチは、主に「frozen-bubble」などの
「perl-sdl」に依存するアプリケーション の関連するテストの失敗を解決し、
パッケージのビルドを安定させるために
メンテナ が GitHub 上の不具合の修正(プルリクエスト)をパックしたものです。

-

perl-sdl(Perl 用 Simple DirectMedia Layer)パッケージをビルドする際、
他のパッチ(github-pr304-dont-use-deprecated-macro.diffなど)と共に使用されます:

「github-pr308-fix-reference-counting-in-set_event_filter.diff」は、
Arch LinuxのAUR における「perl-sdl」パッケージのビルド時に適用される、 SDL_SetEventFilter 使用時のリファレンスカウント(参照カウンタ)のバグを修正するパッチです。

-


6). 依存の確認:

$ paru -Ss sdl | grep 済
:
extra/sdl12-compat 1.2.68-2 [インストール済み]
extra/sdl2-compat 2.32.64-1 [インストール済み]
extra/sdl2_image 2.8.8-1 [インストール済み]
extra/sdl2_mixer 2.8.1-2 [インストール済み]
extra/sdl2_ttf 2.24.0-2 [インストール済み]
extra/sdl3 3.4.2-1 [インストール済み]   ←(バージョンに注目)sdl3
extra/sdl_gfx 2.0.27-1 [インストール済み]
extra/sdl_image 1.2.12-9 [インストール済み]
extra/sdl_mixer 1.2.12-13 [インストール済み]
extra/sdl_net 1.2.8-6 [インストール済み]
extra/sdl_ttf 2.0.11-8 [インストール済み]
aur/sdl_pango 0.1.2-10 [+7 ~0.02] [インストール済み]
aur/perl-alien-sdl 1.446-17 [+5 ~0.00] [インストール済み]

→(関連するテストの失敗を解決し、パッケージのビルドを安定させるために追加の)
sdl2 向けのパッチが sdl3 に適応しているかはわかりません。

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -

16-8. 「宇宙船スクロールシューティングゲーム」(kobodeluxe) のインストール:

-


1). インストールできるか確認:

$ pacman -Ss kobodeluxe
$

→公式リポジトリにありません:

-

$ paru -Ss kobodeluxe
:
aur/kobodeluxe 0.5.1-15 [+4 ~0.00]
    3rd person scrolling 2D shooter

-


2). インストール:

$ paru -S kobodeluxe
:
リポジトリ (2) sdl12-compat-1.2.68-2  sdl_image-1.2.12-9
Aur (1) kobodeluxe-0.5.1-15
:
curl: (22) The requested URL returned error: 403
==> エラー: http://www.olofson.net/kobodl/download/KoboDeluxe-0.5.1.tar.gz のダウンロードに失敗

→「ソースファイル」のダウンロードで拒否され、失敗しました:

-


3). ダウンロードエラーの確認:

(1). PKGBUILD を確認:
$ paru -Gp kobodeluxe

一部抜粋:

_pkgname="kobodeluxe"
pkgname="$_pkgname"
pkgver=0.5.1
pkgrel=15
_debrel=10
pkgdesc='3rd person scrolling 2D shooter'
arch=(x86_64)
url='http://www.olofson.net/kobodl/'
license=(GPL2 LGPL2.1)
depends=(
  'hicolor-icon-theme'
  'sdl_image'
)
source=(
  "http://www.olofson.net/kobodl/download/KoboDeluxe-${pkgver}.tar.gz"
  "http://deb.debian.org/debian/pool/main/k/$_pkgname/${_pkgname}_${pkgver}-${_debrel}.debian.tar.xz"
)
sha256sums=(
  '2d5a4c3cd573e39640d4fdf81517eff7cb13fd6d433fc053563e79bb18b8071a'
  '646102c0e8699dbd1c6d01a4a2bfdc362295414ec1f26c0195d3fba763adca42'
)

-


4). ダウンロード情報:

「KoboDeluxe-0.5.1.tar.gz」のダウンロードは、セキュリティ強化で「ロボット検証」が追加され、自動ダウンロードに対応しなくなったみたい:

-

自動ダウンロードするには、違う URL に変更が必要:
https://www.olofson.net/kobodl/download/KoboDeluxe-0.5.1.tar.bz2

$ sha256sum KoboDeluxe-0.5.1.tar.bz2
0f7b910a399d985437564af8c5d81d6dcf22b96b26b01488d72baa6a6fdb5c2c  KoboDeluxe-0.5.1.tar.bz2

ファイルの拡張子(ファイル名)と、チェックサム値が異なります:

→「PKGBUILD」の修正が必要です:

-

もうひとつの URL は、
https://ftp.debian.org/debian/pool/main/k/kobodeluxe/kobodeluxe_0.5.1-10.debian.tar.xz

$ sha256sum kobodeluxe_0.5.1-10.debian.tar.xz
646102c0e8699dbd1c6d01a4a2bfdc362295414ec1f26c0195d3fba763adca42  kobodeluxe_0.5.1-10.debian.tar.xz

→変更なし:

-


5). PKGBUILD を修正してインストールしてみる:

-

(1). ビルド環境を整えます:
$ sudo pacman -S --needed base-devel
:
警告: base-devel-1-2 は最新です -- スキップ
 何も行うことがありません

-

(2). AUR から「ソースファイル」をクローン:
$ mkdir -p ~/git/
$ cd ~/git/
$ git clone https://aur.archlinux.org/kobodeluxe.git
:
Cloning into 'kobodeluxe'...
remote: Enumerating objects: 19, done.
remote: Counting objects: 100% (19/19), done.
remote: Compressing objects: 100% (17/17), done.
remote: Total 19 (delta 1), reused 19 (delta 1), pack-reused 0 (from 0)
Receiving objects: 100% (19/19), 6.90 KiB | 6.90 MiB/s, done.
Resolving deltas: 100% (1/1), done.

-

ファイルの確認:

$ cd ~/git/kobodeluxe/
$ ls -1Ap
:
.SRCINFO
.git/
.gitignore
PKGBUILD

-

(3). PKGBUILD の編集:
$ nano PKGBUILD

最初の URL のファイル名とチェックサム値の修正:

source=(
  "http://www.olofson.net/kobodl/download/KoboDeluxe-${pkgver}.tar.gz"
  "http://deb.debian.org/debian/pool/main/k/$_pkgname/${_pkgname}_${pkgver}-${_debrel}.debian.tar.xz"
)
sha256sums=(
  '2d5a4c3cd573e39640d4fdf81517eff7cb13fd6d433fc053563e79bb18b8071a'
  '646102c0e8699dbd1c6d01a4a2bfdc362295414ec1f26c0195d3fba763adca42'

↓ すべて置換:

source=(
  "http://www.olofson.net/kobodl/download/KoboDeluxe-${pkgver}.tar.bz2"
  "http://deb.debian.org/debian/pool/main/k/$_pkgname/${_pkgname}_${pkgver}-${_debrel}.debian.tar.xz"
)
sha256sums=(
  '0f7b910a399d985437564af8c5d81d6dcf22b96b26b01488d72baa6a6fdb5c2c'
  '646102c0e8699dbd1c6d01a4a2bfdc362295414ec1f26c0195d3fba763adca42'

Ctrl+k で、余分な「行の削除」ができます:

Ctrl+O でファイルを確認して、Enter で保存:

Ctrl+X で終了:

-

確認:

$ cat PKGBUILD

-

(4). AUR で使える、便利なツールを含む「pacman-contrib」をインストール:
$ sudo pacman -S pacman-contrib
:
パッケージ (1) pacman-contrib-1.13.1-1
:
pacman-contrib の提案パッケージ
    diffutils: for pacdiff [インストール済み]
    fakeroot: for checkupdates [インストール済み]
    findutils: for pacdiff --find [インストール済み]
    mlocate: for pacdiff --locate
    plocate: faster mlocate alternative
    perl: for pacsearch [インストール済み]
    sudo: privilege elevation for several scripts [インストール済み]
    vim: default diff program for pacdiff [インストール済み]
    neovim: default diff program for pacdiff if EDITOR=nvim

-

(5). ツールを使って、チェックサムを更新してみる:

上記で修正したので不要ですが、ツールが使えるかを確認:

$ updpkgsums
==> ソースを取得...
  -> ダウンロード KoboDeluxe-0.5.1.tar.bz2...
  % Total    % Received % Xferd  Average Speed  Time    Time    Time   Current
                                 Dload  Upload  Total   Spent   Left   Speed
  0      0   0      0   0      0      0      0                              0
  0      0   0      0   0      0      0      0                              0
curl: (22) The requested URL returned error: 403
==> エラー: http://www.olofson.net/kobodl/download/KoboDeluxe-0.5.1.tar.bz2 のダウンロードに失敗
    中止...
==> ERROR: Failed to generate new checksums
→あれれ、ダウンロードで失敗します:
「403 Forbidden」は「その場所にはあるが、見せられない」状態です。
サーバ 側がボット(curl)からのアクセスを制限している(User-Agent 制限)みたい:

どうせエラーするので、「PKGBUILD」の修正はいらなかったかな。

-

(6). ビルドとインストール:

手動でダウンロード済なので、たぶん行けると思うけど、

$ cd ~/git/kobodeluxe/
$ makepkg -si
:
==> パッケージを作成: kobodeluxe 0.5.1-15 (2026年03月24日 19時01分31秒)
==> ランタイムの依存関係を確認...
==> ビルドタイムの依存関係を確認...
==> ソースを取得...
  -> ダウンロード KoboDeluxe-0.5.1.tar.bz2...
  % Total    % Received % Xferd  Average Speed  Time    Time    Time   Current
                                 Dload  Upload  Total   Spent   Left   Speed
  0      0   0      0   0      0      0      0                              0
  0      0   0      0   0      0      0      0                              0
curl: (22) The requested URL returned error: 403
==> エラー: http://www.olofson.net/kobodl/download/KoboDeluxe-0.5.1.tar.bz2 のダウンロードに失敗
    中止...

→これも「curl」が使われるので、ダメです:

-


6). PKGBUILD を編集して、ソースをローカル指定にしました:

-

(1). 「ソースファイル」を手動でダウンロード:

ブラウザで下記の URL を開きます:

http://www.olofson.net/kobodl/download/KoboDeluxe-0.5.1.tar.bz2

-

-

「私はロボットではありません」にチェック:

→「~/ダウンロード」フォルダに「KoboDeluxe-0.5.1.tar.bz2」がダウンロードされました:

-

(2). 「PKGBUILD」があるディレクトリに、ダウンロードした(未解凍の)「ソースファイル」を配置:
$ cd ~/git/kobodeluxe/
$ cp ~/ダウンロード/KoboDeluxe-0.5.1.tar.bz2 ./

-

確認:

$ ls -1Ap
:
.SRCINFO
.git/
.gitignore
KoboDeluxe-0.5.1.tar.bz2
PKGBUILD
src/

-

(3). PKGBUILD の編集:
$ nano PKGBUILD

最初の URL のファイル名を「ローカル指定」にして、チェックサム値の修正:

source=(
  "http://www.olofson.net/kobodl/download/KoboDeluxe-${pkgver}.tar.bz2"
  "http://deb.debian.org/debian/pool/main/k/$_pkgname/${_pkgname}_${pkgver}-${_debrel}.debian.tar.xz"
)
sha256sums=(
  '0f7b910a399d985437564af8c5d81d6dcf22b96b26b01488d72baa6a6fdb5c2c'
  '646102c0e8699dbd1c6d01a4a2bfdc362295414ec1f26c0195d3fba763adca42'

↓ すべて置換:

source=(
  "KoboDeluxe-${pkgver}.tar.bz2"
  "http://deb.debian.org/debian/pool/main/k/$_pkgname/${_pkgname}_${pkgver}-${_debrel}.debian.tar.xz"
)
sha256sums=(
  '0f7b910a399d985437564af8c5d81d6dcf22b96b26b01488d72baa6a6fdb5c2c'
  '646102c0e8699dbd1c6d01a4a2bfdc362295414ec1f26c0195d3fba763adca42'

Ctrl+k で、余分な「行の削除」ができます:

Ctrl+O でファイルを確認して、Enter で保存:

Ctrl+X で終了:

-

確認:

$ cat PKGBUILD

-

(4). ツールを使って、チェックサムを更新:

チェックサムの更新は、上記の修正に含まれ要りませんが、ツールが使えるか確認:

$ updpkgsums
:
==> ソースを取得...
  -> KoboDeluxe-0.5.1.tar.bz2 を見つけました
  -> ダウンロード kobodeluxe_0.5.1-10.debian.tar.xz...
  % Total    % Received % Xferd  Average Speed  Time    Time    Time   Current
                                 Dload  Upload  Total   Spent   Left   Speed
100  10868 100  10868   0      0  34386      0                              0
==> ソースファイルのチェックサムを生成...

-

確認:

$ cat PKGBUILD

抜粋:

sha256sums=('0f7b910a399d985437564af8c5d81d6dcf22b96b26b01488d72baa6a6fdb5c2c'
            '646102c0e8699dbd1c6d01a4a2bfdc362295414ec1f26c0195d3fba763adca42')

→改行の位置が違うので更新されたみたい:

-

(5). ビルドとインストール:

手動でダウンロード済なので、たぶん行けると思うけど、

$ cd ~/git/kobodeluxe/
$ ls -1p
:
KoboDeluxe-0.5.1.tar.bz2
PKGBUILD
kobodeluxe_0.5.1-10.debian.tar.xz
src/

-

$ makepkg -si
:
==> パッケージ kobodeluxe を pacman -U でインストール...
[sudo] user のパスワード:
:
パッケージ (2) kobodeluxe-0.5.1-15  kobodeluxe-debug-0.5.1-15

→インストールできました:

-


7). メニューの修正:

$ sudo nano /usr/share/applications/kobodeluxe.desktop

↓ 行を追加:

Name[ja]=kobodeluxe 宇宙船スクロールシューティング

-


8). 起動して動作確認:

「アプリケーション」→「ゲーム」→「kobodeluxe 宇宙船スクロールシューティング」

-

実行時の画面:

-

キビキビ動きます。速すぎるので難しいです。 レーダーで自分の位置を確認しながら、基地のパイプの先の球体にビームを当てて破壊します。

shift: 前後にビーム
矢印: 方向転換
スペース: 一時停止

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- --

16-9. 「ブロックくずし」(lbreakout2) のインストール:

-


1). インストールできるか確認:

$ pacman -Ss lbreakout2
:
extra/lbreakout2 2.6.5-5
    A breakout game with nice effects, graphics, and sounds

-


2). インストール:

$ sudo pacman -S lbreakout2
:
パッケージ (4) libmikmod-3.3.13-1  sdl12-compat-1.2.68-2  sdl_mixer-1.2.12-13
               lbreakout2-2.6.5-5

-


3). メニューの修正:

$ sudo featherpad /usr/share/applications/lbreakout2.desktop

↓ 行を追加:

Name[ja]=lbreakout2 ブロックくずし

-


4). 起動して動作確認:

「アプリケーション」→「ゲーム」→「lbreakout2 ブロックくずし」

-

実行時の画面:

-

ラケットで受けている途中で、お宝に気を奪われると、受け損ないます:

→落ちてくるのがお宝と限らないのが面白いところ。 ラケットの幅が広くなるお宝と狭くなるお宝があります。ボールが2個に増えるのもありました。

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---

16-10. 「テトリス」(ltris2) のインストール:

-


1). インストールできるか確認:

$ pacman -Ss ltris
$

→公式リポジトリにありません:

-

$ paru -Ss ltris
:
aur/eviltris 0.7-1 [+5 ~0.00]
    A tetris like game, but the 'random' order of piece selection is different 
    than the standard 'random' number generator method
aur/cultris2-git r358.7ed3622-1 [+1 ~0.00]
    Cultris II is one of the fastest Tetris®-clones ever! Train your reflexes in
    single-player challenges, enjoy split-screen matches with friends, or 
    compete online with the best.
aur/ltris 1.3.2-1 [+1 ~0.00] [孤児]
    A tetris clone where you have a bowl with blocks falling down
aur/ltris2 2.0.4-1 [+1 ~0.12]
    A tetris clone with many features

-


2). インストール:

$ paru -S ltris2
:
リポジトリ (4) sdl2_ttf-2.24.0-2  sdl2_image-2.8.8-1  libxmp-4.7.0-1  
        sdl2_mixer-2.8.1-2
Aur (1) ltris2-2.0.4-1

-


3). メニューの修正:

$ sudo featherpad /usr/share/applications/ltris2.desktop

↓ 行を追加:

Name[ja]=ltris2 テトリス

-


4). 起動して動作確認:

「アプリケーション」→「ゲーム」→「ltris2 テトリス」

-

実行時の画面:

-

落ちる場所がぼんやりと表示されて親切だけど、落ち方が乱暴なテトリスです。

操作が矢印キーだけなので窮屈です。スペースキーで落とすか、回転してほしいです。

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----

17. 参考: ゲームの起動メニューの「日本語化」を行う、「パッチ」を作成:

-

項番 13-3.」のスクリプトで「ゲーム」のインストールをしたなら、こちらの作業は要りません:

こちらのメニューの日本語化も含んでいます:

-


1). 「patch」ツールのインストール:

$ sudo pacman -S patch

-


2). パッチの作成:

$ cd ~/ダウンロード/
$ nano 04.game-ja.patch

↓ すべて貼付け:

--- a/usr/share/applications/kobodeluxe.desktop  2026-03-24 20:52:53.095536308 +0900
+++ b/usr/share/applications/kobodeluxe.desktop 2026-03-24 20:13:18.802075845 +0900
@@ -1,6 +1,7 @@
 [Desktop Entry]
 Encoding=UTF-8
 Name=KoboDeluxe
+Name[ja]=kobodeluxe 宇宙船スクロールシューティング
 GenericName=Arcade Game
 Comment=An excellent 2D Shootem-up game.
 Exec=kobodeluxe


--- a/usr/share/applications/lbreakout2.desktop 2026-03-24 03:16:42.041515236 +0900
+++ b/usr/share/applications/lbreakout2.desktop 2026-03-24 03:23:26.561989315 +0900
@@ -2,6 +2,7 @@
 Type=Application
 Encoding=UTF-8
 Name=Linux Breakout 2
+Name[ja]=lbreakout2 ブロックくずし
 Comment=Breakout and Arkanoid style arcade game
 Icon=/usr/share/pixmaps/lbreakout2.png
 TryExec=lbreakout2


--- a/usr/share/applications/ltris2.desktop 2026-03-24 20:37:51.693637050 +0900
+++ b/usr/share/applications/ltris2.desktop 2026-03-24 20:40:35.218176348 +0900
@@ -1,5 +1,6 @@
 [Desktop Entry]
 Name=LTris2
+Name[ja]=ltris2 テトリス
 Comment=A tetris clone with nice graphics.
 Exec=ltris2
 Icon=ltris2


--- a/usr/share/applications/org.gnome.SwellFoop.desktop    2026-03-24 21:06:59.676327194 +0900
+++ b/usr/share/applications/org.gnome.SwellFoop.desktop    2026-03-24 21:10:01.171572967 +0900
@@ -30,7 +30,7 @@
 Name[hu]=Swell Foop
 Name[id]=Swell Foop
 Name[it]=Swell Foop
-Name[ja]=Swell Foop
+Name[ja]=Swell Foop さめざめもどき
 Name[ka]=Swell Foop
 Name[kk]=Swell Foop
 Name[km]=Swell Foop


--- a/usr/share/applications/org.kde.kajongg.desktop    2026-03-24 03:17:00.173836957 +0900
+++ b/usr/share/applications/org.kde.kajongg.desktop    2026-03-24 03:29:52.795120823 +0900
@@ -25,6 +25,7 @@
 Name[ia]=Re Kajongg
 Name[is]=Kajongg
 Name[it]=Kajongg
+Name[ja]=Kajongg 中国式四人麻雀
 Name[ka]=Kajongg
 Name[kk]=Kajongg
 Name[km]=​Kajongg


--- a/usr/share/applications/org.kde.kmahjongg.desktop  2026-03-24 03:17:08.189132412 +0900
+++ b/usr/share/applications/org.kde.kmahjongg.desktop  2026-03-24 03:31:37.607395248 +0900
@@ -30,7 +30,7 @@
 Name[id]=KMahjong
 Name[is]=KMahjongg
 Name[it]=KMahjongg
-Name[ja]=KMahjongg
+Name[ja]=KMahjongg 上海
 Name[ka]=KMahjongg
 Name[kk]=KMahjongg
 Name[km]=KMahjongg


--- a/usr/share/applications/org.kde.kmines.desktop 2026-03-24 03:17:16.678182748 +0900
+++ b/usr/share/applications/org.kde.kmines.desktop 2026-03-24 03:32:50.334373210 +0900
@@ -32,7 +32,7 @@
 Name[id]=KMines
 Name[is]=KMines
 Name[it]=KMines
-Name[ja]=KMines
+Name[ja]=KMines マインスイーパ
 Name[ka]=KMines
 Name[kk]=KMines
 Name[km]=KMines


--- a/usr/share/applications/org.kde.kshisen.desktop    2026-03-24 03:17:27.423192845 +0900
+++ b/usr/share/applications/org.kde.kshisen.desktop    2026-03-24 03:34:39.055099965 +0900
@@ -35,7 +35,7 @@
 Name[id]=Shisen-Sho
 Name[is]=Shisen-Sho
 Name[it]=Shisen-Sho
-Name[ja]=Shisen-Sho
+Name[ja]=kshisen 四川省 (Shisen-Sho)
 Name[ka]=Shisen-Sho
 Name[kk]=Сисен-сё
 Name[km]=Shisen-Sho

わざと末尾は「空行」x2 を開けてます:

→Ctrl+S で保存:

-


3). コピー:

$ sudo cp ~/ダウンロード/04.game-ja.patch /

-


4). パッチの実施:

$ cd /
$ sudo patch -p1 < 04.game-ja.patch
:
patching file usr/share/applications/kobodeluxe.desktop
patching file usr/share/applications/lbreakout2.desktop
patching file usr/share/applications/ltris2.desktop
patching file usr/share/applications/org.gnome.SwellFoop.desktop
patching file usr/share/applications/org.kde.kajongg.desktop
patching file usr/share/applications/org.kde.kmahjongg.desktop
patching file usr/share/applications/org.kde.kmines.desktop
patching file usr/share/applications/org.kde.kshisen.desktop

-


5). ログアウト→ログイン:

-


6). 確認:

「アプリケーション」→「ゲーム」

ゲームのメニューが日本語化されているか確認:

-


7). 後始末:

$ sudo rm /game-ja.patch

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----

18. 「flatpak」でアプリをインストール:

-

「flatpak」を使えば、(ソースからビルドしなくても)使える「アプリ」を増やせます:

ヒットした「アプリ」のみ載せました:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----

18-1. 「flatpak」のインストール:

-

1). 「Flatpak」のインストール:

$ sudo pacman -S flatpak
:
パッケージ (5) composefs-1.0.8-1  libmalcontent-0.13.1-1  ostree-2025.7-3
               xdg-desktop-portal-1.20.3-2  flatpak-1:1.16.3-1

-

2). 「Flathubリポジトリ」を追加:

$ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
:
Note that the directories 

'/var/lib/flatpak/exports/share'
'/home/user/.local/share/flatpak/exports/share'

are not in the search path set by the XDG_DATA_DIRS environment variable, so
applications installed by Flatpak may not appear on your desktop until the
session is restarted.

-

3). 再起動:

$ sudo reboot

-

4). 「アプリ名」で検索:

$ flatpak search  [アプリ名]

→「Application ID」を確認:

-

検索例:

「端末」画面の横幅を広げて、

$ flatpak search firefox

-

絞り込み:

$ flatpak search firefox | grep ^Firefox
:
Firefox Fast, Private & Safe Web Browser  org.mozilla.firefox  149.0  stable  flathub

→「org.mozilla.firefox」が「Application ID 」です:

-

5). アプリを「Application ID」で指定して、インストール:

$ flatpak install flathub [Application ID]

-

6). アプリを実行:

$ flatpak run  [Application ID]

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----

18-2. 「flatpak」でアプリをインストール(例):

-

1).「flatpak」で、「フローズン・バブル」 (frozen-bubble) をインストール:

2).「flatpak」で、「Firefox」をインストール:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -

30. 参考: 「pacman」コマンドについて:

-

参考:

はじめてのpacmanパッケージ管理ガイド

-

-


1). 「pacman」コマンドの出力を「カラフル」に表示する設定:

-

$ sudo nano /etc/pacman.conf
#Color

↓ コメント解除:

Color

-

$ cat /etc/pacman.conf | grep Color
:
Color

-

-


2). 「pacman」コマンドのヘルプを表示:

-


(1). 「pacman --help」
$ pacman --help
:
使用方法:  pacman <オペレーション> [...]
オペレーション:
    pacman {-h --help}
    pacman {-V --version}
    pacman {-D --database} <オプション> <パッケージ>
    pacman {-F --files}    [オプション] [ファイル]
    pacman {-Q --query}    [オプション] [パッケージ]
    pacman {-R --remove}   [オプション] <パッケージ>
    pacman {-S --sync}     [オプション] [パッケージ]
    pacman {-T --deptest}  [オプション] [パッケージ]
    pacman {-U --upgrade}  [オプション] <ファイル>

オペレーションと一緒に 'pacman {-h --help}' を使うことでオプションを一覧できます

-


(2). 「-D」(--database)

 データベース関連:

$ pacman -D --help
:
使用方法:  pacman {-D --database} <オプション> <パッケージ>
オプション:
  -b, --dbpath <path>  データベースのパスを指定
  -k, --check          ローカルデータベースの整合性をテスト (-kk でデータベースを同期)
  -q, --quiet          成功メッセージの出力を消す
  -r, --root <path>    インストールのルートを指定
  -v, --verbose        詳細な情報を出力する
      --arch <arch>    アーキテクチャを指定
      --asdeps         パッケージを依存関係としてインストールしたと印をつける
      --asexplicit     パッケージを明示的にインストールしたと印をつける
      --cachedir <dir> パッケージキャッシュのディレクトリを指定
      --color <when>   出力をカラーにする
      --config <path>  設定ファイルを指定
      --confirm        毎回確認を行います
      --debug          デバッグメッセージを表示
      --disable-download-timeout
                       ダウンロード時のタイムアウトを無効化する
      --disable-sandbox
                       disables all sandbox features used for the downloader process
      --disable-sandbox-filesystem
                       disables the filesystem part of the downloader process sandbox
      --disable-sandbox-syscalls
                       disables the syscalls part of the downloader process sandbox
      --gpgdir <path>  GnuPG のホームディレクトリを指定
      --hookdir <dir>  フックのディレクトリを指定
      --logfile <path> ログファイルを指定
      --noconfirm      確認を行わない
      --sysroot        マウントされたゲストシステムを操作する (root のみ)

-


(3). 「-F」(--files)

 ファイル関連:

$ pacman -F --help
:
使用方法:  pacman {-F --files} [オプション] [ファイル]
オプション:
  -b, --dbpath <path>  データベースのパスを指定
  -l, --list           指定したパッケージが保有しているファイルを表示
  -q, --quiet          照会や検索で返ってくる情報の表示を簡単にする
  -r, --root <path>    インストールのルートを指定
  -v, --verbose        詳細な情報を出力する
  -x, --regex          正規表現による検索を使用する
  -y, --refresh        サーバーから最新のパッケージデータベースをダウンロード
                       (-yy で最新の場合も強制的に更新を行う)
      --arch <arch>    アーキテクチャを指定
      --cachedir <dir> パッケージキャッシュのディレクトリを指定
      --color <when>   出力をカラーにする
      --config <path>  設定ファイルを指定
      --confirm        毎回確認を行います
      --debug          デバッグメッセージを表示
      --disable-download-timeout
                       ダウンロード時のタイムアウトを無効化する
      --disable-sandbox
                       disables all sandbox features used for the downloader process
      --disable-sandbox-filesystem
                       disables the filesystem part of the downloader process sandbox
      --disable-sandbox-syscalls
                       disables the syscalls part of the downloader process sandbox
      --gpgdir <path>  GnuPG のホームディレクトリを指定
      --hookdir <dir>  フックのディレクトリを指定
      --logfile <path> ログファイルを指定
      --machinereadable
                       コンピュータが扱える出力を生成
      --noconfirm      確認を行わない
      --sysroot        マウントされたゲストシステムを操作する (root のみ)

-


(4). 「-Q」(--query)

 表示関連:

$ pacman -Q --help
:
使用方法:  pacman {-Q --query} [オプション] [パッケージ]
オプション:
  -b, --dbpath <path>  データベースのパスを指定
  -c, --changelog      パッケージの変更履歴を表示
  -d, --deps           依存関係としてインストールされたパッケージを表示 [filter]
  -e, --explicit       明示的にインストールされたパッケージを表示 [filter]
  -g, --groups         パッケージグループに含まれている全てのパッケージを表示
  -i, --info           パッケージ情報の表示 (-ii でバックアップの表示)
  -k, --check          パッケージファイルが存在しているかチェックする (-kk でファイルプロパティ)
  -l, --list           指定したパッケージが保有しているファイルを表示
  -m, --foreign        インストールしたパッケージの中で同期データベースに存在しないパッケージを表示 [filter]
  -n, --native         インストールしたパッケージの中で同期データベースに存在するパッケージだけ表示 [filter]
  -o, --owns <file>    <file> を保有しているパッケージを照会
  -p, --file <package> データベースではなくパッケージファイルを照会
  -q, --quiet          照会や検索で返ってくる情報の表示を簡単にする
  -r, --root <path>    インストールのルートを指定
  -s, --search <regex> インストールされたパッケージの部分一致検索
  -t, --unrequired     どのパッケージからも必要とされないパッケージを表示
                       (-tt で optdepends を無視する) [filter]
  -u, --upgrades       バージョンが古いパッケージを表示 [filter]
  -v, --verbose        詳細な情報を出力する
      --arch <arch>    アーキテクチャを指定
      --cachedir <dir> パッケージキャッシュのディレクトリを指定
      --color <when>   出力をカラーにする
      --config <path>  設定ファイルを指定
      --confirm        毎回確認を行います
      --debug          デバッグメッセージを表示
      --disable-download-timeout
                       ダウンロード時のタイムアウトを無効化する
      --disable-sandbox
                       disables all sandbox features used for the downloader process
      --disable-sandbox-filesystem
                       disables the filesystem part of the downloader process sandbox
      --disable-sandbox-syscalls
                       disables the syscalls part of the downloader process sandbox
      --gpgdir <path>  GnuPG のホームディレクトリを指定
      --hookdir <dir>  フックのディレクトリを指定
      --logfile <path> ログファイルを指定
      --noconfirm      確認を行わない
      --sysroot        マウントされたゲストシステムを操作する (root のみ)

-


(5). 「-R」(--remove)

 削除関連:

$ pacman -R --help
:
使用方法:  pacman {-R --remove} [オプション] <パッケージ>
オプション:
  -b, --dbpath <path>  データベースのパスを指定
  -c, --cascade        指定したパッケージとそのパッケージに依存している全てのパッケージを削除
  -d, --nodeps         依存バージョンチェックをスキップ (-dd で全てのチェックをスキップ)
  -n, --nosave         設定ファイルを削除
  -p, --print          操作を実行するかわりに対象を表示する
  -r, --root <path>    インストールのルートを指定
  -s, --recursive      不要な依存関係を削除
                       (-ss で明示的にインストールした依存関係も削除)
  -u, --unneeded       不要なパッケージを削除
  -v, --verbose        詳細な情報を出力する
      --arch <arch>    アーキテクチャを指定
      --assume-installed <package=version>
                       依存関係を満たすための仮想パッケージを追加
      --cachedir <dir> パッケージキャッシュのディレクトリを指定
      --color <when>   出力をカラーにする
      --config <path>  設定ファイルを指定
      --confirm        毎回確認を行います
      --dbonly         データベースエントリだけを修正してパッケージファイルを触らない
      --debug          デバッグメッセージを表示
      --disable-download-timeout
                       ダウンロード時のタイムアウトを無効化する
      --disable-sandbox
                       disables all sandbox features used for the downloader process
      --disable-sandbox-filesystem
                       disables the filesystem part of the downloader process sandbox
      --disable-sandbox-syscalls
                       disables the syscalls part of the downloader process sandbox
      --gpgdir <path>  GnuPG のホームディレクトリを指定
      --hookdir <dir>  フックのディレクトリを指定
      --logfile <path> ログファイルを指定
      --noconfirm      確認を行わない
      --noprogressbar  ファイルのダウンロード中にプログレスバーを表示しない
      --noscriptlet    インストールスクリプトレットが存在する場合それを実行しない
      --print-format <string>
                       対象を表示する形式を指定する
      --sysroot        マウントされたゲストシステムを操作する (root のみ)

-


(6). 「-S」(--sync)

 同期関連:

$ pacman -S --help
:
使用方法:  pacman {-S --sync} [オプション] [パッケージ]
オプション:
  -b, --dbpath <path>  データベースのパスを指定
  -c, --clean          キャッシュディレクトリから古いパッケージを削除 (-cc で全てのキャッシュを削除)
  -d, --nodeps         依存バージョンチェックをスキップ (-dd で全てのチェックをスキップ)
  -g, --groups         パッケージグループに含まれているパッケージを全て表示
                       (-gg で全てのグループとそのパッケージを表示)
  -i, --info           パッケージ情報を表示 (-ii で詳細情報を表示)
  -l, --list <repo>    リポジトリに含まれているパッケージの一覧を表示
  -p, --print          操作を実行するかわりに対象を表示する
  -q, --quiet          照会や検索で返ってくる情報の表示を簡単にする
  -r, --root <path>    インストールのルートを指定
  -s, --search <regex> 外部リポジトリの部分一致検索
  -u, --sysupgrade     インストールしたパッケージのアップグレード (-uu でダウングレードを有効)
  -v, --verbose        詳細な情報を出力する
  -w, --downloadonly   インストール・アップグレードをせずパッケージのダウンロードだけ行う
  -y, --refresh        サーバーから最新のパッケージデータベースをダウンロード
                       (-yy で最新の場合も強制的に更新を行う)
      --arch <arch>    アーキテクチャを指定
      --asdeps         パッケージを依存関係としてインストールしたと印をつける
      --asexplicit     パッケージを明示的にインストールしたと印をつける
      --assume-installed <package=version>
                       依存関係を満たすための仮想パッケージを追加
      --cachedir <dir> パッケージキャッシュのディレクトリを指定
      --color <when>   出力をカラーにする
      --config <path>  設定ファイルを指定
      --confirm        毎回確認を行います
      --dbonly         データベースエントリだけを修正してパッケージファイルを触らない
      --debug          デバッグメッセージを表示
      --disable-download-timeout
                       ダウンロード時のタイムアウトを無効化する
      --disable-sandbox
                       disables all sandbox features used for the downloader process
      --disable-sandbox-filesystem
                       disables the filesystem part of the downloader process sandbox
      --disable-sandbox-syscalls
                       disables the syscalls part of the downloader process sandbox
      --gpgdir <path>  GnuPG のホームディレクトリを指定
      --hookdir <dir>  フックのディレクトリを指定
      --ignore <pkg>   指定したパッケージの更新を無視
      --ignoregroup <grp>
                       指定したグループの更新を無視
      --logfile <path> ログファイルを指定
      --needed         最新のパッケージを再インストールさせない
      --noconfirm      確認を行わない
      --noprogressbar  ファイルのダウンロード中にプログレスバーを表示しない
      --noscriptlet    インストールスクリプトレットが存在する場合それを実行しない
      --overwrite <glob>
                       衝突するファイルを上書きする (複数回使うことができます)
      --print-format <string>
                       対象を表示する形式を指定する
      --sysroot        マウントされたゲストシステムを操作する (root のみ)

-


(7). 「-T」(--deptest)

 デバッグテスト関連:

$ pacman -T --help
:
使用方法:  pacman {-T --deptest} [オプション] [パッケージ]
オプション:
  -b, --dbpath <path>  データベースのパスを指定
  -r, --root <path>    インストールのルートを指定
  -v, --verbose        詳細な情報を出力する
      --arch <arch>    アーキテクチャを指定
      --cachedir <dir> パッケージキャッシュのディレクトリを指定
      --color <when>   出力をカラーにする
      --config <path>  設定ファイルを指定
      --confirm        毎回確認を行います
      --debug          デバッグメッセージを表示
      --disable-download-timeout
                       ダウンロード時のタイムアウトを無効化する
      --disable-sandbox
                       disables all sandbox features used for the downloader process
      --disable-sandbox-filesystem
                       disables the filesystem part of the downloader process sandbox
      --disable-sandbox-syscalls
                       disables the syscalls part of the downloader process sandbox
      --gpgdir <path>  GnuPG のホームディレクトリを指定
      --hookdir <dir>  フックのディレクトリを指定
      --logfile <path> ログファイルを指定
      --noconfirm      確認を行わない
      --sysroot        マウントされたゲストシステムを操作する (root のみ)

-


(8). 「-U」(--upgrade)

 アップグレード関連:

$ pacman -U --help
:
使用方法:  pacman {-U --upgrade} [オプション] <ファイル>
オプション:
  -b, --dbpath <path>  データベースのパスを指定
  -d, --nodeps         依存バージョンチェックをスキップ (-dd で全てのチェックをスキップ)
  -p, --print          操作を実行するかわりに対象を表示する
  -r, --root <path>    インストールのルートを指定
  -v, --verbose        詳細な情報を出力する
  -w, --downloadonly   インストール・アップグレードをせずパッケージのダウンロードだけ行う
      --arch <arch>    アーキテクチャを指定
      --asdeps         パッケージを依存関係としてインストールしたと印をつける
      --asexplicit     パッケージを明示的にインストールしたと印をつける
      --assume-installed <package=version>
                       依存関係を満たすための仮想パッケージを追加
      --cachedir <dir> パッケージキャッシュのディレクトリを指定
      --color <when>   出力をカラーにする
      --config <path>  設定ファイルを指定
      --confirm        毎回確認を行います
      --dbonly         データベースエントリだけを修正してパッケージファイルを触らない
      --debug          デバッグメッセージを表示
      --disable-download-timeout
                       ダウンロード時のタイムアウトを無効化する
      --disable-sandbox
                       disables all sandbox features used for the downloader process
      --disable-sandbox-filesystem
                       disables the filesystem part of the downloader process sandbox
      --disable-sandbox-syscalls
                       disables the syscalls part of the downloader process sandbox
      --gpgdir <path>  GnuPG のホームディレクトリを指定
      --hookdir <dir>  フックのディレクトリを指定
      --ignore <pkg>   指定したパッケージの更新を無視
      --ignoregroup <grp>
                       指定したグループの更新を無視
      --logfile <path> ログファイルを指定
      --needed         最新のパッケージを再インストールさせない
      --noconfirm      確認を行わない
      --noprogressbar  ファイルのダウンロード中にプログレスバーを表示しない
      --noscriptlet    インストールスクリプトレットが存在する場合それを実行しない
      --overwrite <glob>
                       衝突するファイルを上書きする (複数回使うことができます)
      --print-format <string>
                       対象を表示する形式を指定する
      --sysroot        マウントされたゲストシステムを操作する (root のみ)

-

-


3). 「pacman」コマンドの使用例:

-


(1). システム更新:
$ sudo pacman -Syu

-


(2). パッケージのインストール:
$ sudo pacman -S apache

大文字の「-S」は --sync

-


(3). パッケージのアンインストール:
$ sudo pacman -R apache

大文字の「-R」は --remove

-


(4). 依存している他のパッケージを一緒にアンインストールする場合:
$ sudo pacman -Rs apache

大文字の「-R」は --remove、小文字の「-s」は --search

-


(5). 複数のパッケージを同時に指定してアンインストール:
$ sudo pacman -R ruby perl

大文字の「-R」は --remove

-


(6). パッケージをインストールせずにダウンロードだけ行う:
$ sudo pacman -Sw ruby

大文字の「-S」は --sync

→ダウンロードしたファイルは「/var/cache/pacman/pkg」に保存されます:

-


(7). ダウンロードしたファイルをインストール:
$ sudo pacman -U /var/cache/pacman/pkg/php-5.6.1-1-x86_64.pkg.tar.xz

大文字の「-U」は --upgrade

→依存関係にあるパッケージは、自動的にリポジトリから取得して一緒にインストールしてくれます

-


(8). リポジトリデータベースのパッケージの検索:
$ sudo pacman -Ss ruby

大文字の「-S」は --sync、小文字の「-s」は --search

-


(9). パッケージの詳細情報を表示:
$ sudo pacman -Si ruby

大文字の「-S」は --sync、小文字のアイ「-i」

-


(10). ローカルにインストールしたパッケージを検索:
$ sudo pacman -Qs ruby

大文字の「-Q」は --query、小文字のエス「-s」は --search

-


(11). パッケージの詳細情報を表示:
$ sudo pacman -Qi ruby

大文字の「-Q」は --query、小文字のアイ「-i」

-


(12). パッケージによってインストールされたファイルを一覧表示:
$ sudo pacman -Ql apache

大文字の「-Q」は --query、小文字のエル「-l」

-


(13). 逆に、ファイルをインストールしたパッケージを表示:
$ sudo pacman -Qo /etc/httpd/conf/extra/httpd-info.conf
:
/etc/httpd/conf/extra/httpd-info.conf is owned by apache 2.4.10-1

大文字の「-Q」は --query、小文字のオー「-o」

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- --

31. 参考: 「paru」コマンドについて:

-

-


1). 「paru」コマンドのヘルプを表示:

-


(1). 「paru --help」
$ paru --help
:
使用法:
    paru
    paru <オペレーション> [...]
    paru <パッケージ>

Pacman オペレーション:
    paru {-h --help}
    paru {-V --version}
    paru {-D --database}    <オプション> <パッケージ>
    paru {-F --files}       [オプション] [パッケージ]
    paru {-Q --query}       [オプション] [パッケージ]
    paru {-R --remove}      [オプション] <パッケージ>
    paru {-S --sync}        [オプション] [パッケージ]
    paru {-T --deptest}     [オプション] [パッケージ]
    paru {-U --upgrade}     [オプション] [ファイル]

新しいオペレーション:
    paru {-P --show}        [オプション]
    paru {-G --getpkgbuild} [パッケージ]
    paru {-B --build}       [dir(s)]

引数を指定しなかった場合 'paru -Syu' が実行されます

オペレーションなしでのオプション:
    -c --clean            どのパッケージからも必要とされないパッケージを削除
       --gendb            アップデートのために開発パッケージデータベースを生成

新しいオプション:
       --repo              対象がリポジトリのものであると仮定
       --pkgbuilds         Assume targets are from pkgbuild repositories
    -a --aur               対象が AUR のものであると仮定
    --mode      <mode>     Sets where paru looks for targets
    --interactive          Enable interactive package selection for -S, -R, -Ss and -Qs
    --aururl    <url>      AUR の URL を指定
    --aurrpcur  <url>      Set an alternative URL for the AUR /rpc endpoint
    --clonedir  <dir>      PKGBUILD をダウンロードし実行するディレクトリを指定

    --makepkg   <file>     makepkg コマンドを指定
    --mflags    <flags>    makepkg に渡す引数を指定
    --pacman    <file>     pacman コマンドを指定
    --git       <file>     git コマンドを指定
    --gitflags  <flags>    git に渡す引数を指定
    --sudo      <file>     sudo コマンドを指定
    --sudoflags <flags>    sudo に渡す引数を指定
    --pkgctl    <file>     pkgctl command to use
    --bat       <file>     bat コマンドを指定
    --batflags  <flags>    bat に渡す引数を指定
    --gpg       <file>     gpg コマンドを指定
    --gpgflags  <flags>    gpg に渡す引数を指定
    --fm        <file>     PKGBUILD のレビューに使うファイルマネージャを指定
    --fmflags   <flags>    ファイルマネージャに渡す引数を指定

    --completioninterval   <n> 補完キャッシュを更新する日数を指定
    --sortby    <field>    AUR 検索で並び替えるフィールドを指定
    --searchby  <field>    検索するフィールドを指定
    --limit     <limit>    検索で表示されるアイテム数を制限する
    -x --regex             aur検索に正規表現を使用する

    --skipreview           レビューをスキップ
    --review               レビューをスキップしない
    --[no]upgrademenu      アップグレードをスキップするための対話メニューを表示
    --[no]removemake       ビルド時の依存パッケージをインストール後に削除
    --[no]cleanafter       パッケージのソースをインストール後に削除
    --[no]rebuild          対象を再ビルド
    --[no]redownload       対象の PKGBUILD を再ダウンロード

    --[no]pgpfetch         PKGBUILD の PGP 鍵をインポートするかどうかを表示
    --[no]useask           pacman の ask フラグを使用して自動的に衝突を解決
    --[no]savechanges      レビュー中にpkgbuilldに加えた変更をコミットする
    --[no]newsonupgrade    アップグレード時にニュースを表示
    --[no]combinedupgrade  リポジトリパッケージと AUR パッケージを同時にアップグレード
    --[no]batchinstall     複数の AUR パッケージをビルドしてからインストールする
    --[no]provides         検索時にマッチする提供パッケージを探す
    --[no]devel            アップグレード時に開発パッケージのアップデートを確認
    --[no]installdebug     パッケージが提供するデバッグパッケージもインストールする
    --[no]sudoloop         sudo のタイムアウトを防止
    --[no]chroot           chroot してパッケージをビルド
    --[no]failfast         AURパッケージのビルドに失敗した場合直ちに終了する
    --[no]keepsrc          ビルド完了後にsrc/とpkg/をそのままにする
    --[no]sign             gpg でパッケージに署名
    --[no]signdb           gpg でデータベースに署名
    --[no]localrepo        Build packages into a local repo
    --nocheck              チェック時の依存関係の解決とチェックを行わない
    --develsuffixes        パッケージが開発パッケージであることを示す接尾辞を指定
    --ignoredevel          Ignore devel upgrades for specified packages
    --bottomup             AUR パッケージを表示後リポジトリパッケージを表示
    --topdown              リポジトリパッケージを表示後 AUR パッケージを表示

show 特有のオプション:
    -c --complete         補完で使用
    -s --stats            システムパッケージの統計を表示
    -w --news             Arch Linux ニュースを表示

getpkgbuild 特有のオプション:
    -p --print            PKGBUILD を標準出力に表示
    -c --comments         AUR コメントを表示
    -s --ssh              パッケージをSSHを使用してクローンする

Build specific options:
    -i --install          ビルドと同時にパッケージをインストール

-


(2). 「-D」(--database)

 データベース関連:

$ paru -D --help
:
使用方法:  pacman {-D --database} <オプション> <パッケージ>
オプション:
  -b, --dbpath <path>  データベースのパスを指定
  -k, --check          ローカルデータベースの整合性をテスト (-kk でデータベースを同期)
  -q, --quiet          成功メッセージの出力を消す
  -r, --root <path>    インストールのルートを指定
  -v, --verbose        詳細な情報を出力する
      --arch <arch>    アーキテクチャを指定
      --asdeps         パッケージを依存関係としてインストールしたと印をつける
      --asexplicit     パッケージを明示的にインストールしたと印をつける
      --cachedir <dir> パッケージキャッシュのディレクトリを指定
      --color <when>   出力をカラーにする
      --config <path>  設定ファイルを指定
      --confirm        毎回確認を行います
      --debug          デバッグメッセージを表示
      --disable-download-timeout
                       ダウンロード時のタイムアウトを無効化する
      --disable-sandbox
                       ダウンローダープロセスに使用されるすべてのサンドボックス機能を無効にします
      --disable-sandbox-filesystem
                       ダウンローダープロセスサンドボックスのファイルシステム部分を無効にします
      --disable-sandbox-syscalls
                       ダウンローダープロセスサンドボックスのシステムコール部分を無効にします
      --gpgdir <path>  GnuPG のホームディレクトリを指定
      --hookdir <dir>  フックのディレクトリを指定
      --logfile <path> ログファイルを指定
      --noconfirm      確認を行わない
      --sysroot        マウントされたゲストシステムを操作する (root のみ)

-


(3). 「-F」(--files)

 ファイル関連:

$ paru -F --help
:
使用方法:  pacman {-F --files} [オプション] [ファイル]
オプション:
  -b, --dbpath <path>  データベースのパスを指定
  -l, --list           指定したパッケージが保有しているファイルを表示
  -q, --quiet          照会や検索で返ってくる情報の表示を簡単にする
  -r, --root <path>    インストールのルートを指定
  -v, --verbose        詳細な情報を出力する
  -x, --regex          正規表現による検索を使用する
  -y, --refresh        サーバーから最新のパッケージデータベースをダウンロード
                       (-yy で最新の場合も強制的に更新を行う)
      --arch <arch>    アーキテクチャを指定
      --cachedir <dir> パッケージキャッシュのディレクトリを指定
      --color <when>   出力をカラーにする
      --config <path>  設定ファイルを指定
      --confirm        毎回確認を行います
      --debug          デバッグメッセージを表示
      --disable-download-timeout
                       ダウンロード時のタイムアウトを無効化する
      --disable-sandbox
                       ダウンローダープロセスに使用されるすべてのサンドボックス機能を無効にします
      --disable-sandbox-filesystem
                       ダウンローダープロセスサンドボックスのファイルシステム部分を無効にします
      --disable-sandbox-syscalls
                       ダウンローダープロセスサンドボックスのシステムコール部分を無効にします
      --gpgdir <path>  GnuPG のホームディレクトリを指定
      --hookdir <dir>  フックのディレクトリを指定
      --logfile <path> ログファイルを指定
      --machinereadable
                       コンピュータが扱える出力を生成
      --noconfirm      確認を行わない
      --sysroot        マウントされたゲストシステムを操作する (root のみ)

-


(4). 「-Q」(--query)

 表示関連:

$ paru -Q --help
:
使用方法:  pacman {-Q --query} [オプション] [パッケージ]
オプション:
  -b, --dbpath <path>  データベースのパスを指定
  -c, --changelog      パッケージの変更履歴を表示
  -d, --deps           依存関係としてインストールされたパッケージを表示 [filter]
  -e, --explicit       明示的にインストールされたパッケージを表示 [filter]
  -g, --groups         パッケージグループに含まれている全てのパッケージを表示
  -i, --info           パッケージ情報の表示 (-ii でバックアップの表示)
  -k, --check          パッケージファイルが存在しているかチェックする (-kk でファイルプロパティ)
  -l, --list           指定したパッケージが保有しているファイルを表示
  -m, --foreign        インストールしたパッケージの中で同期データベースに存在しないパッケージを表示 [filter]
  -n, --native         インストールしたパッケージの中で同期データベースに存在するパッケージだけ表示 [filter]
  -o, --owns <file>    <file> を保有しているパッケージを照会
  -p, --file <package> データベースではなくパッケージファイルを照会
  -q, --quiet          照会や検索で返ってくる情報の表示を簡単にする
  -r, --root <path>    インストールのルートを指定
  -s, --search <regex> インストールされたパッケージの部分一致検索
  -t, --unrequired     どのパッケージからも必要とされないパッケージを表示
                       (-tt で optdepends を無視する) [filter]
  -u, --upgrades       バージョンが古いパッケージを表示 [filter]
  -v, --verbose        詳細な情報を出力する
      --arch <arch>    アーキテクチャを指定
      --cachedir <dir> パッケージキャッシュのディレクトリを指定
      --color <when>   出力をカラーにする
      --config <path>  設定ファイルを指定
      --confirm        毎回確認を行います
      --debug          デバッグメッセージを表示
      --disable-download-timeout
                       ダウンロード時のタイムアウトを無効化する
      --disable-sandbox
                       ダウンローダープロセスに使用されるすべてのサンドボックス機能を無効にします
      --disable-sandbox-filesystem
                       ダウンローダープロセスサンドボックスのファイルシステム部分を無効にします
      --disable-sandbox-syscalls
                       ダウンローダープロセスサンドボックスのシステムコール部分を無効にします
      --gpgdir <path>  GnuPG のホームディレクトリを指定
      --hookdir <dir>  フックのディレクトリを指定
      --logfile <path> ログファイルを指定
      --noconfirm      確認を行わない
      --sysroot        マウントされたゲストシステムを操作する (root のみ)

-


(5). 「-R」(--remove)

 削除関連:

$ paru -R --help
:
使用方法:  pacman {-R --remove} [オプション] <パッケージ>
オプション:
  -b, --dbpath <path>  データベースのパスを指定
  -c, --cascade        指定したパッケージとそのパッケージに依存している全てのパッケージを削除
  -d, --nodeps         依存バージョンチェックをスキップ (-dd で全てのチェックをスキップ)
  -n, --nosave         設定ファイルを削除
  -p, --print          操作を実行するかわりに対象を表示する
  -r, --root <path>    インストールのルートを指定
  -s, --recursive      不要な依存関係を削除
                       (-ss で明示的にインストールした依存関係も削除)
  -u, --unneeded       不要なパッケージを削除
  -v, --verbose        詳細な情報を出力する
      --arch <arch>    アーキテクチャを指定
      --assume-installed <package=version>
                       依存関係を満たすための仮想パッケージを追加
      --cachedir <dir> パッケージキャッシュのディレクトリを指定
      --color <when>   出力をカラーにする
      --config <path>  設定ファイルを指定
      --confirm        毎回確認を行います
      --dbonly         データベースエントリだけを修正してパッケージファイルを触らない
      --debug          デバッグメッセージを表示
      --disable-download-timeout
                       ダウンロード時のタイムアウトを無効化する
      --disable-sandbox
                       ダウンローダープロセスに使用されるすべてのサンドボックス機能を無効にします
      --disable-sandbox-filesystem
                       ダウンローダープロセスサンドボックスのファイルシステム部分を無効にします
      --disable-sandbox-syscalls
                       ダウンローダープロセスサンドボックスのシステムコール部分を無効にします
      --gpgdir <path>  GnuPG のホームディレクトリを指定
      --hookdir <dir>  フックのディレクトリを指定
      --logfile <path> ログファイルを指定
      --noconfirm      確認を行わない
      --noprogressbar  ファイルのダウンロード中にプログレスバーを表示しない
      --noscriptlet    インストールスクリプトレットが存在する場合それを実行しない
      --print-format <string>
                       対象を表示する形式を指定する
      --sysroot        マウントされたゲストシステムを操作する (root のみ)

-


(6). 「-S」(--sync)

 同期関連:

$ paru -S --help
:
使用方法:  pacman {-S --sync} [オプション] [パッケージ]
オプション:
  -b, --dbpath <path>  データベースのパスを指定
  -c, --clean          キャッシュディレクトリから古いパッケージを削除 (-cc で全てのキャッシュを削除)
  -d, --nodeps         依存バージョンチェックをスキップ (-dd で全てのチェックをスキップ)
  -g, --groups         パッケージグループに含まれているパッケージを全て表示
                       (-gg で全てのグループとそのパッケージを表示)
  -i, --info           パッケージ情報を表示 (-ii で詳細情報を表示)
  -l, --list <repo>    リポジトリに含まれているパッケージの一覧を表示
  -p, --print          操作を実行するかわりに対象を表示する
  -q, --quiet          照会や検索で返ってくる情報の表示を簡単にする
  -r, --root <path>    インストールのルートを指定
  -s, --search <regex> 外部リポジトリの部分一致検索
  -u, --sysupgrade     インストールしたパッケージのアップグレード (-uu でダウングレードを有効)
  -v, --verbose        詳細な情報を出力する
  -w, --downloadonly   インストール・アップグレードをせずパッケージのダウンロードだけ行う
  -y, --refresh        サーバーから最新のパッケージデータベースをダウンロード
                       (-yy で最新の場合も強制的に更新を行う)
      --arch <arch>    アーキテクチャを指定
      --asdeps         パッケージを依存関係としてインストールしたと印をつける
      --asexplicit     パッケージを明示的にインストールしたと印をつける
      --assume-installed <package=version>
                       依存関係を満たすための仮想パッケージを追加
      --cachedir <dir> パッケージキャッシュのディレクトリを指定
      --color <when>   出力をカラーにする
      --config <path>  設定ファイルを指定
      --confirm        毎回確認を行います
      --dbonly         データベースエントリだけを修正してパッケージファイルを触らない
      --debug          デバッグメッセージを表示
      --disable-download-timeout
                       ダウンロード時のタイムアウトを無効化する
      --disable-sandbox
                       ダウンローダープロセスに使用されるすべてのサンドボックス機能を無効にします
      --disable-sandbox-filesystem
                       ダウンローダープロセスサンドボックスのファイルシステム部分を無効にします
      --disable-sandbox-syscalls
                       ダウンローダープロセスサンドボックスのシステムコール部分を無効にします
      --gpgdir <path>  GnuPG のホームディレクトリを指定
      --hookdir <dir>  フックのディレクトリを指定
      --ignore <pkg>   指定したパッケージの更新を無視
      --ignoregroup <grp>
                       指定したグループの更新を無視
      --logfile <path> ログファイルを指定
      --needed         最新のパッケージを再インストールさせない
      --noconfirm      確認を行わない
      --noprogressbar  ファイルのダウンロード中にプログレスバーを表示しない
      --noscriptlet    インストールスクリプトレットが存在する場合それを実行しない
      --overwrite <glob>
                       衝突するファイルを上書きする (複数回使うことができます)
      --print-format <string>
                       対象を表示する形式を指定する
      --sysroot        マウントされたゲストシステムを操作する (root のみ)

-


(7). 「-T」(--deptest)

 デバッグテスト関連:

$ paru -T --help
:
使用方法:  pacman {-T --deptest} [オプション] [パッケージ]
オプション:
  -b, --dbpath <path>  データベースのパスを指定
  -r, --root <path>    インストールのルートを指定
  -v, --verbose        詳細な情報を出力する
      --arch <arch>    アーキテクチャを指定
      --cachedir <dir> パッケージキャッシュのディレクトリを指定
      --color <when>   出力をカラーにする
      --config <path>  設定ファイルを指定
      --confirm        毎回確認を行います
      --debug          デバッグメッセージを表示
      --disable-download-timeout
                       ダウンロード時のタイムアウトを無効化する
      --disable-sandbox
                       ダウンローダープロセスに使用されるすべてのサンドボックス機能を無効にします
      --disable-sandbox-filesystem
                       ダウンローダープロセスサンドボックスのファイルシステム部分を無効にします
      --disable-sandbox-syscalls
                       ダウンローダープロセスサンドボックスのシステムコール部分を無効にします
      --gpgdir <path>  GnuPG のホームディレクトリを指定
      --hookdir <dir>  フックのディレクトリを指定
      --logfile <path> ログファイルを指定
      --noconfirm      確認を行わない
      --sysroot        マウントされたゲストシステムを操作する (root のみ)

-


(8). 「-U」(--upgrade)

 アップグレード関連:

$ paru -U --help
:
使用方法:  pacman {-U --upgrade} [オプション] <ファイル>
オプション:
  -b, --dbpath <path>  データベースのパスを指定
  -d, --nodeps         依存バージョンチェックをスキップ (-dd で全てのチェックをスキップ)
  -p, --print          操作を実行するかわりに対象を表示する
  -r, --root <path>    インストールのルートを指定
  -v, --verbose        詳細な情報を出力する
  -w, --downloadonly   インストール・アップグレードをせずパッケージのダウンロードだけ行う
      --arch <arch>    アーキテクチャを指定
      --asdeps         パッケージを依存関係としてインストールしたと印をつける
      --asexplicit     パッケージを明示的にインストールしたと印をつける
      --assume-installed <package=version>
                       依存関係を満たすための仮想パッケージを追加
      --cachedir <dir> パッケージキャッシュのディレクトリを指定
      --color <when>   出力をカラーにする
      --config <path>  設定ファイルを指定
      --confirm        毎回確認を行います
      --dbonly         データベースエントリだけを修正してパッケージファイルを触らない
      --debug          デバッグメッセージを表示
      --disable-download-timeout
                       ダウンロード時のタイムアウトを無効化する
      --disable-sandbox
                       ダウンローダープロセスに使用されるすべてのサンドボックス機能を無効にします
      --disable-sandbox-filesystem
                       ダウンローダープロセスサンドボックスのファイルシステム部分を無効にします
      --disable-sandbox-syscalls
                       ダウンローダープロセスサンドボックスのシステムコール部分を無効にします
      --gpgdir <path>  GnuPG のホームディレクトリを指定
      --hookdir <dir>  フックのディレクトリを指定
      --ignore <pkg>   指定したパッケージの更新を無視
      --ignoregroup <grp>
                       指定したグループの更新を無視
      --logfile <path> ログファイルを指定
      --needed         最新のパッケージを再インストールさせない
      --noconfirm      確認を行わない
      --noprogressbar  ファイルのダウンロード中にプログレスバーを表示しない
      --noscriptlet    インストールスクリプトレットが存在する場合それを実行しない
      --overwrite <glob>
                       衝突するファイルを上書きする (複数回使うことができます)
      --print-format <string>
                       対象を表示する形式を指定する
      --sysroot        マウントされたゲストシステムを操作する (root のみ)

-


(9). 「-P」(--show)

 表示関連:

-

「paru --help」の表示の後半から抜粋:

show 特有のオプション:
    -c --complete         補完で使用
    -s --stats            システムパッケージの統計を表示
    -w --news             Arch Linux ニュースを表示

-


(10). 「-G」(--getpkgbuild)

 PKGBUILD 関連

-

「paru --help」の表示の後半から抜粋:

getpkgbuild 特有のオプション:
    -p --print            PKGBUILD を標準出力に表示
    -c --comments         AUR コメントを表示
    -s --ssh              パッケージをSSHを使用してクローンする

-


(11). 「-B」(--build)

 ビルド関連

-

「paru --help」の表示の後半から抜粋:

Build  特有のオプション:
    -i --install          ビルドと同時にパッケージをインストール

-

-


2). 「paru」コマンドの使い方:

-


(1). システム更新:
$ paru

→「sudo pacman -Syu」+ AUR の更新です:

公式リポジトリのパッケージ(pacman)と、AURのパッケージ(paru)を一括で更新します。

もしくは、

$ paru -Syu

-


(2). パッケージの検索:
$ paru -Ss <検索ワード>

-


(3). パッケージのインストール:
$ paru -S <パッケージ名>

-


(4). インストール済のパッケージの検索:
$ paru -Qs <検索ワード>

-

例:

$ paru -Qs ibus-mozc
:
local/ibus-mozc 3.33.6133-1
    The Open Source edition of Google Japanese Input (IBus module)

→インストール済だと、ローカルリポジトリに登録されます:

-

インストール済のパッケージは、下記で確認しても OK:
日本語版の場合:
$ paru -Ss ibus-mozc | grep 済
:
aur/ibus-mozc 3.33.6133-1 [+16 ~0.00] [インストール済み]

-

英語版の場合:
$ paru -Ss ibus-mozc | grep Installed
aur/ibus-mozc 3.33.6133-1 [+16 ~0.00] [Installed]

-


(5). パッケージの削除:
$ paru -R <パッケージ名>

-


(6). パッケージとその依存関係、設定ファイルも削除:
$ paru -Rns <パッケージ名>

-

例:

$ paru -Rns ibus-mozc
:
[sudo] user のパスワード:
依存関係を確認しています...
:: v4l-utils は任意で qt6-base: for qv4l2 and qvidcap を必要とします

パッケージ (12) double-conversion-3.4.0-1  libb2-0.98.1-3  md4c-0.5.2-1
                mozc-3.33.6133-1  qt6-base-6.10.2-1  qt6-translations-6.10.2-1
                tslib-1.24-1  xcb-util-cursor-0.1.6-1  xcb-util-image-0.4.1-3
                xcb-util-renderutil-0.3.10-2  xcb-util-wm-0.4.2-2
                ibus-mozc-3.33.6133-1

:: 以上のパッケージを削除しますか? [Y/n] 

重要そうで、別に使われているパッケージも削除されそうで、ヤバいので、

→「n」で中断:

-

通常のやり方で削除して、
$ paru -R ibus-mozc
:
依存関係を確認しています...
:: mozc は任意で ibus-mozc: IBus integration を必要とします

パッケージ (1) ibus-mozc-3.33.6133-1

-

不要な依存パッケージを削除:
$ paru -c
:
パッケージ (8) compiler-rt-22.1.1-1  hwloc-2.13.0-1  libblake3-1.8.3-1
               lld-22.1.1-1  mold-2.40.4-3  mozc-3.33.6133-1  onetbb-2022.3.0-4
               rust-1:1.94.0-2

→このやり方が無難:

mozc の削除だけでなく、
paru をインストールしたときにビルドで使われた rust も残っていて、削除されました:

-


(7). 不要な依存パッケージの削除:
$ paru -c

→時々、実施しておくと、実施したときに余計なパッケージが表示されず、
 何を削除するのかが、わかりやすいです:

-

参考: Ubuntu であれば、下記の機能です:
$ sudo apt autoremove

-

-


まとめ

今回は、 「VirtualBox 7.2.2」に「Arch Linux」の「Xfce」デスクトップ環境を、インストーラの「archinstall」を使ってインストールしました:

-

インストーラがあると、やはり、インストールが楽です:
以前のインストール時は、「コンソール」画面が不安定で苦労しましたが、現在(の環境?)は安定しています。

-

「Arch Linux」の利点は、「公式リポジトリ」にパッケージがない場合でも、「AUR リポジトリ」を探せば見つかる可能性が高いこと。

-

-

(ローリングリリースの)「Arch Linux」を安定して使うコツは、頻繁に(入力が面倒でない paru を使い)システム更新すること。および、 できるだけ使用する aur パッケージ、つまり、リスクの数を(使い勝手も考えながら)減らすこと。

-

気に入った「aur アプリ」があれば、どんどん使って使用率(インストール数)を上げ、公式アプリに昇格できるように投票(パッケージのページで「Vote for this package」をクリック)すること。
公式アプリになれば、気に入ったアプリをあきらめる必要もなくなります。

-

-

ちなみに、「Arch Linux」の AUR は、アプリの移植や開発時に、PKGBUILD(レシピ)をローカルに置きたい場合、「ソースファイル」をローカルに git クローンして、そこに PKGBUILD を置く必要があるので手間ですが、

それをカバーしてくれる、 「開発を楽にするツール」がありました。

次回はそれをどう使うのか、本当に楽なのか、トライの予定。

-

-


-

-

    目次

-

「投稿の先頭 へ」

-

-


-

「この目次 の先頭へ」

「本編の目次 に戻る」

-

「xbps-src-README.md」ブラウザ対応版〈H179-16〉

登録日: 2026-03-14 / 更新日: 2026-03-25

-

「xbps-src」のサイトにある 「README.md」は、 「英語」ですが、
前回の「Manual.md」と同じく、使えるようになるには 読み込む 必要があります。

-

楽に「読み込み」できるように、和訳して色分けした「ブラウザ対応版」を作成しました:

-

個人で使うために作ったので、参考になりそうなことを追記。
また、誤って理解している可能性がありそうなので、怪しそうなところは
(もしくは、最初から) 原文 を確認下さい:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

The XBPS source packages collection

-

「xbps-src」で「Void Linux」ディストリビューション用のバイナリ パッケージを構築:

 原文: README.md

-

和訳:


「XBPS ソース パッケージ コレクション」:

このリポジトリには、「Void Linux」ディストリビューション用のバイナリ パッケージを
構築するための 「XBPS ソース パッケージ コレクション」が含まれています。

-

付属の「xbps-src」スクリプトは、ソースをフェッチしてコンパイルし、
そのファイルを仮の destdir にインストールして、
それぞれ「xbps-install」および「xbps-query」ユーティリティを通じて

「インストール」、または「クエリ」(問合せ)できる 「XBPS バイナリ」パッケージを生成します:

-

-

貢献方法の概要については「貢献」(CONTRIBUTING.md) を、
ソース パッケージの作成方法の詳細については「マニュアル」(Manual.md) を参照してください。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

Table of Contents  (目次)

-

  1. Requirements         (要件
  2. Quick start          (クイックスタート
  3. chroot methods        (chroot メソッド

    (1). xbps-uunshare (default)
    (2). xbps-uchroot
    (3). bwrap
    (4). ethereal

  4. Install the bootstrap packages  (ブートストラップ パッケージをインストール
  5. Configuration         (コンフィグレーション

    (1). Virtual packages

  6. Directory hierarchy       (ディレクトリ階層
  7. Building packages       (パッケージの構築
  8. Package build options      (パッケージ ビルド オプション
  9. Sharing and signing your local repositories    (ローカル リポジトリの共有と署名
  10. Rebuilding and overwriting existing local packages (既存のローカル パッケージの再構築と上書き
  11. Enabling distcc for distributed compilation     (分散コンパイル用に distcc を有効化
  12. Distfiles mirrors                (Distfile ミラー
  13. Cross compiling packages for a target architecture (ターゲット アーキテクチャ用のパッケージのクロスコンパイル
  14. Using xbps-src in a foreign Linux distribution   (他の Linux ディストリビューションで「xbps-src」を使う
  15. Remaking the masterdir            (masterdir を再作成
  16. Keeping your masterdir uptodate        (masterdir を最新の状態に保持
  17. Building 32bit packages on x86_64      (x86_64 での 32 ビット パッケージのビルド
  18. Building packages natively for the musl C library (musl C ライブラリ用のパッケージをネイティブに構築
  19. Building void base-system from scratch    (void 基本システムをゼロから構築

-

目次詳細 へ

-

-

補足:

「xbps-src」でアプリを移植(パッケージ化)するときの「構文のルール」:Manual.md

「xbps-src」に「貢献するときのルール」:CONTRIBUTING.md

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:

「xbps-src」のビルド環境での、実際の「操作」:

「xbps-src-help.md」ブラウザ対応版〈H179-10〉

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

1. Requirements  (要件)

-

原文: Requirements

-

和訳:


要件:

  • GNU bash
  • xbps >= 0.56
  • git  →設定されていない場合は、etc/defaults.conf を参照:
  • curl  →xbps-src update-check で必要
  • ほぼすべての UNIX システムにデフォルトで含まれる一般的な POSIX ユーティリティ

-

さらにソースからブートストラップする場合:
  • flock →util-linux
  • bsdtar or GNU tar (優先順)
  • install →GNU coreutils
  • objcopy、objdump、strip: binutils

-

xbps-src には、chroot を実行し、
メインの chroot ディレクトリとして使用される「masterdir」に
既存のディレクトリをバインド マウントする「ユーティリティ」が必要です。

xbps-src は、このタスクを実行するための複数のユーティリティをサポートしています。

-

注意:

xbps-src では、root としてビルドすることはできなくなりました:
chroot メソッドのいずれかを使用します。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

2. Quick start  (クイックスタート)

-

原文: Quick start

-

和訳:


「void-packages git」リポジトリのクローンを作成:

$ git clone https://github.com/void-linux/void-packages.git
$ cd void-packages

-

1). 「バイナリ」パッケージからのブートストラップ:

最初にパッケージをビルドするときに自動的に行われますが、
次のように手動で行うこともできます:

$ ./xbps-src binary-bootstrap

-

2). 「パッケージ」をビルドする場合:

「pkg」ターゲットと「パッケージ名」を指定:

$ ./xbps-src pkg <package_name>

ビルドが完了すると、パッケージは「hostdir/binpkgs」
または適切なサブディレクトリ (例: hostdir/binpkgs/nonfree) で利用できるようになります:

-

3). 使用可能なすべての「ターゲット」と「オプション」を一覧表示する場合:

ヘルプ表示:

$ ./xbps-src -h

-

4). 「制限付き」としてマークされたパッケージをビルド出来るようにする:

etc/conf を変更:

$ echo XBPS_ALLOW_RESTRICTED=yes >> etc/conf

ビルドが完了すると、パッケージは「hostdir/binpkgs」
または適切なサブディレクトリ (例: hostdir/binpkgs/nonfree) で利用できるようになります:

-

5). パッケージをインストール:
$ sudo xbps-install --repository hostdir/binpkgs <package_name>

-

あるいは、

「xtools」パッケージから「xi」ユーティリティを使用してパッケージをインストールできます:

$ xi <package_name>

「xi」は、現在の作業ディレクトリのリポジトリを考慮します。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

3. chroot methods  (chroot メソッド)

-

原文: chroot methods

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

3-1. xbps-uunshare (default)

-

原文: xbps-uunshare(1) (default)

-

和訳:


「user_namespaces」を使用する XBPS ユーティリティ

(xbps の一部、デフォルトでは -t フラグなし)

-

このユーティリティには、次の Linux カーネル オプションが必要です:

CONFIG_NAMESPACES
CONFIG_IPC_NS
CONFIG_UTS_NS
CONFIG_USER_NS

これはデフォルトの方法であり、
システムが必要なカーネル オプションをサポートしていない場合は、EINVAL (無効な引数) で失敗します。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

3-2. xbps-uchroot

-

原文: xbps-uchroot(1)

-

和訳:


「XBPS」のユーティリティで、

名前空間を使用するため、

ビルドされる「パッケージ」のファイルに setgid (SGID) パーミッションを設定する必要があります:

-

注意:

これは、「xbps-src -t」とすることで、

「構成ファイルでの選択」を無視し、「xbps-uchroot」を有効にします。

-

この「ユーティリティ」には、次の「Linux カーネル」オプションが必要です:

CONFIG_NAMESPACES
CONFIG_IPC_NS
CONFIG_PID_NS
CONFIG_UTS_NS

-

「xbps-uchroot」を使用できるようにするには、

ユーザを特別なグループに追加する必要があり、
実行可能ファイルは setgid が設定されている必要があります:

$ sudo chown root:<group> xbps-uchroot
$ sudo chmod 4750 xbps-uchroot
$ sudo usermod -a -G <group> <user>

注意:

デフォルトでは、void ではこれを手動で行うべきではありません。

ユーザは「xbuilder」グループのメンバーである必要があります。

-

有効にするには:

$ cd void-packages
$ echo XBPS_CHROOT_CMD=uchroot >> etc/conf

何らかの理由で、ERROR clone (Operation not permitted) 操作が許可されていません としてエラーが発生する場合は、

ユーザーが必要なグループのメンバーであること、
および上で説明したように xbps-uchroot(1) ユーティリティに適切な権限と所有者/グループがあること
を確認してください。

-

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:

「Void Linux」の、「setgid」 (SGID) パーミッションとは、

ファイルやディレクトリに対して特殊なアクセス権を設定する機能です。

SGID は「Set Group ID」の略であり、設定されたファイルやディレクトリが実行・操作された際、
ユーザのプライマリグループ権限ではなく、
そのファイルやディレクトリ自体に設定されたグループ権限を引き継ぐようにします。

特に共有ディレクトリでの作業において、ファイルグループの混乱を防ぐためによく利用されます

-

SGIDが設定される対象により挙動が異なります:

(1). ディレクトリに設定した場合(主に共有フォルダ)

挙動: そのディレクトリ内に新しく作成されたファイルやサブディレクトリは、親ディレクトリのグループを引き継ぎます。  
用途: チームメンバー間で共有ディレクトリを使用する場合、ユーザーが誰であれ、作成したファイルのグループが強制的に共有グループになるため、全員が編集可能(RW)になります。 

(2). 実行ファイル(プログラム)に設定した場合

挙動: そのファイルを実行したユーザは、一時的にそのファイルのグループ権限を取得します。  
用途: 通常のユーザーが実行しても、特定のグループ権限(例: games グループなど)が必要な作業を許可したい場合

-

SGIDの設定 (chmod)

SGIDはパーミッションの第1桁に「2」を設定します。

記号形式: chmod g+s ファイル名 (groupにsビットを付与)
数字形式: chmod 2775 ディレクトリ名 (通常の775の前に2をつける) 

-

確認:
$ ls -ld

→グループの実行権限の場所が s または S と表示されます

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

3-3. bwrap

-

原文: bwrap(1)

-

和訳:


「bubblewrap」は、

ユーザ名前空間または「setuid」を使用する、特権のないユーザ用のサンドボックス ツールです:

-

https://github.com/containers/bubblewrap」を参照してください:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

3-4. ethereal

-

原文: ethereal

-

和訳:


実行されている「ホスト システム」を破壊します:

ワンショットコンテナ、つまり docker (CI で使用) にのみ役立ちます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

4. Install the bootstrap packages  (ブートストラップ パッケージをインストール)

-

原文: Install the bootstrap packages

-

和訳:


「ブートストラップ」と呼ばれる、

初期ビルド「コンテナ」を構成するパッケージのセットがあります:

これらのパッケージは、「コンテナ」を作成するために「masterdir」にインストールされます:

-

この「コンテナ」をセットアップする主な推奨される方法は、

binary-bootstrap」コマンドを使用することで、

「リモート」xbps リポジトリまたは「ローカル」リポジトリの既存の「バイナリ」パッケージを使用します:

-

ホスト アーキテクチャの初期化された「masterdir」が存在しない場合、
これはパッケージのビルド時に自動的に行われます。

-

必要なすべての「ブートストラップ」パッケージを最初から構築する

bootstrap」コマンドもあります:

-

これらのパッケージはホスト システムのツールチェーンを使用してビルドされ、
完全な機能も再現性もないため (ホスト システムがビルドに影響を与える可能性がある)、

新しい Void Linux システムを「ブートストラップ」するためのステージ 0 としてのみ
使用する必要があるため、これは通常推奨されません:

-

それでも「bootstrap」を使用することを選択する場合は、

結果のステージ 0 コンテナを使用してすべてのブートストラップ パッケージを再度リビルドし、

次に binary-bootstrap (ステージ 1) を使用してブートストラップ パッケージをもう一度リビルドします : (ステージ 2 を取得してから、再度 binary-bootstrap を使用)

それが完了すると、最初に「binary-bootstrap」を使用したのと同等の
「ブートストラップ」セットが完成します。

-

また、完全なソース ブートストラップには時間がかかり、

binutils、gcc、perl、texinfo などのさまざまなユーティリティを
「ホスト システム」にインストールする必要があることにも注意してください:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

5. Configuration  (コンフィグレーション)

-

原文: Configuration

-

和訳:


「etc/defaults.conf」ファイルには、

「xbps-src」ユーティリティの「etc/conf」構成ファイルを通じて
オーバーライド(上書き)できる設定が含まれています:

-

そのファイルが存在しない場合は、
「$XDG_CONFIG_HOME/xbps-src.conf」、「~/.config/xbps-src.conf」、「~/.xbps-src.conf」から

構成設定を読み取ろうとします。

-

デフォルトの CFLAGS、CXXFLAGS、LDFLAGS をカスタマイズする場合は、
「etc/defaults.conf」で定義されているものをオーバーライドせず、

代わりに「etc/conf」で設定します。

例:

$ echo 'XBPS_CFLAGS="your flags here"' >> etc/conf
$ echo 'XBPS_LDFLAGS="your flags here"' >> etc/conf

-

「Native」フラグと「cross compiler/linker」フラグは、
それぞれ「common/build-profile」と「common/cross-profile」のアーキテクチャごとに設定されます。

-

理想的には、これらの設定はデフォルトで十分であり、
何をしているのか理解していない限り、独自の設定を行う必要はありません。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

5-1. Virtual packages

-

原文: Virtual packages

-

和訳:


「etc/defaults.virtual」ファイルには、

ソース パッケージ ツリーで依存関係として使用される
「仮想パッケージ」のデフォルトの置換が含まれています:

-

これらの置換をカスタマイズする場合は、
「etc/defaults.virtual」を「etc/virtual」にコピーし、必要に応じて編集します:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

6. Directory hierarchy  (ディレクトリ階層)

-

原文: Directory hierarchy

-

和訳:


デフォルトの構成ファイルの「ディレクトリ階層」:

     /void-packages
        |- common
        |- etc
        |- srcpkgs
        |  |- xbps
        |     |- template
        |
        |- hostdir
        |  |- binpkgs ...        (1)
        |  |- ccache ...         (2)
        |  |- distcc-<arch> ...     (3)
        |  |- repocache ...       (4)
        |  |- sources ...        (5)
        |
        |- masterdir-<arch>       (6)
        |  |- builddir    → ...   (7)
        |  |- destdir     → ...   (8)
        |  |- host       → <hostdir> からマウントされたバインド
        |  |- void-packages  → <void-packages> からマウントされたバインド

説明:

(1). hostdir/binpkgs:
  生成された「バイナリ」パッケージを保存する「ローカル」リポジトリです

(2). hostdir/ccache:
  「XBPS_CCACHE」オプションが有効な場合に「ccache」データを保存します

(3). hostdir/distcc-<arch>:
  「XBPS_DISTCC」オプションが有効な場合に「distcc」データを保存します

(4). hostdir/repocache:
  リモート リポジトリから「バイナリ」パッケージを保存します

(5). hostdir/sources:
  パッケージの「ソース」を保存します
(6). masterdir-<arch>:
  パッケージをビルド/インストールするための rootfs として使用されるマスター ディレクトリ

(7). builddir:
  パッケージのソース tarball を解凍し、パッケージがビルドされる場所を確認します

(8). destdir:
  パッケージの別名で仮の destdir をインストールします

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

7). Building packages  (パッケージの構築)

-

原文: Building packages

-

和訳:


パッケージを構築する最も単純な形式は、

「xbps-src」で「pkg」ターゲットを実行することです:

$ cd void-packages
$ ./xbps-src pkg <pkgname>

-

パッケージとその必要な依存関係が構築されると、バイナリ パッケージが作成され、
hostdir/binpkgs のデフォルトのローカル リポジトリに登録されます:

-

このローカル リポジトリへのパスは、任意の xbps 設定ファイル (xbps.d(5) を参照) に追加することも、
コマンドライン経由で明示的に追加することによっても追加できます:

例:

$ xbps-install --repository=hostdir/binpkgs ...
$ xbps-query --repository=hostdir/binpkgs ...

-

デフォルトでは、「xbps-src」は次の順序でパッケージの依存関係を解決しようとします:

(1). 依存関係がローカル リポジトリに存在する場合は、それを使用します (hostdir/binpkgs)

(2). 依存関係がリモート リポジトリに存在する場合は、それを使用します

(3). ソース パッケージに依存関係が存在する場合は、それを使用します

-

-N フラグを使用すると、リモート リポジトリの使用を完全に回避できます:

デフォルトのローカル リポジトリには、
debug、multilib などの複数のサブリポジトリが含まれる場合があります。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

8. Package build options  (パッケージ ビルド オプション)

-

原文: Package build options

-

和訳:


「ソース」パッケージでサポートされている「ビルド」オプションの表示:

$ ./xbps-src show-options foo

-

ビルド オプションは、「-o」フラグで有効にできます:

$ ./xbps-src -o option,option1 pkg foo

-

ビルド オプションは、先頭に「~」を付けることで無効にできます:

$ ./xbps-src -o ~option,~option1 pkg foo

-

両方の方法を一緒に使用して、xbps-src で複数のオプションを
同時に有効または無効にすることができます:

$ ./xbps-src -o option,~option1,~option2 pkg foo

-

「xbps-query」で、バイナリ パッケージの「ビルド」オプションを表示:

$ xbps-query -R --property=build-options foo

-

注意:

カスタム オプションを使用してパッケージをビルドし、
そのパッケージが公式の void リポジトリで利用可能な場合、更新ではそれらのオプションが無視されます。

「xbps-pkgdb」を介してそのパッケージを保留モードにします:

つまり、「xbps-pkgdb -mhold foo」を使用して、「xbps-install -u」による更新を無視します。

パッケージが保留されると、それを更新する唯一の方法は、
「xbps-install -u foo」と明示的に宣言することです。

-

永続的なグローバル パッケージのビルド オプションは、
「etc/conf」構成ファイルの「XBPS_PKG_OPTIONS」変数を介して設定できます。

パッケージごとのビルド オプションは、
「XBPS_PKG_OPTIONS_」を介して設定できます。

-

注意:

「pkgname」に「ダッシュ」が含まれている場合は、

「XBPS_PKG_OPTIONS_xorg_server=opt」のように 「アンダースコア」に置き換える必要があります。

サポートされているパッケージ ビルド オプションのリストとその説明は、
「common/options.description」ファイルまたはテンプレート ファイルで定義されています。

-

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:

「ダッシュ」について

短い en ダッシュ「–」(エンダッシュ) と
長い em ダッシュ「—」(エムダッシュ) の 2つがあります:

それぞれ、長さが欧文フォントの n、m の幅に等しいことが、名前の由来です。

-

ASCII にはどちらも存在しないので、en ダッシュはハイフンマイナス「-」で、
em ダッシュはハイフンマイナス二つ「--」で代用されます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

9. Sharing and signing your local repositories  (ローカル リポジトリの共有と署名)

-

原文: Sharing and signing your local repositories

-

和訳:


ローカル リポジトリを「リモート」で共有するには、

ローカル リポジトリとそこに保存されているバイナリ パッケージに署名することが必須です:

これは、「xbps-rindex」ユーティリティを使用して実現されます:

-

(1). 「openssl」または「ssh-keygen」を使用して、RSA キーを作成:
$ openssl genrsa -des3 -out privkey.pem 4096

または

$ ssh-keygen -t rsa -b 4096 -m PEM -f privkey.pem

現在、xbps では PEM 形式の RSA キーのみが受け入れられます。

-

(2). RSA 秘密キーの準備ができたら、それを使用してリポジトリのメタデータを初期化できます:
$ xbps-rindex --sign --signedby "I'm Groot" --privkey privkey.pem $PWD/hostdir/binpkgs

-

(3). パッケージごとに署名を作成:
$ xbps-rindex --sign-pkg --privkey privkey.pem $PWD/hostdir/binpkgs/*.xbps

「--privkey」が設定されていない場合、デフォルトは「~/.ssh/id_rsa」になります。

RSA キーがパスフレーズで保護されている場合は、パスフレーズを入力するか、
「XBPS_PASSPHRASE」環境変数を使用して設定する必要があります。

-

(4). 「バイナリ」パッケージが署名されたら、

リポジトリに適切な「16 進フィンガープリント」が含まれているかどうかを確認します:

$ xbps-query --repository=hostdir/binpkgs -vL

-

(5). 「バイナリ」パッケージが作成されるたびに、

「--sign-pkg」を使用してパッケージ署名を作成する必要があります。

複数の RSA キーを使用してリポジトリに署名することはできません。

-

「hostdir/binpkgs」内のパッケージが署名されている場合、

「.plist」形式のキー (xbps によってインポートされたもの) を「etc/repo-keys/」に配置して、
「xbps-src」がそのキーのインポートを求めるプロンプトを表示しないようにすることができます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

10. Rebuilding and overwriting existing local packages  (既存のローカル パッケージの再構築と上書き)

-

原文: Rebuilding and overwriting existing local packages

-

和訳:


パッケージはビルドごとに上書きされるため、

ビルド オプションが変更されたパッケージを簡単に取得できます。

-

公式 void リポジトリと同様に、
「xbps-src」がビルドをスキップし、指定されたバージョンとリビジョンで最初のパッケージのビルドを保持するには、

「etc/conf」ファイルで「XBPS_PRESERVE_PKGS=yes」を設定します。

-

ターゲットの「rootdir」にパッケージを再インストールすることも簡単に行うことができます:

$ sudo xbps-install --repository=/path/to/local/repo -yf xbps-0.25_1

「-f」フラグを 2 回使用すると、構成ファイルが上書きされます。

-

目的のリポジトリからパッケージを明示的に取得するには、
パッケージ式を適切に定義する必要があることに注意してください。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

11. Enabling distcc for distributed compilation  (分散コンパイル用に distcc を有効化)

-

原文: Enabling distcc for distributed compilation

-

和訳:


ワーカー (コードをコンパイルするマシン) をセットアップ:

$ sudo xbps-install -Sy distcc

-

distcc コンパイラのホワイトリストを更新:

$ sudo update-distcc-symlinks

ローカル ネットワーク マシンが distcc (例: 192.168.2.0/24) を使用できるように構成を変更:

$ sudo echo "192.168.2.0/24" >> /etc/distcc/clients.allow

distccd サービスを有効にして開始:

$ sudo ln -s /etc/sv/distccd /var/service

distcc をホスト (xbps-src を実行するマシン) にもインストールします。

ホストを他のマシンからワーカーとして使用する場合を除き、構成を変更する必要はありません。

-

ホスト上で、 void-packages/etc/conf ファイルで distcc を有効にできるようになりました:

XBPS_DISTCC=yes
XBPS_DISTCC_HOSTS="localhost/2 --localslots_cpp=24 192.168.2.101/9 192.168.2.102/2"
XBPS_MAKEJOBS=16

値の例では、ローカルホスト CPU に 4 つのコアがあり、
そのうち最大 2 つがコンパイラ ジョブに使用されると想定しています。

他の CPU がコンパイルするのに十分な前処理データを確保するために、
プリプロセッサ ジョブのスロット数は 24 に設定されています。

ワーカー 192.168.2.101 には 8 コアの CPU が搭載されており、
ジョブ数の /9 は飽和状態です。

ワーカー 192.168.2.102 は、CPU に 4 コアがある場合でも、
負荷を低く保つために最大 2つのコンパイル ジョブを実行するように設定されています。

「XBPS_MAKEJOBS」設定は、
可能な並列処理 (2 + 9 + 2 + ある程度のスラック) を考慮して 16 に増加します。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

12. Distfiles mirror(s)  (Distfile ミラー)

-

原文: Distfiles mirror(s)

-

和訳:


「etc/conf」では、

distfile を検索するためのミラー、またはミラーのリストをオプションで定義できます:

$ echo 'XBPS_DISTFILES_MIRROR="ftp://192.168.100.5/gentoo/distfiles"' >> etc/conf

複数のミラーを検索する場合は、空白で区切って複数の URL を指定するか、

次のように変数に追加します:

$ echo 'XBPS_DISTFILES_MIRROR+=" https://sources.voidlinux.org/"' >> etc/conf

この場合、最初の二重引用符の後に必ず空白を入れてください。

ダウンロードされたファイルのチェックサムがテンプレートで指定されたチェックサムと一致するまで、distfile がパッケージを構築するためにミラーが検索されます。

最終的に、distfile を保持するミラーがない場合、またはすべてのダウンロードがチェックサム検証に失敗した場合は、元のダウンロード場所が使用されます。

-

「XBPS_CHROOT_CMD」に「uchroot」を使用する場合は、

「file://」プレフィックスを使用してローカル パスを指定するか、
ビルド ホスト上の単純な絶対パス (例: /mnt/distfiles) を指定することもできます。

この方法で指定されたミラーの場所は、
「chroot」環境内の「$XBPS_MASTERDIR」の下にバインド マウントされ、
リモートの場所と同様に「distfile」が検索されます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

13. Cross compiling packages for a target architecture  (ターゲット アーキテクチャ用のパッケージのクロスコンパイル)

-

原文: Cross compiling packages for a target architecture

-

和訳:


現在、「xbps-src」は、

クロス コンパイラーを使用して、一部のターゲット アーキテクチャのパッケージをクロスビルドできます。 サポートされているターゲットは ./xbps-src -h で表示されます。

-

ソース パッケージがクロス ビルド可能に調整されている場合、
「xbps-src」は簡単なコマンドで「バイナリ」パッケージを自動的にビルドします:

$ ./xbps-src -a <target> pkg <pkgname>

-

何らかの理由でビルドが失敗した場合は、
新しいビルドの問題か、単にクロス コンパイルに適合していないことが原因である可能性があります。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

14. Using xbps-src in a foreign Linux distribution  (他の Linux ディストリビューションで「xbps-src」を使う)

-

原文: Using xbps-src in a foreign Linux distribution

-

和訳:


「xbps-src」は、

「CPU アーキテクチャ」に一致する最新の Linux ディストリビューションで使用できます:

-

Linux ディストリビューションで「xbps-src」を使用するには、

次の手順を実行します。

-

1). 「xbps 静的バイナリ」のダウンロードを実施:

「xbps」コマンドを使えるようにします:

-

<arch> の部分は使用する「CPU アーキテクチャ」に置換して下さい:

-

$ wget http://repo-default.voidlinux.org/static/xbps-static-latest.<arch>-musl.tar.xz
$ mkdir ~/XBPS
$ tar xvf xbps-static-latest.<arch>-musl.tar.xz -C ~/XBPS
$ export PATH=~/XBPS/usr/bin:$PATH

「user_namespaces」サポートがないために「xbps-uunshare」が機能しない場合は、

他の「chroot」メソッドを試してください。

-

補足:

「CPU アーキテクチャ」が「x86_64」の場合:

$ wget http://repo-default.voidlinux.org/static/xbps-static-latest.x86_64-musl.tar.xz
$ mkdir ~/XBPS
$ tar xvf xbps-static-latest.x86_64-musl.tar.xz -C ~/XBPS
$ export PATH=~/XBPS/usr/bin:$PATH

-

-

2). 「void-packages git」リポジトリのクローンを作成:
$ git clone https://github.com/void-linux/void-packages.git

xbps-src は完全に機能する必要があります。

-

3). オプションで、ブートストラップ プロセスを開始します:
$ ./xbps-src binary-bootstrap

-

4). デフォルトの「masterdir」は現在の作業ディレクトリ、

つまり「void-packages/masterdir-<arch>」に作成されます。

-

デフォルトの masterdir の<arch> は、ネイティブの「xbps アーキテクチャ」(x86_64)です:

→「void-packages/masterdir-x86_64

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

15. Remaking the masterdir  (masterdir を再作成)

-

原文: Remaking the masterdir

-

和訳:


何らかの理由で「xbps-src」を更新する必要があり、

「bootstrap-update」ターゲットだけでは不十分な場合は、

-

2つの簡単なコマンドを使用して「masterdir」を再作成できます:

(zap では「ccache/distcc/host」ディレクトリがそのまま維持されることに注意してください)

$ ./xbps-src zap
$ ./xbps-src binary-bootstrap

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

16. Keeping your masterdir uptodate  (masterdir を最新の状態に保持)

-

原文: Keeping your masterdir uptodate

-

和訳:


「ブートストラップ」パッケージをリポジトリ内の利用可能な最新バージョンに更新する場合:

これは、「bootstrap-update」ターゲットを使用して実行されます:

$ ./xbps-src bootstrap-update

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

17. Building 32bit packages on x86_64  (x86_64 での 32 ビット パッケージのビルド)

-

原文: Building 32bit packages on x86_64

-

和訳:


「x86_64」上で「32 ビット」パッケージをビルドするには

2つの方法が利用可能です:

-

(1). 32 ビットマスターディレクトリを使用したネイティブモード (推奨、公式リポジトリで使用)

(2). 「i686」ターゲットへのクロスコンパイルモード

-

正規モード (ネイティブ) には、i686 用のパッケージをビルドするときに作成される新しい x86 マスターディレクトリが必要です:

$ ./xbps-src -A i686 ...

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

18. Building packages natively for the musl C library  (musl C ライブラリ用のパッケージをネイティブに構築)

-

原文: Building packages natively for the musl C library

-

和訳:


同じアーキテクチャで異なる C ライブラリのパッケージを構築する正規の方法は、
ホスト アーキテクチャ フラグ -A を使用して専用のマスターディレクトリを使用することです。

-

glibc x86_64 システムで x86_64-musl 用にビルドするには、
xbps-src 呼び出しで -A x86_64-musl を使用します。

-

これにより、-A x86_64-musl が指定された場合に使用される masterdir-x86_64-musl という新しい masterdir が作成され、ブートストラップされます:

$ ./xbps-src -A x86_64-musl pkg ...

-

-


- --- - --- - --- - --- - --- - --- - --- - --- ---

19. Building void base-system from scratch  (void 基本システムをゼロから構築)

-

原文: Building void base-system from scratch

-

和訳:


ネイティブ アーキテクチャのベース システムで、

すべてのパッケージを再構築するには:

$ ./xbps-src -N pkg base-system

すべてを最初からクロスコンパイルすることも可能です:

$ ./xbps-src -a <target> -N pkg base-system

ビルドが完了したら、ローカル リポジトリへのパスを void-mklive に指定できます:

$ cd void-mklive
$ sudo make
$ sudo ./mklive.sh ... -r /path/to/hostdir/binpkgs

-

-

以上:

-

-

-


-

-

    目次

-

「投稿の先頭 へ」

-

-


-

「この目次 の先頭へ」

「本編の目次 に戻る」

-

「xbps-src-Manual.md」ブラウザ対応版〈H179-15〉

登録日: 2026-03-03 / 更新日: 2026-03-25

-

「xbps-src」のサイトにある 「Manual.md」は、 「英語」ですが、「xbps-src」のテンプレートの仕組みと設定方法について、大事なことが書かれており、
「アプリ」の移植にトライするつもりなら、読み込む 必要があります。

何度も読んでいるうちに、理解が深まります。

-

楽に「読み込み」できるように、和訳して色分けした「ブラウザ対応版」を作成しました:

-

個人で使うために作ったので、参考になりそうなことを追記。
また、誤って理解している可能性がありそうなので、怪しそうなところは
(もしくは、最初から) 原文 を確認下さい:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

The XBPS source packages manual

-

「xbps-src」でアプリを移植(パッケージ化)するときの「構文のルール」:

 原文: Manual.md

-

目次:

  1. Introduction           (前置き
  2. Package build phases       (パッケージのビルドフェーズ
  3. Package naming conventions    (パッケージ名の付け方

    (1). Libraries          (ライブラリ
    (2). Language Modules      (言語モジュール
    (3). Language Bindings      (言語のバインディング
    (4). Programs          (プログラム

  4. Global functions          (グローバル関数
  5. Global variables          (グローバル変数
  6. Available variables         (利用可能な変数

    (1). Mandatory variables     (必須な変数
    (2). Optional variables      (オプションの変数
    (3). About the depends variables (依存変数について

  7. Repositories           (リポジトリ

    (1). Repositories defined by Branch (ブランチによって定義されたリポジトリ
    (2). Package defined repositories  (パッケージ定義のリポジトリ

  8. Checking for new upstream releases (新しい上流リリースの確認
  9. Handling patches          (パッチの処理
  10. Build style scripts          (「build_style」のスクリプト
  11. Build helper scripts         (「build_helper」のスクリプト
  12. Functions             (関数
  13. Build options            (ビルド オプション
  14. INSTALL and REMOVE files     (ファイルのインストールと削除
  15. INSTALL.msg and REMOVE.msg files (INSTALL.msg および REMOVE.msg ファイル
  16. Creating system accounts/groups at runtime (実行時にシステムアカウント/グループを作成
  17. Writing runit services         (「runit」サービスの作成
  18. 32bit packages            (32ビットパッケージ
  19. Subpackages            (サブパッケージ
  20. Some package classes        (一部のパッケージクラス

    (1). Development packages    (開発パッケージ
    (2). Data packages        (データ パッケージ
    (3). Documentation packages    (ドキュメント パッケージ
    (4). Python packages      (Python パッケージ
    (5). Go packages        (Go パッケージ
    (6). Haskell packages      (Haskell パッケージ
    (7). Font packages       (フォント パッケージ

  21. Renaming a package       (パッケージの名前を変更
  22. Removing a package       (パッケージの削除
  23. XBPS Triggers          (XBPS トリガー

    (1). appstream-cache      (アプリ ストリーム キャッシュ
    (2). binfmts          (binfmts トリガー
    (3). dkms           (dkms トリガー
    (4). gconf-schemas       (gconf スキーマ トリガー
    (5). gdk-pixbuf-loaders     (gdk-pixbuf-loaders トリガー
    (6). gio-modules        (gio-modules トリガー
    (7). gettings-schemas      (gsettings スキーマ トリガー
    (8). gtk-icon-cache       (gtk アイコンキャッシュ トリガー
    (9). gtk-immodules       (gtk-immodules トリガー
    (10). gtk-pixbuf-loaders     (gtk-pixbuf-loaders
    (11). gtk3-immodules      (gtk3-immodules トリガー
    (12). hwdb.d-dir        (hwdb.d-dir トリガー
    (13). info-files         (info-files トリガー
    (14). initramfs-regenerate    (initramfs-regenerate トリガー
    (15). kernel-hooks       (kernel フック トリガー
    (16). mimedb         (mimedb トリガー
    (17). mkdirs          (mkdirs トリガー
    (18). pango-modules      (pango-modules トリガー
    (19). pycompile        (py コンパイル トリガー
    (20). register-shell       (レジスタ shell トリガー
    (21). system-accounts     (system-accounts トリガー
    (22). texmf-dist        (texmf-dist トリガー
    (23). update-desktopdb    (desktop データベースの更新 トリガー
    (24). x11-fonts        (x11 フォント トリガー
    (25). xml-catalog       (XML カタログ トリガー

  24. Void specific documentation   (Void Linux に固有の文書
  25. Notes             (注意事項
  26. Contributing via git       (Git 経由で貢献
  27. Help             (ヘルプ

-

目次詳細 へ

-

-

補足:

「xbps-src」に「貢献するときのルール」:CONTRIBUTING.md

「xbps-src」で「Void Linux」用のバイナリ パッケージを構築:README.md

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:

「xbps-src」のビルド環境での、実際の「操作」:

「xbps-src-help.md」ブラウザ対応版〈H179-10〉

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

1. Introduction (前置き)

-

原文: Introduction

-

和訳:


「void-packages」リポジトリには、

Void Linux 用のバイナリ パッケージをダウンロード、コンパイル、ビルドするためのすべての「レシピ」が含まれています:

これらのソース パッケージ ファイルは「テンプレート」と呼ばれます。

-

1). 「テンプレート」ファイルは、
「バイナリ」パッケージを生成するためにパッケージ ビルダーである「xbps-src」によって処理される「変数と関数を定義するシェル スクリプト」です:

-

2). 「xbps-src」で使用されるシェルは GNU bash です。

「xbps-src」は、POSIX sh との互換性を目的としていません。

-

3). すべての「テンプレート」は、

慣例により、特定のパッケージのテンプレート ファイルであることを示すコメントで始まります。
ほとんどの行は 80 列以内に収める必要があります。

多くの値をリストする変数は新しい行に「分割」でき、
次の行の続きはスペース 1 つでインデントされます。

-

4). 簡単な「テンプレート」の例:
# Template file for 'foo'
pkgname=foo
version=1.0
revision=1
build_style=gnu-configure
short_desc="Package description, no more than 72 characters" ←パッケージの説明、72 文字以内
maintainer="name <email>"
license="GPL-3.0-or-later"
homepage="http://www.foo.org"
distfiles="http://www.foo.org/foo-${version}.tar.gz"
checksum="fea0a94d4b605894f3e2d5572e3f96e4413bcad3a085aae7367c2cf07908b2ff"

-

5). 「テンプレート」ファイルには、
ソースファイルを仮の「destdir」にダウンロード、ビルド、インストールするための定義が含まれており、その後、指定された定義を使用してバイナリ パッケージを生成できます:

予約変数や予約関数については後述します:

-

6). 「$pkgname」と一致するディレクトリに、「テンプレート」ファイルは作成します:

-

7). パッケージ化する場合:
$ ./xbps-src pkg <pkgname>

-

例えば、 「void-packages/srcpkgs/foo/template」をパッケージ化する場合に、

パッケージ化がすべてがうまくいった場合:

foo-1.0_1.<arch>.xbps という名前の「バイナリ」パッケージが、
ローカル リポジトリ hostdir/binpkgs に生成されます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

2. Package build phases (パッケージのビルドフェーズ)

-

原文: Package build phases

-

和訳:


パッケージの構築は次のフェーズで構成されます:

-


1). setup

このフェーズでは、パッケージを構築するための環境を準備します。

-


2). fetch

このフェーズでは、distfiles 変数または do_fetch() 関数の定義に従って、ソース パッケージに必要なソースをダウンロードします。

-

→「テンプレート」で指示されたソースファイルをダウンロードします:

ダウンロードされた(展開前の)ソースファイルは、「項番 10).」の「clean」を実行しない限り、保持されます:

-

参考:

ソースファイルがダウンロードされる場所の例:
$ ls ~/git/void-packages/hostdir/sources/FeatherPad-1.6.2/
:
V1.6.2.tar.gz

-


3). extract

このフェーズでは、distfiles ファイルを $wrksrc に抽出するか、ソース パッケージのコンパイルに使用されるディレクトリである do_extract() 関数を実行します。

-

→ダウンロードした「ソースファイル」を作業ディレクトリ $wrksrc に解凍します:

-

参考:

ソースファイルを修正するときの例:

ダウンロードして展開:

$ cd ~/git/void-packages/
$ ./xbps-src extract FeatherPad
$ ls ~/git/void-packages/masterdir-x86_64/builddir/
:
FeatherPad-1.6.2

-

ソースファイルを修正するため、展開したソースファイルに移動:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/FeatherPad-1.6.2/

-


4). patch

このフェーズでは、パッケージの「patches」ディレクトリ内のすべてのパッチが適用され、
パッケージを構成する前に、他の操作を実行するために使用できます。

-

→準備されているパッチ(差分)に従い、ソースファイルを修正します:

-


5). configure

このフェーズでは、ソース パッケージの構成、つまり GNU configure スクリプトを実行します。

-

→ビルド時に使われる、依存パッケージ等が揃っているかのチェックなどです:

-


6). build

このフェーズでは、make またはその他の互換性のあるメソッドを使用して、
ソース ファイルをコンパイル/準備します。

-

→ビルドの実行で、「パッケージ化」に使うバイナリ等を作成します:

-


7). check

このオプションのフェーズでは、パッケージによって提供されるテストスイートを実行して、
ビルド フェーズの結果をチェックします。

-

ビルド スタイル (build_style=) によって提供されるデフォルトのdo_check 関数が何も実行しない場合、

「テンプレート」にて、make_check_target および、または make_check_args を適切に設定するか、独自の do_check 関数を定義する必要があります。

-

テストに時間がかかりすぎる場合、またはすべての環境で実行できない場合は、
XBPS_CHECK_PKGS がいっぱいでない限り、
make_check を適切な値に設定するか、 do_check をカスタマイズしてテストスイートを制限する必要があります。

-


8). install

このフェーズでは、make install またはその他の互換性のある方法を使用して、
パッケージ ファイルをパッケージの destdir <masterdir>/destdir/<pkgname>-<version> にインストールします。

-

→ビルドが完了していれば、作成されたバイナリファイル等を(仮の)システムに配置します:

-


9). pkg

このフェーズでは、パッケージの destdir に保存されているファイルを使用して、
バイナリ パッケージをビルドし、(パッケージ化して)ローカル リポジトリ hostdir/binpkgs に(生成して)登録します。

-

→通常行う、「パッケージ化」です:

-


10). clean

このフェーズでは、指定されたパッケージが定義されている場合、パッケージをクリーンアップします。

xbps-src は、指定されたフェーズのみの実行をサポートしており、正常に実行された場合、
(作業ディレクトリ ${wrksrc}xbps-src clean で削除されない限り)
そのフェーズは後でスキップされます。

-

参考:

パッケージ化を試すときのコツ:

アプリの移植時にエラーを修正してのリトライが早くできる設計ですが、エラーが出る前に完了しているフェーズで変更されたファイルは残っているので(クリーンアップしておかないと)予期しないエラーが出やすくなります。 ただし、クリーンアップすると、イチから実行するので完了までに時間がかかります。

なので、パッチの確認のときにリトライするときはクリーンアップ、
依存パッケージを解決するためにリトライするときはクリーンアップしないで、そのまま、
最終確認ではクリーンアップして、パッケージ化を試すと無駄な時間を減らせます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

3. Package naming conventions (パッケージ名の付け方)

-

原文: Package naming conventions

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

3-1. Libraries (ライブラリ)

-

原文: Libraries

-

和訳:


「ライブラリ」は、/usr/lib に共有オブジェクト (*.so) を提供するパッケージです。
次の例外を除き、アップストリームのパッケージ名と同じ名前を付ける必要があります。

-

  • このパッケージはフロントエンド アプリケーションのサブパッケージであり、基本パッケージおよび他のサードパーティ ライブラリで使用される共有オブジェクトを提供します。

その場合、「lib」という接頭辞を付ける必要があります。このルールの例外は次のとおりです。
実行可能ファイルがそのパッケージのビルドにのみ使用される場合、実行可能ファイルは -devel パッケージに移動します。

-

例: Wireshark -> subpkg libwireshark

ライブラリは、<name><name>-devel の 2 つのサブパッケージに分割する必要があります。

  • <name> には、リンクされたプログラムを実行するために必要なパッケージの部分のみを含める必要があります。

  • <name>-devel には、このパッケージに対してパッケージをコンパイルするために必要なすべてのファイルが含まれている必要があります。ライブラリがサブパッケージの場合、対応する開発パッケージの名前は lib<name>-devel にする必要があります。

-

参考:

「ライブラリ」を使ったアプリの例:

Geany」アプリを、ソースに手を加えずに「パッケージ化」してみる:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

3-2. Language Modules (言語モジュール)

-

原文: Language Modules

-

和訳:


言語モジュールは、スクリプト言語またはコンパイル言語の拡張機能です。これらのパッケージ自体は実行可能ファイルを提供しませんが、同じ言語で記述された他のパッケージで使用できます。

これらのパッケージの命名規則は次のとおりです:

<language>-<name>

パッケージがモジュールと実行可能ファイルの両方を提供する場合は、<name> という名前の実行可能ファイルと <language>-<name> という名前のモジュールを提供するパッケージに分割する必要があります。

パッケージが言語名自体で始まる場合は、言語プレフィックスを削除できます。言語の短縮名は、言語接頭辞の有効な代替としては使用できません。

例: perl-URI、python3-pyside2

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

3-3. Language Bindings (言語のバインディング)

-

原文: Language Bindings

-

和訳:


言語バインディングは、プログラムまたはライブラリに特定の言語で記述された拡張機能またはプラグインを含めることを可能にするパッケージです。

これらのパッケージの命名規則は次のとおりです:

<name>-<language>

例: gimp-python3、irssi-perl

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

3-4. Programs (プログラム)

-

原文: Programs

-

和訳:


プログラムは実行可能ファイルを /usr/bin (または非常に特殊な場合には他の .../bin ディレクトリ) に置きます。

これらのパッケージには、上流のパッケージ名を使用する必要があります。

-

他の多くのディストリビューションとは異なり、void はパッケージ名を小文字にしない(アプリがある)ことに注意してください。

経験則として、パッケージの tar.gz に大文字が含まれている場合は、パッケージ名にも大文字が含まれている必要があります。そうでない場合、パッケージ名は小文字になります。

-

プログラムは、「プログラム」パッケージと「ライブラリ」パッケージに分割できます。
「プログラム」パッケージには上記のように名前を付ける必要があります。
「ライブラリ」パッケージには「lib」という接頭辞を付ける必要があります。

→「ライブラリ」のセクション「項番 3-1.」を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

4. Global functions(グローバル関数)

-

原文: Global functions

次の関数は xbps-src によって定義されており、任意のテンプレートで使用できます:

-

和訳:


1). vinstall()

vinstall <file> <mode> <targetdir> [<name>]

→指定されたモードのファイルを パッケージの $DESTDIRtargetdir にインストールします。
オプションの 4番目の引数を使用して、ファイル名を変更できます。

-


2). vcopy()

vcopy <pattern> <targetdir>

→パターン内のすべてのファイルを パッケージの $DESTDIR 内の targetdir に再帰的にコピーします。

-


3). vmove()

vmove <pattern>

→パターンを パッケージの $DESTDIR 内の指定されたディレクトリに移動します。

-


4). vmkdir()

vmkdir <directory> [<mode>]

→パッケージの $DESTDIR にディレクトリを作成します。
2番目のオプションの引数は、ディレクトリのモードを設定します。

-


5). vbin()

vbin <file> [<name>]

→ファイルを パッケージの $DESTDIRusr/bin にアクセス許可 0755 でインストールします。
オプションの 2番目の引数を使用して、ファイル名を変更できます。

-


6). vman()

vman <file> [<name>]

→ファイルをマニュアルページとしてインストールします。
vman() は名前を解析し、セクションとローカライゼーションを決定します。
また、gzip 形式 (.gz) および bzip 形式 (.bz2)man ページを透過的にプレーンテキストに変換します。

マッピングの例:

foo.1     → ${DESTDIR}/usr/share/man/man1/foo.1
foo.fr.1   → ${DESTDIR}/usr/share/man/fr/man1/foo.1
foo.1p    → ${DESTDIR}/usr/share/man/man1/foo.1p
foo.1.gz   → ${DESTDIR}/usr/share/man/man1/foo.1
foo.1.bz2  → ${DESTDIR}/usr/share/man/man1/foo.1

-

参考:

${DESTDIR} については、「項番 5.」の「6). DESTDIR」を参照:

-


7). vdoc()

vdoc <file> [<name>]

→ファイルを パッケージの $DESTDIRusr/share/doc/<pkgname> にインストールします。
オプションの 2番目の引数を使用して、ファイル名を変更できます。

-


8). vconf()

vconf <file> [<name>]

→ファイルを パッケージの $DESTDIR 内の etc にインストールします。
オプションの 2番目の引数を使用して、ファイル名を変更できます。

-


9). vsconf()

vsconf <file> [<name>]

→ファイルを パッケージの $DESTDIRusr/share/examples/<pkgname> にインストールします。
オプションの 2番目の引数を使用して、ファイル名を変更できます。

-


10). vlicense()

vlicense <file> [<name>]

→ファイルを パッケージの $DESTDIRusr/share/licenses/<pkgname> にインストールします。
オプションの 2番目の引数を使用して、ファイル名を変更できます。

いつ使用するかについては、ライセンスを参照してください。

-


11). vsv()

vsv <service> [<facility>]

→サービスを ${FILESDIR} から /etc/sv にインストールします。
サービスは、少なくとも実行スクリプトを含むディレクトリである必要があります。

supervise シンボリックリンクは vsv によって自動的に作成され、実行スクリプトはこの関数によって自動的に実行可能になることに注意してください。

新しいサービス ディレクトリの作成方法の詳細については、FAQ の対応するセクションを参照してください。

${FILESDIR}/$service にログ サブサービスが存在しない場合は、
exec vlogger -t $service -p $facility を含むログ サブサービスが自動的に作成されます。
2番目の引数が指定されていない場合は、デーモン機能が使用されます。

vlogger とこの機能で利用可能な値の詳細については、vlogger(8) を参照してください。

-


12). vsed()

vsed -i <file> -e <regex>

sed コマンドの実行前後にファイルの sha256sum をチェックして、sed 呼び出しによって何も変更されなかったケースを検出する sed のラッパーです。

-i file-e regex を繰り返し呼び出すことで、任意の量のファイルと正規表現を取得します。
少なくとも 1つのファイルと 1つの正規表現を指定する必要があります。

vsed は、指定されたすべてのファイルに対して指定されたすべての正規表現に対して、
指定された順序で sed コマンドを呼び出すことに注意してください。

-


13). vcompletion()

vcompletion() <file> <shell> [<command>]

→コマンドのファイルからシェル補完を正しい場所に、シェルに適切なファイル名でインストールします。
コマンドが指定されていない場合は、デフォルトで pkgname が使用されます。
シェル引数には、bashfish、または zsh のいずれかを指定できます。

-


14). vextract()

vextract() [-C <target directory>] [--no-strip-components|--strip-components=<n>] <file>

→n 個のディレクトリ コンポーネントを削除して、ファイルをターゲット ディレクトリに抽出します。
ターゲット ディレクトリが指定されていない場合、デフォルトで作業ディレクトリが使用されます。

--strip-components または --no-strip-components が指定されていない場合、
デフォルトは --strip-components=1 になります。

-


15). vsrcextract()

vsrcextract() [-C <target directory>] [--no-strip-components|--strip-components=<n>] <file>

→n 個のディレクトリ コンポーネントを削除して、$XBPS_SRCDISTDIR/$pkgname-$version/<file> をターゲット ディレクトリに抽出します。

ターゲット ディレクトリが指定されていない場合、デフォルトで作業ディレクトリが使用されます。

--strip-components または --no-strip-components が指定されていない場合、
デフォルトは --strip-components=1 になります。

→これは、skip_extraction と組み合わせて使用​​したり、サブモジュールの distfile に使用したりすると便利です。

-


16). vsrccopy()

vsrccopy() <file>... <target>

→ファイルを $XBPS_SRCDISTDIR/$pkgname-$version/ からターゲット ディレクトリにコピーし、
ターゲットが存在しない場合は作成します。

→これは、skip_extraction と組み合わせて使用​​すると便利です。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

5. Global variables(グローバル変数)

-

原文: Global variables

次の関数は xbps-src によって定義されており、任意のテンプレートで使用できます:

-

和訳:


1). makejobs

XBPS_MAKEJOBS が定義されている場合は -jX に設定すると、GNU make による並列ジョブが可能になります。

-

参考:

X には使用するプロセッサ数が入ります:

-


2). sourcepkg

メイン パッケージ名に設定すると、追加のバイナリ パッケージ名ではなくメイン パッケージと一致させるために使用できます。

-


3). CHROOT_READY

ターゲット chroot (masterdir)chroot ビルドの準備ができている場合に設定します。

-


4). CROSS_BUILD

xbps-src がパッケージをクロスコンパイルしている場合に設定します。

-


5). XBPS_CHECK_PKGS

xbps-src がパッケージのテストを実行するかどうかを設定します。
長いテストスイートは、do_check()full に設定されている場合にのみ実行する必要があります。

-


6). DESTDIR

ソース pkg によって使用される仮の destdir へのフルパスで、
<masterdir>/destdir/${sourcepkg}-${version} に設定します。

-


7). FILESDIR

「files」パッケージ ディレクトリへのフル パス、つまり srcpkgs/foo/files です。
「files」ディレクトリは、ソース パッケージの一部としてインストールされる追加ファイルを保存するために使用できます。

-


8). PKGDESTDIR

サブパッケージ内の pkg_install() 関数によって使用される仮の destdir へのフルパスです。
<masterdir>/destdir/${pkgname}-${version} に設定します。

-


9). XBPS_BUILDDIR

処理中のソース パッケージのソース コードを保存するディレクトリです。
<masterdir>/builddir に設定します。
パッケージ wrksrc は、${XBPS_BUILDDIR}/${wrksrc} などのこのディレクトリに常に保存されます。

-


10). XBPS_MACHINE

xbps-uhelper arch によって返される マシン アーキテクチャ です。

-


11). XBPS_ENDIAN

マシンのエンディアン (「le」または「be」) です。

-


12). XBPS_LIBC

マシンの C ライブラリ (「glibc」または「musl」) です。

-


13). XBPS_WORDSIZE

マシンのワード サイズ (ビット単位) (32 または 64) です。

-


14). XBPS_NO_ATOMIC8

マシンにはネイティブ 64 ビット アトミックがありません (libatomic エミュレーションが必要です)。

-

参考:

「libatomic」について:

「libatomic」は、GCC(GNU Compiler Collection)が提供するランタイムライブラリで、ハードウェアがネイティブでサポートしていない不可分操作(アトミック操作)を、ソフトウェア的にエミュレーション(模倣)する機能を提供するライブラリです。

-


15). XBPS_SRCDISTDIR

ソース distfile が保存されている場所へのフルパス、つまり $XBPS_HOSTDIR/sources です。

-


16). XBPS_SRCPKGDIR

srcpkgs ディレクトリへのフルパス です。

-


17). XBPS_TARGET_MACHINE

パッケージをクロスコンパイルするときのターゲット マシンの アーキテクチャ です。

-


18). XBPS_TARGET_ENDIAN

ターゲット マシンのエンディアン (「le」または「be」) です。

-


19). XBPS_TARGET_LIBC

ターゲット マシンの C ライブラリ (「glibc」または「musl」) です。

-


20). XBPS_TARGET_WORDSIZE

ターゲット マシンのワード サイズ (ビット単位) (32 または 64) です。

-


21). XBPS_TARGET_NO_ATOMIC8

ターゲット マシンにはネイティブ 64 ビット アトミックがありません (libatomic エミュレーションが必要です)。

-


22). XBPS_FETCH_CMD

FTP、http、https サーバーからファイルをフェッチする ユーティリティ です。

-


23). XBPS_WRAPPERDIR

ユーティリティ用の xbps-src のラッパーが保存されている場所への フルパス です。

-


24). XBPS_CROSS_BASE

クロスコンパイル依存関係がインストールされる場所へのフルパスは、ターゲット アーキテクチャ トリプレットによって異なります。つまり、aarch64 -> /usr/aarch64-linux-gnu になります。

-


25). XBPS_RUST_TARGET

rustccargo によって使用されるターゲット アーキテクチャ トリプレット です。

-

参考:

「ターゲット アーキテクチャ トリプレット」について:

ターゲット アーキテクチャ トリプレット(Target Architecture Triplet、または単に Target Triple)は、ソフトウェア開発、特にコンパイラ(LLVM, GCCなど)やクロスコンパイルにおいて、 コードが実行される対象プラットフォーム(ターゲット環境)を決定するための 3つ(または 4つ以上)の要素で構成される文字列のことです。

この識別子によって、コンパイラは「どのCPU向けに」「どのOSで」「どんなABI(アプリケーション・バイナリ・インタフェース)で」コードを生成するかを正確に理解します。

-

具体例:

  • x86_64-unknown-linux-gnu: x86_64のCPU、ベンダー不明、Linux OS、GNU 環境
  • aarch64-apple-darwin:  ARM64のCPU、Apple、macOS/iOS 環境
  • arm-none-eabi: ARM CPU、OSなし(ベアメタル)、Embedded ABI(組込みシステム)

-


26). XBPS_BUILD_ENVIRONMENT

継続的インテグレーション固有の操作を有効にします。
継続的インテグレーションの場合は、 void-packages-ci に設定します。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

6. Available variables(利用可能な変数)

-

原文: Available variables

次の関数は xbps-src によって定義されており、任意のテンプレートで使用できます:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

6-1. Mandatory variables(必須な変数)

-

原文: Mandatory variables

-

和訳:


1). homepage

上流の「ホームページ」を指す URL です。

-


2). license

「ライセンス」名で、SPDX 短縮識別子、パブリック ドメインに一致する文字列、
または他のライセンスの場合は、custom: という接頭辞(頭の文字)が付いた文字列です。

-

複数のライセンスを SPDX ライセンス表現 としてリストする必要があります:

例: MIT OR Apache-2.0, MIT AND (LGPL-2.1-or-later OR BSD-3-Clause)

ANDORWITH、および () の使用は xlint でサポートされています。

-

従来のカンマ区切り形式が見つかった場合は、変換する必要があります:

例: GPL-3.0-or-later, custom:Hugware

-

ファイルが含まれていないためライセンスがなく、
ライセンスを必要としない空の「メタパッケージ」は、「Public Domain」を使用する必要があります。

-

注意: AGPL、MIT、BSD、ISC、X11、および 「custom」ライセンス では、
「ライセンス ファイル」が「バイナリ パッケージ」とともに提供される必要があります。

-

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:

SPDX ライセンス表現(SPDX License Identifier)とは、

Linux Foundation が定めたオープン規格に基づき、
ソフトウェアの「ライセンス」を「// SPDX-License-Identifier: MIT」のような簡潔な一行で
識別・表記する仕組みです。

複雑なライセンス条項を標準化された ID(SPDX-ID)で記述するため、
自動認識やコンプライアンス管理が容易になります。

複合ライセンス対応で、「GPL-2.0-only OR MIT」のように、
複数のライセンスが適用される場合も柔軟に表現できます。

-

記述例:

ソースコードファイルの先頭に記述:

// SPDX-License-Identifier: MIT
// SPDX-License-Identifier: GPL-2.0-or-later

-


3). maintainer

「メンテナ名」(保守管理者)で、name <user@domain> の形式の文字列 です。

このフィールドの「電子メール」は、連絡可能な有効な電子メールである必要があります。 users.noreply.github.com の電子メールを使用したパッケージは受け付けられません。

-

→パッケージに問題があったときの「連絡先」です:

-


4). pkgname

「パッケージ名」で、srcpkgs/<pkgname> に一致する文字列 です。

-


5). revision

「ソース」パッケージが作成されるとき、
または新しいアップストリーム バージョンに更新されるときに、
1 に設定する必要がある数値 です。

これは、生成されたバイナリ パッケージが変更された場合にのみ
増加する必要があります。

-


6). short_desc

このパッケージの「簡単な説明」を含む文字列で、最大 72 文字 です。

-


7). version

パッケージの「バージョン」を表す文字列 です。

ダッシュやアンダースコアを含めることはできません。少なくとも 1桁の数字が必要です。
シェルの変数置換の使用は許可されていません。

pkgnameversion に特殊文字を含めることは禁止されています。
したがって、引用する必要はなく、慣例により引用すべきではありません。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

6-2. Optional variables(オプションの変数)

-

原文: Optional variables

-

和訳:


1). hostmakedepends

パッケージのビルドに必要な「ホストの依存関係」のリストで、 マスター ディレクトリにインストールされます。

srcpkgs 内の現在のバージョンが常に必要となるため、バージョンを指定する必要はありません。
例: hostmakedepends="foo blah"

-


2). makedepends

パッケージのビルドに必要な「ターゲットの依存関係」のリストで、
マスター ディレクトリにインストールされます。

srcpkgs 内の現在のバージョンが常に必要となるため、バージョンを指定する必要はありません。
例: makedepends="foo blah"

-


3). checkdepends

「パッケージのチェックを実行するために必要な依存関係」のリスト、
つまり、テンプレートの do_check() 関数で指定されたスクリプトまたは make ルールです。
例: checkdepends="gtest"

-


4). depends

パッケージを「実行するために必要な依存関係」のリストです。

これらの依存関係は「マスター ディレクトリにはインストールされず」、
必要なバージョンを満たす「バイナリ パッケージがローカル リポジトリに存在するかどうかのみチェック」されます。

依存関係は、バージョン コンパレータ <、>、<=、>=、または foo-1.0_1 を使用して指定して、
正確なバージョンと一致させることができます。

-

バージョン コンパレータが定義されていない場合 (パッケージ名のみ)、
バージョン コンパレータは自動的に >=0 に設定されます:
例: depend="foo blah>=1.0"

詳細については、「ランタイムの依存関係」セクションを参照してください。

-

→パッケージ化された「パッケージ」をインストールした後に、
「実行」するときに必要となるパッケージです:

-


5). bootstrap

有効にすると、ソース パッケージはブートストラップ プロセスの一部とみなされ、chroot でパッケージをビルドできるようにする必要があります。

このプロパティを設定する必要があるパッケージは少数です。

-


6). conflicts

このパッケージと競合するパッケージのオプションのリストです。

正確なバージョンと一致させるには、バージョン コンパレータ <、>、<=、>=、または foo-1.0_1 を使用して競合を指定できます。

-

バージョン コンパレータが定義されていない場合 (パッケージ名のみ)、
バージョン コンパレータは自動的に >=0 に設定されます。
例: conflicts="foo blah>=0.42.3"

-


7). distfiles

上流のソース配布ファイルへの完全な URL です。

複数のファイルは 空白 で区切ることができます。
ファイルは、.tar.lzma、.tar.xz、.txz、.tar.bz2、.tbz、.tar.gz、.tgz、.gz、.bz2、.tar、または .zip で終わる必要があります。

-

ターゲット ファイル名を定義するには、URL に >filename を追加します。
例: distfiles="http://foo.org/foo-1.0.tar.gz http://foo.org/bar-1.0.tar.gz>bar.tar.gz"

-

繰り返しを避けるために、「一般的なホスティング サイト」にはいくつかの変数が存在します:

変数
CPAN_SITE https://cpan.perl.org/modules/by-module
DEBIAN_SITE http://ftp.debian.org/debian/pool
FREEDESKTOP_SITE https://freedesktop.org/software
GNOME_SITE https://ftp.gnome.org/pub/GNOME/sources
GNU_SITE https://ftp.gnu.org/gnu
KERNEL_SITE https://www.kernel.org/pub/linux
MOZILLA_SITE https://ftp.mozilla.org/pub
NONGNU_SITE https://download.savannah.nongnu.org/releases
PYPI_SITE https://files.pythonhosted.org/packages/source
SOURCEFORGE_SITE https://downloads.sourceforge.net/sourceforge
UBUNTU_SITE http://archive.ubuntu.com/ubuntu/pool
XORG_SITE https://www.x.org/releases/individual
KDE_SITE https://download.kde.org/stable
VIDEOLAN_SITE https://download.videolan.org/pub/videolan

-


8). checksum

${distfiles}sha256 のチェックサム値です。

複数のファイルは空白で区切ることができ、その順序は ${distfiles} で使用された順序と同じでなければならないことに注意してください。
例: checksum="kkas00xjkjas"

distfile がサーバー上でオンザフライでパッケージ化されるため、ダウンロードごとにチェックサムが変更される場合、たとえば、 https://*.googlesource.com/ サイトのスナップショット tarball では、(@) の先頭にコマーシャルを追加することでアーカイブ コンテンツのチェックサムを指定できます。

tarball の場合は、コマンド tar xf <tarball.ext> --to-stdout | sha256sum を使用してコンテンツのチェックサムを見つけることができます。

-


9). wrksrc

パッケージのソースが抽出(解凍)される 作業ディレクトリ名 で、
${pkgname}-${version} に設定されます。

-


10). build_wrksrc

パッケージのビルド時に使用される ${wrksrc} に相対的なディレクトリです。

-


11). create_wrksrc

通常、抽出(解凍)後、複数のトップレベルのファイルおよび/またはディレクトリがある場合、またはディレクトリがまったくない場合、

トップレベルのファイルおよびディレクトリは、もう 1 つのディレクトリ層内にラップされます。
この動作を強制するには、create_wrksrc を設定します。

-


12). build_style

パッケージの「ビルド方法」を指定します。

利用可能なパッケージのビルド方法、またはこれを設定しない場合の影響について詳しくは、以降の記述をお読みください。

-


13). build_helper

ソースとなる common/build-helper 内のファイルとその変数の空白で区切られたリストがテンプレートで使用可能になります。つまり、 build_helper="rust" です。

-


14). configure_script

${build_style}configure または gnu-configure ビルドメソッドに設定されている場合に、configure フェーズで実行する configure スクリプトの名前です。

デフォルトでは ./configure に設定されます。

-


15). configure_args

${build_style}configure または gnu-configure ビルド メソッドに設定されている場合に、configure スクリプトに渡される引数です。

デフォルトでは、プレフィックスは /usr に設定する必要があります。

gnu-configure パッケージでは、いくつかのオプションがデフォルトですでに設定されています: --prefix=/usr --sysconfdir=/etc --infodir=/usr/share/info --mandir=/usr/share/man --localstatedir=/var

-


16). make_cmd

${build_style}configure、gnu-configure、または gnu-makefile ビルド メソッドに設定されている場合に、ビルド フェーズで実行される実行可能ファイルです。

デフォルトでは make に設定されています。

-


17). make_build_args

${build_style}configure、gnu-configure、または gnu-makefile ビルド メソッドに設定されている場合に、ビルド フェーズで ${make_cmd} に渡される引数です。

デフォルトでは設定が解除されています。

-


18). make_check_args

${build_style}configure、gnu-configure、または gnu-makefile ビルド メソッドに設定されている場合に、チェック フェーズで ${make_cmd} に渡される引数です。

デフォルトでは設定が解除されています。

-


19). make_install_args

${build_style}configure、gnu-configure、または gnu-makefile ビルド メソッドに設定されている場合に、インストール フェーズで ${make_cmd} に渡される引数です。

-


20). make_build_target

ビルドターゲットです。

${build_style}configure、gnu-configure、または gnu-makefile に設定されている場合、これはビルドフェーズで ${make_cmd} に渡されるターゲットです。設定を解除すると、デフォルトのターゲットが使用されます。

${build_style}python3-pep517 の場合、これは Python ホイールとしてビルドされるパッケージ ディレクトリのパスです。設定されていない場合、デフォルトは (ビルドに関する現在のディレクトリ) です。

-


21). make_check_target

${build_style}configure、gnu-configure、または gnu-makefile ビルド メソッドに設定されている場合に、チェック フェーズで ${make_cmd} に渡されるターゲット。

デフォルトではチェックするように設定されています。

-


22). make_install_target

インストール対象です。

${build_style}configure、gnu-configure、または gnu-makefile に設定されている場合、これはインストールフェーズで ${make_command} に渡されるターゲットです。

設定を解除すると、デフォルトでインストールされます。

-

${build_style}python3-pep517 の場合、これはインストールされるビルド フェーズによって生成される Python ホイールのパスです。

設定を解除すると、python3-pep517 ビルド スタイルは、インストールに関して現在のディレクトリでパッケージ名とバージョンに一致するホイールを探します。

-


23). make_check_pre

${make_cmd} の前の式です。

これは、ラッパー コマンドまたは check コマンドの環境変数の設定に使用できます。
デフォルトでは空です。

-


24). patch_args

do_patch() 中にパッケージ ソースにパッチを適用するときに patch(1) コマンドに渡される引数です。

パッチは srcpkgs/<pkgname>/patches に保存され、-p1 形式である必要があります。デフォルトでは -Np1 に設定されます。

-


25). disable_parallel_build

設定すると、パッケージは並列でビルドされず、XBPS_MAKEJOBS は 1 に設定されます。

-

パッケージが XBPS_MAKEJOBS でうまく機能しないが、並列でビルドするメカニズムがまだある場合は、disable_Parallel_build を設定し、

「テンプレート」で XBPS_ORIG_MAKEJOBS (XBPS_MAKEJOBS の元の値を保持する) を使用します。

-


26). disable_parallel_check

設定した場合、パッケージのテストはビルドされず、並列実行されず、XBPS_MAKEJOBS は 1 に設定されます。

パッケージが XBPS_MAKEJOBS でうまく機能しないが、チェックを並行して実行するメカニズムがある場合は、

disable_Parallel_check を設定し、テンプレートで XBPS_ORIG_MAKEJOBS (XBPS_MAKEJOBS の元の値を保持する) を使用します。

-


27). make_check

チェックフェーズを実行するケースを設定します。
このオプションには、テストが失敗する理由を説明するコメントを付ける必要があります。

-

許可される値:

  • XBPS_CHECK_PKGS が設定されている場合、yes (デフォルト) が実行されます。

  • XBPS_CHECK_PKGS がいっぱいの場合、実行するように拡張されます。

  • XBPS_CHECK_PKGS が設定されている場合、ローカルで実行される ci-skip ですが、プルリクエスト チェックの一部としては実行されません。

  • 決して実行されません。

-


28). keep_libtool_archives

有効にすると、GNU Libtool アーカイブは削除されません。

デフォルトでは、これらのファイルは常に自動的に削除されます。

-


29). skip_extraction

「extract」(抽出・解凍)フェーズで抽出すべきではないファイル名のリストです。

これは、${distfiles} で定義されている URL のベース名と一致する必要があります:
例: Skip_extraction="foo-${version}.tar.gz"

-


30). nodebug

有効にすると、XBPS_DEBUG_PKGS が設定されていても、-dbg パッケージは生成されません。

-


31). conf_files

バイナリ パッケージが所有する構成ファイルのリストです。

これはフルパスを想定しており、ワイルドカードは拡張され、複数のエントリは空白で区切ることができます。

例: conf_files="/etc/foo.conf /etc/foo2.conf /etc/foo/*.conf"

-


32). mutable_files

バイナリ パッケージが所有するファイルのリストで、ファイルは変更されることが予想され、 conf_files とよく似ていますが、人間が編集することは想定されていません。

-


33). make_dirs

インストール時に作成されるディレクトリと権限を定義するエントリのリストです。

各エントリはスペースで区切る必要があり、それ自体にスペースが含まれます。

make_dirs="/dir 0750 user group"

ユーザ、グループ、およびモードは、755 root root であっても、すべての行で必須です。
慣例により、dir perms ユーザ グループのエントリは 1 行に 1 つだけあります。

-


34). repository

パッケージが配置されるリポジトリを定義します。

有効なリポジトリのリストについては、「項番 7.」の「リポジトリ」を参照してください。

-


35). nostrip

設定すると、デバッグ シンボルを含む ELF バイナリは削除されません。

デフォルトでは、すべてのバイナリが削除されます。

-


36). nostrip_files

デバッグ シンボルが削除されない ELF バイナリの空白で区切られたリストです。

ファイルはフルパスまたはファイル名で指定できます。

-


37). noshlibprovides

If set, the ELF binaries won't be inspected to collect the provided sonames in shared libraries.

設定されている場合、ELF バイナリは、共有ライブラリで提供された「sonames」を収集するために検査されません。

-

参考:

「sonames」について:

IT分野における soname(エスオーネーム)は、Linux などの UNIX 系 OS で使用される共有ライブラリ(.soファイル)のバージョン管理や互換性管理に使われる、「論理的な名前(識別子)」のことです。

一般的な形式は lib<ライブラリ名>.so.<メジャーバージョン番号> です。

共有ライブラリがアップデートされた際に、古いプログラムが動かなくなる(ABI不整合)を防ぐため、「soname」を使うことで、プログラムは互換性のあるライブラリを自動的に選択できます。

-


38). noverifyrdeps

設定した場合、ELF バイナリと共有ライブラリは、逆の依存関係を収集するために検査されません。

これを設定する必要がある場合は、depends ですべての依存関係を指定する必要があります。

-


39). skiprdeps

$DESTDIR 内の絶対パスで指定されたファイル名の空白区切りのリストです。
実行時の依存関係はスキャンされません。

これは、ホスト上で実行またはロードされる予定ではなく、ターゲット デバイスまたはエミュレーションに送信される予定のファイルをスキップする場合に便利です。

-


40). ignore_elf_files

絶対パスで指定された /usr/share ディレクトリ内のマシン コード ファイルの空白で区切られたリストです。

これらは予期され、許可されています。

-


41). ignore_elf_dirs

絶対パスで指定された /usr/share ディレクトリ内の空白で区切られたディレクトリのリストです。

マシン コード ファイルを含むことが予期され、許可されています。

-


42). nocross

設定した場合、クロスコンパイルは許可されず、すぐに終了します。

これは、失敗した理由を説明する文字列、または失敗を示すビルドログ (公式ビルダーからの、CI ビルドログは消える可能性があります) へのリンクに設定する必要があります。

-


43). restricted

設定すると、etc/confXBPS_ALLOW_RESTRICTED=yes が設定されていない限り、xbps-src はパッケージのビルドを拒否します。

Void Linux のプライマリ ビルダーにはこの設定がないため、プライマリ リポジトリには制限されたパッケージがありません。これは、ライセンスで再配布が禁止されているパッケージの場合に便利です。

-


44). subpackages

推測されたリストをオーバーライドするための、空白で区切られたサブパッケージのリスト ( foo_package() と一致) です。

これは、サブパッケージの特定の順序が必要な場合にのみ使用してください。
それ以外の場合は、ほとんどの場合、デフォルトで機能します。

-


45). metapackage

「yes」に設定した場合、パッケージは空のメタパッケージ、つまり他のパッケージにのみ依存するパッケージである必要があります。

-


46). broken

設定すると、パッケージの状態が現在壊れているため、パッケージのビルドは許可されません。

これは、壊れた理由を説明する文字列、または失敗を示すビルドログへのリンクに設定する必要があります。

-


47). shlib_provides

パッケージが提供する追加の soname の空白で区切られたリストです。

これは、生成されたファイルを置き換えるのではなく、ファイルに追加します。

-


48). shlib_requires

パッケージに必要な追加の「soname」の空白で区切られたリストです。

これは、生成されたファイルを置き換えるのではなく、ファイルに追加します。

-


49). nopie

アクティブにするために何かを設定する必要があるだけで、強化機能 (PIE、relro など) を使用したパッケージのビルドを無効にします。ほとんどのパッケージでは必要ありません。

-


50). nopie_files

PIE についてチェックされない ELF バイナリの空白で区切られたリストです。

ファイルはフルパスで指定する必要があります。

-

参考:

「ELF」バイナリについて:

ELF(Executable and Linkable Format)は、Linux 等の標準バイナリコンテナ形式で、
BSD や Linux を含む多くの OS、または組み込み機器などで広く利用されています。

-


51). reverts

xbps は、壊れたパッケージから自動的にダウングレードできる独自の機能をサポートしています。

reverts フィールドでは、結果のパッケージを元に戻す必要がある壊れた pkgver のリストを定義できます。

-

期待どおりに機能するには、「reverts」フィールドを「version」フィールドと「revision」フィールドの前に定義する必要があります:

reverts で定義されたバージョンは、version で定義されたバージョンより大きくなければなりません:

例:

reverts="2.0_1 2.0_2"
version=1.9
revision=2

-


52). alternatives

パッケージが提供するサポートされている代替手段の空白区切りのリストです。

リストは、コロンで区切られた 3つのコンポーネント (グループ、シンボリックリンク、ターゲット) で構成されます。

例: alternatives="vi:/usr/bin/vi:/usr/bin/nvi ex:/usr/bin/ex:/usr/bin/nvi-ex"

-


53). font_dirs

フォント パッケージがフォントをインストールする絶対パスで指定されたディレクトリの空白で区切られたリストです。

これは、パッケージのインストール/削除中にフォント キャッシュを再構築するために x11-fonts xbps-trigger で使用されます。

例: font_dirs="/usr/share/fonts/TTF /usr/share/fonts/X11/misc"

-


54). dkms_modules

パッケージのインストール/削除とともに dkms xbps-trigger によってインストールおよび削除される動的カーネル モジュール サポート (dkms) モジュールの空白で区切られたリストです。

形式は、モジュールの名前 (通常は pkgname) とモジュールのバージョン (通常は version) を表す、空白で区切られた文字列のペアです。

例: dkms_modules="$pkgname $version zfs 4.14"

-


55). register_shell

システム シェル データベースに登録される絶対パスで定義されたシェルの空白で区切られたリストです。

これは、 register-shell トリガーによって使用されます。

例: register_shell="/bin/tcsh /bin/csh"

-


56). tags

パッケージのメタデータに登録され、ユーザが xbps-query でクエリできるタグ (カテゴリ) の空白で区切られたリストです。

qutebrowser の例: tags="browser chromium-based qt5 python3"

-


57). perl_configure_dirs

パッケージが動作するためにプロセスである必要がある Makefile.PL ファイルを含む、wrksrc に関連するディレクトリの空白で区切られたリストです。

これは perl モジュールの build_style で使用され、それ以外では使用できません。

例: perl_configure_dirs="blob/bob foo/blah"

-


58). preserve

設定すると、システム内のパッケージが所有するファイルは、パッケージが更新、再インストール、または削除されたときに削除されません。

これは主に、ユーザーの起動やモジュールの読み込みに支障をきたす可能性があるため、カーネル ファイルを削除するときにカーネル ファイルを削除すべきではないカーネル パッケージに役立ちます。

それ以外の場合は、ほとんどの場合、使用すべきではありません。

-


59). fetch_cmd

do_fetch フェーズ中に distfile 内の URL をフェッチする(読み込む)ために使用される実行可能ファイルです。

-


60). changelog

上流の変更ログを指す URL です。
生のテキスト ファイルが推奨されます。

-


61). archs

パッケージを構築できるアーキテクチャの空白区切りのリストです。
利用可能なアーキテクチャは共通/クロスプロファイルの下にあります。

一般に、archs は、上流のソフトウェアが明示的に特定のアーキテクチャをターゲットにしている場合、またはソフトウェアを一部のサポートされているアーキテクチャで使用できないというやむを得ない理由がある場合にのみ設定する必要があります。

パターンの前にチルダを付けることは、指定された archs でのビルドを禁止することを意味します。

最初に一致したパターンが、ビルドの許可/拒否に使用されます。

一致するパターンがない場合、最後のパターンにチルダが含まれていればパッケージが構築されます。

-

例:

(1). musl アーキテクチャ専用のビルド パッケージ:

 archs="*-musl"

-

(2). x86_64-musl および非 musl アーキテクチャ用のビルド パッケージ:

 archs="x86_64-musl ~*-musl"

-

(3). デフォルト値 (すべてのアーキテクチャ):

 archs="*"

-

(4). 特別な値 noarch が以前は利用可能でしたが、現在は削除されています:

-


62). nocheckperms

設定されている場合、xbps-src は一般的な権限エラー (誰でも書き込み可能なファイルなど) で失敗しません。

-


63). nofixperms

設定されている場合、xbps-src は一般的な権限エラー (実行可能ファイルの man ページなど) を修正しません。

-


設定すると、xbps-src はテンプレートを構築する前に $XBPS_CROSS_TRIPLET-pkg-config から $XBPS_WRAPPERDIR/pkg-config へのシンボリックリンクを作成しません。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

6-3. About the depends variables(依存変数について)

-

原文: About the depends variables

-

和訳:


これまで、hostmakedepends、makedepends、checkdepends、depends の 4 種類の depend 変数をリストしました。これらのさまざまな種類の変数が必要なのは、xbps-src がクロス コンパイルをサポートし、ビルド環境に不要なパッケージがインストールされるのを避けるためです。

-

ビルド プロセス中に、yacc や C コンパイラなどのプログラムをホスト上で実行する必要があります。
これらのプログラムを含むパッケージは hostmakedepends にリストされる必要があり、ターゲット パッケージのビルド時にホストにインストールされます。

-

これらのパッケージの一部は、base-chroot パッケージの依存関係にあるため、リストする必要はありません。プロジェクトのビルドに必要なプログラムの一部が -devel パッケージに含まれている可能性があります。

-

ターゲット パッケージは、リンクするライブラリやヘッダー ファイルの他のパッケージに依存することもあります。これらのパッケージは makedepends にリストされる必要があり、ビルド マシンのアーキテクチャに関係なく、ターゲット アーキテクチャと一致します。

通常、makedepends には主に -devel パッケージが含まれます。

-

さらに、XBPS_CHECK_PKGS が設定されている場合、または -Q オプションが xbps-src に渡されている場合、ターゲット パッケージでは、テスト スイートを実行するために、テスト バイナリにリンクされている特定の依存関係またはライブラリが必要になる場合があります。

これらの依存関係は checkdepends にリストされ、hostmakedepends の一部であるかのようにインストールされます。

-

checkdepends に含めることができる依存関係には次のようなものがあります:

  • dejagnu: 一部の GNU プロジェクトに使用されます
  • cmocka-devel: テストバイナリにリンク
  • dbus: dbus-run-session <test-command> を実行して、D-Bus セッションを必要とするアプリケーションに提供できるようにします
  • git: 一部のテスト スイートは git コマンドを実行します

-

最後に、パッケージは実行時に特定の依存関係を必要とし、それがないと使用できない場合があります。

これらの依存関係が XBPS によって自動的に検出されない場合は、depends にリストする必要があります。

-

ELF オブジェクトによってリンクされたライブラリは xbps-src によって自動的に検出されるため、
depends を介してテンプレートで指定しないでください。

この変数には次のものがリストされます:

  • 別のプロセスとして呼び出される実行可能ファイル
  • dlopen を使用した ELF オブジェクト
  • 非オブジェクトコード(例: C ヘッダー、perl/python/ruby/etc モジュール)
  • データファイル
  • common/shlibs ファイルで指定された最小バージョンのオーバーライド

-

ELF オブジェクトの実行時の依存関係は、どの SONAME が必要かをチェックすることで検出され、 SONAME は必要最小限のバージョンのバイナリ パッケージ名にマップされます。

common/shlibs ファイルは、 >= マッピングを設定します。

-

例えば、foo-1.0_1 パッケージは libfoo.so.1 SONAME を提供し、このライブラリを必要とするソフトウェアは libfoo.so.1 にリンクします。

結果として得られるバイナリ パッケージは、common/shlibs で指定されているように、
foo>=1.0_1 パッケージに対する実行時依存関係を持ちます。

-

common/shlibs

libfoo.so.1 foo-1.0_1
  • 最初のフィールドは SONAME を指定します
  • 2番目のフィールドでは、パッケージ名と必要な最小バージョンを指定します
  • 3番目のオプションのフィールド (通常は無視するように設定) を使用して、soname バンプのチェックをスキップできます

depends 経由で宣言された依存関係はマスター ディレクトリにはインストールされず、バイナリ パッケージとして存在するかどうかのみがチェックされ、指定されたバージョンがローカル リポジトリにない場合は xbps-src によって自動的に構築されます。

-

特殊なケースとして、仮想依存関係は、depends テンプレート変数で実行時依存関係として指定できます。

Provides テンプレート変数 (例: Provides="vpkg-0.1_1") で仮想名とバージョンを宣言することで、いくつかの異なるパッケージが共通の機能を提供できます。

特定のプロバイダーを考慮せずに共通の機能に依存するパッケージは、接頭辞 virtual? を使用して仮想パッケージ名への依存関係を宣言できます。
(例: depend="virtual?vpkg-0.1_1")

xbps-src によってパッケージがビルドされると、仮想パッケージのプロバイダーが存在することが確認され、必要に応じてビルドされます。

仮想パッケージからデフォルトプロバイダへのマップは etc/defaults.virtual で定義されます。

個々のマッピングは、etc/virtual のローカル設定によってオーバーライドできます。
etc/defaults.virtual のコメントは、このマップに関する詳細情報を提供します。

-

最後に、原則として、特定のパッケージが makedepends または hostmakedepends に存在するかどうかに関係なく、パッケージがまったく同じ方法でビルドされる場合、

そのパッケージはビルド時の依存関係として追加すべきではありません。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

7. Repositories (リポジトリ)

-

原文: Repositories

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

7-1. Repositories defined by Branch (ブランチによって定義されたリポジトリ)

-

原文: Repositories defined by Branch

-

和訳:


「リポジトリ」を定義する 1番目の方法は、「ブランチ」によって定義することです:

「グローバル リポジトリ」は、ブランチの名前が master である場合を除き、現在の「ブランチ」の名前を受け取ります。

その結果、リポジトリは「グローバル スコープ」になります。

-

使用シナリオは、ユーザが「ローカル リポジトリ」を汚染することなく、2番目の「ブランチ」で複数のパッケージを更新できることです。

-

参考:

グローバルスコープ(Global Scope)とは、

プログラミングにおいて、プログラムのどこからでも(関数やブロックの内部・外部問わず)アクセス・参照できる最上位の有効範囲です。

この範囲で定義された変数は「グローバル変数」と呼ばれ、プログラム全体で共通のデータとして利用されます。

関数内部やクラスの中など、どの階層からでも変数を読み書きできるのが利点ですが、 どこからでも変更できるため、意図しないリスクが生まれるので、多用は避けるべきです。

-

使用シナリオ(ユーザ シナリオ)とは、

特定のユーザ(ペルソナ)が製品やサービスを利用し、目的を達成するまでの過程を、
具体的な状況・行動・感情の流れとして物語形式で描いたものです。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

7-2. Package defined repositories (パッケージ定義のリポジトリ)

-

原文: Package defined repositories

-

和訳:


「リポジトリ」を定義する 2番目の方法は、「テンプレート」にリポジトリ変数を設定することです:

このようにして、メンテナは特定のパッケージまたはパッケージのグループのリポジトリを定義でき、
現在、パッケージの特定のクラスを区別するために使用されています。

-

現在、有効な「リポジトリ名」:
  • bootstrap xbps-src 固有のパッケージのリポジトリ
  • debug  「デバッグ」シンボルを含むパッケージのリポジトリ
           (ほとんどの場合、これらのパッケージは自動的に生成されます)
  • nonfree 「クローズド ソース」または「不自由なライセンス」を持つパッケージのリポジトリ

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

8. Checking for new upstream releases (新しい上流リリースの確認)

-

原文: Checking for new upstream releases

-

和訳:


新しいアップストリーム バージョンは、「./xbps-src update-check <pkgname>」を使用して自動的にチェックできます。

場合によっては、関連するテンプレート ファイルと同じディレクトリにある更新ファイルに
次の変数を割り当てることで、適切なデフォルトをオーバーライドする必要があります:

-

  • サイトにはバージョン番号が記載されている URL が含まれています。
     設定されていない場合、デフォルトはホームページと distfile が存在するディレクトリになります。

  • pkgname は、デフォルトのパターンがチェックするパッケージ名です。
     設定されていない場合、デフォルトはテンプレートの pkgname になります。

  • pattern は、バージョン番号に一致する Perl 互換の正規表現です。  \K(?=...) を使用してバージョン番号を固定します。
     例: pattern='<b>\K[\d.]+(?=</b>)'、これは <b>...</b> タグで囲まれたバージョン番号と一致します。

  • ignore は、新しいバージョンのチェックには考慮されない、
     バージョン番号に一致する シェル グロブのスペース区切りのリストです。
     例: ignore="*b*"

  • version は、アップストリーム バージョンと比較するために使用されるバージョン番号です。
     例: version=${version//./_}

  • single_directory を設定すると、URL 内の 1つのバージョンのソースを含むディレクトリ
     の検出を 無効にし、隣接するディレクトリで新しいバージョンを検索できます。

  • vdprefix は、URL 内のバージョン ディレクトリの数値部分の前にある
     Perl 互換の正規表現マッチング部分です。
     デフォルトは(|v|$pkgname)[-_.]* です。

  • vdsuffix は、URL 内のバージョン ディレクトリの数値部分に続く
     Perl 互換の正規表現マッチング部分です。
     デフォルトは (|\.x) です。

  • 更新のチェックが不可能または無意味な場合は、disabled を設定して
     パッケージの更新チェックを無効にすることができます:
     これは、無効になっている理由を説明する文字列に設定する必要があります。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

9. Handling patches (パッチの処理)

-

原文: Handling patches

-

和訳:


場合によっては、ソフトウェアにパッチを適用する必要がある場合があります:

最も一般的な目的は、見つかったバグを修正するため、または新しいソフトウェアでのコンパイルを修正するためです。

-

これに対処するために、xbps-src には「パッチ」適用機能があります:

グロブ検索 srcpkgs/$pkgname/patches/*.{diff,patch} に一致するすべてのファイルを検索し、
-Np1 を指定した patch を使用して、見つかったすべてのファイルを自動的に適用します。

-

これは「do_patch()」フェーズ中に発生します:

-

変数 「PATCHESDIR」はテンプレートで使用でき、パッチ ディレクトリを指します:

-

パッチ適用の動作は次の方法で変更できます:

表示された順序で適用するパッチの改行区切りリストを含む series というファイルを patches ディレクトリに作成できます。

xbps-src が存在する場合、 series ファイルで指定されたパッチのみが適用されます。

-

いずれかのパッチと同じ名前で拡張子が .args のファイルを使用して、
patch に渡される引数を設定できます:

例えば、foo.patch が他のパッチを適用するときに
使用できない特別な引数を patch に渡す必要がある場合、
それらの引数を含む foo.patch.args を作成できます。

-

参考:

ITにおける「glob(グロブ)」とは、

*? などのワイルドカードを用いて、特定のパターンに一致する複数のファイル名やパスをまとめて指定する手法です。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

10. build style scripts (「build_style」のスクリプト)

-

原文: build style scripts

-

和訳:


build_style 変数は、パッケージをビルドしてインストールするためのビルド方法を指定します。

void-packages/common/build-style ディレクトリにある使用可能なスクリプトの名前が必要で、

build_style スクリプトを実行するために必要なパッケージは、$hostmakedepends 経由で定義する必要があることに注意してください。

-

もし、build_style が設定されていない場合、

「テンプレート」は (少なくとも) do_install() 関数と、
オプションで do_configure()do_build() などの追加のビルド フェーズを定義する必要があり、

distfiles 変数で定義されたファイルをフェッチする do_fetch() および、
抽出(展開)するデフォルトの do_extract() を上書きする可能性があります。

-

-


利用可能な「build_style」スクリプトの一覧:

-

2026-03-05 現在:

原文は簡単な説明のみなので、参考として
「build_style」スクリプトから「コメント」の一部を抜粋して追記しました:

-


1). cargo

このヘルパーは、構築に cargo を使用する Rust プロジェクトを構築するためのものです:

-

構築に Cargo を使用する、Rust で書かれたパッケージの場合、

構成引数 (--features など) は変数 configure_args で定義でき、
do_build 中に cargo に渡されます。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/cargo.sh
do_build() {
    : ${make_cmd:=cargo auditable}
    : ${make_verbose:=-v}

-


2). cmake

このヘルパーは、「cmake」を使用するテンプレート用です:

-

CMake ビルド システムを使用するパッケージの場合、
configure_args を介して構成引数を渡すことができます。

cmake_builddir 変数は、デフォルトのビルドではなく
build_wrksrc の下にビルドするディレクトリを指定するように定義できます。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/cmake.sh

-


3). configure

このヘルパーは、 (GNU autotools によって生成されない) configure スクリプトを使用するテンプレート用です:

-

GNU configure スクリプトを使用するパッケージの場合、
configure_args 経由で少なくとも --prefix=/usr を渡す必要があります。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/configure.sh

-


4). fetch

このヘルパーは、ファイルをフェッチして「${wrksrc}」にコピーします:

ファイルをフェッチするだけで、
do_install() を介してそのままインストールされるパッケージの場合です。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/fetch.sh

-


5). gnu-configure

このヘルパーは、GNU configure スクリプトを使用するテンプレート用です:

-

GNU autotools 互換の構成スクリプトを使用するパッケージの場合、
追加の構成引数を configure_args 経由で渡すことができます。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/gnu-configure.sh

-


6). gnu-makefile

このヘルパーは、「GNU Makefile」を使用するテンプレート用です:

-

GNU make を使用するパッケージの場合、

ビルド引数は make_build_args 経由で渡すことができ、
インストール引数は make_install_args 経由で渡すことができます。

ビルド ターゲットは make_build_target を介してオーバーライドでき、
インストール ターゲットは make_install_target を介してオーバーライドできます。

-

このビルド スタイルは、環境変数を考慮しない Makefile を補おうとするため、
変数に追加 (+=) などの処理を行う適切に作成された Makefile では、
テンプレートの本体に make_use_env を設定する必要があります。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/gnu-makefile.sh

-


7). go

このヘルパーは、 「Go」パッケージのテンプレート用です:

-

標準のパッケージ構造に従って Go で作成されたプログラムの場合、
変数 go_import_path は、パッケージのインポート パスに設定する必要があります。

ハブ プログラムの場合は、github.com/github/hub です。
この情報は、最新の Go プロジェクトの go.mod ファイルにあります。

distfile にはパッケージが含まれていることが予想されますが、
依存関係は go get でダウンロードされます。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/go.sh

-


8). R-cran

CRAN(The Comprehensive R Archive Network)で入手可能なパッケージの場合、

ビルド スタイルでは、pkgnameR-cran- で始まり、
CRAN が指定したバージョンのダッシュ (-) がバージョン変数の文字 r に置き換えられる必要があります。

distfiles の場所は自動的に設定され、パッケージは R に依存するようになります。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/R-cran.sh
do_install() {
    mkdir -p ${DESTDIR}/usr/lib/R/library
    ( cd .. && R CMD INSTALL -l ${DESTDIR}/usr/lib/R/library ${pkgname#R-cran-} )
}

-


9). gemspec

このヘルパーは、「アップストリーム」または「Rubygems」の「gemspec」ファイルを使用するテンプレート用です:

-

Ruby gem を構築してインストールするために gemspec ファイルを使用するパッケージの場合、

gem コマンドは gem_cmd によってオーバーライドできます。
configure_args を使用して、コンパイル中に引数を渡すことができます。

パッケージがコンパイルされた拡張機能を使用しない場合は、
代わりに gem ビルド スタイルを使用することを検討してください。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/gemspec.sh

-


10). gem

このヘルパーは、「RubyGems」の「gem」ファイルを使用するテンプレート用です:

-

RubyGemsgem を使用してインストールされるパッケージの場合、

gem コマンドは gem_cmd によってオーバーライドできます。
distfiles は、テンプレートで設定されていない場合、ビルド スタイルによって設定されます。

gem がコンパイルする必要がある拡張機能を提供している場合は、
代わりに gemspec ビルド スタイルを使用することを検討してください。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/gem.sh

-


11). ruby-module

このヘルパーは、「Ruby モジュール」をインストールするテンプレート用です:

-

Ruby モジュールであり、ruby install.rb 経由でインストールできるパッケージの場合、

追加のインストール引数は、make_install_args を介して指定できます。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/ruby-module.sh

-


12). perl-ModuleBuild

Perl Module::Build メソッドを使用するパッケージの場合です。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/perl-ModuleBuild.sh

コメントの和訳:

 このヘルパーは、「Module::Build」メソッドを使用して「Perl モジュール」をビルドし、  
正しい場所にインストールできるようにするために必要な手順を実行します。

テンプレートで設定する必要がある変数:
build_style=perl-ModuleBuild

-


13). perl-module

Perl ExtUtils::MakeMaker ビルド メソッドを使用するパッケージの場合です。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/perl-module.sh

コメントの和訳:

このヘルパーは、「MakeMaker」を使用する「Perl モジュール」をビルドし、
正しい場所にインストールできるようにするために必要な手順を実行します。

テンプレートで設定する必要がある変数:  
build_style=perl-module

-


14). raku-dist

このヘルパーは、「raku」パッケージのテンプレート用です:

-

rakudo による raku raku-install-dist ビルド方法を使用するパッケージの場合です。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/raku-dist.sh

-


15). waf3

このヘルパーは、Python3 で「WAF」を使用してビルド/インストールするテンプレート用です:

-

Python3Python3 waf ビルド メソッドを使用するパッケージの場合です。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/waf3.sh

-


16). slashpackage

このヘルパーは、「スラッシュパッケージ」ソフトウェアを構築するテンプレート用です:

-

daemontools や任意の djb ソフトウェアなど、
/package 階層と package/compile を使用してビルドするパッケージの場合です。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/slashpackage.sh

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:

「スラッシュパッケージ」(/package)とは、

Daniel J. Bernstein 氏が提案した、UNIXおよびLinuxシステムにおける 独自のソフトウェアパッケージ管理手法・ディレクトリ構造の規格です:

通常、/usr/local などの複数のディレクトリに分散されるファイルを、単一の /package ディレクトリ内にまとめてインストールします。
パッケージごとに専用のディレクトリを持つため、ファイルが混在せず、管理が容易です。

ソフトウェアが必要とするライブラリなどを、システム全体(/usr/libなど)にインストールせず、そのパッケージ内だけで完結させるアプローチをとります。

-


17). qmake

このヘルパーは、Qt5/Qt6 qmake を使用するテンプレート用です:

-

Qt5/Qt6 qmake プロファイル (*.pro) を使用するパッケージの場合、

configure フェーズの qmake 引数は、configure_args 経由で渡すことができ、
make ビルド引数は make_build_args 経由で、
インストール引数は make_install_args 経由で渡すことができます。

ビルド ターゲットは make_build_target を介してオーバーライドでき、
インストール ターゲットは make_install_target を介してオーバーライドできます。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/qmake.sh

-


18). meson

このヘルパーは「meson」を使用するテンプレート用です:

-

Meson Build システムを使用するパッケージの場合、

configure_args を介して構成オプションを渡すことができ、
meson コマンドは meson_cmd によってオーバーライドでき、
ソース外ビルドの場所は meson_builddir によってオーバーライドできます。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/meson.sh

-


19). void-cross

Void システムの構築に使用される「クロスツールチェーン」パッケージ用です。

必須の変数はありません (ターゲット トリプレットは推論されます) が、
オプションの変数をいくつか指定できます。

-

cross_gcc_skip_gogccgo をスキップするように指定できます。
個々のサブプロジェクトの設定引数は、cross_*_configure_args 経由で指定できます。

*binutils、gcc_bootstrap (初期 gcc)、gcc (最終 gcc)、glibc (または musl)configure_args は初期と最終の gcc の両方に追加で渡されます。

libc のカスタム CFLAGS および LDFLAGS
cross_(glibc|musl)_(cflags|ldflags) として指定することもできます。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/void-cross.sh

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:

「クロスツールチェーン」パッケージとは、

開発に使用するコンピュータ(ホスト)とは異なるアーキテクチャやOS(ターゲット)上で動作するプログラムをビルド(コンパイル)するための一連のツール群をまとめたパッケージのことです。

「チェーン(鎖)」の名の通り、以下のように連続的にツールが動作します:
「ソースコード」→プリプロセッサ→コンパイラ→アセンブラ→リンカー→「ターゲット用バイナリ」

-


20). zig-build

Zig のビルド システムを使用するパッケージの場合、

追加の引数は、configure_args を使用して zig build 呼び出しに渡すことができます。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/zig-build.sh

-


21). python3-module

「Python3 専用モジュール」をインストールするテンプレート用です:

-

Python モジュールのビルド方法 (setup.py または PEP 517) を使用するパッケージの場合の、
選択肢のひとつです:

python3-module は、Python 3.x モジュールをビルドします。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/python3-module.sh

-


22). python3-pep517

このスタイルは、「PEP517」に準拠した「Python3 モジュール」をインストールするテンプレート用です:

-

Python モジュールのビルド方法 (setup.py または PEP 517) を使用するパッケージの場合の、
選択肢のひとつです:

python3-pep517 は、setup.py スクリプトを使用せずに
pep517 ビルドの説明を提供する Python 3.x モジュールをビルドします。

-

特定の build_style の環境変数は、build_style 名に一致するファイル名で宣言できます:

例:

common/environment/build-style/gnu-configure.sh

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/python3-pep517.sh

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:

「PEP517」に準拠した「Python3モジュール」とは、

「pyproject.toml」ファイルを定義し、標準化されたビルドシステム(setuptools, hatch, poetry等)を通じて一貫した手順でパッケージ化・インストールできるモジュールです。

旧来の「setup.py」に依存せず、「Wheel」ファイルへの安定したビルドを可能にします。

-


23). texmf

texmf zip/tarball の場合は、/usr/share/texmf-dist に移動する必要があります。
重複の処理が含まれます。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_style」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-style/texmf.sh

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

11. Build helper scripts  (「build_helper」のスクリプト)

-

原文: Build helper scripts

-

和訳:


「build_helper」変数は、

特定の「パッケージ セット」を操作するための、適切な環境を作成する「シェル スニペット」を指定します:

-

-


利用可能な「build_helper」スクリプトの一覧:

-

2026-03-05 現在:

-


1). cmake-wxWidgets-gtk3

cmake-wxWidgets-gtk3 は、FindwxWidgets.cmake で使用される
WX_CONFIG 変数を設定します:

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_helper」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-helper/cmake-wxWidgets-gtk3.sh
if [ "$CROSS_BUILD" ]; then
    export WX_CONFIG=${XBPS_WRAPPERDIR}/wx-config-gtk3
else
    export WX_CONFIG=/usr/bin/wx-config-gtk3
fi
configure_args+=" -DwxWidgets_CONFIG_EXECUTABLE=${WX_CONFIG} "

-


2). gir

gir は、GObject Introspection を処理するための
ネイティブ ビルドとクロス ビルドの依存関係を指定します:

このビルド ヘルパーは、「gobject-introspection」のミドルウェア層を利用するパッケージに使用されます。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_helper」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-helper/gir.sh

-


追加のヒンティングが必要な、または問題が発生するクロス ビルドを処理するために、
次の変数をテンプレートに設定できます:

-

-


(1). GIR_EXTRA_LIBS_PATH:

イントロスペクト(自己観察)する「ターゲット バイナリ」をリンクするときに検索される
追加のパスを定義します:

-


(2). GIR_EXTRA_OPTIONS:

ターゲット バイナリの実行時に qemu-<target_arch>-static を呼び出す
g-ir-scanner-qemuwrapper の追加オプションを定義します:

→例えば、GIR_EXTRA_OPTIONS="-strace" を指定すると、
 そのバイナリの実行時に何が起こったかのトレースを確認できます。

-


(3). GIR_EXTRA_LIBS_PATH:

イントロスペクト(自己観察)するターゲット バイナリをリンクするときに検索される
追加のパスを定義します:

-


(4). GIR_EXTRA_OPTIONS:

ターゲット バイナリの実行時に qemu-<target_arch>-static を呼び出す
g-ir-scanner-qemuwrapper の追加オプションを定義します:

→例えば、GIR_EXTRA_OPTIONS="-strace" を指定すると、
 そのバイナリの実行時に何が起こったかのトレースを確認できます。

-

-


3). meson

meson はクロスファイル ${XBPS_WRAPPERDIR}/meson/xbps_meson.cross を作成します。 これは、meson をクロスビルド用に構成します。

これは、meson 呼び出しをラップするパッケージ (meson バックエンドを使用する python3-pep517 パッケージなど) をビルドする場合に特に便利で、meson ビルド スタイルを使用するパッケージにデフォルトで追加されます。

また、$MESON_PACKAGE_CACHE_DIR$XBPS_SRCDISTDIR/$pkgname-$version/ に設定するため、meson ラップとして指定されたライブラリを distfile に追加でき、meson によって自動的に使用されます。

ラップ用の distfiles エントリを生成するスクリプトについては、common/scripts/gen-wrap-distfiles.py も参照してください。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_helper」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-helper/meson.sh

コメントの和訳:

このビルド ヘルパーは Meson クロスファイルを書き込み、
他のビルド スタイルが適切な場合に Meson でクロスビルドを適切に駆動できるようにし、
distfile で指定されたラップされた依存関係を Meson が自動的に解凍できるようにします。

-


4). numpy

numpy は、NumPy C ライブラリにリンクするコンパイル済み拡張機能を提供する Python パッケージのクロスコンパイル用の環境を構成します。

meson ビルド ヘルパーも設定されている場合は、
共通の NumPy コンポーネントがどこにあるかを meson に通知するために、
セカンダリ クロス ファイル ${XBPS_WRAPPERDIR}/meson/xbps_numpy.cross が書き込まれます。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_helper」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-helper/numpy.sh

コメントの和訳:

「python3-numpy」に対してコンパイルするパッケージのビルドヘルパーです:

このビルドヘルパーは、パッケージがホストではなく、ターゲット アーキテクチャ上で、
「python3-numpy」ライブラリとヘッダーを見つけられるようにするだけでなく、
「gfortran」クロス コンパイラーが適切に識別されていることを確認します。

クロスコンパイルの場合でも、ホストインタープリタが deps の欠落について
文句を言わないようにするために、ホスト上で numpy が利用可能である必要があります。

-


5). python3

python3 は、ターゲット ルートで Python ライブラリ、ヘッダー ファイル、およびインタープリター構成を使用するようにクロスビルド環境を構成します。

python3 ヘルパーは、python3-module または python3-pep517 ビルド スタイルを使用するパッケージにデフォルトで追加されます。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_helper」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-helper/python3.sh

-


6). qemu

qemu は、cmake および meson ビルド スタイルに追加の変数を設定して、qemu 内でクロスコンパイルされたバイナリを実行できるようにします。

cmakeCMAKE_CROSSCOMPILING_EMULATORmesonexe_wrapperqemu-<target_arch>-static に、QEMU_LD_PREFIXXBPS_CROSS_BASE に設定します。

また、ターゲット アーキテクチャの qemu-<target_arch>-static への呼び出しでコマンドをラップする vtargetrun 関数も作成します。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_helper」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-helper/qemu.sh

-


7). qmake

qmake は、クロスビルドに必要な qt.conf 設定ファイル (cf. qmake build_style) と、qmake にこの設定を使用させるための qmake-wrapper を作成します。

これは、ビルドスタイルが混在している場合のクロスビルドを修正することを目的としています。

gnu-configure スタイルの場合、configure スクリプトはそれぞれ gnu-makefile スタイルの qmake または Makefile を呼び出します。これは Qt5 パッケージ用です。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_helper」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-helper/qmake.sh

-


8). qmake6

qmake6qmake に似ていますが、Qt6 用です。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_helper」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-helper/qmake6.sh

-


9). Rust

Rust は、Cargo を介したクレートのクロスコンパイルと、Cargo -sys クレートのコンパイルに必要な環境変数を指定します。

また、ビルドを検出し、cargo-auditable に渡すカーゴ ラッパーも追加します。

このヘルパーは、cargo ビルド スタイルを使用するパッケージにデフォルトで追加されます。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_helper」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-helper/Rust.sh

-


10). haskell

haskellcabal の環境変数を指定します。

このヘルパーは、haskell-stack または cabal ビルド スタイルを使用するパッケージにデフォルトで追加されます。

:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

補足:

「build_helper」スクリプトで使用法を確認:
$ cd ~/git/void-packages/
$ cat common/build-helper/haskell.sh
export CABAL_DIR=/home/cabal

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:

シェル(shell)スニペット とは、

Linux や macOS などのターミナルで頻繁に使用する、短く再利用可能なコマンドやコードの断片(切れ端)のことです。

定型的な処理を短い記述で実行したり、登録しておいてコピー&ペーストで再利用することで、コマンド入力の効率化や作業の自動化に役立ちます。

-

クレート とは、

クレート (crate) は、Rust コンパイラが一度に考慮する最小限のコードです。

Cargo は、Rust プログラミング言語のパッケージマネージャであり、ビルドシステムです。 Cargo を使用することで、Rust クレートの依存関係の管理、ビルド、パッケージの作成が簡単に行えます。

Rust プログラミング言語において、 *-sys クレート(例: openssl-sys)は、C言語などで書かれた外部システムライブラリ(ネイティブライブラリ)への低レベルなバインディングを提供するライブラリ(パッケージ)です。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

12. Functions  (関数)

-

原文: Functions

-

和訳:


「関数」を定義すると、

パッケージのダウンロード、コンパイル、インストールなどの動作を変更できます:

-

-


1). 「関数」の定義:

-

-


(1). pre_fetch()

「do_fetch()」の前に実行する動作です。

-


(2). do_fetch()

定義されており、distfile が設定されていない場合は、
これを使用して必要なソースをフェッチ(読み込み)します。

-


(3). post_fetch()

「do_fetch()」の後に実行する動作です。

-


(4). pre_extract()

「post_fetch()」の後に実行する動作です。

-


(5). do_extract()

定義されており、distfile が設定されていない場合は、
これを使用して必要なソースを抽出(展開)します。

-


(6). post_extract()

「do_extract()」の後に実行する動作です。

-


(7). pre_patch()

「post_extract()」の後に実行する動作です。

-


(8). do_patch()

定義されている場合は、
これを使用してビルド環境を準備し、フックを実行して「パッチ」を適用します。

-


(9). post_patch()

「do_patch() 」の後に実行する動作です。

-


(10). pre_configure()

「post_patch()」の後に実行する動作です。

-


(11). do_configure()

パッケージを構成するために実行する動作です。

「GNU configure」スクリプトの場合でも ${configure_args} を渡す必要があります。

-


(12). post_configure()

「do_configure()」の後に実行する動作です。

-


(13). pre_build()

「post_configure()」の後に実行する動作です。

-


(14). do_build()

パッケージをビルドするために実行する動作です。

-


(15). post_build()

「do_build()」の後に実行する動作です。

-


(16). pre_check()

「post_build()」の後に実行する動作です。

-


(17). do_check()

パッケージの「チェック」を実行するために実行する動作です。

-


(18). post_check()

「do_check()」の後に実行する動作です。

-


(19). pre_install()

「post_check()」の後に実行する動作です。

-


(20). do_install()

パッケージ ファイルを仮の「destdir」にインストールするために実行する動作です。

-


(21). post_install()

「do_install()」の後に実行する動作です。

-


(22). do_clean()

パッケージフェーズが成功した後に「クリーンアップ」するために実行する動作です。

-

-


2). 「テンプレート」で定義された「関数」は、

「build_style」スクリプトで定義された同じ関数よりも優先されます:

-


3). 「関数」の現在の作業ディレクトリは次のように設定されます:

-

関 数  現在の作業ディレクトリ 
pre_fetch」、「pre_extract」、「do_clean」の場合 <masterdir>
do_fetch」、「post_fetch」の場合 XBPS_BUILDDIR
do_extract」から「do_patch」の場合 wrksrc
post_patch」から「post_install」までの場合 wrksrc
build_wrksrc」が定義されている場合 wrksrc
 それ以外の場合 wrksrc

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

13. Build options  (ビルド オプション)

-

原文: Build options

-

和訳:


一部のパッケージは、異なる「ビルド」オプションを使用して、

追加機能を有効/無効にしてビルドされる場合があります:

「xbps-src」(XBPS ソース パッケージ コレクション)を使用すると、
「テンプレート」ファイルをいくつか調整するだけでこれを行うことができます。

-


1). パッケージのビルド オプションを許可するには、次の変数を設定できます:

-

-


(1). build_options

ソース パッケージでサポートされる「ビルド」オプションを設定します:

-


(2). build_options_default

ソース パッケージで使用されるデフォルトの「ビルド」オプションを設定します:

-


(3). desc_option_<option>

「ビルド」オプションの「説明」を設定します:

これは、「build_options」で設定されたキーワードと一致する必要があります。

-

「ビルド」オプションが十分に汎用的な場合は、
代わりにその説明を「common/options.description」に追加する必要があることに注意してください。

-


2). これらの必要な変数を定義した後、

build_option_<option> 変数をチェックして
設定されているかどうかを確認し、それに応じてソース パッケージを適応させることができます。

-


3). さらに、次の機能が利用可能です:

-

-


(1). vopt_if()

vopt_if <option> <if_true> [<if_false>]

オプションが設定されている場合は if_true を出力し、
設定されていない場合は if_false を出力します。

-


(2). vopt_with()

vopt_with <option> [<flag>]

オプションが設定されている場合は --with- を出力し、
それ以外の場合は --without- を出力します。

フラグが設定されていない場合、デフォルトのオプションになります。

-

使用例:

vopt_with dbus
vopt_with xml xml2

-


(3). vopt_enable()

vopt_enable <option> [<flag>]

vopt_with と同じですが、それぞれ --enable- と --disable- を使用します。

-


(4). vopt_conflict()

vopt_conflict <option 1> <option 2>

両方のオプションが同時に設定されている場合、エラーを発行して終了します。

-


(5). vopt_bool()

vopt_bool <option> <property>

オプションが設定されている場合は -D=true、それ以外の場合は -D=false を出力します。

-


(6). vopt_feature()

vopt_feature <option> <property>

vopt_bool と同じですが、それぞれ -D=enabled と -D=disabled を使用します。

-


4). 「ビルド」オプションの使用例:

-

「gnu-configure」を使用するソース パッケージを変更して、
「PNG イメージ」をサポートする新しい「ビルド」オプションを有効にする例:

# Template file for 'foo'
pkgname=foo
version=1.0
revision=1
build_style=gnu-configure
configure_args="... $(vopt_with png)"
makedepends="... $(vopt_if png libpng-devel)"

:

# Package build options
build_options="png"
desc_option_png="Enable support for PNG images"

# To build the package by default with the `png` option:
#
# build_options_default="png"

-


5). 「xbps-src」の操作例:

-

(1). ソース パッケージでサポートされている「ビルド」オプションは、「xbps-src」で表示できます:
$ ./xbps-src show-options foo

-

(2). 「ビルド」オプションは、「xbps-src」の「-o」フラグで有効にできます:
$ ./xbps-src -o option,option1 <cmd> foo

-

(3). 「ビルド」オプションは、先頭に「~」を付けることで無効にできます:
$ ./xbps-src -o ~option,~option1 <cmd> foo

-

(4). 両方の方法を一緒に使用して、
「xbps-src」で複数のオプションを同時に有効または無効にすることができます:
$ ./xbps-src -o option,~option1,~option2 <cmd> foo

-

(5). 「xbps-query」を介してバイナリ パッケージのビルド オプションを表示することもできます:
$ xbps-query -R --property=build-options foo

-


6). 永続的なグローバル パッケージのビルド オプションは、

「etc/conf」設定ファイルの「XBPS_PKG_OPTIONS」変数を介して設定できます。

-


7). パッケージごとのビルド オプションは、

XBPS_PKG_OPTIONS_<pkgname> を介して設定できます。

-

-


注意:

pkgname にダッシュが含まれている場合は、アンダースコアで置き換える必要があります。
例: XBPS_PKG_OPTIONS_xorg_server=opt

-

サポートされているパッケージ ビルド オプションのリストとその説明は、
common/options.description」ファイルで定義されています。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

14. INSTALL and REMOVE files  (ファイルのインストールと削除)

-

原文: INSTALL and REMOVE files

-

和訳:


「INSTALL」および「REMOVE」シェル スニペットを使用すると、

バイナリ パッケージが「インストール」、「更新」、または「削除」されるときの指定された段階で
特定のアクションを実行できます。

-


1). スクリプトの実行時に「xbps」によって常に設定される変数:

-

-


(1). $ACTION:

アクション」の条件を事前または事後に設定します:

-


(2). $PKGNAME:

パッケージの「パッケージ名」:

-


(3). $VERSION:

パッケージの「バージョン」:

-


(4). $UPDATE:

パッケージがアップグレードされている場合は「yes」に設定され、
パッケージがインストールまたは削除されている場合は「no」に設定されます。

-


(5). $CONF_FILE:

「xbps.conf」への「フルパス」:

-


(6). $ARCH:

実行されているターゲットの「アーキテクチャ」:

-


2). INSTALL または REMOVE スクリプトの作成方法の例:

# INSTALL
case "$ACTION" in
pre)
    # Actions to execute before the package files are unpacked.
    ...
    ;;
post)
    if [ "$UPDATE" = "yes" ]; then
        # actions to execute if package is being updated.
        ...
    else
        # actions to execute if package is being installed.
        ...
    fi
    ;;
esac

-


3). サブパッケージには独自の「INSTALL」ファイルと「REMOVE」ファイルを持つこともでき、

それぞれ 「srcpkgs/<pkgname>/<subpkg>.INSTALL
または 「srcpkgs/<pkgname>/<subpkg>.REMOVE」として作成するだけです。

-


注意:

常に「現在の作業ディレクトリ」を基準とした相対パスを使用してください。
そうしないと、スクリプトが「chroot」経由で実行できない場合、正しく動作しません。

メッセージを出力するために「INSTALL」/「REMOVE」スクリプトを使用しないでください。
詳細については、次のセクションを参照してください。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

15. INSTALL.msg and REMOVE.msg files  (INSTALL.msg および REMOVE.msg ファイル)

-

原文: INSTALL.msg and REMOVE.msg files

-

和訳:


「INSTALL.msg」ファイルと「REMOVE.msg」ファイルを使用して、

それぞれ「インストール後」または「削除前」に「メッセージを出力」できます:

-


1). 理想的には、これらのファイルは 1行あたり 80 文字を超えないようにします:

-


2). 「サブパッケージ」には、

独自の「INSTALL.msg」および「REMOVE.msg」ファイルを持つこともでき、

それぞれ、「srcpkgs//.INSTALL.msg」
または、「srcpkgs//.REMOVE.msg」として作成するだけです。

-

これは、重大な変更についてユーザに警告するなど、「重要なメッセージ」にのみ使用してください。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

16. Creating system accounts/groups at runtime (実行時にシステムアカウント/グループを作成)

-

原文: Creating system accounts/groups at runtime

-

和訳:


バイナリ パッケージの構成時に、

「システム ユーザ」と「グループ」を作成するためのトリガーといくつかの変数があります:

-


1). この目的には次の変数を使用できます:

-

-


(1). system_groups

作成する新しいシステム グループの名前を空白で区切って指定します。
オプションで、gid をコロンで区切って指定できます:
(system_groups="mygroup:78" または system_groups="foo _blah:8000")

-


(2). system_accounts

これは、作成する新しい「システム ユーザ」/「グループ」の名前をブランクで区切って指定します:
(例: system_accounts="foo blah:22")

オプションで、uid と gid をコロンで区切って指定できます:
(system_accounts="_foo:48" など)

-


2). 「システム アカウント」の追加変数を指定して、その動作を変更できます:

-

-


(1). <account>_homedir

ユーザの「ホーム ディレクトリ」です。

設定されていない場合、デフォルトは /var/empty になります。

-


(2). <account>_shell

新しいユーザの「シェル」です。

設定されていない場合、デフォルトは「/sbin/nologin」になります。

-


(3). <account>_descr

新しいユーザの「説明」です。

設定されていない場合、デフォルトは「<account> 非特権ユーザ」です。

-


(4). <account>_groups

新しいユーザに追加される追加の「グループ」です。

-


(5). <account>_pgroup

「プライマリ グループ」の設定で、
デフォルトで「プライマリ グループ」は <account> に設定されます。

-


3). 「システム ユーザ」は、システム内で動的に割り当てられた uid/gid を使用して作成され、

uid が設定されていない限り、「システム アカウント」として作成されます。

指定された「システム アカウント」に対して新しい「グループ」が作成され、
この目的のみに使用されます。

-


4). ユーザ アカウントの名前との衝突を防ぐために、

「システム アカウント」と「グループ」には先頭に「アンダースコア」を付ける必要があります。

-


注意:

「アンダースコア」ポリシーは古いパッケージには適用されません。

「ユーザ名」の変更による破損は避けられないため、新しい「パッケージ」のみがそれに従う必要があります。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

17. Writing runit services  (「runit」サービスの作成)

-

原文: Writing runit services

-

和訳:


Void Linux は、サービスの起動と監視に runit を使用します:

記述方法に関するほとんどの情報は、FAQ に記載されています。

-

以下は、サービスの作成方法に関する「Void Linux」に固有の「ガイドライン」です:

-

サービス デーモンが CLI フラグをサポートしている場合は、
デーモンと同じディレクトリにある conf というファイルを読み取ることにより、
OPTS 変数を介して変更するためのサポートを追加することを検討してください:

#!/bin/sh
[ -r conf ] && . ./conf
exec daemon ${OPTS:- --flag-enabled-by-default}

-

サービスがランタイム情報 (Pidfile など) を保存するために
/run またはそのリンク /var/run の下にディレクトリを作成する必要がある場合は、
それをサービス ファイルに書き込みます。

-

特定の権限で作成する必要がある場合は、
mkdir -p の代わりに install を使用することをお勧めします:

#!/bin/sh
install -d -m0700 /run/foo
exec foo
#!/bin/sh
install -d -m0700 -o bar -g bar /run/bar
exec bar

サービスが、通常は一時ファイルシステムではないシステムの一部にディレクトリを必要とする場合:

次に、テンプレートの make_dirs 変数を使用して、パッケージのインストール時にこれらのディレクトリを作成します。

パッケージが systemd サービス ファイルまたはその他のユニットをインストールする場合は、
それを含めることに悪影響がない限り、参照ポイントとしてそのファイルをそのままにしておきます。

-

systemd ユニットをインストールしない場合の例:

これを行うと、パッケージ化されたソフトウェアの実行時の動作が変更されます。
コンパイル時フラグを介して実行されると、ビルドの依存関係も変更されます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

18. 32bit packages  (32ビットパッケージ)

-

原文: 32bit packages

-

和訳:


ビルダーが x86 (32 ビット) の場合、

32 ビット パッケージは自動的にビルドされますが、動作を変更できる変数がいくつかあります:

-


(1). lib32depends

この変数が設定されている場合、xbps-src によって自動的に検出される依存関係ではなく、ここにリストされている依存関係が使用されます。

依存関係はバージョン コンパレータを使用して指定する必要があることに注意してください。
例: lib32depends="foo>=0 blah<2.0"

-


(2). lib32disabled

この変数が設定されている場合、32 ビット パッケージはビルドされません。

-


(3). lib32files

32 ビット パッケージに追加される追加ファイルです。

これは、空白で区切られた絶対パスを想定しています:
例: lib32files="/usr/bin/blah /usr/include/blah."

-


lib32 ディレクトリに保存されているターゲット ファイル名のシンボリック リンクを作成します:

これはターゲット ファイルのベース名を想定しています:
例: lib32symlinks="foo"

-


(5). lib32mode

設定しない場合、共有/静的ライブラリと「pkg-config」ファイルのみが 32 ビット パッケージにコピーされます。

「full」に設定すると、すべてのファイルが変更されずに 32 ビット パッケージにコピーされます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

19. Subpackages  (サブパッケージ)

-

原文: Subpackages

-

和訳:


例の上半分だけだと、「バイナリ パッケージ」のみが生成されますが、

下半分の、いくつかの簡単な調整を行う(定義を追加する)ことで、
単一の「テンプレート/ビルド」から、複数の「バイナリ パッケージ」を生成できます。

これは「サブパッケージ」と呼ばれます:

-


1). 追加の「サブパッケージ」を作成するには、

テンプレートで次の名前の新しい関数を定義する必要があります:

<subpkgname>_package()

-

foo-devel_package() を定義した例:
# Template file for 'foo'
pkgname=foo
version=1.0
revision=1
build_style=gnu-configure
short_desc="A short description max 72 chars"
maintainer="name <email>"
license="GPL-3.0-or-later"
homepage="http://www.foo.org"
distfiles="http://www.foo.org/foo-${version}.tar.gz"
checksum="fea0a94d4b605894f3e2d5572e3f96e4413bcad3a085aae7367c2cf07908b2ff"

# foo-devel is a subpkg
foo-devel_package() {      ←(新しい関数を定義)
    short_desc+=" - development files"
    depends="${sourcepkg}>=${version}_${revision}"
    pkg_install() {
        vmove usr/include
        vmove "usr/lib/*.a"
        vmove "usr/lib/*.so"
        vmove usr/lib/pkgconfig
    }
}

-


2). すべての「サブパッケージ」には「メイン パッケージ」への追加の「シンボリックリンク」が必要です:

そうしないと、これらのパッケージを必要とする依存関係がそのテンプレートを見つけることができません。

例:

 /srcpkgs
  |- foo     ←「メイン パッケージ」
  |  |- template
  |- foo-devel  ←「メイン パッケージ」への「シンボリックリンク」

メイン パッケージでは、テンプレートで定義されたすべてのサブパッケージをビルドできるように、必要なすべてのビルド依存関係を指定する必要があります。

-


3). サブパッケージの重要な点は、

「メイン パッケージ」が「インストール」フェーズを実行した後に「サブパッケージ」が処理されることです:

これらで指定される pkg_install() 関数は、通常、メイン パッケージ「destdir」からサブパッケージ 「destdir」にファイルを移動するために使用されます。

-


4). ヘルパー関数「vinstall、vmkdir、vcopy、および vmove」は、

メイン パッケージ destdir ($DESTDIR) からサブパッケージ destdir ($PKGDESTDIR) の間で
ファイル/ディレクトリを作成、コピー、移動するプロセスを簡素化する単なるラッパーです。

-


5). 「サブパッケージ」は常にアルファベット順に処理されます:

カスタム順序を強制するには、必要な順序で「subpackages」変数を宣言できます。

-

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:

「サブパッケージ」を使ったアプリの例:

Geany」アプリを、ソースに手を加えずに「パッケージ化」してみる:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

20. Some package classes  (一部のパッケージクラス)

-

原文: Some package classes

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

20-1. Development packages  (開発パッケージ)

-

原文: Development packages

-

和訳:


通常、「サブパッケージ」として生成される「開発パッケージ」には、

開発に必要なファイルのみ が含まれます;

ヘッダー、静的ライブラリ、共有ライブラリのシンボリックリンク、pkg-config ファイル、
API ドキュメント、またはターゲット ソフトウェアの開発時にのみ役立つその他のスクリプト...

-

1). 「開発パッケージ」は、提供された共有ライブラリに対してリンクする必要がある「パッケージ」に依存する必要があります:

つまり、libfoo が libfoo.so.2 共有ライブラリを提供し、リンクに -lbar が必要な場合、libbar 共有ライブラリを提供するパッケージを依存関係として追加する必要があります。

そしておそらく、それは「開発パッケージ」に依存するでしょう。

-

2). 開発パッケージが「pkg-config」ファイルを提供する場合、

そのパッケージが動的リンクまたは静的リンクに必要な依存関係を確認し、適切な開発パッケージを依存関係として追加する必要があります。

-

3). C および C++ 言語の「開発パッケージ」は通常、「メイン パッケージ」から
次のファイルのサブセットを vmove します:

 

ファイルのサブセット 移動先
Header files usr/include
Static libraries usr/lib/*.a
Shared library symbolic links usr/lib/*.so
Cmake rules usr/lib/cmake usr/share/cmake
Package config files usr/lib/pkgconfig usr/share/pkgconfig
Autoconf macros usr/share/aclocal
Gobject introspection XML files usr/share/gir-1.0
Vala bindings usr/share/vala

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

20-2. Data packages  (データ パッケージ)

-

原文: Data packages

-

和訳:


もう 1つの一般的な「サブパッケージ」タイプは、「-data」サブパッケージです:

この「サブパッケージ」タイプは、パッケージのメイン部分とアーキテクチャに依存する部分から、
アーキテクチャに依存しない大きなデータまたは膨大な量のデータを分割するために使用されます。

-

「-data」サブパッケージがパッケージにとって意味があるかどうかは、あなたが判断する必要があります。

このタイプは、ゲーム (グラフィック、サウンド、音楽)、パーツ ライブラリ (CAD)、またはカード マテリアル (マップ) で一般的です。

-

「メイン パッケージ」には、場合によっては他の非自動依存に加えて、
depends="${pkgname}-data-${version}_${revision}" が必要になります。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

20-3. Documentation packages  (ドキュメント パッケージ)

-

原文: Documentation packages

-

和訳:


一般に、「メインパッケージ」がドキュメントの有無にかかわらず使用でき、

ドキュメントのサイズが大きめの場合は、「-doc」パッケージが便利です:

-

ユーザ対話を目的としたパッケージは、必ずしも無条件にドキュメント部分を必要とするわけではありません

例えば、Qt5 で開発したくないユーザは、(巨大な) qt5-doc パッケージをインストールする必要はありませんし、専門家はオンライン バージョンを必要としない場合や、オンライン バージョンの使用を選択する場合があります。

-

特定のパッケージに依存するパッケージを構築するときに、理由もなく大量のドキュメントをインストールする必要がないように、
「メインパッケージ」と「-devel」サブパッケージは小さく保つ必要があります:

-

従って、

「-doc」サブパッケージを分割するかを決める指針は、ドキュメント部分の「サイズ」と言えます:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

20-4. Python packages  (Python パッケージ)

-

原文: Python packages

-

和訳:


1). 可能であれば、

Python パッケージは「python3-module」ビルド スタイルでビルドする必要があります:

これにより、クロス コンパイルを可能にするために必要ないくつかの環境変数が設定されます。
単一のテンプレートから複数のバージョンの Python モジュールを構築できるようにするサポートも可能です。

-

2). 「python3-pep517」ビルド スタイルは、
従来の「setup.py」スクリプトを使用せずに、
「PEP 517」に準拠したビルドシステム定義を提供する「Python」 パッケージをビルドする手段を提供します。

「python3-pep517」ビルド スタイルは特定のビルド バックエンドを提供しないため、

パッケージは適切なバックエンド プロバイダーを「hostmakedepends」に追加する必要があります。

-

3). python3-setuptools に依存する Python パッケージは、

通常、setup.py の setup_requires 依存関係をテンプレートの hostmakedepends にマップし、
install_requires 依存関係をテンプレートの depend にマップする必要があります。

他に Python 依存関係がない場合は、python3 を depend に含めます。

-

4). パッケージにコンパイルされた拡張機能が含まれている場合は、

「python3-devel」パッケージを「makedepends」に追加する必要があります。

また、拡張機能がリンクされるネイティブ ライブラリも提供する Python パッケージも
(setuptools を満たすためにそのパッケージが「hostmakedepends」にも含まれている場合でも)
同様に追加する必要があります 。

-

5). 「Python setuptools」は、「pip」または「EasyInstall」を使用して、ビルド時に不足している依存関係を取得しようとするので「注意」します:

-

パッケージのビルド後に「EasyInstall」の非推奨に関する警告や、
${wrksrc}/.eggs に存在する「Python Egg」に関する警告に気付いた場合は、
それらのパッケージを「hostmakedepends」に追加する必要があります。

-

6). 次の変数は、
「post-install」時の Python パッケージの構築および構成方法に影響を与える可能性があります:

-

-


(1). pycompile_module:

デフォルトでは、usr/lib/pythonX.Y/site-packages にインストールされるファイルとディレクトリ (-info と .so を除く) は、インストール時に Python モジュールとしてバイトコンパイルされます:

デフォルトが間違っている場合、この変数はバイトコンパイルされるべきそれらのサブセットを期待します:

複数の Python モジュールをブランクで区切って指定できます:
例: pycompile_module="foo blah"

Python モジュールがディレクトリではなくサイト パッケージにファイルをインストールする場合は、
ファイルの名前を使用します:
例: pycompile_module="fnord.py"

-


(2). pycompile_dirs:

この変数は、ターゲットの Python バージョンによって再帰的にバイトコンパイルされる必要がある Python ディレクトリを予期します:

これは、任意のパスを指定できる点で pycompile_module とは異なります:
例: pycompile_dirs="usr/share/foo"

-


(3). python_version:

この変数は、サポートされている Python メジャー バージョンを想定しています。ほとんどの場合、バージョンはシバン、インストール パス、またはビルド スタイルから推測されます。

(例: アプリは C で記述され、コマンドは Python で記述される) 一部の多言語アプリケーション、
または /usr/bin に存在する単一の Python ファイルのみに必要です。

python_version が無視するように設定されている場合、Python を含むシバンは書き換えられません:
これは、パッケージで Python のシステム バージョンを使用すべきでない場合にのみ使用してください。

-


(4). python_extras:

Python モジュールの依存関係を検証するときに考慮する Python モジュールの追加機能です:

追加の依存関係セットが確実にチェックされるようにするために使用できます:
例: python_extras="all"

-


(5). nopyprovides:

設定されている場合、パッケージ内に Python モジュールの Provides エントリを作成しません:

-


(6). noverifypydeps:

設定されている場合、Python モジュールの依存関係を検証しません:

-

-


7). テンプレートで使用するために一連の便利な変数が定義されています:

 

変 数
py2_ver 2.X
py2_lib usr/lib/python2.X
py2_sitelib usr/lib/python2.X/site-packages
py2_inc usr/include/python2.X
py3_ver 3.X
py3_lib usr/lib/python3.X
py3_sitelib usr/lib/python3.X/site-packages
py3_inc usr/include/python3.Xm

-

-


注意:

複数の Python バージョンのパッケージ化を可能にするには、
追加の「サブパッケージ」を生成する必要があることが予想されます。

-

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:
(1), 「EasyInstall」の非推奨に関する警告について:

python setup.py install を使うのはセキュリティリスクがあるため、非推奨になりました。
代わりに pip install . を使用します

-

(2), 「Python Egg」に関する警告について:

Pythonのパッケージング形式において、以前主流だった「Egg(.egg)」は非推奨となり、
現在は「Wheel(.whl)」が標準的なバイナリパッケージ形式として採用されています

なので、pip install や setup.py の実行時に「...egg... is deprecated」と、 「Wheel(.whl)」への移行を促すメッセージが表示されることがあります。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

20-5. Go packages  (Go パッケージ)

-

原文: Go packages

-

和訳:


Go パッケージは、

可能であれば「go」ビルドスタイルでビルドする必要があります:

-


1). 「go」ビルドスタイルは、Go の依存関係のダウンロードとクロス コンパイルのセットアップを処理します:

-


2). 次のテンプレート変数は、Go パッケージの構築方法に影響します:

-

-


(1). go_import_path:

go get で使用される、distfile に含まれるパッケージのインポート パスです:

例えば、GitHub のハブ プログラムには、インポート パス「github.com/github/hub」があります。
この変数は必須です。

-


(2). go_package:

ビルドする必要があるパッケージのインポート パスのスペース区切りのリストです:

デフォルトは「go_import_path」です。

-


(3). go_build_tags:

Go に渡すビルド タグのオプションのスペース区切りのリストです:

-


(4). go_mod_mode:

使用するモジュールのダウンロード モードです:

go.mod ファイルを無視したり、Go のデフォルトの動作を使用したり、
go build -mod MODE で受け入れられるものをデフォルトで使用したりすることができます。

「vendor」ディレクトリがある場合はデフォルトで「vendor」、それ以外の場合はデフォルトです。

-


(5). go_ldflags:

go ツールのリンクステップに渡す引数です:

-


3). 次の環境変数は、Go パッケージのビルド方法に影響します:

-

XBPS_MAKEJOBS:

Go コンパイラの並列処理を制御するために、go install の -p フラグに渡される値です:

-

場合によっては、Go ソース ツリー内から操作を実行する必要があることがあります。

これは通常、go-bindata を使用するプログラム、またはその他の方法で一部のアセットを準備するプログラムで必要になります。

可能であれば、これを pre_build() で実行してください。

$GOPATH 内のパッケージのソースへのパスは、$GOSRCPATH として使用できます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

20-6. Haskell packages  (Haskell パッケージ)

-

原文: Haskell packages

-

和訳:


Haskell パッケージは、

-


1). 「cabal」ビルド スタイル、または「haskell-stack」ビルド スタイルのいずれかを使用してビルドできます:

どちらか便利な方、またはアップストリームでより適切にサポートされている方を使用します。
場合によっては 2つのうちの 1つだけが可能です。

-


2). Haskell 部分はあるが、
「gnu-makefile」などの異なるビルド スタイルを使用するパッケージの場合は、
 必ず 「Haskell」ビルド ヘルパーを使用してください:

-


3). 次の変数は、「cabal」でパッケージが構築される方法に影響します:

-

-


(1). cabal_index_state:

依存関係を取得するために使用するハッキング cabal index の状態。

Haskell プロジェクトのソース パッケージには、インデックス状態を設定する
フリーズ ファイルが付属している必要があります。

また、cabal プロジェクト ファイルにインデックス状態を設定するものもあります。

-

そうでない場合は、パッケージ テンプレートで ISO タイムスタンプに設定する必要があります:
例: 2025-07-05T14:01:16Z

-


(2). configure_args:

引数は「cabal configure」に渡されます:

configure ステップでは、「cabal.project.local」ファイルが生成されます。

-


(3). make_build_args:

引数は「cabal build」に渡されます:

-


(4). make_build_target:

ターゲットは「cabal build」に渡されます:

-


(5). make_check_args:

引数は「cabal test」に渡されます:

-


(6). make_check_target:

テスト対象は「test」の代わりに「cabal」に渡されます:

-


(7). make_install_target:

ターゲットは「cabal install」に渡されます:

-


4). そして、これらの変数は、スタックを使用してパッケージを構築する方法に影響します:

-

-


(1). stackage:

パッケージのビルドに使用されたスタックのバージョンです: 例: lts-3.5

あるいは、
プロジェクトの stack.yaml 構成を準備し、それを files/stack.yaml に置くことができます。 stack.yaml ファイルがソース ファイルに存在する場合は、それが使用されます。

-


(2). make_build_args:

これはそのまま stack build ... に渡されるため、そこに --flag ... パラメータを追加できます。

-


5). Haskell パッケージの依存関係にパッチを適用するには、

cabal や stack にパッケージをダウンロードさせるのではなく、distfile に追加することで、
ハッキングから明示的に取得する必要があります。

抽出してパッチを適用すると、パッチが適用されたバージョンへのパスを
「cabal.project」または「stack.yaml」のパッケージに追加できます。

「stack.yaml」ファイルが存在しない場合は、
ディレクトリをスキャンしてスタックが自動的にそれらを見つけます。

-


6). ビルド ツールは、ハッキングから依存関係をダウンロードする代わりに、
パッチが適用されたバージョンの依存関係を使用します:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

20-7. Font packages  (フォント パッケージ)

-

原文: Font packages

-

和訳:


フォント パッケージは非常に簡単に作成でき、

常に次の変数を使用して設定されます:

-

-


(1). depends="font-util":

これらは、パッケージのインストール/削除中に「フォント キャッシュ」を再生成するために必要です:

-


(2). font_dirs:

これは、パッケージがフォントをインストールする「ディレクトリ」に設定します:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

21. Renaming a package  (パッケージの名前を変更)

-

原文: Renaming a package

-

和訳:


新しいパッケージに応じて、

1). 古い名前の空のパッケージを作成します:
これは、古いパッケージがすでにインストールされているシステムに更新を提供するために必要です:

-

2). 新しいパッケージのバージョン番号が減少した場合を除き、
これは新しいパッケージの「サブパッケージ」である必要があります:

-

3). その後、古いバージョンと増加したリビジョンを使用して、
別の「テンプレート」を作成します:

-

4). 他の「テンプレート」および「common/shlib」内のパッケージへの参照を編集します:
「replaces=」を設定しないでください。

 xbps によって両方のパッケージがシステムから削除される可能性があります。

-

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:
「common/shlibs」について:

「Void Linux」のパッケージ管理システム(XBPS)が、共有ライブラリの依存関係を正確に管理・追跡する ために使用する、基盤となるデータベースです。

-

「xbps-src」でパッケージをビルドする際、

 パッケージが依存する共有ライブラリ(例: libfoo.so.1)が、
 どのパッケージ(例: foo-library)から提供されているかを特定します:

common/shlibs の例:

libssl.so.1.1 openssl-1.1.1_1
libcrypto.so.1.1 openssl-1.1.1_1
libz.so.1 zlib-1.2.11_1

→左側:「SONAME」、右側:「提供パッケージ名」と「バージョン」

-

これにより、「テンプレート」(template) ファイルに詳細な依存関係を明記しなくても、
自動的に適切な「パッケージの依存関係」が生成されます

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

22. Removing a package  (パッケージの削除)

-

原文: Removing a package

-

和訳:


Void Linux のリポジトリからのパッケージ テンプレートの削除:

まずは、その「バイナリ」パッケージの削除がスムーズに行われることを保証するために行うべきことです:

-


1). パッケージの「テンプレート」を削除する前に:

どのパッケージもその「パッケージ」またはその「サブパッケージ」に依存しないことを保証するため、

下記を使って確認:

「テンプレート」でパッケージへの「参照」を検索:
$ grep -r '\bpkg\b' srcpkgs/

これで、パッケージが提供する「shlib」に依存しないことを保証します。

-

確認例:

$ cd ~/git/void-packages/
$ grep -r '\bpkg\b' srcpkgs/
:
srcpkgs/geany-plugins/template:hostmakedepends="automake gettext-devel intltool libtool pkg-config vala
srcpkgs/geany/template:hostmakedepends="pkg-config libtool gettext"

"pkg" という「単語」が含まれたファイルと行を抜き出した場合です:

→この場合は「pkg-config」がヒットしています:
 表示が多いので抜粋しましたが、表示されたすべての行を確認する必要があるかも:

-


2). パッケージの「テンプレート」を削除する場合:

-

(1). パッケージを指すすべてのシンボリックリンクを削除します:

削除後の確認:

$ find srcpkgs/ -lname <pkg>

で十分です。

パッケージに「shlib」が提供されている場合は、それらを「common/shlibs」から必ず削除してください:

-

一部のパッケージは、「シンボリックリンク」を使用して他のパッケージのパッチとファイルを使用します:

通常、これらのパッケージは同じですが、循環依存関係を避けるために分割されています。

削除するパッケージがそれらの「パッチ」/「ファイル」のソースではないことを確認してください:

-

確認例:

$ cd ~/git/void-packages/
$ find srcpkgs/ -lname geany
srcpkgs/geany-devel

→これは削除していない状態。つまり、リンクがあります。

-

「common/shlibs」での確認例:

$ cd ~/git/void-packages/
$ cat common/shlibs | grep geany
libgeany.so.0 geany-1.25_1

-

(2). パッケージの「テンプレート」を削除します:

「pkgname<=version_revision」を追加して、「removed-packages」テンプレートの「変数」を置き換えます:

削除された「サブパッケージ」もすべて追加する必要があります:

-

修正:

$ cd ~/git/void-packages/
$ nano srcpkgs/removed-packages/template

-

確認:

$ cd ~/git/void-packages/
$ cat srcpkgs/removed-packages/template | grep shell
 gnome-shell-mousewheel-zoom<=0.8.0_2

→修正した部分を表示した例:

-

(3). これにより、「パッケージ」がインストールされているシステムから「パッケージ」がアンインストールされます。

-

(4). リポジトリ インデックスから「パッケージ」を削除するか、削除できる「管理者」に連絡してください。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23. XBPS Triggers  (XBPS トリガー)

-

原文: XBPS Triggers

-

和訳:


「XBPS トリガー」は、xbps-triggers パッケージによって提供される「コード スニペット」(ツールコマンド)のコレクションです:

-


1). テンプレートで「トリガー変数」を設定することで手動で、
または「特定の条件」が満たされたときに自動で、
パッケージの「INSTALL / REMOVE」スクリプトに追加されます;

-


2). 以下は、利用可能なすべての「トリガー」、その現在の「ステータス」、それぞれの「機能」、およびパッケージに自動的に含めるために必要な「条件」のリストです:

これはパッケージの完全な概要ではないので、
参照されている「変数」と「トリガー」自体を読み取ることをお勧めします。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-1. appstream-cache  (アプリ ストリーム キャッシュ)

-

原文: appstream-cache

-

和訳:


「appstream-cache トリガー」は、「appstream メタデータ キャッシュ」の再構築を担当します:

1). インストール中に、
appstreamclifresh-cache --verbose --force --datapath $APPSTREAM_PATHS --cachepath var/cache/app-info/gv」が実行されます:

-

2). デフォルトでは、「APPSTREAM_PATHS」は、「appstreamcli」がメタデータ ファイルを調べるすべてのパスです:

-

3). 「appstreamcli」によって検索される「ディレクトリ」は次のとおりです:
  • usr/share/appdata
  • usr/share/app-info
  • var/lib/app-info
  • var/cache/app-info

-

4). 「AppStream」パッケージの削除中に、「var/cache/app-info/gv」ディレクトリが削除されます:

これは、「appstreamcli」によって検索された「ディレクトリ」のいずれかに、XML ファイルがあるパッケージに自動的に追加されます:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-2. binfmts  (binfmts トリガー)

-

原文: binfmts

-

和訳:


「binfmts」トリガー は、

「binfmts」として知られる任意の実行可能バイナリ形式の登録と削除を担当します:

-

1). 「インストール」/「削除」中に、
「binfmt-support」パッケージの「update-binfmts」を使用して、
任意の実行可能バイナリ形式データベースにエントリを登録/削除します:

-

2). これは、usr/share/binfmts 内のファイルを含むパッケージに自動的に追加されます:

-

3). これらのファイルは「update-binfmts」形式のファイルである必要があり、
「update-binfmts --import」でインポートされます:

-

4). 推奨されませんが、「binfmts」変数を使用してトリガーを追加することもできます:
この変数には、登録する「binfmts」を定義する行が含まれている必要があります。
/path/to/interpreter [update-binfmts バイナリ形式指定引数 ...]

-

詳細については、「update-binfmts」を参照してください。

-

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:
(1). update-binfmts について:

Linux カーネルの binfmt_misc 機能を管理するコマンドです:

通常直接実行できないファイル形式(.exe や ARM バイナリなど)を、
特定のインタプリタやエミュレータ(QEMUなど)を使って Linux 上でシームレスに
実行可能にする設定を確認・変更します。

-

カーネルモジュールである binfmt_misc(Binary Format Miscellaneous)の設定ファイル(/proc/sys/fs/binfmt_misc)を操作します:

「マジックコード」や「ファイル拡張子」に基づいて、
どの「ファイル形式」をどの「プログラム」(インタプリタ)で実行するかを登録・更新・削除します。

主要な操作コマンド:

--display:      登録されているバイナリフォーマットの設定を表示  
--enable / --disable:  特定のフォーマットの有効化・無効化  
--import:      ファイルから設定をインポート   

-

(2). binfmt_misc について:

binfmt_misc は、ファイルの先頭数バイト(マジックナンバー)を検出し、自動的に指定された命令に渡す仕組みです。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-3. dkms  (dkms トリガー)

-

原文: dkms

-

和訳:


「dkms」トリガーは、

パッケージの動的カーネル モジュールのコンパイルと削除を担当します:

-

インストール中に、トリガーは、対応する linux-headers パッケージがインストールされている
すべての Linux パッケージの動的モジュールをコンパイルしてインストールします。

削除中に、対応するモジュールが削除されます

トリガーを含めるには、dkms_modules 変数を使用します。
これは、トリガーが定義されていない限り、トリガーは何も実行しないためです。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-4. gconf-schemas  (gconf スキーマ トリガー)

-

原文: gconf-schemas

-

和訳:


「gconf-schemas」トリガーは、

.schemas および .entries ファイルをスキーマ データベース ディレクトリに登録および削除する役割を果たします:

-

インストール中に、gconftool-2 を使用して、
.schemas および .entries ファイルを usr/share/gconf/schemas にインストールします。

削除中に、gconftool-2 を使用して、
データベースから削除されるパッケージに属するエントリとスキーマを削除します。

これを含めるには、gconf-schemas をトリガーに追加し、
適切な .schemas を gconf_schemas 変数に追加し、.entries を gconf_entries に追加します。

/usr/share/gconf/schemas がディレクトリとして存在するパッケージに自動的に追加されます。

そのディレクトリの下にある .schemas ファイル拡張子を持つすべてのファイルがトリガーに渡されます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-5. gdk-pixbuf-loaders  (gdk-pixbuf-loaders トリガー)

-

原文: gdk-pixbuf-loaders

-

和訳:


「gdk-pixbuf-loaders」トリガーは、

GDK Pixbuf ローダー キャッシュを維持する役割を果たします。

-

インストール中に「gdk-pixbuf-query-loaders --update-cache」が実行され、
古い「etc/gtk-2.0/gdk-pixbuf.loaders」ファイルが存在する場合は削除されます。

「gdk-pixbuf」パッケージの削除中に、キャッシュ ファイルが存在する場合は削除されます。
通常は「usr/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache」にあります。

これは、「triggers」変数で「gdk-pixbuf-loaders」を定義することで追加できます。

また、ディレクトリとして利用可能なパス「usr/lib/gdk-pixbuf-2.0/2.10.0/loaders」を持つパッケージにも自動的に追加されます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-6. gio-modules  (gio-modules トリガー)

-

原文: gio-modules

-

和訳:


「gio-modules」トリガーは、

glib パッケージの「gio-querymodules」を使用して「Glib GIO」モジュール キャッシュを更新する役割を果たします:

-

インストールおよび削除中は、「gio-querymodules」を実行して、
「usr/lib/gio/modules」に存在するキャッシュ ファイルを更新するだけです。

「/usr/lib/gio/modules」がディレクトリとして存在するパッケージに自動的に追加されます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-7. gsettings-schemas  (gsettings スキーマ トリガー)

-

原文: gsettings-schemas

-

和訳:


「gsettings-schemas」トリガーは、

インストール中に Glib の GSettings XML スキーマ ファイルをコンパイルし、
削除中にコンパイルされたファイルを削除する役割を果たします。

インストール中に、glib の glib-compile-schemas を使用して、
スキーマをサフィックス .compiled が付いたファイルにコンパイルして
/usr/share/glib-2.0/schemas に保存します。

glib パッケージの削除中に、/usr/share/glib-2.0/schemas 内の
「.compiled」で終わるすべてのファイルが削除されます。

「/usr/share/glib-2.0/schemas」がディレクトリとして存在するパッケージに、
自動的に追加されます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-8. gtk-icon-cache  (gtk アイコンキャッシュ トリガー)

-

原文: gtk-icon-cache

-

和訳:


「gtk-icon-cache」トリガーは、

gtk+ アイコン キャッシュを更新します。

-

インストール中に、gtk-update-icon-cache を使用してアイコン キャッシュを更新します。

gtk+ パッケージの削除中に、
変数 gtk_iconcache_dirs で定義されたディレクトリ内の icon-theme.cache ファイルが削除されます。

これは、ディレクトリとして使用可能な /usr/share/icons を持つパッケージに自動的に追加され、
そのディレクトリの下にあるすべてのディレクトリの絶対パスがトリガーに渡されます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-9. gtk-immodules  (gtk-immodules トリガー)

-

原文: gtk-immodules

-

和訳:


「gtk-immodules」トリガーは、

gtk+ の IM (インプット メソッド) モジュール ファイルを更新する役割を果たします。

-

インストール中に、gtk-query-immodules-2.0 --update-cache を使用してキャッシュ ファイルを更新します。また、古い設定ファイル etc/gtk-2.0/gtk.immodules が存在する場合は削除します。

gtk+ パッケージの削除中に、usr/lib/gtk-2.0/2.10.0/immodules.cache にあるキャッシュ ファイルが削除されます。

「/usr/lib/gtk-2.0/2.10.0/immodules」がディレクトリとして存在するパッケージに、
自動的に追加されます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-10. gtk-pixbuf-loaders  (gtk-pixbuf-loaders)

-

原文: gtk-pixbuf-loaders

-

和訳:


「gtk-pixbuf-loaders」は、

現在の「gdk-pixbuf-loaders」トリガーの古い名前であり、削除中です:

-

現在、互換性対策として「gdk-pixbuf-loaders」を再実行します。

その仕組みについては、「gdk-pixbuf-loaders」を参照してください。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-11. gtk3-immodules  (gtk3-immodules トリガー)

-

原文: gtk3-immodules

-

和訳:


「gtk3-immodules」トリガーは、

gtk+3 の IM (インプット メソッド) モジュール ファイルを更新する役割を果たします:

-

インストール中に「gtk-query-immodules-3.0 --update-cache」を実行してキャッシュ ファイルを更新します。

また、古い設定ファイル「etc/gtk-3.0/gtk.immodules」が存在する場合は削除します。

-

gtk+3 パッケージの削除中に、usr/lib/gtk-3.0/3.0.0/immodules.cache にあるキャッシュ ファイルが削除されます。

/usr/lib/gtk-3.0/3.0.0/immodules がディレクトリとして存在するパッケージに自動的に追加されます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-12. hwdb.d-dir  (hwdb.d-dir トリガー)

-

原文: hwdb.d-dir

-

和訳:


「hwdb.d-dir」トリガーは、

ハードウェア データベースの更新を担当します:

-

インストールおよび削除中に、
「usr/bin/udevadm hwdb --root=. --update」が実行されます。

「/usr/lib/udev/hwdb.d」がディレクトリとして存在するパッケージに自動的に追加されます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-13. info-files  (info-files トリガー)

-

原文: info-files

-

和訳:


「info-files」トリガーは、

パッケージの GNU info ファイルの登録と登録解除を担当します:

-

提供された情報ファイルの存在と、別のアーキテクチャで実行されているかどうかをチェックします。

インストール中に、install-info を使用して情報ファイルを usr/share/info に登録します。

削除中に、install-info --delete を使用して、usr/share/info にあるレジストリから情報ファイルを削除します。

-

別のアーキテクチャで実行されている場合は、ホストの install-info ユーティリティを使用しようとします。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-14. initramfs-regenerate  (initramfs-regenerate トリガー)

-

原文: initramfs-regenerate

-

和訳:


「initramfs-regenerate」トリガーは、

パッケージのインストールまたは削除後に、すべてのカーネル initramfs イメージの再生成をトリガーします:

-

トリガーは手動でリクエストする必要があります。

このフックは、現在利用可能なすべてのカーネルの initramfs イメージに新しくコンパイルされたカーネル モジュールを含める手段を提供するため、おそらく DKMS パッケージに最も役立ちます。

-

DKMS パッケージで使用する場合は、

例えば、下記のようにして、

triggers="dkms initramfs-regenerate"

「initramfs-regenerate」トリガーの前に、「dkms」トリガーを手動で含めることをお勧めします:

-

xbps-src は dkms_modules がインストールされるたびに dkms トリガーを自動的に組み込みますが、
自動追加は initramfs-regenerate の後に行われるため、

モジュールがコンパイルされる前に initramfs イメージが再作成されます。

-

デフォルトでは、トリガーは dracut --regenerate-all を使用して initramfs イメージを再作成します。

/etc/default/initramfs-regenerate が存在し、INITRAMFS_GENERATOR=mkinitcpio を定義している場合、

トリガーは代わりに mkinitcpio を使用し、
モジュールがインストールされていると思われるすべてのカーネル バージョンをループします。

-

あるいは、
INITRAMFS_GENERATOR=none を設定すると、イメージの再生成が完全に無効になります。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-15. kernel-hooks  (カーネルフック トリガー)

-

原文: kernel-hooks

-

和訳:


「kernel-hooks」トリガーは、

カーネル パッケージのインストール/削除中にスクリプトを実行する役割を果たします:

-

使用可能なターゲットは、インストール前、削除前、インストール後、および削除後です。

-

実行すると、「etc/kernel.d/$TARGET」にあるすべての実行可能ファイルの実行が試行されます。

-

TARGET 変数は、トリガーで使用できる 4 つのターゲットの 1 つです。

-

ディレクトリが存在しない場合は、ディレクトリも作成されます。

-

更新中に、削除前ターゲットで実行している場合は、実行可能ファイルの実行は試行されません。

-

ヘルパー変数「kernel_hooks_version」が定義されている場合、
これは自動的に追加されます。

ただし、定義することは必須ではありません。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-16. mimedb  (mimedb トリガー)

-

原文: mimedb

-

和訳:


「mimedb」トリガーは、

「shared-mime-info」データベースの更新を担当します:

-

すべての実行で、「update-mime-database -n usr/share/mime」が実行されるだけです。

これは、ディレクトリとして使用可能な「/usr/share/mime」を持つパッケージに自動的に追加されます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-17. mkdirs  (mkdirs トリガー)

-

原文: mkdirs

-

和訳:


「mkdirs」トリガーは、

「make_dirs」変数によって指示されたディレクトリの作成と削除を担当します:

-

インストール中に、「make_dirs」変数を取得し、それを 4つの変数のグループに分割します:

dir = ディレクトリへのフルパス
mode = ディレクトリに対する Unix 権限
uid = 所有ユーザ名
gid = 所有グループ名

-

値が終了するまで、make_dirs の値を 4 つのグループに分割し続けます。

インストール中に、dir でディレクトリを作成し、次に mode でモードを設定し、uid:gid で権限を設定します。

削除中に、rmdir を使用してディレクトリが削除されます。

このトリガーを含めるには、make_dirs 変数を使用します。
これは、トリガーが定義されていない限り何も実行しないためです。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-18. pango-modules  (pango-modules トリガー)

-

原文: pango-modules

-

和訳:


「pango-modules」トリガーは、

アップストリームによってその原因となるコードが削除されたため、現在削除されています:

-

これは、パッケージのインストール中に「pango-modulesquery」を使用して
「pango」モジュール ファイルを更新します:

-

現在、「pango」パッケージの削除中に「etc/pango/pango.modules」ファイルが削除されます:

-

これは、トリガー変数で pango-modules を定義することで追加できますが、
パッケージに自動的に追加する方法はありません。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-19. pycompile  (py コンパイル トリガー)

-

原文: pycompile

-

和訳:


「pycompile」 トリガーは、

Python コードをネイティブ バイトコードにコンパイルし、生成されたバイトコードを削除します:

-

インストール中に、pycompile_dirs で指定されたパスにあるすべての Python コードと、
pycompile_module で記述されたすべてのモジュールをネイティブ バイトコードにコンパイルし、
ldconfig(8) キャッシュを更新します。

-

削除中に、すべてのネイティブ バイトコードが削除され、
「ldconfig」キャッシュが更新されます。

-

このトリガーを含めるには、変数「pycompile_dirs」と「pycompile_module」を使用します。

これらの変数の少なくとも 1 つが定義されていない限り、トリガーは何も実行しません。

-

python_version 変数を設定して、トリガーの動作を指定できます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-20. register-shell  (レジスタ shell トリガー)

-

原文: register-shell

-

和訳:


「register-shell」トリガーは、

etc/shell への「shell」エントリの登録と削除を担当します:

-

インストール中に、「etc/shells」ファイルに新しい「シェル」が追加され、
ファイルのアクセス許可が「644」に変更されます:

-

削除中に、「sed」を使用してファイルから「シェル」を削除します:

-

このトリガーを含めるには、「register_shell」変数を使用します。
これは、トリガーが定義されていない限り何も実行しないためです。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-21. system-accounts  (system-accounts トリガー)

-

原文: system-accounts

-

和訳:


「system-accounts アカウント」トリガーは、

システム アカウントとグループの作成と無効化を担当します:

-

削除中に、シェルを「/bin/false」に設定し、ホームを「/var/empty」に設定し、

説明に「' - for uninstalled package $pkgname'」を追加することで
アカウントを無効にします:

例:

非特権ユーザの送信 - アンインストールされたパッケージの送信の場合:

transmission unprivileged user - for uninstalled package transmission

-

このトリガーは、「system_accounts」変数を使用する場合にのみ使用できます:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-22. texmf-dist  (texmf-dist トリガー)

-

原文: texmf-dist

-

和訳:


「texmf-dist」トリガーは、TeXLive の texmf データベースを再生成します:

-

インストール時と削除時に、
「texhash」と「fmtutil-sys」を使用して

texhash データベースとフォーマット データベースの両方を再生成し、
新しい「ハッシュ」や「フォーマット」を追加または削除します。

「/usr/share/texmf-dist」を変更するすべてのパッケージで実行されます。

-

これはおそらくやりすぎですが、各フォーマット ディレクトリとハッシュされた各ディレクトリをチェックするよりもはるかにクリーンです。

さらに、「/usr/share/texmf-dist」に触れるパッケージには、
これらのトリガーのいずれかが必要になる可能性が非常に高くなります。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-23. update-desktopdb  (デスクトップデータベースの更新 トリガー)

-

原文: update-desktopdb

-

和訳:


「update-desktopdb」トリガーは、システムの MIME データベースを更新する役割を果たします:

-

インストール中に「update-desktop-database usr/share/applications」が実行され、
その結果、「usr/share/applications/mimeinfo.cache」にキャッシュ ファイルが作成されます。

-

「Desktop-file-utils」パッケージの削除中に、
インストール中に作成されたキャッシュ ファイルが削除されます。

これは、ディレクトリとして使用可能な「/usr/share/applications」を持つパッケージに自動的に追加されます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-24. x11-fonts  (x11 フォント トリガー)

-

原文: x11-fonts

-

和訳:


「x11-fonts」トリガーは、

X11 フォントをインストールするパッケージの「fonts.dir」および「fonts.scale」ファイルを再構築し、
これらのフォントの「fontconfig」のキャッシュを更新します。

-

インストールおよび削除中に、
「font_dirs」変数で指定されたすべてのフォント ディレクトリに対して
「mkfontdir」、「mkfontscale」、および「fc-cache」が実行されます。

このトリガーを含めるには、「font_dirs」変数を使用します。
これは、トリガーが定義されていない限り何も実行しないためです。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

23-25. xml-catalog  (XML カタログ トリガー)

-

原文: xml-catalog

-

和訳:


「xml-catalog」トリガーは、

「SGML/XML」カタログ エントリの登録と削除を担当します:

-

インストール中に、「xmlcatmgr」を使用して、
「sgml_entries」変数と「xml_entries」変数によって渡されたすべてのカタログを、

それぞれ「usr/share/sgml/catalog」と「usr/share/xml/catalog」に登録します。

-

削除中に、xmlcatmgr を使用して、
「sgml_entries」変数と「xml_entries」変数によって渡されたすべてのカタログ

それぞれ「usr/share/sgml/catalog」と「usr/share/xml/catalog」を削除します。

-

このトリガーを含めるには、「sgml_entries」変数または「xml_entries」変数、
またはその両方を使用します。
どちらかが定義されていない限り、トリガーは何も実行しません。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

24. Void specific documentation  (Void Linux に固有の文書)

-

原文: Void specific documentation

-

和訳:


アップストリームの「ドキュメント」ではカバーされていない、

「Void Linux」に固有のパッケージの構成と使用方法の詳細を文書化したい場合は、

-

1). 「srcpkgs//files/README.voidlinux」にメモ(固有の文書)を置きます:

-

2). 固有の文書をインストール:
vdoc "${FILESDIR}/README.voidlinux" 

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

25. Notes  (注意事項)

-

原文: Notes

-

和訳:


すべてのソフトウェアが「/usr」プレフィックスを使用するように構成されていることを確認してください:

-

1). バイナリは常に「/usr/bin」にインストールする必要があります:

-

2). マニュアルページは常に「/usr/share/man」にインストールする必要があります:

-

3). ソフトウェアが共有ライブラリとヘッダーを提供する場合は、

おそらく、ヘッダー、静的ライブラリ、および開発に必要な (実行時には必要ない) その他のファイルを含む開発パッケージを作成する必要があります:

-

4). パッケージを更新する場合は、「SONAME バンプに注意」し、

新しい更新を「プッシュ」する前に、インストールされているファイルを確認してください:

$ ./xbps-src show-files パッケージ名

-

5). バイナリがソフトウェアによって削除されないことを確認してください:

これは「xbps-src」に行わせます。
そうしないと、デバッグ パッケージに「デバッグ シンボル」が含まれなくなります。

-

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:

「SONAME バンプ」に注意:

共有ライブラリ(.soファイル)の SONAME バンプ(バージョン番号の更新)は、

ABI(Application Binary Interface)の互換性が損なわれたことを示す重要な作業であり、
慎重な対応が求められます。

バンプを適切に行わないと、既存のアプリケーションが正常に動作しなくなるなど、
「DLL Hell」に陥る危険性があります。

-

「DLL Hell(DLL地獄)」について:

共有されている動的リンクライブラリ(DLL)のバージョン競合や不整合により、
アプリケーションが正常に動作しなくなる状態を指す用語です。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

26. Contributing via git  (Git 経由で貢献)

-

原文: Contributing via git

-

和訳:


まず、GitHub 上で「void-linux void-packages git」リポジトリを「フォーク」:

「フォーク」を作成するのは自由ですが、その後の「git コマンド」の使用は注意が必要です:

思わぬことで、上流のリモートの「リポジトリ」に影響します:

-

迷惑をかけないように、まずは、「git」コマンドに慣れてから、「Pull requests」を考えるのがベター:

まずは「Issues」の発行であれば、(「git コマンド」は要らないので)楽に「貢献」できます:

-

1). GitHub にログイン後、リポジトリ「void-linux/void-packages」を開いて、「Fork」ボタンをクリック:

-

2). 自分用のリポジトリが「フォーク」されるので、「クローン」を作成:
$ git clone git@github.com:<user>/void-packages.git

<user> は、GitHub にログインしたときの「ユーザ名」です:

-

3). コミットのフォーマット方法や貢献に関するその他のヒントについては、
CONTRIBUTING.md」を参照してください:

-

4). 「フォーク」された「リポジトリ」に変更を加えたら、「github」に「プル リクエスト」を送信:

-

5). フォークされたリポジトリを常に最新の状態に保つには、
新しい変更を取り込むように、上流のリモートをセットアップします:
$ git remote add upstream https://github.com/void-linux/void-packages.git
$ git pull --rebase upstream master

-

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:

(1). 投稿、「xbps-src-help.md」ブラウザ対応版〈H179-10〉 にて紹介の、

「xbps-src」にて、ビルド環境を更新する場合: は、

-

「貢献しない場合」の更新のやり方で、

ローカルの更新を行うだけで、上流のリモートに影響しませんが、
逆に、貢献(プルリクエストの発行)はできません。

-

(2). プルリクエストの操作例:

GitHub にて、「HTTPS」を使って実際にプルリクエスト〈H163-2〉

→「EndeavourOS」(Arch Linux 系)の「Welcome」アプリの日本語化の「プルリクエスト」です:
 安全のため、プルリクエスト用に Branch「develop」を作成して作業しました:

すでに完了した作業なので、投稿の操作をしてはイケマセン:
どのようなことを行ったかのひとつの参考です:

-

サイトによって、プルリクエストのやり方のルールが違うので、「Void Linux」の場合は、「CONTRIBUTING.md」に従って行って下さい:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- -

27. Help  (ヘルプ)

-

原文: Help

-

和訳:


このマニュアルを読んだ後でも何らかのヘルプが必要な場合は、

IRC (irc.libera.chat) 経由で #xbps に参加してください。

-

-

-

-

-


- --- - --- - --- - --- - --- - --- - --- - --- --

補足:「CONTRIBUTING.md」

-

Contributing to void-packages 

「void-package」への貢献

-

原文: Contributing to void-packages

-

和訳:


「void-packages」は、Void Linux ディストリビューションの基盤となるものです:

これには、「ソース」から「パッケージ」を構築するための、すべての定義が含まれています。

-

このドキュメントでは、「void-packages」(xbps-src) に「貢献」したい人に向けて、
パッケージの追加、バグの修正、および「void-packages」への機能の追加を支援する方法について
説明します:

-

目次:

  1. Package Requirements     (パッケージの要件
  2. Creating, updating, and modifying packages in Void by yourself
                   (自分で Void のパッケージを作成、更新、変更

    1). Creating a new template  (新しいテンプレートの作成
    2). Updating a template    (テンプレートの更新
    3). Adopting a template    (テンプレートの採用
    4). Orphaning a template   (テンプレートの孤立化
    5). Committing your changes  (変更をコミット
    6). Starting a pull request   (プルリクエストの開始

    (1). Continuous Integration (CI: 継続的インテグレーション
    (2). Review        (レビュー
    (3). Closing the pull request (プルリクエストをクローズ
    (4). Publishing the package (パッケージの公開

    7). Testing Pull Requests   (プルリクエストのテスト

-

目次詳細 へ

-

-


- --- - --- - --- - --- - --- - --- - --- - --- --

1. Package Requirements (パッケージの要件)

-

原文: Package Requirements

-

和訳:


Void リポジトリに含めるには、

ソフトウェアは次の要件の少なくとも 1つを満たしている必要があります:

リストへの例外が存在する可能性があり、受け入れられる可能性もありますが、
その可能性は非常に低いです。

-

システム:
 ソフトウェアはユーザごとではなく、システム全体にインストールする必要があります:

コンパイル済み:
 システム全体で必要のないソフトウェアであっても、
 使用する前にソフトウェアをコンパイルする必要があります:

必須:
 リポジトリ内の別のパッケージまたは保留中のパッケージには、そのパッケージが必要です:

-

例外があると思われる場合は、

プルリクエスト を開始して、
その特定のソフトウェアが以下の要件のいずれも満たしていないにもかかわらず、
Void パッケージ システムの適切な候補である理由を議論してください:

-

特に、新しい「テーマ」は受け入れられる可能性が非常に低いです:

単純な「シェル スクリプト」は、幅広いユーザ ベースに相当な価値を提供しない限り、
受け入れられる可能性は低いです:

-

新しい「フォント」は、見た目の美しさを超えた価値を提供する場合に受け入れられる場合があります:
(たとえば、すでにパッケージ化されたフォントにはないスクリプトのグリフが含まれている場合など)

-

暗号通貨に関連するパッケージ (ウォレット、マイナー、ノードなど) は受け入れられません:

-

「Chromium」や「Firefox」ベースのものを含む「ラウザ」フォークは、通常は受け入れられません:
このようなフォークには、大規模なパッチ適用、メンテナンス、および何時間ものビルド時間が必要です。

-

ソフトウェアは、一般の人々が使用できるように作成者によって発表されたバージョン (通常はリリースと呼ばれます) で使用する必要があります:

-

「ベータ版」、任意の VCS リビジョン、ビルド時に取得された開発ブランチの先端を使用したテンプレート、およびパッケージ管理者によって作成されたリリースは受け入れられません:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- --

2. Creating, updating, and modifying packages in Void by yourself (自分で Void のパッケージを作成、更新、変更)

-

原文: Creating, updating, and modifying packages in Void by yourself

-

和訳:


新しいパッケージまたはパッケージの更新を Void Linux に本当に入れたいなら、

「自分で寄稿」することをオススメ:

-

「新しいパッケージの作成方法」に関する包括的なマニュアル「Manual.md」を提供:

 →見やすくしたのが、本「投稿」です:

-

「テンプレートからパッケージ ファイルを構築する」ときに使う xbps-src のマニュアル「README.md」も提供:

-

このガイドでは、読者が git に関する基本的な知識と、SSH が設定された GitHub アカウントを持っていることを前提としています:

-


1). 「GitHub アカウント」と 「git で電子メールを設定」、

「コミット」が GitHub アカウントに適切に関連付けられるようにします:

$ git config --global user.email "メールアドレス"

→GitHub を使用する場合、登録したメールアドレスと一致させる必要があります:

-


2). GitHub 上で「void-linux void-packages git」リポジトリをフォークし、クローンを作成:

$ git clone git@github.com:<user>/void-packages.git

<user> は、「GitHub アカウント」名です:

-


3). フォークされたリポジトリを最新の状態に保つため、

新しい変更を取り込むように上流のリモートをセットアップ:
$ git remote add upstream https://github.com/void-linux/void-packages.git
$ git pull --rebase upstream master

-

これは、github-cli ツールを使用して行うこともできます:
$ gh repo fork void-linux/void-packages
$ gh repo clone <user>/void-packages

-

これにより、アップストリーム リモートが自動的に設定されるため、

git pull --rebaseupstream master」を使用してフォークを最新の状態に保つことができます。

-

変更を編集してテストするには、リポジトリのクローンを作成する必要があるため、
変更を加えるために GitHub Web エディタを使用することは強くお勧めできません。

フォークのマスター ブランチを貢献のために使用することも強くお勧めできません。

プル リクエスト (PR とも呼ばれる) を更新したり、複数の PR を同時に開いたりすると、多くの問題が発生する可能性があります。

-


4). 新しいブランチを作成:

$ git checkout master -b <a-descriptive-name>

-

-


- --- - --- - --- - --- - --- - --- - --- - --- --

2-1. Creating a new template (新しいテンプレートの作成)

-

原文: Creating a new template

-

和訳:


-


1). 「xtools」パッケージのヘルパー ツール「xnew」を使用して、新しい「テンプレート」を作成できます:

$ xnew pkgname subpkg1 subpkg2 ...

「テンプレート」の名前は「void-packages/srcpkgs/<pkgname>/template」である必要があります:

ここで、「pkgname」はテンプレート内の「pkgname」変数と同じです。

-

「テンプレート」ファイルの内容についてさらに詳しく知りたい場合は、マニュアル をお読みください。

また、具体的な例については、このリポジトリの「srcpkgs」ディレクトリにある
既存のテンプレート ファイルを必ず参照してください。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- --

2-2. Updating a template (テンプレートの更新)

-

原文: Updating a template

-

和訳:


テンプレートの更新は、

少なくとも、上流のバージョンの変更やリビジョンがあった場合、
テンプレート固有の変更 (パッチ、修正など) が必要な場合、

「バージョン」と「チェックサム」の変更で構成されます:

-

そして、アップストリームが行った変更に応じて、
テンプレートへのその他の変更が必要になる場合があります。

-

「チェックサム」は、「xtools」パッケージの「xgensum」ヘルパーを使用して自動的に更新できます:

$ xgensum -i <pkgname>

-

-


- --- - --- - --- - --- - --- - --- - --- - --- --

2-3. Adopting a template (テンプレートの採用)

-

原文: Adopting a template

-

和訳:


「テンプレート」が孤立している ( orphan@voidlinux.org によって保守されている) 場合、

または現在の保守者が 1年以上 Void に貢献していない場合、

テンプレートをメンテする人は、他の人になる可能性があります:

-

「テンプレート」が必要なメンテを確実に受けられるようにするには、
テンプレートの採用者はパッケージに精通しており、Void への貢献の歴史を確立している必要があります:

-

特に問題の「テンプレート」に関して、いくつかの更新に貢献した人は、
「テンプレート」のメンテナの候補者として適しています:

-

「テンプレート」に別の変更を加える場合は、「テンプレート」を採用することをお勧めします:

「テンプレート」を採用するときは、

テンプレートの「メンテナ」フィールドに「名前」または「ユーザ名」と「電子メール」を追加し、
コミット メッセージで採用について言及します。

-

次に例を示します:

libfoo: update to 1.2.3, adopt.

→英語でコミットします:

和訳:

libfoo: 1.2.3 に更新して採用。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- --

2-4. Orphaning a template (テンプレートの孤立化)

-

原文: Orphaning a template

-

和訳:


「テンプレート」を保守する必要がなくなった場合は、

1). テンプレートの保守者フィールドを「Orphaned <orphan@voidlinux.org>」に設定することで、
自分自身を保守者から削除できます:

-

2). コミット メッセージには、次のようにこれが記載されている必要があります:
libfoo: orphan.

→「orphan」は「孤児」の意味:

-

孤立化するときに「テンプレート」に他の変更を加える必要はなく、
リビジョンを増やす (再構築をトリガーする) 必要もありません。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- --

2-5. Committing your changes (変更をコミット)

-

原文: Committing your changes

-

和訳:


変更を加えた後、パッケージが正常にビルドされることを確認してください:

-

1). 「void-packages」リポジトリのローカル コピーの最上位ディレクトリから、次のコマンドを実行:
$ ./xbps-src pkg <pkgname>

-

パッケージは少なくとも「x86」に対して正常にビルドされる必要がありますが、

2). 「armv6l*」 に対してもクロスビルドできることを試します:

例:

$ ./xbps-src -a armv6l pkg <pkgname>

-

x86_64*」または「i686」用にビルドする場合は、-Q フラグを使用するか、
「etc/conf」で「XBPS_CHECK_PKGS=yes」を設定して (チェック フェーズを実行するために)
ビルドすることを強くお勧めします。

また、新しいパッケージとアップデートは、
パッケージをインストールして実行することによって実行時テストが行​​われていない限り、受け入れられません。

-

「テンプレート」ファイルの作業が完了したら、

3). xtools パッケージの「xlint」ヘルパーを使用して問題がないか、チェックしてください:
$ xlint template

→「xlint」が問題を報告した場合は、「コミット」する前に問題を解決してください:

-

パッケージの「テンプレート」やその他のファイルに変更を加えて確認したら、

4). 「パッケージ」ごとに 1つのコミットを作成します:

そのサブパッケージに対するすべての変更を含みます:

-

各「コミット」メッセージの記入例:

次のいずれかの形式にします:

- 新しいパッケージの場合:    (例) New package: <pkgname>-<version>
- パッケージを更新する場合:   (例)<pkgname>: update to <version>
- バージョンを変更せずにテンプレートを変更する場合 (例)<pkgname>: <英文で理由> 
- パッケージを削除する場合:   (例)<pkgname>:remove package を使い、コミット本文に「削除理由」
- 他のファイルに変更を加える場合:(例)<filename>: <英文で理由> (example, example, example) 
- 変更内容をより詳しく説明したい場合:(例)コミット本文(先頭行から空行で区切る)で説明

-

「xtools」パッケージの「xbump」は、新規または更新されたパッケージのコミットに使えます:
$ xbump <pkgname> <git commit options>

-

「xtools」パッケージの「xrevbump」は、パッケージの「テンプレート」変更のコミットに使えます:
$ xrevbump '<message>' <pkgnames...>

「xbump」と「xrevbump」は「git commit」を使用して、適切な「コミット メッセージ」で変更をコミットします。

-

コミットをより「きめ細かく」制御するには、

パッケージ」名の後に特定のオプションを追加して、「git commit」に渡すことができます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- --

2-6. Starting a pull request (プルリクエストの開始)

-

原文: Starting a pull request

-

和訳:


パッケージが正常に「ビルド」されたら、「プル リクエスト」を作成できます:

プル リクエストは PR とも呼ばれます。

-

ほとんどのプル リクエストには、単一のパッケージと、まだ void-package の一部ではない依存関係のみを含める必要があります。

-

soname バンプを含むパッケージを更新する場合は、
common/shlibs も更新し、依存するすべてのパッケージを「revbump」する必要があります:

-

各パッケージの「revbump」には、「コミット」が必要であり、
それらのコミットは同じプル リクエストの一部である必要があります。

-

プル リクエストに変更を加えた場合は、

プル リクエストを閉じて再度開かないでください。

代わりに、強制的に git push を実行し、古いコミットを上書きします。

「プル リクエスト」を閉じたり開いたりすると、Void メンテナ にスパムが繰り返し送信されます。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- --

(1). Continuous Integration (CI: 継続的インテグレーション)

-

原文: Continuous Integration

-

和訳:


プル リクエストは、

「継続的インテグレーション (CI)」テスト用に自動的に送信され、

C ライブラリとアーキテクチャのさまざまな組み合わせで
パッケージがビルドされ、(ネイティブ ビルドで) テストに合格することを確認します。

-

ビルドの完了に数時間以上かかると予想されるパッケージ、
または 14G を超えるストレージが必要なパッケージ (Firefox や Linux カーネルなど) は CI に失敗するため、

偽の失敗や CI ビルダーの時間の無駄を避けるために、PR のタイトルまたは本文 (PR を開いているときのコメント フィールド) に [ci Skip] を含める必要があります。

-

ビルド時間については、ローカルのビルド経験に基づいて、最善の判断を下してください:

-

PR(プル リクエスト)を送信するときに CI をスキップする場合は、

glibc と musl の両方を使用して、さまざまなアーキテクチャをローカルでビルドおよびクロスビルドし、
ローカルの結果を PR コメントに記録してください。

-

64 ビットと 32 ビットのアーキテクチャを必ずカバーしてください。

-

ローカルで発生していない CI のエラーに気付いた場合は、
テストをローカルで実行しなかったことが原因である可能性があります。

-

これを行うには、./xbps-src -Q pkg を使用します。
一部のテストは CI 環境では機能しないか、まったく機能しないため、
そのテンプレートは make_check 変数を使用してこの情報をエンコードする必要があります。

-

「継続的インテグレーション」は、
変更したテンプレートがガイドラインに準拠しているかどうかもチェックします:

-

現時点では、すべてのパッケージがルールに準拠しているわけではないため、
パッケージを更新すると、まだ触れていない場所に関するエラーが報告される可能性があります。

それらのエラーも修正してください。

-

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

参考:

継続的インテグレーション(CI)テストとは、

開発者がコードを変更・共有リポジトリにコミットするたびに、ビルドと自動テストを即座に実行する仕組みです。バグの早期発見、手戻り軽減、コードの品質維持を目的とし、開発の高速化を実現します

特徴:

  • コードの変更を検知して、自動でテスト(単体テスト、結合テストなど)が実行されます:
  • バグやエラーをその都度発見するため、問題が大きくなる前に対処可能です:
  • CI ツール が、この工程を自動化します:
  • リリース前の手戻りが減り、開発チームの生産性とコードの信頼性が向上します:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- --

(2). Review (レビュー)

-

原文: Review

-

和訳:


「プル リクエスト」に間違いが含まれたり、

「レビュー担当者」が追加の調整を要求したりする可能性は (よくありますが) あります:

-

「レビュー担当者」はプル リクエストにコメントし、
「プル リクエスト」をマージする前に必要な変更を指摘します。

-

上記のように、ほとんどの PR には 1つのコミットがあるため、
コミットに変更を加える必要があり、

すでに「プル リクエスト」が開いている場合は、次のコマンドを使用できます:
$ git add <file>
$ git commit --amend
$ git push -f

-

「git commit --amend」を使用するより「強力なコミット変更」方法は、「git-rebase」を使用することです:

これにより、過去のコミットの結合、並べ替え、説明の変更などが可能になります。

-

あるいは、git 履歴に問題がある場合は、

別のブランチを作成して既存の PR にプッシュすることもできます:

$ git checkout master -b <attempt2>

新たに変更を加えます:

$ git push -f <fork> <attempt2>:<branch-of-pr>

-

-


- --- - --- - --- - --- - --- - --- - --- - --- --

(3). Closing the pull request (プルリクエストをクローズ)

-

原文: Closing the pull request

-

和訳:


リクエストされたすべての変更を適用すると、レビュー担当者がリクエストをマージします:

-

「プル リクエスト」が数日間、非アクティブになった場合、

「レビュー担当者」が「プル リクエスト」を閉じようとしているときに警告を表示する場合とされない場合があります。

さらに非アクティブな状態が続くと、閉じられます。

-

「テンプレート」の修正中に「プルリクエスト」を一時的にクローズすることはご遠慮ください:

代わりに、PR にまだ作業が必要なことを説明するコメントを残すか、
下書きとしてマークするか、

PR タイトルに「[WIP]」を追加してください。

変更を含めたくない場合にのみ、「プル リクエスト」を閉じてください。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- --

(4). Publishing the package (パッケージの公開)

-

原文: Publishing the package

-

和訳:


「レビュー担当者」が「プル リクエスト」をマージすると、

ビルド サーバーが自動的に起動され、
サポートされているすべてのプラットフォームの「プル リクエスト」内のすべてのパッケージがビルドされます:

-

完了すると、すべての「Void Linux」ユーザが「パッケージ」を利用できるようになります。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- --

2-7. Testing Pull Requests (プルリクエストのテスト)

-

原文: Testing Pull Requests

-

和訳:


「プルリクエスト」送信前に変更をテストするのは PR 作成者の責任ですが、

1人ですべての「構成オプション」、「ユースケース」、「ハードウェア」などをテストすることはできません:

-

新しい「パッケージ」の送信と更新をテストすることは常に役に立ち、
コントリビューションを開始するための優れた方法です。

-

(1). 「リポジトリ」のクローンをまだ作成していない場合はクローンを作成します。

-

(2). 「github-cli」を使用して「プル リクエスト」をチェックアウトします:
$ gh pr checkout <number>

または「git」を使用して:

ローカルの void-packages リポジトリがフォークから複製されている場合は、
最初にメイン リポジトリをリモートとして追加する必要がある場合があります:

$ git remote add upstream https://github.com/void-linux/void-packages.git

-

(3). PR をフェッチしてチェックアウトします:

(<remote> を「origin」または「upstream」に置き換えます)

$ git fetch <remote> pull/<number>/head:<branch-name>
$ git checkout <branch-name>

-

(4). 次に、パッケージをビルドしてインストールし、その機能をテストします:

-

-

-

以上:

-

-

-


-

-

    目次

-

「投稿の先頭 へ」

-

-


-

「この目次 の先頭へ」

「本編の目次 に戻る」

-

古い「ノート PC」(SSD) に、「Void Linux」をインストール〈H175-11〉

登録日: 2026-03-01 / 更新日: 2026-04-07

今回 は、古い「ノート PC」(SSD) を手に入れたので、GUI ではない " base " の「iso」イメージで、「Void Linux」をインストール。
ssh 接続してスクリプトを実行。GUI の「Xfce」デスクトップ環境を追加しました:

-

それなりに時間はかかりましたが、キーボード入力が減ってインストール作業は楽でした。
自宅に PC がもう 1台あるなら、こちらの投稿の手順が使えると思います。

-

ちなみに、「Windows11」マシンを使って ssh 接続するときは、Windows ボタンを右クリック →「ターミナル」を選び、「PowerShell」を開いて、記事の「端末」の操作を行えます。

そこではたぶん、マウスの中央ボタンでの貼付けは無効なので、Ctrl+C して Ctrl+V するか、Shift+右クリックしてコピー(c) や貼付け(p) が使えます。

-

ちなみに、以前の投稿の手順に、「ノート PC」で必要な設定も追加しました:

-

その備忘録です。

-

-

「ノートPC」で作業する場合は、「マウス」でなく「トラックパッド」になるので、
「範囲選択後、中央ボタンで貼り付け」の操作は、「範囲選択後、右クリック→s(選択範囲を貼り付け)」に置換えて下さい。「端末」(つまり、nano)への貼付け時に使えます。

-

-

入手したPC は、中古で整備済みの「NEC VersaPro VX-4」で、プロセッサは第8世代 Intel Core i5-8250U(4コア/ 8スレッド)、メモリ 8GB、SSD 256GB の「Windows11」マシンです。
その後、メモリ 16GB に変更しました。

-

(注)リンクを戻るときはブラウザの左上の「←」をクリック
Android スマホであれば「ホーム」ボタン隣の「<」をタップ

-

-


目次

-

前回の作業:

古い「ミニPC」(SSD) に、「Void Linux」をインストール〈H175-9〉

-

今回の作業:

-

  1. 「Void Linux」の base イメージの ISO をダウンロード:

  2.  ライブ「USB メモリ」の作成:

  3. 「Void Linux」のインストール:

  4.  システム更新:

  5.  今回のみに使う、「ssh 接続」できる環境をインストール:

  6. 「ssh 接続」して「スクリプト」で、「Xfce」デスクトップ環境に必要なアプリをインストール:

  7. 「ssh 接続」して「スクリプト」で、「サービス」の開始:

  8. 「ssh 接続」して「スクリプト」で、よく使う「アプリ」のインストール:

  9. 「ssh 接続」して「スクリプト」で、よく使う「ゲーム」のインストール:

  10. 「ssh 接続」の後始末:

  11. 「Xfce」デスクトップ環境の立ち上げ:

  12.  キーボードレイアウトを「日本語キーボード」に修正:

  13. 「firefox-esr」ブラウザの確認:

  14.  日本語入力「fcitx5-mozc」の確認:

  15.  パネルの設定:

  16.  デスクトップの設定:

  17.  ファイルマネージャ「thunar」の設定:

  18. 「フォント」のインストール:

  19. 「アプリ」のインストール:

  20. 「ゲーム」のインストール:

  21. 「flatpak」でアプリをインストール:

-

参考にできそうな作業:

-

  1. 「Xfce」デスクトップ環境のインストールについて:

  2.  キーボードレイアウトを「日本語キーボード」に修正:

  3. 「ゲーム」のメニューを日本語化する、「パッチ」を作成:

  4.  内蔵の「無線LAN」(Wi-Fi)を使う場合:

  5.  内蔵の「Bluetooth」を使う場合:

  6.  内蔵の「DVD-ROM」ドライブを使う場合:

  7. 「スクリーンショット」関連の設定:

  8. 「タッチパッド」が敏感すぎるので調整:

  9.  Windows11 にてマシンのスペックを確認:

  10.  Linux にてマシンのスペックを確認:

  11.  入手した PC について:

  12.  入手した PC のメモリを 16GB に増設:

-

「まとめ へ」

「目次詳細 へ」

-

-


- --- - --- - --- - --- - --- - --- - --- -

「Void-Linux」(Xfce) を起動:

項番 10.」のパネル設定や「項番 11.」のデスクトップ設定で、色々とカスタマイズ:

-

デスクトップ環境が「Xfce」であれば、異なる Linux ディストリビューションでも、
同じカスタマイズで、見た目も(レスポンスが同じなら)GUI での使い勝手も同じです:

-

大きな違いは、アプリのインストールに使う、「パッケージ管理」のしくみやコマンドが異なることと、使いやすい「ビルド環境」が準備されているか、です:

-

-


- --- - --- - --- - --- - --- - --- - --- --

「Void Linux」について:

-

1). 公式サイト:

The Void (Linux) distribution

英語のみのサイトです:

-

2). 「Void Linux」について:

こちら」を参照:

-

3). 「xbps-src」について:

こちら」を参照:

-

-


現在のOS のバージョンを表示:

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

OS : 「Void Linux」

2026-03-01 現在

-

カーネル:
$ uname -r
6.12.57_1

→Ubuntu よりも進んでいます:

-

リリース:
$ cat /etc/os-release
:
NAME="Void"
ID="void"
PRETTY_NAME="Void Linux"
HOME_URL="https://voidlinux.org/"
DOCUMENTATION_URL="https://docs.voidlinux.org/"
LOGO="void-logo"
ANSI_COLOR="0;38;2;71;128;97"

DISTRIB_ID="void"

→ローリングリリースです:

-

「x11」と「Wayland」のどちらで動作してるか確認:
$ echo $XDG_SESSION_TYPE
x11

→「Wayland」ではなく、「x11」で動作しています。

-

-


- --- - --- - --- - --- - --- - --- - --- ---

1. 「Void Linux」の base イメージをダウンロード:

-


1). ダウンロードサイト:

Download Void Linux

-

-


2). コマンド ライン base イメージの「Live イメージ」をダウンロード:

「X86_64」タブ

base             2025-02-02

-

右下の「赤色」で囲んだ、

live image glibc」のリンクをクリック

-

→ダウンロードしたファイルを、「~/ダウンロード/void/」フォルダに移動:

-


3). 「チェックサム」をダウンロード:

上部の「緑色」で囲んだ、

checksum file のリンクをクリック:

→ブラウザに表示:

抜粋:

SHA256 (void-live-x86_64-20250202-base.iso) = 0f7439f500740f62dd18972cae448cec7d8a85032c7eb8f1bf946100d9a92161

-


4). チェックサムの確認:

ファイルの確認:

$ cd ~/ダウンロード/void
$ ls
:
void-live-x86_64-20250202-base.iso

-

チェックサムの確認:

$ sha256sum void-live-x86_64-20250202-base.iso
0f7439f500740f62dd18972cae448cec7d8a85032c7eb8f1bf946100d9a92161  void-live-x86_64-20250202-base.iso

→OK

-

-


- --- - --- - --- - --- - --- - --- - --- ----

2. ライブ「USB メモリ」の作成:

-

まれに、Linux 等が立ち上がらない「USB メモリ」があります:

使っている PC で、以前に Linux の「ライブUSB メモリ」として立ち上げたことがある製品にすると確実です:

-

こちらは「Xubuntu 24.04 LTS」で
「ディスク」ツール (gnome-disk-utility) を使って作成した例です:

 使用するツールは任意です:

-


1). 「ディスク」ツールがインストールされているか確認:

$ apt list gnome-disk-utility
:
gnome-disk-utility/noble,now 46.0-1ubuntu3 amd64 [インストール済み]

-

この「ツール」で作成できたとしても、「USB メモリ」の製品によっては、まれに立ち上がらない場合があります:

そのときは、他の「USB メモリ」製品を試してみると良いです。

-


2). ライブUSB メモリを作成する、内容が消えてもよい「USB メモリ」を挿入:

-

USB2.0 か、USB3.0 で、4GB 以上:

差し込むポートの口の中が「青色」なら、USB3.0 の「USB メモリ」が使えます:

-


3). 「ファイルマネージャ」で、ダウンロードした ISO ファイルを右クリック:

→「アプリケーションで開く」→「ディスク イメージライターで開く」

-

「~/ダウンロード/void/void-live-x86_64-20250202-base.iso」

-


4). 転送先に、挿入した「USB メモリ」を指定:

-

「メーカー名」や「サイズ」を見て、慎重に確認:

デスクトップにマウントされたアイコンがあることに注目:

-

→指定後、「リストアを開始」

-

誤って、「PC 内臓のディスク」を指定すると、システムが上書きされて、立ち上がらなくなるのでくれぐれも注意:

-


5). 完了したら、「ファイルマネージャ」を閉じます:

-


6). 電源オフしてから、「USB メモリ」を抜きます:

アンマウントが自動で行われるので、抜くタイミングを失敗しません。これが安全な抜き方です:

-

-


- --- - --- - --- - --- - --- - --- - --- -----

3. 「Void Linux」のインストール:

-


1). ライブUSB メモリを PC にセット:

-

ほとんどの PC は、 PC の電源オン後、すぐに「Delete」キーを連打すると「UEFI メニュー」が表示されます:

-

NEC の VersaPro は少し違っていて、まずは 電源をオン:

「NEC」画面が表示されたら、すぐに Enter

ブートの選択画面がでたら、F2

-

「BIOS Setup」画面が表示:

Security を「→」で選択:

-

「Security」画面が表示:

Secure Boot を「↓」で選択して、Enter

Secure Boot [Enable] をEnter 後、メニューで [Disable] を選んで、Enter

-

Esc で元の画面に戻って、

Startup を「→」で選択:

「Startup」画面が表示:

Boot を「↓」で選択して、Enter

Boot Priority Order

1.    Windows Boot Manager
2.    USB CD
3.    USB FDD
4.    ATAPI CD0 HL-DT-ST DVDROM DUE1N
5.    ATA HDD1
6.    NVMe0
7.    ATA HDD0 SAMGHHSUNG M27LN256HAJQ-000L7
8.    USB HDD Verbatim STORE N GO
9.    PCI LAN

1. の「Windows Boot Manager」を選んで、F5 を数回押して、一番下の 9. に移動:
7. に変わった「USB HDD Verbatim STORE N GO」を選んで、F6 を数回押して、一番上の 1. に移動:

-

Esc で元の画面に戻って、

Restart を「→」で選択:

-

Restart 画面が表示:

「Exit Saving Changes」が選ばれているので、Enter

→「Yes」で、Enter

-


2). 再起動されました:

「NEC 」のロゴ画面が表示:

-


3). ブート選択画面が表示

→デフォルトの選択のまま待つか、Enter

-

メニューの一番下に「UEFI Firmware Settings」が表示されていることに注目:
つまり、「UEFI 立ち上げ」です。

-

インストール完了後は自動で「Disk 立ち上げ」になります:

もしDVD 立ち上げ(USB メモリから立ち上げ)したいときは、この「UEFI Firmware Settings」メニューを選んで、DVD (または、CD)を指定。

-


4). ライブ立ち上げの「コンソール」画面が表示:

void-live login:

→ログイン待ちです:

-

「void-live」がホスト名です:

-

上部に「#」で囲われた説明が表示:
ログインできるユーザ:
  • root   (パスワード: voidlinux)
  • anon  (パスワード: voidlinux)

-

インストーラの起動:
# void-installer

-


5). 「root」でログイン:

void-live login:  ←「root」入力
Password:      ←「voidlinux」入力
#

→root のプロンプト表示:

-

確認:
# pwd
/root

-

# ls
# 

-

# uname -r
6.12.11_1

-


6). インストーラの起動:

# void-installer

-


7). 「Enter the void ...」画面が表示:

→ < OK > が選択されているので、Enter

-


8). 「Void Linux installation menu」画面が表示:

-


9). 「Keyboard」を選んで、Enter

Select your keymap 画面:

「j」を入力

「jp106」を選んで、Enter

-


10). 「Network」が選ばれているので、Enter

「Select the network interface to configure」表示:

(和訳: 設定するネットワークインターフェースを選択してください)

enp0s31f6  9c:5a:44:5b:d7:06

→ < OK > が選択されているので、Enter

-


11). ネットワークで、DHCP を使うか、の設定画面が表示:

Do you want to use DHCP for enp0s31f6?

→ < Yes > が選択されているので、Enter

-

失敗したら、もう一度やり直して下さい:

-


12). 「Source」が選ばれているので、Enter

「Select installation source」画面:

「Local Packages from ISO image」を選んで、

→ < OK > が選択されているので、Enter

-


13). 「Mirror」が選ばれているので、Enter

「Void Linux Mirror Selection Wizard」画面:

→ < OK > が選択されているので、Enter

-

(1). 「Choose a Region」画面:

-

追記: 「日本」と「ドイツ」のミラーは不調で使えないので、

「Default Reset to default mirror」→< OK >

で、取りあえず「デフォルト」に設定して、インストールが完了してから、修正します:

→ < Yes > が選択されているので、Enter

-

(2). リポジトリの同期が行われました:

https://repo-default.voidlinux.org/current/x86_r...

→ < OK > が選択されているので、Enter

-

ミラーが登録されている場所の説明: 「/etc/xbps.d/00-repository-main.conf」

-


14). 「Hostname 」が選ばれているので、Enter

Set the machine hostname:

「user-pc3」を入力して、

→ < OK > が選択されているので、Enter

-

追記: ホスト名(PC 名)は、「ssh 接続」を使うのであれば、

同一ネットワーク内にある PC とは「違う名前」にします:

-


15). 「Locale」が選ばれているので、Enter

「Select your locale」画面:

「j」を押して、

「ja_JP.UTF-8 Japanese (Japan)」を選んで、

→ < OK > が選択されているので、Enter

-


16). 「Timezone」が選ばれているので、Enter

「Select area」画面:

「Asia」を選んで、

→ < OK > が選択されているので、Enter

-

「Select Location (Asia)」画面:

「t」を押して、「↓」でスクロールして、

「Tokyo」を選んで、

→ < OK > が選択されているので、Enter

-


17). 「RootPassword」が選ばれているので、Enter

-

(1). Enter the root password:

「空白」では次に進まないので、

「任意のパスワード」入力:

(今回はユーザと同じパスワードにしました)

→ < OK > が選択されているので、Enter

-

(2). Enter the root password again:

同じパスワードを入力して、

→ < OK > が選択されているので、Enter

-


18). 「UserAccount」が選ばれているので、Enter

-

(1). Enter a primary login name:

「user」(任意のログインユーザ名)

→ < OK > が選択されているので、Enter

-

(2). Enter a display name for login 'user' :

「user」(表示されるユーザ名、任意)

-

(3). Enter the password for login 'user' :

「任意のパスワード」

-

(4). Enter the password for login 'user' again:

「任意のパスワード」

-

(5). 「Select group menbership for login 'user'」画面:

自動で選択されているので、何もせず、

→ < OK > が選択されているので、Enter

-


19). 「BootLoader」が選ばれているので、Enter

-

(1). 「Select the disk to install the bootloader」画面:

「/dev/sda size:238GB;Sector_size:512」が自動で選ばれているので、

(サイズで判断)

→ < OK > が選択されているので、Enter

-

(2). 「Use a graphical terminal for the boot loader?」表示:

→ < Yes > が選択されているので、Enter

-


20). 「Partition」が選ばれているので、Enter

-

(1). 「Select the disk to partition」画面:

「/dev/sda size:238GB;Sector_size:512」が自動で選ばれているので、

→ < OK > が選択されているので、Enter

-

「/dev/sdb」が表示されている場合は注意。USB メモリの可能性があります。容量で判断。

-

(2). 「Select the Software for partitioning」画面:

「cfdisk Easy to use」が自動で選ばれており 、

(fdisk ツールを使い、パーティションを分割します)

→ < OK > が選択されているので、Enter

-

-

(5). 「Disk: /dev/sda」画面:

中古で使われていたので、4つに分割して使われています:

EFI パーティションは「200 M」が作られています順が、今回は大きめが必要なので、すべて作り直しました:

一番下のメニューの「Delete」を選んで、Enter

4つとも削除:

-

「Free space」がひとつ表示:

→一番下で、 「New」が選ばれているので、Enter

-

(6). Partition size: 「238.5G」が入力されているので、

「1G」に修正して、Enter

(800 MB ぐらいで良いですが、少ないよりも、大きめが無難)

-

(7). 「Type」の指定:

→ 一番下で、「Quit」を「Type」に移動して、Enter

-

(8). Select partition type 画面:

→ 一番上の「EFI System」を選んで、Enter

-

(9). 書き込み:

→ 一番下の「Type」を「Write」に移動して、Enter

メッセージが表示されたら、Enter でなく、

→「yes」と入力して、Enter

-

(10). 新規作成:

一番下の「Free space」を選んで、

「New」が選ばれているので、Enter

-

(11). サイズ:

→ Partition size: 残りすべての「237.5G」が選ばれているので、Enter

-

この値は PC で変わります:

-

(12). 書き込み:

一番下の「Quit」を「Write」に移動して、Enter

メッセージが表示されたら、Enter でなく、

「yes」と入力して、Enter

-

(13). 終了:

一番下で、「Quit」が選ばれているので、Enter

-


21). 「Filesystems」が選ばれているので、Enter

パーティションを初期化するときの、「ファイルシステム」と「マウントポイント」を指定します:

-

(1). 「Select the partition to edit」画面:

「/dev/sda1 size:1G;fstype:none」

→ 一番下で「Change」が選ばれているので、Enter

-

(2). 「Select the filesystem type for /dev/sda1」画面:

「vfat FAT32」を選んで、Enter

-

通常、「EFI System」のパーティションは、どのOS でも認識される「FAT32」でフォーマットしますが、「ext4」も使えます:

また、Windows では「vfat」と呼ばれることがあります:

-

(3). 「Please specity the mount point for /dev/sda1」表示:

「/boot/efi」と入力して、Enter

→ 「Yes」が選ばれているので、Enter

-

(4). 「Select the partition to edit」画面:

「/dev/sda2 size:29G;fstype:none」を「↓」で選んで、

→ 一番下で「Change」が選ばれているので、Enter

-

(5). 「Select the filesystem type for /dev/sda2」画面:

「ext4 Linux ext4 (journal)」を選んで、Enter

-

(6). 「Please specity the mount point for /dev/sda2」表示:

「/」(ルート)を入力して、Enter

→ 「Yes」が選ばれているので、Enter

-

つまり、こちらの「/dev/sda2」の「/」に、「/boot/efi」として「/dev/sda1」がマウントされます:

-

(7). 「Select the partition to edit」画面:
/dev/sda1 size:1G;fstype:vfat
/dev/sda2 size:237.5G;fstype:ext4

→ 一番下の「Change」を「Done」に移動して、Enter

-

「/dev/sdb1」は USB メモリなので触ってはダメです:

-


22). 「↓」で、「Install」を選んで、

→ < OK > が選択されているので、Enter

-

(1). パーティションが初期化されるので、赤い警告が表示:

→ 「Yes」が選ばれているので、Enter

-

(2). インストール中:

-

(3). 「Select services to enable:」画面:

有効にする「サービス」が自動で選ばれています:

→ < OK > が選択されているので、Enter

-


23). 「Void Linux has been installed successfully!」(インストール完了)画面:

Do you want to reboot the system? (リブートしますか)

→ < Yes > が選択されているので、Enter

-


24). 再起動されました:

-


25). 「コンソール」のログイン画面:

-

ログイン待ち:

user-pc3 login:

→設定した、コンピュータ名(ホスト名)が表示されていることに注目:

-


26). ログイン画面で、

「@@」を入力

@@

→「コンソール」画面では、ちゃんと「日本語キーボード」の配列に設定されています:

(GUI 画面とは設定が異なるので注意)

-

-


- --- - --- - --- - --- - --- - --- - --- ----- -

4. システム更新:

-


1). ログイン画面:

-

user-pc login:

→設定した「ユーザ名」と「パスワード」で、ログイン:

-

[user@user-pc3 ~]$

→ログインで、プロンプトが変わりました:

-


2). 登録されている、リポジトリの表示:

$ xbps-query -L
:
14468 https://repo-default.voidlinux.org/currnt (RSA signed)

→「-L」は大文字のエル

「デフォルト」のミラーに設定したので、うまく同期が取れるかも

-


3). リポジトリの同期:

英語表示にして、同期:

$ LANG=C sudo xbps-install -S
:
Password: 
[*] Updating repository `https://repo-default.voidlinux.org/currnt/x86_64-repodata' ...

「-S」は、大文字のエスです:(Sync)

→エラーが表示されないので、このリポジトリなら、うまく動きそう:

-


4). システム更新:

システム更新で「xbps」も一緒に(自動で)更新してくれると思ったけど、

$ LANG=C sudo xbps-install -Su
:
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...
The 'xbps' package must be updated, please run `xbps-install -u xbps`

→システム更新の前に、「xbps」の更新が必要みたい:

-


5). 「xbps」を手動で更新:

$ sudo xbps-install -u xbps
:
Name    Action    Version           New version            Download size
glibc   update    2.39_4            2.41_1                 8956KB 
libcrypto3 update    3.3.2_1            3.5.5_1                 2098KB 
libss13    update    3.3.2_1            3.5.5_1                 428KB 
libxbps update    0.59.2_3          0.60.7_1               143KB 
xbps    update    0.59.2_3          0.60.7_1               118KB 

-


6). 再起動:

$ sudo reboot

-

タイムゾーンのデータ等の更新がある場合があるので、一度再起動:

パスワード入力は、文字化けしますが、そのまま入力:

-


7). システム更新:

$ LANG=C sudo xbps-install -Su

→たくさんあるので時間がかかりました:

-


8). USB メモリの取外しのため、電源オフ:

$ sudo shutdown -h now

-


9). 電源オフしたら、USB メモリを取外し:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- --

5. 今回の GUI のインストールのみに使う、「ssh 接続」できる環境をインストール:

-

「クライアント」(ホストOS、もしくは、他のPC)側から、
「ssh サーバー」(ゲストOS、「Void Linux」)側に「ssh 接続」できる環境を作成:

-

インストール時の入力を楽にするため、

GUI のインストールに使う、「スクリプト」ファイルを「ssh 接続」で作成して、実行しました:

-

「ssh 接続」の設定は不完全でも接続できれば OK

「鍵認証」でなく「パスワード認証」を使いました:

-

このままだとリスクが高いので、

「ssh 接続」を常用するときは、「鍵認証」に切り替えて、
「ssh 接続」をめったに使わないのであれば、sshd サービスは停止しておくのが良いです:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ---

5-1. 「ssh 接続」の前準備:

-


1). 端末で使える、エディタの「nano」をインストール:

$ LANG=C sudo xbps-install -S nano

-


2). Void Linux (ゲストOS)側にて、「SSH サーバー」を準備:

-

(1). SSH サーバーをインストール:
$ LANG=C sudo xbps-install -S openssh
:
ERROR: Package 'openssh' aleready installed.

→インストール済 でした:

-

(2). sshd サービスをリンクして有効化:

下記は要りません:

$ sudo ln -s /etc/sv/sshd /var/service/

→すでにリンクされていて、リンクに失敗しましたが OK です:

注意点は「/var/service/」のお尻の「/」を忘れないこと。

-

(3). sshd サービスの確認:
$ sudo sv status sshd

→「run」が表示されれば OK

-


3). Void Linux (ゲストOS)を電源オフ:

$ sudo shutdown -h now

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----

5-2. 同一ネットワーク上の「PC3」に「Void Linux」をインストールしている場合です:

-

古い「note PC」の「PC3」の SSD に、「Void Linux」をインストールしている場合で、

同一ネットワーク上の「PC1」から、「PC3」(SSH サーバー) に「ssh 接続」します:

-


1). 「PC3」(Void Linux マシン)の電源オン:

-


2). Void Linux (ゲストOS)側の「IPアドレス」を確認:

ログイン後、コンソール画面より、

$ ip a

→今回は、「IPアドレス」の (192.168.1.18) と、その「物理ポート番号」の (enp0s31f6) を確認しました:

-

もしくは、

$ ip addr show

-

表示される値は、環境で異なります:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- -----

5-3. クライアント(ホストOS、または「PC1」)の「端末」から「ssh 接続」:

-


1). 「端末」を起動して、「ssh 接続」:

-

接続コマンド:

ssh ユーザ名@接続先IPアドレス

-

今回:

$ ssh user@192.168.1.18

→「user」は、今回「Void Linux」のインストール時に作成した「ユーザ名」です:

-


2). 初回の「ssh 接続」:

$ ssh ubn@192.168.1.18
:
The authenticity of host '192.168.1.13 (192.168.1.13)' can't be established.
ED25519 key fingerprint is SHA256:X4m……KCg.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? 

→「yes」Enter(続行)

Warning: Permanently added '192.168.1.13' (ED25519) to the list of known hosts.
ubn@192.168.1.13's password: 

→パスワード入力:

Last login: Tue Jan 20 21:29:54 2026
[ubn@ubnbox2 ~]$ 

→プロンプトが変わりました:

「ユーザ名」は変わりませんが、「ホスト名」が変更した名前になっていることに注目:

-


3). 「ssh 接続」の確認:

[user@user-pc3 ~]$ pwd
/home/user

→こちらは「ユーザ名」のフォルダ

-

[user@user-pc3 ~]$ date
2026年  2月 19日 木曜日 01:19:34 JST

→日本語フォントはインストールしていませんが、ロケールが設定されていれば、ssh 接続だと、(接続する側が日本語環境だと)日本語表示されますし、コマンドの貼付けもできます:

-

[user@user-pc3 ~]$ ls -1A
:
.bash_history
.bash_logout
.bash_profile
.bashrc
.inputrc

→「~/.ssh/」は(まだ)ありません:

-

[user@user-pc3 ~]$ sudo ls
パスワード: 
[user@user-pc3 ~]$ 

→「sudo」が使えます:

-


4). 「ssh 接続」の終了:

[user@user-pc3 ~]$ exit
:
ログアウト
Connection to 192.168.1.18 closed.
ubn@ubnbox:~$ 

→プロンプトが元に戻りました:

-


5). 2度め以降の「ssh 接続」:

$ ssh user@192.168.1.18
:
user@192.168.1.18's password:    ←パスワード入力
Last login: Thu Feb 19 01:16:07 2026 from 192.168.1.12
[user@user-pc3 ~]$ 

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- -

6. GUI (Xfce デスクトップ環境)のインストール:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- --

6-1. 「ssh 接続」して、「GUI」に必要なアプリをインストールする「スクリプト」を作成して実行:

-


1). GUI に「必要なアプリ」をインストールする「スクリプト」を作成:

[user@user-pc3 ~]$ cd
[user@user-pc3 ~]$ nano 01.gui-install.sh

↓ すべて貼付け(すべて選択後、Ctrl+C して マウスの中央ボタンで貼付け):

#!/bin/bash

echo
echo "===================="
echo "Install the apps required for the GUI:(GUIに必要なアプリをインストール:)"
eval 'sudo echo "Press _Enter except for the _password.(パスワード or Enter)"'
echo
echo "Start the installation:(インストール開始:)"
echo "==== System Updates ===="
echo
echo "$ sudo xbps-install -Su"
eval "sudo xbps-install -Su"
echo
echo "==== Fonts ========="
echo "$ sudo xbps-install dejavu-fonts-ttf"
eval "LANG=C sudo xbps-install dejavu-fonts-ttf"
echo
echo "==== Fonts ========="
echo "$ sudo xbps-install fonts-roboto-ttf"
eval "LANG=C sudo xbps-install fonts-roboto-ttf"
echo
echo "==== Fonts ========="
echo "$ sudo xbps-install font-adobe-source-code-pro"
eval "LANG=C sudo xbps-install font-adobe-source-code-pro"
echo
echo "==== Fonts ========="
echo "$ sudo xbps-install noto-fonts-ttf"
eval "LANG=C sudo xbps-install noto-fonts-ttf"
echo
echo "==== Fonts ========="
echo "$ sudo xbps-install noto-fonts-cjk"
eval "LANG=C sudo xbps-install noto-fonts-cjk"
echo
echo "==== Fonts =========="
echo "$ sudo xbps-install xorg"
eval "LANG=C sudo xbps-install xorg"
echo
echo "===================="
echo "$ sudo xbps-install dbus"
eval "LANG=C sudo xbps-install dbus"
echo
echo "==== xfce4 ========="
echo "$ sudo xbps-install xfce4"
eval "LANG=C sudo xbps-install xfce4"
echo
echo "===================="
echo "$ sudo xbps-install xfce4-plugins"
eval "LANG=C sudo xbps-install xfce4-plugins"
echo
echo "==== lightdm ========"
echo "$ sudo xbps-install lightdm"
eval "LANG=C sudo xbps-install lightdm"
echo
echo "==== N/M ==========="
echo "$ sudo xbps-install NetworkManager"
eval "LANG=C sudo xbps-install NetworkManager"
echo
echo "===================="
echo "$ sudo xbps-install network-manager-applet"
eval "LANG=C sudo xbps-install network-manager-applet"
echo
echo "===================="
echo "$ sudo xbps-install pulseaudio pavucontrol"
eval "LANG=C sudo xbps-install pulseaudio pavucontrol"
echo
echo "===================="
echo "$ sudo xbps-install htop git unzip p7zip archiver"
eval "LANG=C sudo xbps-install htop git unzip p7zip archiver"
echo
echo "===================="
echo "$ sudo xbps-install xfce4-screenshooter shotwell"
eval "LANG=C sudo xbps-install xfce4-screenshooter shotwell"
echo
echo "===================="
echo "$ sudo xbps-install psensor"
eval "LANG=C sudo xbps-install psensor"
echo
echo "===================="
echo "$ sudo xbps-install octoxbps"
eval "LANG=C sudo xbps-install octoxbps"
echo
echo "===================="
echo "$ sudo xbps-install gvfs file-roller thunar-archive-plugin"
eval "LANG=C sudo xbps-install gvfs file-roller thunar-archive-plugin"
echo
echo "==== tools ======"
echo "$ sudo xbps-install -S dpkg curl wget"
eval "LANG=C sudo xbps-install -S dpkg curl wget"
echo
echo "==== Firefox ========="
echo "$ sudo xbps-install firefox-esr"
eval "LANG=C sudo xbps-install firefox-esr"
echo
echo "$ sudo ln /usr/share/fontconfig/conf.avail/70-no-bitmaps-except-emoji.conf /etc/fonts/conf.d/"
eval "sudo ln /usr/share/fontconfig/conf.avail/70-no-bitmaps-except-emoji.conf /etc/fonts/conf.d/"
echo
echo "$ sudo xbps-reconfigure -f fontconfig"
eval "sudo xbps-reconfigure -f fontconfig"
echo
echo "==== fcitx5-mozc ========="
echo "$ sudo xbps-install fcitx5 fcitx5-mozc fcitx5-gtk fcitx5-gtk+2 fcitx5-gtk+3 fcitx5-qt fcitx5-configtool"
eval "LANG=C sudo xbps-install fcitx5 fcitx5-mozc fcitx5-gtk fcitx5-gtk+2 fcitx5-gtk+3 fcitx5-qt fcitx5-configtool"
echo
echo "===================="
echo "Installation complete:(インストール完了:)"
echo

→Ctrl+O 後、ファイルを確認して Enter:

→Ctrl+X で終了:

-


2). 「GUI に必要なアプリをインストール」するスクリプトを実行:

確認:

[user@user-pc3 ~]$ cd
[user@user-pc3 ~]$ ls
:
01.gui-install.sh

-

実行:

[user@user-pc3 ~]$ bash 01.gui-install.sh

↓ 表示:

====================
Install the apps required for the GUI:(GUIに必要なアプリをインストール:)
パスワード: 

→パスワード入力:

-

Do you want to continue? [Y/n] 

→パスワードの入力以外は、Enter を入力:

-

====================
Installation complete:(インストール完了:)

-

「Xfce」デスクトップ環境のインストールについての詳細は、

項番 30.」を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ---

6-2. 「ssh 接続」して、「サービス」の開始を行う、「スクリプト」を作成して実行:

-


1). 「サービス」の開始を行う、「スクリプト」を作成:

[user@user-pc3 ~]$ cd
[user@user-pc3 ~]$ nano 02.sv-start.sh

↓ すべて貼付け(すべて選択後、Ctrl+C して マウスの中央ボタンで貼付け):

#!/bin/bash

echo
echo "===================="
echo "Starting the service:(サービスの開始:)"
eval 'sudo echo "Press _Enter except for the _password.(パスワード or Enter)"'
echo
echo "Start:(開始:)"
echo
echo "==== dbus ==========="
echo "$ sudo ln -sf /etc/sv/dbus /var/service/"
eval "sudo ln -sf /etc/sv/dbus /var/service/"
echo
echo "==== elogind =========="
echo "$ sudo ln -sf /etc/sv/elogind /var/service/"
eval "sudo ln -sf /etc/sv/elogind /var/service/"
echo
echo "==== lightdm ========"
echo "$ sudo ln -sf /etc/sv/lightdm /var/service/"
eval "sudo ln -sf /etc/sv/lightdm /var/service/"
echo
echo "==== N/M ==========="
echo "$ sudo ln -sf /etc/sv/NetworkManager /var/service/"
eval "sudo ln -sf /etc/sv/NetworkManager /var/service/"
echo
echo "===================="
echo "Complete:(完了:)"
echo

-


2). サービスの開始を行う、「スクリプト」を実行:

確認:

[user@user-pc3 ~]$ cd
[user@user-pc3 ~]$ ls -1
:
01.gui-install.sh
02.sv-start.sh

-

実行:

$ bash 02.sv-start.sh

↓ 表示:

====================
Starting the service:(サービスの開始:)
パスワード: 
Press _Enter except for the _password.(パスワード or Enter)

Start:(開始:)

====================
$ sudo ln -sf /etc/sv/dbus /var/service/

====================
$ sudo ln -sf /etc/sv/elogind /var/service/

==== lightdm ========
$ sudo ln -sf /etc/sv/lightdm /var/service/

==== N/M ===========
$ sudo ln -sf /etc/sv/NetworkManager /var/service/

====================
Complete:(完了:)

→ステータスを確認するのはスクリプト内だと安定しないので、下記で確認:

-


3). 「サービス」が開始されたか、コマンドで確認:

[user@user-pc3 ~]$ sudo sv status dbus
run: dbus: (pid 1958) 23s; run: log: (pid 1954) 23s

-

[user@user-pc3 ~]$ sudo sv status elogind
run: elogind: (pid 1955) 38s; run: log: (pid 1952) 38s

-

[user@user-pc3 ~]$ sudo sv status lightdm
run: lightdm: (pid 1959) 53s; run: log: (pid 1956) 53s

-

[user@user-pc3 ~]$ sudo sv status NetworkManager
run: NetworkManager: (pid 1957) 68s; run: log: (pid 1953) 68s

→OK

-

「Xfce」デスクトップ環境のインストールに伴う「サービスの開始」については、

項番 30.」を参照:

-

もし、状態を見て良くわからなければ、

$ ls -l /var/service/
:
lrwxrwxrwx 1 root root 22  2月 19 01:54 NetworkManager -> /etc/sv/NetworkManager
lrwxrwxrwx 1 root root 13  2月  2  2025 acpid -> /etc/sv/acpid
lrwxrwxrwx 1 root root 19  2月 19 01:02 agetty-tty1 -> /etc/sv/agetty-tty1
lrwxrwxrwx 1 root root 19  2月 19 01:02 agetty-tty2 -> /etc/sv/agetty-tty2
lrwxrwxrwx 1 root root 19  2月 19 01:02 agetty-tty3 -> /etc/sv/agetty-tty3
lrwxrwxrwx 1 root root 19  2月 19 01:02 agetty-tty4 -> /etc/sv/agetty-tty4
lrwxrwxrwx 1 root root 19  2月 19 01:02 agetty-tty5 -> /etc/sv/agetty-tty5
lrwxrwxrwx 1 root root 19  2月 19 01:02 agetty-tty6 -> /etc/sv/agetty-tty6
lrwxrwxrwx 1 root root 15  2月  2  2025 chronyd -> /etc/sv/chronyd
lrwxrwxrwx 1 root root 12  2月 19 01:54 dbus -> /etc/sv/dbus
lrwxrwxrwx 1 root root 14  2月  2  2025 dhcpcd -> /etc/sv/dhcpcd
lrwxrwxrwx 1 root root 15  2月 19 01:54 elogind -> /etc/sv/elogind
lrwxrwxrwx 1 root root 15  2月 19 01:54 lightdm -> /etc/sv/lightdm
lrwxrwxrwx 1 root root 12  2月  2  2025 sshd -> /etc/sv/sshd
lrwxrwxrwx 1 root root 13  2月 19 01:02 udevd -> /etc/sv/udevd
lrwxrwxrwx 1 root root 22  2月  2  2025 wpa_supplicant -> /etc/sv/wpa_supplicant

→「サービス名」が水色表示されていれば OK

次回の再起動で復活します:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----

6-3. 「ssh 接続」して、よく使う「アプリ」のインストールを行う、「スクリプト」を作成して実行:

-

よく使う「フォント」、「アプリ」、覚えやすくした「XBPS」のエイリアスをインストールします:

「ゲーム」のインストールは、入れたくない人もいるので、次の項番に分けました:
 また、エイリアスが要らないときは、使わなければ良いだけです:

-


1). よく使う「アプリ」のインストールを行う、「スクリプト」を作成:

[user@user-pc3 ~]$ cd
[user@user-pc3 ~]$ nano 03.app-install.sh

↓ すべて貼付け(すべて選択後、Ctrl+C して マウスの中央ボタンで貼付け):

#!/bin/bash

echo
echo "===================="
echo "Installing frequently used apps:(よく使うアプリをインストール:)"
eval 'sudo echo "Press _Enter except for the _password.(パスワード or Enter)"'
echo
echo "Start the installation:(インストール開始:)"
echo
echo "==== MigMix fonts ======"
echo "$ curl http://archive.ubuntu.com/ubuntu/pool/universe/f/fonts-migmix/fonts-migmix_20200307-1_all.deb --output /tmp/fonts-migmix_20200307-1_all.deb"
eval "curl http://archive.ubuntu.com/ubuntu/pool/universe/f/fonts-migmix/fonts-migmix_20200307-1_all.deb --output /tmp/fonts-migmix_20200307-1_all.deb"
echo
echo "$ sudo dpkg -i /tmp/fonts-migmix_20200307-1_all.deb"
eval "LANG=C sudo dpkg -i /tmp/fonts-migmix_20200307-1_all.deb"
echo
echo "==== FeatherPad ======="
echo "$ sudo xbps-install -S FeatherPad"
eval "LANG=C sudo xbps-install -S FeatherPad"
echo
echo "==== gufw =========="
echo "$ sudo xbps-install -S gufw"
eval "LANG=C sudo xbps-install -S gufw"
echo
echo "==== disk =========="
echo "$ sudo xbps-install -S gnome-disk-utility"
eval "LANG=C sudo xbps-install -S gnome-disk-utility"
echo
echo "==== gparted =========="
echo "$ sudo xbps-install -S gparted"
eval "sudo xbps-install -S gparted"
echo
echo "==== audacious ==========="
echo "$ sudo xbps-install -S audacious"
eval "LANG=C sudo xbps-install -S audacious"
echo
echo "==== kolourpaint ========="
echo "$ sudo xbps-install -S libpoppler volume_key"
eval "LANG=C sudo xbps-install -S libpoppler volume_key"
echo
echo "$ sudo xbps-install -S kolourpaint"
eval "LANG=C sudo xbps-install -S kolourpaint"
echo
echo "==== qpdfview ==========="
echo "$ sudo xbps-install -S qpdfview"
eval "LANG=C sudo xbps-install -S qpdfview"
echo
echo "==== make xbps alias ====="
echo "alias x-update='sudo xbps-install -S'" >> ~/.bash_aliases
echo "alias x-upgrade='sudo xbps-install -u'" >> ~/.bash_aliases
echo "alias x-install='sudo xbps-install -S'" >> ~/.bash_aliases
echo "alias x-remove='sudo xbps-remove'" >> ~/.bash_aliases
echo "alias x-autoremove='sudo xbps-remove -o'" >> ~/.bash_aliases
echo "alias x-search='xbps-query -Rs'" >> ~/.bash_aliases
echo "alias x-list='xbps-query -l | grep'" >> ~/.bash_aliases
echo "alias x-info='xbps-query -S'" >> ~/.bash_aliases
echo "alias x-file='xbps-query -f'" >> ~/.bash_aliases
echo "alias x-repo='xbps-query -L'" >> ~/.bash_aliases
echo
echo >> ~/.bashrc
echo "if [ -f ~/.bash_aliases ]; then" >> ~/.bashrc
echo "    . ~/.bash_aliases" >> ~/.bashrc
echo "fi" >> ~/.bashrc
echo
echo "==== my-bookmark ======="
echo "https://furuya7.hatenablog.com/entry/2026/03/01/192841 H175-11" >> ~/my-bookmark.txt
echo "https://furuya7.hatenablog.com/entry/2025/12/24/101109 xbps-src" >> ~/my-bookmark.txt
echo "https://furuya7.hatenablog.com/entry/2026/03/14/001840 README.md" >> ~/my-bookmark.txt
echo "https://furuya7.hatenablog.com/entry/2026/03/03/231200 Manual.md" >> ~/my-bookmark.txt
echo "https://furuya7.hatenablog.com/archive/2025 昨年" >> ~/my-bookmark.txt
echo "https://furuya7.hatenablog.com/archive/2026 今年" >> ~/my-bookmark.txt
echo
echo "===================="
echo "Installation complete:(インストール完了:)"
echo

→Ctrl+O 後、ファイルを確認して Enter:

→Ctrl+X で終了:

-

「Void Linux」のブラウザに登録したい「ブックマーク」があれば、末尾の「~/my-bookmark.txt」に url を追記すれば送れます:

-


2). よく使う「アプリ」のインストールを行う、「スクリプト」を実行:

確認:

[user@user-pc3 ~]$ cd
[user@user-pc3 ~]$ ls -1
:
01.gui-install.sh
02.sv-start.sh
03.app-install.sh

-

実行:

$ bash 03.app-install.sh

↓ 表示:

====================
Installing frequently used apps:(よく使うアプリをインストール:)
パスワード: 

→パスワード入力:

-

Do you want to continue? [Y/n] 

→パスワードの入力以外は、Enter を入力:

-

====================
Installation complete:(インストール完了:)

-

-

確認:

[user@user-pc3 ~]$ ls -1
:
01.gui-install.sh
02.sv-start.sh
03.app-install.sh
my-bookmark.txt

-

取りあえず使えるブックマーク:

[user@user-pc ~]$ cat my-bookmark.txt
:
https://furuya7.hatenablog.com/entry/2026/03/01/192841 H175-11 ←(本投稿)
https://furuya7.hatenablog.com/entry/2025/12/24/101109 xbps-src
https://furuya7.hatenablog.com/entry/2026/03/14/001840 README.md
https://furuya7.hatenablog.com/entry/2026/03/03/231200 Manual.md
https://furuya7.hatenablog.com/archive/2025 昨年
https://furuya7.hatenablog.com/archive/2026 今年

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

インストールの詳細については下記を参照:

「フォント」のインストールは「項番 13.
「アプリ」のインストールは「項番 14.
 覚えやすくした「XBPS」のエイリアスのインストールは「こちら

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- -----

6-4. 「ssh 接続」して、よく使う「ゲーム」のインストールを行う、「スクリプト」を作成して実行:

-

よく使う「ゲーム」をインストールします:

任意」なので、インストールしなくても OK です。

-

「ゲーム」を起動するメニューの「日本語化」も行います:

-


1). よく使う「ゲーム」のインストールを行う、「スクリプト」を作成:

[user@user-pc3 ~]$ cd
[user@user-pc3 ~]$ nano 04.game-install.sh

↓ すべて貼付け(すべて選択後、Ctrl+C して マウスの中央ボタンで貼付け):

#!/bin/bash

echo
echo "===================="
echo "Install the game:(ゲームをインストール:)"
eval 'sudo echo "Press _Enter except for the _password.(パスワード or Enter)"'
echo
echo "Start the installation:(インストール開始:)"
echo
echo "==== game =========="
echo "$ sudo xbps-install -S swell-foop"
eval "LANG=C sudo xbps-install -S swell-foop"
echo
echo "==== game =========="
echo "$ sudo xbps-install -S kmines"
eval "LANG=C sudo xbps-install -S kmines"
echo
echo "==== game =========="
echo "$ sudo xbps-install -S aisleriot"
eval "LANG=C sudo xbps-install -S aisleriot"
echo
echo "==== game =========="
echo "$ sudo xbps-install -S kmahjongg"
eval "LANG=C sudo xbps-install -S kmahjongg"
echo
echo "==== game =========="
echo "$ sudo xbps-install -S kobodeluxe"
eval "LANG=C sudo xbps-install -S kobodeluxe"
echo
echo "==== game =========="
echo "$ sudo xbps-install -S lbreakouthd"
eval "LANG=C sudo xbps-install -S lbreakouthd"
echo
echo "==== game =========="
echo "$ sudo xbps-install -S ltris"
eval "LANG=C sudo xbps-install -S ltris"
echo
echo "==== Make ~/game-ja.patch ====="
echo "--- a/usr/share/applications/kobodl.desktop 2026-01-26 14:48:59.438557893 +0900" >> ~/game-ja.patch
echo "+++ b/usr/share/applications/kobodl.desktop 2026-01-26 14:56:47.134380324 +0900" >> ~/game-ja.patch
echo "@@ -1,6 +1,7 @@" >> ~/game-ja.patch
echo " [Desktop Entry]" >> ~/game-ja.patch
echo " Encoding=UTF-8" >> ~/game-ja.patch
echo " Name=KoboDeluxe" >> ~/game-ja.patch
echo "+Name[ja]=kobodeluxe 宇宙船スクロールシューティング" >> ~/game-ja.patch
echo " GenericName=Arcade Game" >> ~/game-ja.patch
echo " Comment=An excellent 2D Shootem-up game." >> ~/game-ja.patch
echo " Exec=kobodl" >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo "--- a/usr/share/applications/lbreakouthd.desktop 2026-01-26 14:48:59.447558673 +0900" >> ~/game-ja.patch
echo "+++ b/usr/share/applications/lbreakouthd.desktop 2026-01-26 14:58:02.835831928 +0900" >> ~/game-ja.patch
echo "@@ -1,5 +1,6 @@" >> ~/game-ja.patch
echo " [Desktop Entry]" >> ~/game-ja.patch
echo " Name=LBreakoutHD" >> ~/game-ja.patch
echo "+Name[ja]=LbreakoutHD ブロックくずし" >> ~/game-ja.patch
echo " Comment=A ball-and-paddle game with nice graphics." >> ~/game-ja.patch
echo " Exec=lbreakouthd" >> ~/game-ja.patch
echo " Icon=lbreakouthd" >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo "--- a/usr/share/applications/ltris.desktop 2026-01-26 14:48:59.451559019 +0900" >> ~/game-ja.patch
echo "+++ b/usr/share/applications/ltris.desktop 2026-01-26 14:59:06.621425414 +0900" >> ~/game-ja.patch
echo "@@ -1,5 +1,6 @@" >> ~/game-ja.patch
echo " [Desktop Entry]" >> ~/game-ja.patch
echo " Name=LTris" >> ~/game-ja.patch
echo "+Name[ja]= LTris テトリス" >> ~/game-ja.patch
echo " Comment=A tetris clone with nice graphics." >> ~/game-ja.patch
echo " Exec=ltris" >> ~/game-ja.patch
echo " Icon=/usr/share/icons/ltris128.png" >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo "--- a/usr/share/applications/org.gnome.SwellFoop.desktop 2026-01-26 14:48:59.415555900 +0900" >> ~/game-ja.patch
echo "+++ b/usr/share/applications/org.gnome.SwellFoop.desktop 2026-01-26 14:53:26.582616596 +0900" >> ~/game-ja.patch
echo "@@ -30,7 +30,7 @@" >> ~/game-ja.patch
echo " Name[hu]=Swell Foop" >> ~/game-ja.patch
echo " Name[id]=Swell Foop" >> ~/game-ja.patch
echo " Name[it]=Swell Foop" >> ~/game-ja.patch
echo "-Name[ja]=Swell Foop" >> ~/game-ja.patch
echo "+Name[ja]=Swell Foop さめざめもどき" >> ~/game-ja.patch
echo " Name[ka]=Swell Foop" >> ~/game-ja.patch
echo " Name[kk]=Swell Foop" >> ~/game-ja.patch
echo " Name[km]=Swell Foop" >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo "--- a/usr/share/applications/org.kde.kmahjongg.desktop 2026-01-26 14:48:59.430557200 +0900" >> ~/game-ja.patch
echo "+++ b/usr/share/applications/org.kde.kmahjongg.desktop 2026-01-26 14:55:42.322699336 +0900" >> ~/game-ja.patch
echo "@@ -30,7 +30,7 @@" >> ~/game-ja.patch
echo " Name[id]=KMahjong" >> ~/game-ja.patch
echo " Name[is]=KMahjongg" >> ~/game-ja.patch
echo " Name[it]=KMahjongg" >> ~/game-ja.patch
echo "-Name[ja]=KMahjongg" >> ~/game-ja.patch
echo "+Name[ja]=KMahjongg 上海" >> ~/game-ja.patch
echo " Name[ka]=KMahjongg" >> ~/game-ja.patch
echo " Name[kk]=KMahjongg" >> ~/game-ja.patch
echo " Name[km]=KMahjongg" >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo "--- a/usr/share/applications/org.kde.kmines.desktop 2026-01-26 14:48:59.422556507 +0900" >> ~/game-ja.patch
echo "+++ b/usr/share/applications/org.kde.kmines.desktop 2026-01-26 14:54:40.071085587 +0900" >> ~/game-ja.patch
echo "@@ -32,7 +32,7 @@" >> ~/game-ja.patch
echo " Name[id]=KMines" >> ~/game-ja.patch
echo " Name[is]=KMines" >> ~/game-ja.patch
echo " Name[it]=KMines" >> ~/game-ja.patch
echo "-Name[ja]=KMines" >> ~/game-ja.patch
echo "+Name[ja]=KMines マインスイーパ" >> ~/game-ja.patch
echo " Name[ka]=KMines" >> ~/game-ja.patch
echo " Name[kk]=KMines" >> ~/game-ja.patch
echo " Name[km]=KMines" >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo >> ~/game-ja.patch
echo
echo "==== install patch =========="
echo "$ sudo xbps-install -S patch"
eval "LANG=C sudo xbps-install -S patch"
echo
echo "==== make /game-ja.patch =========="
echo "$ sudo cp ~/game-ja.patch /"
eval "sudo cp ~/game-ja.patch /"
echo
echo "==== patch /game-ja.patch =========="
echo "$ cd /"
eval "cd /"
echo "$ sudo patch -p1 < game-ja.patch"
eval "sudo patch -p1 < game-ja.patch"
echo
echo "$ rm ~/game-ja.patch"
eval "rm ~/game-ja.patch"
echo "$ sudo rm /game-ja.patch"
eval "sudo rm /game-ja.patch"
echo
echo "===================="
echo "Installation complete:(インストール完了:)"
echo

→Ctrl+O 後、ファイルを確認して Enter:

→Ctrl+X で終了:

-


2). よく使う「ゲーム」のインストールを行う、「スクリプト」を実行:

確認:

[user@user-pc3 ~]$ cd
[user@user-pc3 ~]$ ls -1
:
01.gui-install.sh
02.sv-start.sh
03.app-install.sh
04.game-install.sh
my-bookmark.txt

-

実行:

$ bash 04.game-install.sh

↓ 表示:

====================
Install the game:(ゲームをインストール:)
パスワード: 

→パスワード入力:

-

Do you want to continue? [Y/n] 

→パスワードの入力以外は、Enter を入力:

-

==== make /game-ja.patch ==========
$ sudo cp ~/game-ja.patch /

==== patch /game-ja.patch ==========
$ cd /
$ sudo patch -p1 < game-ja.patch
patching file usr/share/applications/kobodl.desktop
patching file usr/share/applications/lbreakouthd.desktop
patching file usr/share/applications/ltris.desktop
patching file usr/share/applications/org.gnome.SwellFoop.desktop
patching file usr/share/applications/org.kde.kmahjongg.desktop
patching file usr/share/applications/org.kde.kmines.desktop

$ rm ~/game-ja.patch
$ sudo rm /game-ja.patch

====================
Installation complete:(インストール完了:)

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

インストールの詳細は下記を参照:

「ゲーム」のインストールは「項番 15.

「ゲーム」を起動するメニューの「日本語化」は「項番 15-2.

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- -

7. 「ssh 接続」の後始末:

-


1). 不要になったスクリプトの削除:

確認:

[user@user-pc3 ~]$ cd
[user@user-pc3 ~]$ ls -1
:
01.gui-install.sh
02.sv-start.sh
03.app-install.sh
04.game-install.sh
my-bookmark.txt

-

削除:

[user@user-pc3 ~]$ rm *-*.sh

-

確認:

[user@user-pc3 ~]$ ls -1
:
my-bookmark.txt

-


2). 電源オフ:

$ sudo shutdown -h now

-


3). 外部の「PC3」の場合は、

外部から侵入されやすいので、「sshd」サービスを停止する( sudo sv down sshd )か、「ファイアウォール」を有効にします:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- --

8. 「Xfce」デスクトップ環境の立ち上げ:

-


1). 電源オン:

-


2). GUI の「ログイン」画面が表示:

→パスワード入力

-


3). デスクトップ画面が表示:

Xfce デスクトップ画面です:

→日本語化されています:

-

「ノート PC」の画面が狭いので、確認:

-

「アプリケーション」→「設定」→「ディスプレイ」

→解像度: 1366x768

-

安かったマシンなので、フルHD の解像度ではありませんでした:

-


4). Ctrl+Alt+T で「端末」を起動:

$ @@ 

$ [[

→「日本語キーボード」ですが、英語の配列です:

-


5). 「端末」で使うフォントを設定:

編集→設定→「外観」タブ

DejaVu Sans Mono Book  10

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ---

8-1. キーボードレイアウトを「日本語キーボード」に修正:

-

問題:「日本語キーボード」で、「@@」で「[[」が入力されます:

「Void Linux」のインストールの中で、「日本語キーボード」を指定しました:

→「コンソール」画面では、「日本語キーボード」の配列です。

 ですが、GUI 画面には反映されていません:

-


1). 設定の確認:

「アプリケーション」→「設定」→「キーボード」→「レイアウト」タブ:

-

-

一番下の「キーボードレイアウト」

英語 (US)

→「日本語キーボード」のレイアウトではありません:

-

一番上の「システムのデフォルトを使用する」のボタンを左(オフ)にします:

「英語 (US)」を選んで、「編集」ボタンをクリック

→「日本語」を選んで、「OK」

-

-

「キーボードレイアウト」

日本語

-

→「閉じる」

-


2). 「端末」にてキー入力を確認:

「@@」と入力:

@@

→OK

-


3). 「date」で「日時」を確認:

$ date
:
2026年  2月 19日 木曜日 11:42:12 JST

→「日時」が日本語で表示され、タイムゾーンも「JST」です:

こちらの設定は反映されています:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----

8-2. 「firefox-esr」ブラウザの確認:

-

「[項番 6-1.](

)」のスクリプトにて、「firefox-esr」ブラウザはインストール済みです:

-


1). 動作確認:

「アプリケーション」→「インターネット」→「Firefox ウェブ・ブラウザ 」

英語の「We love keeping you safe」画面が表示されました:

→英語なのは、最初のページのみで、「新しいタブ」は日本語表示です:

左上の「+」タブをクリックして「新しいタブ」を開いてから、左隣りの「Welcom to Firefox」の「x」をクリックして、閉じます。

-


2). Firefox ブラウザで、日本語以外の「英数字」のフォントがギザギザで薄く表示される件が、解消されているか、確認:

→「項番 6-1.」のスクリプトにて、 解消しました:

-

詳細は、「こちら」を参照:

-

(1). 対策の「ビットマップ フォント」の使用を無効にする前:

→「赤字の数字」がギザギザです:

-

(2). 対策として、「ビットマップ フォント」の使用を無効にした後:

→使われている「赤字の数字」のフォントがなめらかになりました:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- -----

8-3. 内蔵の「無線LAN」(Wi-Fi)を使う場合:

-

「[項番 50-2.](

)」にて使われているチップを確認:

→「Wireless 8265 / 8275」

-

「Intel Dual Band Wireless-AC 8265」と判明:

ノートパソコンや産業用 PC の「Wi-Fi」 / Bluetooth の接続用です:

速度: 2x2 802.11ac(2.4GHz / 5GHz)

-

Void Linuxで無線LAN(Wi-Fi)が機能しない場合、主に ファームウェア(ドライバー)と接続管理ツールの不足が原因です:

-


1). 無線LANチップに対応した「ファームウェア」(ドライバー)をインストール:

-

(1). 「nonfree」リポジトリを有効化
$ sudo xbps-install -S void-repo-nonfree

→多くの無線LANチップ(Intel, Realtek, Broadcomなど)は、オープンソースではないファームウェアを必要とするため、多くの無線 LAN ドライバーは「nonfree」リポジトリにあります

-

(2). チップに合わせたパッケージをインストール:
$ sudo xbps-install -S linux-firmware-intel
:
ERROR: Package `linux-firmware-intel' already installed.

→すでにインストール済:

-

チップに合わせたパッケージ:

  • Intel製: linux-firmware-intel または intel-ucode
  • Broadcom製: b43-firmware
  • Realtek製: linux-firmware-network
  • 汎用: linux-firmware (これ一つで多くのチップに対応します)

-


2). 無線LAN の「接続管理ツール」をインストール:

最も安定した、標準的な WPA/WPA2/WPA3 認証ツールです:(必須)

$ sudo xbps-install -S wpa_supplicant
:
ERROR: Package `linux-firmware-intel' already installed.

→すでにインストール済:

-


3). 無線 LAN デバイスの状態を確認するツールをインストール:

$ sudo xbps-install -S wireless_tools

-


4). インストール後の設定:

NetworkManagerを使う場合 (おすすめ)

$ sudo xbps-install -S NetworkManager
$ sudo ln -s /etc/sv/NetworkManager /var/service/

→すでに有効化済みです:

-

ちなみに、「wpa_supplicant」がインストール(が必要なので)されていますが、有効化は手動で行わず、

「NetworkManager」に任せます:

-


5). インターフェースの確認:

$ ip link

→wlp... などの名前があるか確認

「wlp4s0」を確認:

-


6). ソフトでブロックされていないか確認:

$ rfkill list
:
0: tpacpi_bluetooth_sw: Bluetooth
    Soft blocked: no
    Hard blocked: no
1: hci0: Bluetooth
    Soft blocked: no
    Hard blocked: no
2: phy0: Wireless LAN
    Soft blocked: no
    Hard blocked: no

もしくは、

識別子を指定できます:

$ rfkill list wifi
:
2: phy0: Wireless LAN
    Soft blocked: no
    Hard blocked: no

→Soft blocked: yes になっている場合は、下記で解除:

$ rfkill unblock wifi

-

色々試して、無線のアクセスポイントが表示されなかったのですが、


7). 「Fn + F2」で「無縁LAN」をオンしたら、無線のアクセスポイントが表示:

パネルの(ステータストレイプラグインに含まれる)
「ネットワーク」(画面 2つのアイコン)ボタンをクリック:

現在は「有線LAN」で接続中です:

→無線のアクセスポイントが表示(下側に赤いマークがあるのは、アクセスポイント側が未設定だから)

-

ノートPC によっては「無縁 LAN / Blutooth」の物理スイッチがあるらしいのですが、
こちらの PC は、その代わりに「Fn + F2」でオン・オフできます:
(キーボードのキーに 青色の三叉のアイコンが刻印)

-

-

ちなみに、今回はパネルのアイコンで制御しましたが、


8). 参考: 「NetworkManager」を使っている場合は、下記の操作で Wi-Fi のオン/オフができます:

-

$ nmtui 

「端末」画面に、「NetworkManager TUI」画面が表示:

-

下記で「Radio」を選ぶと、

有線LAN と 無線LAN の有効化の選択ができます:

-

アクセスポイントを選択する場合は:

「接続をアクティベートする」を選びます:

アクセスポイントを選択すると、パスワード入力画面になります:

-


9). 無線LAN を有効にしたら、システムの立ち上げのたびに「無線LAN」のアクセスポイントのパスワードを聞いてきます:

有線LAN を使っているので、再び、

-

パネルの「ネットワーク」(画面 2つのアイコン)ボタンをクリック:

→「切断する」で「無縁LAN」をオフ にしました:

パネルの表示は、以前の状態に戻りました:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- -

8-4. 内蔵の「Bluetooth」を使う場合:

-

項番 50-2.」にて使われているチップを確認:

→「Wireless 8265 / 8275」

-

「Intel Dual Band Wireless-AC 8265」と判明:

ノートパソコンや産業用 PC の Wi-Fi / 「Bluetooth」の接続用です:

-


1). Bluetooth に必要なパッケージをインストール:

-

(1). 基本パッケージ:
$ sudo xbps-install -S bluez

-

(2). GUI管理ツール (推奨):
$ sudo xbps-install -S blueman
:
Name         Action    Version           New version            Download size
libbluetooth install   -                 5.78_1                 79KB 
blueman      install   -                 2.4.6_2                1197KB 

→グラフィカルな操作画面が使えます

-


2). 使用する「オーディオ」サーバーごとのパッケージをインストール:

-

(1). PulseAudio 利用時:  ←(今回)

→追加パッケージは不要です

-

(2). PipeWire 利用時:
$ sudo xbps-install -S libspa-bluetooth

-

(3). ALSA のみ利用時:
$ sudo xbps-install -S bluez-alsa

-


3). サービスの有効化:

Void Linuxではインストールしただけでは動作しないので、サービスを有効化します:

既に dbus が有効化されているのが前提です:

$ sudo ln -s /etc/sv/bluetoothd /var/service/

-


4). 再起動:

$ sudo reboot

-


5). サービスの起動を確認:

$ sudo sv status bluetoothd

→run: bluetoothd と表示されているか確認

-


6). もし上記設定後も使えない場合は、「rfkill」を確認:

$ rfkill list

→Soft blocked: yes になっている場合は、下記で解除:

$ sudo rfkill unblock bluetooth

-


7). 今回は、すんなりと、有効化されました:

-

パネルに「Bluetooth」ボタンが表示:

クリックすると、

「Bluetooth」デバイスの登録画面が表示:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- --

9. 日本語入力「fcitx5-mozc」の確認:

-

項番 6-1.」のスクリプトにて、 「fcitx5-mozc」はインストール済みです:

-


1).インストールされているか確認:

$ xbps-query -l | grep fcitx
:
ii fcitx5-5.1.14_1                Flexible Context-aware Input Tool with eXtension - v5
ii fcitx5-configtool-5.1.10_1     Fcitx v5 - config tool
ii fcitx5-gtk-5.1.4_1             Fcitx v5 - GTK common
ii fcitx5-gtk+2-5.1.4_1           Fcitx v5 - GTK+2 IM Modules
ii fcitx5-gtk+3-5.1.4_1           Fcitx v5 - GTK+3 IM Modules
ii fcitx5-mozc-2.31.5851.102_2    Mozc engine for fcitx v5
ii fcitx5-qt-5.1.10_1             Flexible Context-aware Input Tool with eXtension v5 - Qt
ii fcitx5-qt6-5.1.10_1            Flexible Context-aware Input Tool with eXtension v5 - Qt6
ii libfcitx5-5.1.14_1             Flexible Context-aware Input Tool with eXtension - v5 - libraries

-


2). 「Fcitx5 設定」

「メニュー」→「設定」→「Fcitx5 設定」

または、

$ fcitx5-configtool

-

初回は、「Fcitx5を実行する」ボタンが表示されるので、ボタンを押して、起動します:

-


3). 「Fcitx の設定」画面:

左の「現在の入力メソッド」が、下記であることを確認:

キーボード - 日本語
Mozc

-


4). 設定ファイルの修正:

$ sudo mousepad /etc/environment

↓ ファイルの最後に追記:

export LANG="ja_JP.UTF-8"
export XMODIFIERS="@im=fcitx"
export XMODIFIER="@im=fcitx"
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export DefaultIMModule=fcitx

→Ctrl+S で保存:

-

確認:

$ cat /etc/environment
#
# This file is parsed by pam_env module
#
# Syntax: simple "KEY=VAL" pairs on separate lines
#
export LANG="ja_JP.UTF-8"
export XMODIFIERS="@im=fcitx"
export XMODIFIER="@im=fcitx"
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export DefaultIMModule=fcitx

-


5). ログアウト→ログイン:

-


6). デスクトップ画面:

→デスクトップのパネルに「キーボード」アイコンが表示:

-


7). 日本語入力の確認:

テキストエディタ (mousepad) を起動:

-

「半角/全角」キー、もしくは、「Ctrl+スペース」にて、入力切り替え:

デスクトップのパネルの「キーボード」アイコンが日本語のときに消えます(アイコンが表示されないだけみたい)

-

→日本語入力できました:

-


任意: 別々のキーに、日本語オン・オフを割り当て:

「メニュー」→「設定」→「Fcitx5 設定」

→「グローバルオプション」タブ

入力メソッドを有効にする: 右の空き(もしくは、ハングル Hanja)をクリック→「…」→「ひらがな」キーを押します→「ひらがな カタカナ」
入力メソッドをオフにする: 右の空き(もしくは、ハングル Romaja)をクリック→「…」→「無変換」キーを押します→「無変換」

-

→「適用」→「閉じる」

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ---

10. パネルの設定:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----

10-1a. パネルの「アプリケーション」メニューをそのまま使う場合:

-


1). パネルの「アプリケーション」メニューの「アプリケーション」文字を変更:

パネルの「アプリケーション」メニューを右クリック→「プロパティ」

-

ボタンタイトル:
「アプリケーション」の文字を →「メニュー」、もしくは「Menu」に変更:

-

-

もしくは、

「アプリケーション」の文字を →「半角スペース」で、クリックできる横幅を調整:

-

→「閉じる」

-

例:「Menu」に設定した場合:

↓ 拡大:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- -----

10-1b. パネルの「メニュー」を「Whisker Menu」に変更する場合:

-

アプリケーションメニューに「Whisker Menu」アイテムを使うと、「お気に入り」カテゴリにアプリを登録できます:

-


1). 画面の上、または下のパネルバーの空きで右クリック →パネル →パネルの設定

-

「パネル 1」を選んでおきます:

-

「アイテム」タブ

-


2). アイテムの「Wisker Menu」を 追加:

-


3). アイテムの追加後に、アイテムを左端に移動:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- -

10-2. パネルの「メニュー」 (Whisker Menu) の設定を変更:

-

パネル左の「メニュー」(ねずみ)ボタンを右クリック→「プロパティ」

-


1). 「全般」(General)タブ

  • 上段の 3つのボタンにて、「Show as list」をチェック
  • 「カテゴリ名を表示する」にチェック
  • 「アプリケーションにツールチップを表示する」のチェックをなしに変更

-


2). 「外観」タブ

-

(1). メニュー:
  • 「カテゴリを左に表示する」(Position categories on left) にチェック

-

(2). パネルボタン(Panel Button):
  • 表示: 「アイコン」になっているか確認:

  • アイコン:「画像」をクリック  →アイコンの検索「xfce4_xicon3」→表示された「xfce4_xicon3」を選択

-

→OK

-

→「閉じる」

-


3). 「お気に入り」カテゴリにアプリを登録

-

(1). よく使うアプリを一度実行します。

-

(2). メニューの「最近使ったもの」カテゴリにアプリが登録されます。

-

(3). そのアプリ名を右クリック →「お気に入りに追加」

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- --

10-3. パネルの「時計」の設定:

-


1). パネルの「時計」の表示を変更:

パネルの右にある「時計」を右クリック→「プロパティ」

-

時計のオプション:

レイアウト:「日付のみ」に変更:

日付

フォント: 「Sans Bold 11」に変更

フォーマット:「カスタム」に変更

その下の入力欄:「 %H:%M」に変更

→「閉じる」

-

表示を確認:

18:08

-


2). パネルの「時計」にマウスを置いたときの、Tips の表示を変更:

パネルの右にある「時計」を右クリック→「プロパティ」

-

外観

ツールチップの形式:

「カスタム」→「%Y年%B%d日 (%a)」に変更:

-

表示を確認:

「時計」にマウスを置くと、年月日曜日を確認できます:

2026年2月19日 (木)

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ---

10-4. パネルに、「ランチャー」を追加:

-

よく使う「アプリ」をインストールしておいてから、「ランチャー」を登録すると、設定の手間を減らせます:

-


1). 画面の上、または下のパネルバーの空きで右クリック →パネル →パネルの設定

-

「パネル 1」を選んでおきます:

-

「アイテム」タブ

-


2). アイテムの「ランチャー」を 複数追加:

  • 複数の「アイテム」を追加して、並び順を変更しやすくしました

  • 複数インストールした「テキストエディタ」アプリをひとつの「ランチャー」にまとめました:

-


3). アイテムの追加後に、アイテムを任意の位置に移動:

→「ウィンドウボタン」の上の 5つが「ランチャー」アイテムで、表示されているアプリが登録されています:

-


4). 「スパナ」アイコン →「+」でアプリを選んで「+追加」、 「ランチャー」にアプリを登録できます:

-

  • Wisker Menu
  • セパレーター(透明)
  • ランチャー(Thuynar ファイルマネージャ)
  • ランチャー(Firefox Web Browser)
  • ランチャー(Xfce 端末)
  • ランチャー(Featherpad、Mousepad、gedit) ★複数を登録
  • ランチャー(スクリーンショット)
  • ウィンドウボタン
  • セパレーター(透明)

★ひとつの「ランチャー」に複数のアプリを登録すると、1番上がデフォルト(例えば「Featherpad」)で、 残りのエディタは、メニューから選択することになります。

→設定時の並びを変えるだけで、デフォルトのアプリを変更できて便利です。

-


5). 「セパレーター」アイテムを置く位置で、微妙に見やすさが変わります:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----

10-5. パネルに、便利なアイテムを追加:

-

使い勝手を良くするアイテムを追加しました:

-


1). 画面の上のパネルバーの空きで右クリック →パネル →パネルの設定

-

「パネル 1」を選んでおきます:

-

「アイテム」タブ

-


2). アイテムの「ワークスペーススイッチャー」を追加:

-

(1). アイテムの追加後に、アイテムを任意の位置に移動:

-

(2). 「仮想デスクトップ」のデフォルトは 4つですが、2つに減らしました:

パネルの「仮想デスクトップ」を右クリック→「ワークスペースの設定」→「全般」タブ:

レイアウト

ワークスペースの数: 「4」→「2」に変更:

→「閉じる」

-

(3). パネルの「仮想デスクトップ」を右クリック→「プロパティ」

「外観」タブ:

「マウスホイールを使ってワークスペースを切り替える」をオフ(青色を消します)

→「閉じる」

-


3). アイテムの「CPU グラフ」を追加して、CPU 負荷を表示:

CPU 負荷に応じて、縦棒が振れます:

縦棒をクリックすると「タスクマネージャ」が表示されます:

-

(1). 「アイテム」タブにて、

「CPU グラフ」を選んで、「+追加」

→「閉じる」

-

(2). パネル右端の「CPU グラフ」を右クリック→「移動」

「時計」の右に移動

-

(3). パネル右端の「CPU グラフ」を右クリック→「プロパティ」

下記の設定に変更:

-

  • CPU グラフ

左の設定画面が「外観」タブ

右の設定画面が「高度な設定」タブ

-


4). パネルに「スピーカ」アイコン(音量調整)を追加:

パネルの空きで右クリック→「パネル」→「パネルの設定」→「アイテム」タブ:

左下の「+追加」をクリック→「PulseAudio プラグイン」→「+追加」→「閉じる」

-

「PulseAudio プラグイン」を選んで、右の「上矢印」で、時計の上の、セパレーターの上まで移動:

-

-

→「閉じる」

-

「ゲーム」アプリで、音量調整できるか確認:

「アプリケーション」→「ゲーム」→「Kajongg 中国式四人麻雀」を起動:

「Play」で開始

→牌を捨てるときに英語の音声が出るので、音量調整できるか確認:

-


5). アイテムの「アクションボタン」を追加:

電源オフ、再起動、ログアウト、などの操作が楽になります。

パネル右端の「ユーザ名」の部分です:

-

(1). アイテムの追加後に、アイテムを任意の位置に移動:

(右端なので、そのまま)

-

(2). 右クリック →プロパティ:

→「ログアウト…」(…付き)は特別で、メニューからの選択になります。
 操作の手間減らしたいので、今回は使っていません。

-

(3). 動作:

→パネル右端の「ユーザ名」から、「画面のロック、シャットダウン、再起動、ログアウト」が(すぐに)できるようになりました:

-


6). 上にあったパネルを画面下に移動:

-

(1). 上のパネルを移動する前に、下のパネルを削除します:

下のパネルの空きで右クリック→「パネル」→「パネルの設定」→一番上に「パネル2」が表示されていることを確認:

右上の「ー」をクリックして、「パネル2」を削除:

-

もし、「パネル2」(ドック)を残したいのであれば、パネルを右か左に移動:

ロックを解除してから、モードを「垂直」に変更して、移動します:

-

(2). 「パネルの設定」画面の、一番上に「パネル1」が表示:

「パネルをロックする」のチェックを外します:

→パネルが赤枠で囲まれ、行頭と行末に「縦棒」が表示されます:

-

(3). マウスでその「縦棒」をつかむと手のひらになるので、そのまま画面下に移動します:

-

(4). 画面下に移動できたら、先ほどの「パネルの設定」画面にて、

「パネルをロックする」にチェックします:

-

→「閉じる」

-

移動後:

-

(5). 参考: もし、パネルを右か左に移動したい場合は、

ロックを解除してから、モードを「垂直」に変更して、移動します:

-


7). パネルの背景色を変更:

この辺りは、好みです:

-

「アプリケーション」 →「設定」→「パネル」→「外観」タブ

全般

ダークモード   右(オン)

→パネルがダークモードになっているので、以下の設定はいらないかも:

-

背景

スタイル: 「なし(システムスタイルを使用)」(黒色)のままか、

-

もしくは、

スタイル: 「単一色」に変更:

配色: 右端をクリック→一番下の「作成した色」の「右から 2つ目の濃い水色」に変更:

→「選択」

-

→「閉じる」

-

パネルを確認:

→パネルの色は、デスクトップの壁紙と色合いが合うものが良さそう:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- -----

11. デスクトップの設定:

-

この辺りは好みなので、使いたい設定だけ行えば OK:

-


1). ショートカットキー: ウィンドウ画面をタイル表示:

「グローバルアクション」の定義で、「左のWindows」キーは使われているので、
「左のWindows」キーを使った設定をしても無効です。

なので、代わりに「Ctrl+Shift」キーを使ってみました:

-

ショートカットキーを修正:

「メニュー」 →「設定」→「ウィンドウマネージャー」→「キーボード」タブ

-

(1/2 画面で、左に移動)
  • 「ウィンドウを画面左にタイル表示」→「編集」
 「Ctrl+Shift」+ 「←」   表示: Shift + Ctrl + Left

-

(1/2 画面で、右に移動)
  • 「ウィンドウを画面右にタイル表示」→「編集」
 「Ctrl+Shift」+ 「→」   表示: Shift + Ctrl + Right

-

(1/4 画面で、右上に移動)
  • 「ウィンドウを画面右上にタイル表示」→「編集」
 「Ctrl+Shift」+ 「↑」   表示: Shift + Ctrl + Up

-

(1/4 画面で、右下に移動)
  • 「ウィンドウを画面右下にタイル表示」→「編集」
 「Ctrl+Shift」+ 「↓」    表示: Shift + Ctrl + Down

-

→「閉じる」

-

もう一度、同じ組み合わせを押せば、元の位置とサイズに戻ります:

-


2). ショートカットキー: 「Windows + Enter」で、「端末」を起動:

-

ショートカットキーを追加:

「メニュー」→「設定」→「キーボード」→「アプリケーションショートカットキー」タブ:

左下の「+追加」

コマンド: exo-open --launch TerminalEmulator
ショートカット: Super+Return    ←(Windows+Enter)

-

→「閉じる」

-

ちなみに、ウィンドウのタイトルバーをダブルクリックすると、全画面表示:

-

-


3). ショートカットキー: 「Windows + T」で、「テキストエディタ」を起動:

-

ショートカットキーを追加:

「アプリケーション」→「設定」→「キーボード」→「アプリケーションショートカットキー」タブ:

左下の「+追加」

-

「mousepad」を起動したい場合:

コマンド: mousepad

もしくは、

「featherpad」を起動したい場合:

コマンド: featherpad

-

ショートカット: Super+T    ←(Windows+T)

-

→「閉じる」

-


4). ショートカットキー: 「Windows + W」で、「ブラウザ」を起動:

-

ショートカットキーを追加:

「アプリケーション」→「設定」→「キーボード」→「アプリケーションショートカットキー」タブ:

左下の「+追加」

-

既存の「firefox」を起動したい場合:

もしくは、

ダウンロードしてインストールした、最新の「firefox」を起動したい場合:

コマンド: firefox

-

ショートカット: Super+W    ←(Windows+W)

-

→「閉じる」

-


5). ショートカットキー: 「Windows + N」で、「ファイルマネージャ」を起動:

-

ショートカットキーを追加:

「アプリケーション」→「設定」→「キーボード」→「アプリケーションショートカットキー」タブ:

左下の「+追加」

コマンド: thunar
ショートカット: Super+N    ←(Windows+N)

-

→「閉じる」

-


6). ウィンドウのタイトルバーの「巻き上げ」ボタンを移動:

すでに「巻き上げ」ボタンは追加されていますが、ボタンの位置がイマイチなので、左に移動しました:

-

「アプリケーション」→「設定」→「ウィンドウマネージャー」

「スタイル」タブ:

-

ボタンの配置:

右下の「表示する:」にある、「↑」ボタンに注目:

「タイトル」「↑」

↓ マウスでドラッグして、移動:

「↑」「タイトル」

-

→「閉じる」

-


7). デスクトップのアイコンを「ゴミ箱」のみにしました:

デスクトップの空きで右クリック→「デスクトップの設定」→「ファイル/ランチャーアイコン」タブ:

-

デフォルトのアイコン:

「ホーム」と「ファイルシステム」のみ、チェックを外しました:

→「閉じる」

-

「ゴミ箱」のみのデスクトップ:

-


8). ウィンドウのタイトルバーとウィンドウ枠の「テーマ」を変更:

この辺りは、好みです:

-

「アプリケーション」 →「設定」→「ウィンドウマネージャー」→「スタイル」タブ

-

テーマ

たくさんのテーマが登録されているので、お好きなものを、

微妙に違います:

-

「Smoothwall」に変更した場合: ★

-

「Wallis」に変更した場合:

-

「Waza」に変更した場合:

→枠なし:

-

→「閉じる」

-

「端末」画面にて、ウィンドウのタイトルバーを確認:

→選択されているウィンドウがわかりやすいし、タイトルバーが細いです:
 色違いのテーマがあると良いかも:

-


9). デスクトップにて「単一色」の壁紙を準備して、「壁紙」を設定:

設定で、デスクトップは「単一色」にできますが、ログイン画面は以前に「デスクトップ」の壁紙に設定した壁紙のままです:

-

壁紙は「単一色」でなく、お気に入りの画像でも良いですが、縦横比が問題になるかも:

-

(1). 「壁紙」を準備:

「単一色」のデスクトップのスクリーンショットを撮って、それを加工しました:

-

(2). 準備した「壁紙」をシステムにコピー:
$ sudo cp ~/ダウンロード/kabegami/bule-screen.jpg /usr/share/backgrounds/xfce/

→デフォルトの「xfce」フォルダに、壁紙が追加されました:

-

(3). デスクトップの空きで、右クリック→「デスクトップの設定…」→「背景」タブ:

デスクトップの壁紙: 追加した「壁紙」を選択:

-

フォルダ: 「Xfce」

スタイル: 「短辺を画面に合わせる」  ←(ポイント)

-

→「閉じる」

-

デスクトップの壁紙が、「単一色」になったことを確認:

-

(4). ログアウトして、確認:

-

ログイン画面の壁紙が、「単一色」になったことを確認:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- -

12. ファイルマネージャ「thunar」の設定:

-


1). 日付の形式を変更:

-

ファイルマネージャで、「編集」→「設定」

→「ファイルマネージャーの設定」画面

「表示」タブ

-

日付

  • 形式: 「今日」→「2026-02-19 11:38:57」に変更

→「閉じる」

-


2). USB メモリの自動マウント:

-

ファイルマネージャ (thunar) にて、USB メモリを自動マウントするように設定:
  • 一部のthunar 機能は、リムーバブルメディアの管理をする「gvfs」パッケージがインストールされて、有効にされている場合にのみ使えます。

 (ゴミ箱、リムーバブルメディア、リモートファイルシステムのサポートなど)

-

(1). 必要なパッケージがインストールされているか確認:

項番 6-1.」のスクリプトにてインストール済みです:

-

$ xbps-query -Rs gvfs
:
[*] gvfs-1.56.1_2         Userspace virtual filesystem
[-] gvfs-afc-1.56.1_2     Userspace virtual filesystem - Apple mobile device ...
[-] gvfs-afp-1.56.1_2     Userspace virtual filesystem - Apple Filing Protoco...
[-] gvfs-cdda-1.56.1_2    Userspace virtual filesystem - CD-ROM backend
[-] gvfs-devel-1.56.1_2   Userspace virtual filesystem - development files (t...
[-] gvfs-goa-1.56.1_2     Userspace virtual filesystem - Gnome Online Account...
[-] gvfs-gphoto2-1.56.1_2 Userspace virtual filesystem - gphoto2 (PTP camera/...
[-] gvfs-mtp-1.56.1_2     Userspace virtual filesystem - MTP backend
[-] gvfs-smb-1.56.1_2     Userspace virtual filesystem - SMB/CIFS (Windows cl...

→これがないとデスクトップに「ゴミ箱」が表示されません:

-

(2). ファイルマネージャで、「編集」→「設定」

→「ファイルマネージャーの設定」画面

「詳細」タブ

-

「ボリューム管理」

→「ボリューム管理を有効にする」にチェック。

-

(3). 「設定」の文字のリンクをクリック

→「リムーバフルドライブとメディア」画面

「ストレージ」タブ

-

「リムーバフルストレージ」

  • 「リムーバフルドライブがホットプラクされたらマウントする」にチェック
  • 「リムーバフルメディアが挿入されたらマウントする」にチェック
  • 「リムーバフルメディアが挿入されたら参照する」にチェック

→「閉じる」

-


3). 「ここでターミナルを開く」メニューを追加:

既存のメニューで英語の「Open Terminal Here」があるので、日本語の「ここでターミナルを開く」に修正:

-

(1). ファイルマネージャで、「編集」→「カスタムアクションを設定…」

→「カスタムアクション」画面:

-

(2). 英語の「Open Terminal Here」を選んで、

右側の「歯車」ボタン→「アクションの編集」画面:

-

「基本」タブ:

名前: Open Terminal Here
コマンド: exo-open --working-directory %f --launch TerminalEmulator

↓修正:

名前: ここでターミナルを開く
コマンド: exo-open --working-directory %f --launch TerminalEmulator

-

ちなみに、

「表示する条件」タブ:

ファイルのパターン: *
以下を選択した場合に表示する: 「ディレクトリ」にチェック

→「OK」

-


4). 「root で開く」メニューを追加:

-

(1). ファイルマネージャで、「編集」→「カスタムアクションを設定…」

→「カスタムアクション」画面:

-

(2). 右側一番上の「+」ボタン→「アクションの作成」画面:

-

「基本」タブ:

名前: root で開く
コマンド: pkexec thunar %f

「表示する条件」タブ:

ファイルのパターン: *
以下を選択した場合に表示する: 「ディレクトリ」と「テキストファイル」にチェック

→「OK」

-


5). 「ここに展開」、「別の場所に展開…」、「アーカイブを作成…」のメニューを追加:

-

(1). ファイルの解凍ができるように「file-roller」パッケージをインストール:

項番 6-1.」のスクリプトにてインストール済みです:

-

$ sudo xbps-install -S file-roller
:
Name        Action    Version    New version     Download size
libnautilus install   -          48.3_1          14KB 
libxmlb     install   -          0.3.22_2        85KB 
AppStream   install   -          1.0.4_2         895KB 
libadwaita  install   -          1.7.5_1         635KB 
file-roller install   -          44.5_1          855KB 

→コンテキストメニューアイテム(右クリック)を使って「圧縮ファイル」を作成したり解凍できます:

圧縮ファイルを直接作成・解凍するのではなく File Roller (file-roller) など他のプログラムのフロントエンドとして動作します。

-

(2). 「thunar-archive-plugin」プラグインをインストール:

項番 6-1.」のスクリプトにてインストール済みです:

-

$ sudo xbps-install -S thunar-archive-plugin

→プラグインのインストールで、右クリックで「ここに展開」、「別の場所に展開…」、「アーカイブを作成…」のメニューが表示されます:

-

「thunar-archive-plugin」は単体では機能しません。
 実際の圧縮・解凍作業は外部のアーカイブマネージャ(例: file-roller)に依存します。

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- --

13. 内蔵の「DVD-ROM」ドライブを使う場合:

-

「Void Linux」で DVD-ROM ドライブを正常に使用(認識・再生)するために必要なパッケージは、
目的(データの読み込みか、映像の再生か)によって異なります:

-

DVDドライブは通常「udev」機能によってデバイスファイル(/dev/sr0など)が作成されます。

Void Linuxで 「udev」機能を利用するには、「eudev」パッケージをインストールして、サービスを有効化します:

-


1). 「eudev」パッケージ のインストール:

$ sudo xbps-install -S eudev
:
ERROR: Package `eudev' already installed.

→インストール済です;

-


2). サービスの有効化:

確認:

$ sudo sv status udevd
:
run: udevd: (pid 747) 1626s; run: log: (pid 745) 1626s

→すでに有効化されています:

-

もし、有効化されていないときは、

$ sudo ln -s /etc/sv/udevd /var/service/

-


3). デスクトップ環境で DVD を「自動マウント」できるようにします:

$ sudo xbps-install -S udisks2
:
ERROR: Package `udisks2' already installed.

→インストール済です;

-


4). 「Xfce」の「ファイルマネージャ」でドライブを表示・操作できるようにします:

$ sudo xbps-install -S gvfs

→インストール済です:

-


5). ユーザを「cdrom」グループに追加:

ユーザがドライブにアクセスできるようにします:

$ id user
:
uid=1000(user) gid=1000(user) groups=1000(user),4(wheel),
8(floppy),12(audio),13(video),16(cdrom),17(optical),24(kvm),
100(users),101(xbuilder)

「user」はユーザ名で任意です。

→すでに「cdrom」と「optical」グループに追加されています:

-

もし、「user」を「cdrom」グループに追加するときは、

$ sudo usermod -aG cdrom user

行末の「user」はユーザ名で任意です。

→「-aG」の部分は特に慎重に入力して下さい。誤って「-G」とすると(今までの設定が上書きされ、wheel が消えるので)システムの変更ができなくなります:

-


6). 市販の DVD 映像(映画など)を再生したい場合:

DVD 再生には、必要なコーデックを内蔵しているプレイヤーが推奨されます:(今回は「vlc」を使用)

-

$ sudo xbps-install -S libdvdcss libdvdread libdvdnav vlc
:
ERROR: Package `libdvdcss' already installed.
ERROR: Package `libdvdread' already installed.
ERROR: Package `libdvdnav' already installed.
ERROR: Package `vlc' already installed.
  • vlc: 最も一般的なプレイヤーで、多くの形式に対応しています
  • libdvdcss: DVD の暗号化(CSS)を解除するために必須のライブラリです
  • libdvdread: DVD の構造を読み取るためのライブラリです
  • libdvdnav: DVD メニューのナビゲーションを可能にします

→すべて、インストール済です:

-


7). DVD をドライブにセットしてみる:

→自動でマウントされ、ファイルマネージャが開きました:

DVD を挿入時に自動再生させるための「autorun.inf」ファイルがないので、ファイルマネージャが開いたようです。

-

→右上の「x」で閉じました:

-


8). DVD を手動で再生:

デスクトップの「DVD」アイコンを右クリック→「アプリケーション」→「マルチメディア」
→「vlc メディアプレイヤー」

→DVD の「再生」画面が表示:

-

「再生」ボタンをクリック:

「メディアを開く」画面:

「ディスク」タブ

「再生」をクリック:

-

DVD を取り外す場合:

デスクトップの「DVD」アイコンを右クリック→「ボリュームを安全に取り外す」

-


9). 手動でマウントする場合:

-

(1). ドライブのパス(例: /dev/sr0)を確認。
$ lsblk
:
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 238.5G  0 disk 
├─sda1   8:1    0     1G  0 part /boot/efi
└─sda2   8:2    0 237.5G  0 part /
sr0     11:0    1  1024M  0 rom  

-

(2). マウントポイント作成:
$ ls /mnt/
$

-

$ sudo mkdir -p /mnt/dvd

-

(3). マウント:

DVD をセット後、

$ sudo mount -t iso9660 -o ro /dev/sr0 /mnt/dvd

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ---

14. 「スクリーンショット」関連の設定:

-


1). パネルに「スクリーンショット」ボタンを追加:

パネルの空きで右クリック→「パネル」→「パネルの設定」→「アイテム」タブ:

左下の「+追加」をクリック→「スクリーンショット」→「+追加」→「閉じる」

-

「スクリーンショット」を選んで、「Whisker Menu」の下の、セパレーターの下まで移動:

-

→「閉じる」

-


2). 「スクリーンショット」の動作を設定:

パネル左に作成した「スクリーンショット」ボタンをクリック:

「スクリーンショット」画面→「戻る」→

画像全体」にチェック
時間「0」秒
「マウスポインターも撮影する」のチェックを外し
「ウィンドウのボーダーをキャプチャする」にチェック

→「OK」

-

最初の「保存する」画面に戻ります:

→「OK」

→保存する画像ファイル名が表示

→「保存」

-


3). 「画像」ファイルを開くアプリを設定:

ファイルマネージャを開き、「画像」フォルダ→
スクリーンショットの画像ファイル(.png)を右クリック→「アプリで開く」→
「デフォルトのアプリを設定」→「Ristretto 画像ビューアー」→「開く」

-

「Ristretto」アプリで画像が開くので、「Ristretto」アプリで良いか確認:

→閉じました:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----

15. 「タッチパッド」が敏感すぎるので調整:

-

「タッチパッド」が敏感すぎて、余計な動き(予期しないスクロール)をするので調整しました:

-


メニュー→「設定」→「マウスとタッチパッド」

-

「ボタンとフィードバック」タブ

ポインター速度

加速 を少し左に移動 (にぶく)
感度 を少し左に移動 (にぶく)

-

「タッチパッド」タブ

「タイプ中はタッチパッドを無効にする」にチェック:
「タッチパッドをタップでクリック」のチェックを外します:
「水平スクロールを有効にする」にチェック
スクロールモード: 「二本指スクロール」→「エッジスクロール」に変更:

「エッジスクロール」とは、タッチバッドの右端のみ、スクロールの指示に使えるモードです:
なので、余計なスクロールが激減しました:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- -----

16. 「フォント」のインストール:

-

個人的によく使っているフォントで、インストールは任意です。

「MiguMix」フォントのみ、「項番 6-3.」のスクリプトにてインストール済みです:

-

-


1). 参考:「項番 6-1.」のスクリプトでインストールしたフォント:

「xorg」以外は、「Xubuntu 24.04 LTS」にインストールしているフォントを参考にしました:

  • dejavu-fonts-ttf  ←「端末」アプリで使用
  • fonts-roboto-ttf
  • font-adobe-source-code-pro
  • noto-fonts-ttf
  • noto-fonts-cjk  ←システムと「ブラウザ」アプリで使用
  • xorg      ←「Void Linux」の Xfce で必須

-

(1). 参考: 「Void Linux」の公式ドキュメントより:

Fonts

抜粋:

何を選択すればよいかわからない場合は、「dejavu-fonts-ttf」または「xorg-fonts」が良いです:

「noto-fonts-ttf」には、多くの言語とスクリプトのフォントが含まれます。
「noto-fonts-cjk」はこれを中国語、日本語、韓国語のフォントで拡張します。
「noto-fonts-emoji」は絵文字を提供します。
「nerd-fonts」は、カスタム アイコンなどの特殊文字を含むフォントを提供します。

-

(2). XBPS のリポジトリから入手できないフォントは、
 システム全体で使うなら「/usr/share/fonts/」、
 ユーザ指定で使うなら「~/.local/share/fonts/」に手動で配置します:

-

(3). 参考: 本番 PC の「Xubuntu 24.04 LTS」で使っているフォント:

使い慣れたフォントがやはり使いやすいです:

  • 「端末」のフォント: Dejavu Sans Mono Book 10
  • 「firefox」のフォント: Noto Sans CJK JP 16
  • 「featherpad」のフォント: Noto Sans Mono CJK JP 9

-

-


2). 「IPA」フォントのインストール:

システムのサイズを小さくしたいので、「日本語フォント」をひとつに絞りたいときに使えます:

リポジトリから簡単にインストールできるのが利点ですが、日本語の一部が誤表示します。

-

(1). インストールできるか確認:
$ xbps-query -Rs font | grep ipa
:
[-] ipafont-fonts-otf-003.03_4    Japanese OpenType font set

-

(2). インストール:
$ xbps-install -S ipafont-fonts-otf

-

もし、ダウンロードしてインストールする場合:

IPA Font Ver.003.003

→4つの書体からダウンロードするフォントを選択:

  • IPA明朝(Ver.003.03)
  • IPA P明朝(Ver.003.03)
  • IPAゴシック(Ver.003.03)
  • IPA Pゴシック(Ver.003.03)

-

-


3). 「Takaoフォント」のインストール:

「IPAフォント」からの派生フォントで、コミュニティによって不具合などを独自に修正できるようにフォント名を変更しており、Launchpad のプロジェクトサイトで配布されています:

「IPAフォント」のライセンスの同意が完全に解除されているわけではないことに注意:

-

詳細は、Takao Fonts を参照:

-

(1). 最新のダウンロード:

TakaoFonts_00303.01.zip

たぶん、「IPA」フォントの不具合は修正されていると思われます:

-

(2). ダウンロードした「TakaoFonts_00303.01.zip」ファイルを「~/ダウンロード/fonts/」に移動:

-

(3). 「TakaoFonts_00303.01.zip」ファイルを右クリック→「ここで展開(zip)」
$ ls -1 ~/ダウンロード/fonts/Takao*
:
/home/ubn/ダウンロード/fonts/TakaoFonts_00303.01.zip

/home/ubn/ダウンロード/fonts/TakaoFonts_00303.01:
ChangeLog
IPA_Font_License_Agreement_v1.0.txt ←(IPAフォントのライセンス同意)
README
README.ja
TakaoGothic.ttf   ←(必要なフォント)
TakaoMincho.ttf   ←(必要なフォント)
TakaoPGothic.ttf   ←(必要なフォント)
TakaoPMincho.ttf   ←(必要なフォント)

-

(4). システム全体で使えるようにインストール:

フォルダの作成:

$ sudo mkdir -p /usr/share/fonts/Takao/

-

コピー:

$ cd ~/ダウンロード/fonts/
$ sudo cp TakaoFonts_00303.01/*.ttf  /usr/share/fonts/Takao/

-

確認:

$ ls -1 /usr/share/fonts/Takao/
:
TakaoGothic.ttf
TakaoMincho.ttf
TakaoPGothic.ttf
TakaoPMincho.ttf

-

(5). フォントキャッシュをクリア:
$ sudo fc-cache -fv
:
fc-cache: succeeded

-

-


4). 「IPAex」フォントのインストール:

「IPA」フォントの最新版で不具合が修正されています:

品質を保つため、ライセンスの同意が必要なので、インストールをスクリプト化しにくいのが惜しいところ:

-

(1). ダウンロード:

IPAexフォント Ver.004.01

→ライセンスに同意してから、ダウンロードを選択:

  • IPAex明朝 (Ver.004.01)
  • IPAexゴシック(Ver.004.01)

-

→「IPAexゴシック」をダウンロードした場合:

-

(2). ダウンロードした「ipaexg00401.zip」ファイルを「~/ダウンロード/fonts/」に移動:

-

(3). 「ipaexg00401.zip」ファイルを右クリック→「ここで展開(zip)」
$ ls -1 ~/ダウンロード/fonts/ipa*
:
/home/user/ダウンロード/fonts/ipaexg00401.zip

/home/user/ダウンロード/fonts/ipaexg00401:
IPA_Font_License_Agreement_v1.0.txt
Readme_ipaexg00401.txt
ipaexg.ttf   ←(必要なフォント)

-

(4). システム全体で使えるようにインストール:

フォルダの作成:

$ sudo mkdir -p /usr/share/fonts/IPAex/

-

コピー:

$ cd ~/ダウンロード/fonts/
$ sudo cp ipaexg00401/ipaexg.ttf /usr/share/fonts/IPAex/

-

確認:

$ ls -1 /usr/share/fonts/IPAex/
:
ipaexg.ttf

-

(5). フォントキャッシュをクリア:
$ sudo fc-cache -fv
:
fc-cache: succeeded

-

-


5). 「Noto Sans JP」フォントのインストール:

「noto-fonts-cjk-sans」は、中国語、日本語、韓国語の文字をすべて含み、それぞれの言語の太さが異なることがあります。
一方、「Noto Sans JP」は日本語に最適化されており、欧文と和文のウェイトが自然に見えるように調整されています。

-

Noto フォントで、「日本語フォント」をひとつだけインストールしたい場合にオススメです:

-

(1). Google Fonts の「Noto Sans Jp」をダウンロード:

ダウンロードページ

→全画面表示にして、右上にある水色の「Get font」をクリック

→表示された、「Download all (1)」をクリック

-

(2). ダウンロードした「Noto_Sans_JP.zip」ファイルを「~/ダウンロード/fonts/」に移動:

-

(3). 「Noto_Sans_JP.zip」ファイルを右クリック→「ここで展開(zip)」

項番 12.」のファイルマネージャの設定が済んでいることが前提です:

-

(4). 確認:
$ cd ~/ダウンロード/fonts/
$ ls -1p
:
NotoSansJP-VariableFont_wght.ttf ←(バリアブルフォント)
Noto_Sans_JP.zip ←(展開前)
OFL.txt
README.txt
SourceHanCodeJP.ttc ←(別件のフォント)
static/ ←(バリアブルでないフォントのフォルダ)

→展開時の名前で「フォルダ」が作られないので注意:

-

バリアブルでないフォントのフォルダの中身を確認:

$ ls -1p static/
:
NotoSansJP-Black.ttf
NotoSansJP-Bold.ttf
NotoSansJP-ExtraBold.ttf
NotoSansJP-ExtraLight.ttf
NotoSansJP-Light.ttf
NotoSansJP-Medium.ttf
NotoSansJP-Regular.ttf
NotoSansJP-SemiBold.ttf
NotoSansJP-Thin.ttf

→いくつかの太さのフォントが揃っています。
 Regular と Bold があれば良さそう:

-

(5). システム全体で使えるようにインストール:

フォルダの作成:

$ sudo mkdir -p /usr/share/fonts/NotoSansJP/

-

コピー:

$ cd ~/ダウンロード/fonts/
$ sudo cp static/NotoSansJP-Bold.ttf /usr/share/fonts/NotoSansJP/
$ sudo cp static/NotoSansJP-Regular.ttf /usr/share/fonts/NotoSansJP/

-

確認:

$ ls -1 /usr/share/fonts/NotoSansJP/
:
NotoSansJP-Bold.ttf
NotoSansJP-Regular.ttf

-

(6). フォントキャッシュをクリア:
$ sudo fc-cache -fv
:
fc-cache: succeeded

-

-


6). 「MiguMix」フォントのインストール:

項番 6-3.」のスクリプトにてインストール済みです:

-

「MigMix」フォントは、横幅が狭いので、狭い画面で多くの情報を表示できるのが利点です:

-

「MigMix」パッケージには、次のフォントが含まれています:

- プロポーショナルフォント(ブラウザ用)→ Migu 1P、Migu 1C、MigMix 1P、MigMix 2P
- 等幅フォント(テキストエディタ用)   → Migu 1M、Migu 2M、MigMix 1M、MigMix 2M

-

(1). 「MiguMix」フォントがインストールできるか確認:
$ xbps-query -Rs migmix
$

→リポジトリになし:

-

(2). ツールのインストール:

「xbps-install」は、複数のパッケージのインストールの指示ができます:

-

$ sudo xbps-install -S dpkg curl
:
Name  Action    Version       New version        Download size
libmd install   -             1.1.0_1            26KB 
dpkg  install   -             1.22.18_1          2399KB 

-

インストールされたか確認:
$ xbps-query -l | grep -e dpkg -e curl
:
ii curl-8.16.0_1                 Client that groks URLs
ii dpkg-1.22.18_1                Debian Package Manager
ii libcurl-8.16.0_1              Multiprotocol file transfer library

→「-e」は grep の連結機能です:

-

(3). 「MigMix」をダウンロード:
$ curl http://archive.ubuntu.com/ubuntu/pool/universe/f/fonts-migmix/fonts-migmix_20200307-1_all.deb --output /tmp/fonts-migmix_20200307-1_all.deb

→「.deb」ファイルを「/tmp/」にダウンロード:

-

(4). 「MigMix」を「dpkg」でインストール:
$ sudo dpkg -i /tmp/fonts-migmix_20200307-1_all.deb
:
パスワード: 
以前に未選択のパッケージ fonts-migmix を選択しています。
(データベースを読み込んでいます ... 現在 0 個のファイルとディレクトリがインストールされています。)
.../fonts-migmix_20200307-1_all.deb を展開する準備をしています ...
fonts-migmix (20200307-1) を展開しています...
fonts-migmix (20200307-1) を設定しています ...

-

(5). dpkg でインストールされた、パッケージ一覧を表示:
$ dpkg -l --no-pager | grep font
:
ii  fonts-migmix  20200307-1   all   High quality Japanese font based on M+ fonts and IPA fonts

→grep で余計な行を表示させていません:

-

-


7). 「源ノ角ゴシック Code JP」フォントのインストール:

「源ノ角ゴシック Code JP」フォントは、

英数字と日本語が「2 : 3」の幅の「等幅フォント」です。
日本語と英数字が混在しても、バランスが良く見やすいです;

-

9 ポイントくらいに小さくすると、見やすくて、多くの情報が表示できます。

「1 : 2」ではないので、「端末」等では使えません:

-

(1). ツールのインストール:
$ sudo xbps-install -S wget
:
Name Action    Version       New version        Download size
wget install   -             1.25.0_1           805KB 

-

(2). 「SourceHanCodeJP.ttc」フォントのダウンロード:
$ mkdir -p ~/ダウンロード/fonts
$ cd ~/ダウンロード/fonts/
$ wget https://github.com/adobe-fonts/source-han-code-jp/releases/download/2.012R/SourceHanCodeJP.ttc

→ダウンロードに時間がかかるので、ネットが空いている時間帯に行うのが良いです:

-

確認:

$ ls -1 ~/ダウンロード/fonts/
SourceHanCodeJP.ttc

-

(3). システム全体で使えるようにインストール:

フォルダの作成:

$ sudo mkdir -p /usr/share/fonts/

-

コピー:

$ cd ~/ダウンロード/fonts/
$ sudo cp SourceHanCodeJP.ttc /usr/share/fonts/

-

確認:

$ ls -1p /usr/share/fonts/
:
NotoSansJP/
OTF/
SIL/
SourceHanCodeJP.ttc
TTF/
X11/
cantarell/
noto/
noto-emoji/
roboto/
truetype/

-

(4). フォントキャッシュをクリア:
$ sudo fc-cache -fv
:
fc-cache: succeeded

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- -

17. 「アプリ」のインストール:

-

個人的によく使っているアプリを、「項番 6-3.」のスクリプトにてインストール済みです:

不要なアプリは削除してください。

-

-


1). PC の詳細確認に便利な「screenfetch」をインストール:

現在はインストールできません:

-

たぶん、一度実行したら、実行することはほとんどありません:

-

(1). インストールできるか確認:
$ xbps-query -Rs screenf
[-] screenFetch-3.9.1_2 Bash screenshot information tool

→以前はリポジトリに存在していましたが、現在は表示されなくなりました:

-

(2). インストール:

現在はインストールできません:

-

$ sudo xbps-install -S screenFetch
:
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...
x86_64-repodata: 2087KB [avg rate: 1159KB/s]

Name        Action    Version       New version        Download size
xdpyinfo    install   -             1.3.4_2            15KB 
screenFetch install   -             3.9.1_2            53KB 

-

(3). PC 使用情報の表示(ロゴ表示なし):
$ screenfetch -n
:
grep: warning: stray \ before "
grep: warning: stray \ before "
 user@user-pc                           ←(ユーザ名@コンピュータ名)
 OS: Void Linux                          ←(ディストリビューション)
 Kernel: x86_64 Linux 6.12.47_1          ←(カーネル)64bit
 Uptime: 45m
 Packages: 659
 Shell: bash
 Resolution: 1280x960                    ←(VertualBox での解像度)★
 DE: Xfce                                 ←(デスクトップは Xfce)
 WM: Xfwm4                               ←(ウィンドウマネージャは Xfwm4)
 WM Theme: Smoothwall                    ←(ウィンドウのテーマ)
 GTK Theme: Adwaita [GTK2]
 Icon Theme: Adwaita
 Font: Sans 10
 Disk: 5.7G / 29G (21%)
 CPU: 12th Gen Intel Core i5-12450H @ 8x 2.496GHz ←(CPU x8)
 GPU: VMware SVGA II Adapter
 RAM: 1234MiB / 7722MiB

-

-


2). テキストエディタ「Featherpad」のインストール:

項番 6-3.」のスクリプトにてインストール済みです:

-

(1). インストール失敗:
$ sudo xbps-install -S featherpad
:
パスワード: 
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...
ERROR: Package 'featherpad' not found in repository pool.

→リポジトリで見つからないみたい:

-

(2). 確認:
$ xbps-query -Rs featherpad
:
[-] FeatherPad-1.6.2_1 Lightweight Qt6 plain-text editor for Linux

→注意: 「パッケージ名」に大文字が含まれています:

ちなみに、言語パッケージがないバージョンのようです:

-

(3). インストールやり直し:
$ sudo xbps-install -S FeatherPad
:
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...

Name             Action    Version       New version        Download size
qt6-svg          install   -             6.8.2_1            238KB 
qt6-printsupport install   -             6.8.2_5            213KB 
libhunspell1.7   install   -             1.7.2_1            456KB 
FeatherPad       install   -             1.6.2_1            936KB 

→検索でヒットした「パッケージ名」でインストール:

-

(4). バージョンの確認:
$ featherpad --version
FeatherPad 1.6.2

→「実行ファイル名」は今までと同じ、小文字です:

-

(5). 設定は「こちら」を参照:

-

-


3). ファイアウォール「gufw」のインストール:

項番 6-3.」のスクリプトにてインストール済みです:

-

(1). インストールできるか確認:
$ xbps-query -Rs gufw
:
[-] gufw-24.04_2 GTK+ frontend for ufw

-

(2). インストール:
$ sudo xbps-install -S gufw
:
パスワード: 
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...
x86_64-repodata: 2069KB [avg rate: 943KB/s]
13 packages will be downloaded:
  net-tools-2.10_1 ufw-0.36.2_4 bubblewrap-0.11.0_1 
  xdg-dbus-proxy-0.1.6_1 libwoff2common1.0.2-1.0.2_1 
  libwoff2dec1.0.2-1.0.2_1 rav1e-0.6.6_3 libavif-1.3.0_1 
  hyphen-en-25.8.1.1_1 hyphen-2.8.8_4 libmanette-0.2.6_1 
  libwebkit2gtk41-2.46.6_1 gufw-24.04_2 
13 packages will be installed:
  net-tools-2.10_1 ufw-0.36.2_4 bubblewrap-0.11.0_1 
  xdg-dbus-proxy-0.1.6_1 libwoff2common1.0.2-1.0.2_1 
  libwoff2dec1.0.2-1.0.2_1 rav1e-0.6.6_3 libavif-1.3.0_1 
  hyphen-en-25.8.1.1_1 hyphen-2.8.8_4 libmanette-0.2.6_1 
  libwebkit2gtk41-2.46.6_1 gufw-24.04_2 

-

(3). 設定は、「こちら」を参照:

-

(4). ssh 接続して使う場合は、「項番 2)」のファイアウォールの開始: は行いません:

-

-


4). ディスクの管理の「disks」のインストール:

項番 6-3.」のスクリプトにてインストール済みです:

-

(1). インストールできるか確認:
$ xbps-query -Rs gnome-disk
:
[-] gnome-disk-utility-46.1_1 GNOME libraries and applications for dealing wi...

-

(2). インストール:
$ sudo xbps-install -S gnome-disk-utility
:
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...
7 packages will be downloaded:
  gptfdisk-1.0.10_1 parted-3.6_1 libhandy1-1.8.3_1 
  libcracklib-2.10.3_1 cracklib-2.10.3_1 libpwquality-1.4.5_3 
  gnome-disk-utility-46.1_1 
7 packages will be installed:
  gptfdisk-1.0.10_1 parted-3.6_1 libhandy1-1.8.3_1 
  libcracklib-2.10.3_1 cracklib-2.10.3_1 libpwquality-1.4.5_3 
  gnome-disk-utility-46.1_1 

-

(3). 起動:

「アプリケーション」→「アクセサリ」→「ディスク」

-

-

(4). 使い方は、「こちら」を参照:

-

-


5). ディスクのパーティション管理の「gparted」のインストール:

「項番 6-3.」のスクリプトにてインストール済みです:

-

(1). インストールできるか確認:
$ xbps-query -Rs gparted
:
[-] gparted-1.7.0_1 Gnome Partition Editor

-

(2). インストール:
$ sudo xbps-install -S gparted
:
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...

Name      Action    Version       New version        Download size
libsigc++ install   -             2.12.1_1           9.9KB 
glibmm    install   -             2.66.6_1           672KB 
atkmm     install   -             2.28.3_1           80KB 
cairomm   install   -             1.14.5_1           46KB 
pangomm   install   -             2.46.2_1           53KB 
gtkmm     install   -             3.24.8_1           1067KB 
gparted   install   -             1.7.0_1            1912KB 

-

(3). 起動:

「アプリケーション」→「システム」→「Gparted」

-

→「スワップパーティション」があることに注目:

-

(4). 使い方は、「こちら」を参照:

-

-


6). 音楽プレーヤの「audacious」のインストール:

項番 6-3.」のスクリプトにてインストール済みです:

-

(1). インストールできるか確認:
$ xbps-query -Rs audacious
[-] audacious-4.5.1_1            Lightweight, advanced audio player focused o...
[-] audacious-base-4.5.1_1       Lightweight, advanced audio player focused o...
[-] audacious-base-devel-4.5.1_1 Lightweight, advanced audio player focused o...
[-] audacious-devel-4.3.1_1      Lightweight, advanced audio player focused o...
[-] audacious-plugins-4.5.1_1    Plugins for the Audacious media player

-

(2). インストール:
$ sudo xbps-install -S audacious
:
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...
16 packages will be downloaded:
  audacious-base-4.5.1_1 faad2-2.11.2_1 opusfile-0.12_3 
  libsidplayfp-2.3.1_1 libmms-0.6.4_2 neon-0.32.2_2 libcue-2.3.0_1 
  qt6-opengl-widgets-6.8.2_5 minizip-1.3_1 libassimp-5.2.5_2 
  libqt6shadertools-6.8.2_1 qt6-quicktimeline-6.8.2_1 
  qt6-quick3d-6.8.2_1 qt6-multimedia-6.8.2_2 audacious-plugins-4.5.1_1 
  audacious-4.5.1_1 
16 packages will be installed:
  audacious-base-4.5.1_1 faad2-2.11.2_1 opusfile-0.12_3 
  libsidplayfp-2.3.1_1 libmms-0.6.4_2 neon-0.32.2_2 libcue-2.3.0_1 
  qt6-opengl-widgets-6.8.2_5 minizip-1.3_1 libassimp-5.2.5_2 
  libqt6shadertools-6.8.2_1 qt6-quicktimeline-6.8.2_1 
  qt6-quick3d-6.8.2_1 qt6-multimedia-6.8.2_2 audacious-plugins-4.5.1_1 
  audacious-4.5.1_1 

-

(3). インストールされたかの確認:
$ xbps-query -Rs audacious
:
[*] audacious-4.5.1_1            Lightweight, advanced audio player focused o...
[*] audacious-base-4.5.1_1       Lightweight, advanced audio player focused o...
[-] audacious-base-devel-4.5.1_1 Lightweight, advanced audio player focused o...
[-] audacious-devel-4.3.1_1      Lightweight, advanced audio player focused o...
[*] audacious-plugins-4.5.1_1    Plugins for the Audacious media player

-

(4). バージョン:
$ audacious --version
Audacious 4.5.1 (xbps)

-

(5). 起動:

「アプリケーション」→「マルチメディア」→「Audacious」

-

(6). 詳細は、「こちら」を参照:

-

-


7). 画像加工の「kolourpaint」のインストール:

項番 6-3.」のスクリプトにてインストール済みです:

-

(1). インストールできるか確認:
$ xbps-query -Rs kolou
[-] kolourpaint-24.12.2_1 Free, easy-to-use paint program for KDE

-

(2). インストールで失敗:
$ sudo xbps-install -S kolourpaint
:
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...
libpoppler-25.06.0_1: broken, unresolvable shlib `libgpgmepp.so.6'
volume_key-0.3.12_8: broken, unresolvable shlib `libgpgme.so.11'
ERROR: Transaction aborted due to unresolved shlibs.
[user@user-pc ~]$ 

→ 2つの依存するライブラリが解決できないみたい:

-

(3). アプリの依存を確認:
$ xbps-query -R kolourpaint
:
architecture: x86_64
changelog: https://kde.org/announcements/changelogs/gear/24.12.2/#kolourpaint
filename-sha256: 241c27cc6e1eacc32dd2b8d4292cdfd3e2abdee820878a71802c961b727aa69f
filename-size: 5602KB
homepage: http://www.kolourpaint.org/
installed_size: 9589KB
license: BSD-2-Clause, GPL-2.0-or-later, LGPL-2.1-only, GFDL-1.2-only
maintainer: Piotr Wójcik <chocimier@tlen.pl>
pkgname: kolourpaint
pkgver: kolourpaint-24.12.2_1
provides:
    cmd:kolourpaint-24.12.2_1
repository: https://repo-fi.voidlinux.org/current
run_depends:
    kf6-kguiaddons>=6.0.0_1
    kf6-kio>=6.0.0_1
    kf6-ki18n>=6.0.0_1
    kf6-kwidgetsaddons>=6.0.0_1
    qt6-widgets>=6.8.1_1
    qt6-gui>=6.8.1_1
    kf6-kcoreaddons>=6.0.0_1
    qt6-core>=6.8.1_1
    libstdc++>=4.4.0_1
    glibc>=2.39_1
    kf6-kxmlgui>=6.0.0_1
    qt6-printsupport>=6.8.1_1
    libksane6>=24.02.0_1
    kf6-kconfigwidgets>=6.0.0_1
    kf6-kcrash>=6.0.0_1
    kf6-kconfig>=6.0.0_1
shlib-provides:
    libkolourpaint_lgpl.so.5
shlib-requires:
    libKF6ConfigCore.so.6
    libKF6ConfigGui.so.6
    libKF6ConfigWidgets.so.6
    libKF6CoreAddons.so.6
    libKF6Crash.so.6
    libKF6GuiAddons.so.6
    libKF6I18n.so.6
    libKF6KIOCore.so.6
    libKF6KIOFileWidgets.so.6
    libKF6KIOGui.so.6
    libKF6WidgetsAddons.so.6
    libKF6XmlGui.so.6
    libKSaneWidgets6.so.6
    libQt6Core.so.6
    libQt6Gui.so.6
    libQt6PrintSupport.so.6
    libQt6Widgets.so.6
    libc.so.6
    libm.so.6
    libstdc++.so.6
short_desc: Free, easy-to-use paint program for KDE
source-revisions: kolourpaint:9f7ed336e4f

上記に書かれた依存とは違うので、たぶん、依存の依存かな。

-

(4). 依存の 1つ目がインストールできるか確認:
$ xbps-query -Rs libpoppler
:
[-] libpoppler-25.06.0_2 PDF rendering library - poppler runtime library

→OK

-

(5). 依存の 2つ目がインストールできるか確認:
$ xbps-query -Rs volume_key
:
[-] volume_key-0.3.12_9         Library for manipulating storage volume encry...
[-] volume_key-devel-0.3.12_9   Library for manipulating storage volume encry...
[-] volume_key-python3-0.3.12_9 Library for manipulating storage volume encry...

→OK

-

(6). 2つの依存をインストール:
$ sudo xbps-install -S libpoppler volume_key
:
パスワード: 
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...

Name         Action    Version       New version        Download size
poppler-glib update    25.06.0_1     25.06.0_2          206KB 
libgpgme     update    1.24.1_1      2.0.0_1            147KB 
gpgmepp      update    1.24.1_1      2.0.0_1            147KB 
libpoppler   update    25.06.0_1     25.06.0_2          1310KB 
volume_key   update    0.3.12_8      0.3.12_9           144KB 

-

(7). 「kolourpaint」のインストール:
$ sudo xbps-install -S kolourpaint
:
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...
41 packages will be downloaded:
  kf6-kguiaddons-geo-uri-handler-6.17.0_1 kf6-kguiaddons-6.17.0_1 
  kf6-ki18n-6.17.0_1 qt6-xml-6.8.2_5 kf6-kconfig-6.17.0_1 
  kf6-kcoreaddons-6.17.0_1 kf6-kservice-6.17.0_1 kf6-kcrash-6.17.0_1 
  polkit-qt6-0.200.0_1 kf6-kauth-6.17.0_1 xmlcatmgr-2.2_4 
  docbook-xml-4.5_6 docbook-xsl-1.79.2_3 kf6-karchive-6.17.0_1 
  kf6-kdoctools-6.17.0_1 media-player-info-24_2 kf6-solid-6.17.0_1 
  kf6-knotifications-6.17.0_1 kf6-kcolorscheme-6.17.0_1 
  qt6-qt5compat-6.8.2_2 botan-2.19.5_1 qca-qt6-2.3.8_2 
  kf6-kwallet-6.17.0_2 kf6-kjobwidgets-6.17.0_1 kf6-kcodecs-6.17.0_1 
  kf6-kcompletion-6.17.0_1 libbreeze-icons-6.17.0_1 
  kf6-kiconthemes-6.17.0_1 kf6-kbookmarks-6.17.0_1 kf6-kio-6.17.0_2 
  kf6-kglobalaccel-6.17.0_1 kf6-kconfigwidgets-6.17.0_1 
  kf6-kxmlgui-6.17.0_1 libaspell-0.60.8.1_1 kf6-sonnet-6.17.0_1 
  qt6-speech-6.8.2_2 kf6-ktextwidgets-6.17.0_1 libsane-1.3.1_2 
  ksanecore6-25.08.0_1 libksane6-24.08.0_1 kolourpaint-24.12.2_1 
41 packages will be installed:
  kf6-kguiaddons-geo-uri-handler-6.17.0_1 kf6-kguiaddons-6.17.0_1 
  kf6-ki18n-6.17.0_1 qt6-xml-6.8.2_5 kf6-kconfig-6.17.0_1 
  kf6-kcoreaddons-6.17.0_1 kf6-kservice-6.17.0_1 kf6-kcrash-6.17.0_1 
  polkit-qt6-0.200.0_1 kf6-kauth-6.17.0_1 xmlcatmgr-2.2_4 
  docbook-xml-4.5_6 docbook-xsl-1.79.2_3 kf6-karchive-6.17.0_1 
  kf6-kdoctools-6.17.0_1 media-player-info-24_2 kf6-solid-6.17.0_1 
  kf6-knotifications-6.17.0_1 kf6-kcolorscheme-6.17.0_1 
  qt6-qt5compat-6.8.2_2 botan-2.19.5_1 qca-qt6-2.3.8_2 
  kf6-kwallet-6.17.0_2 kf6-kjobwidgets-6.17.0_1 kf6-kcodecs-6.17.0_1 
  kf6-kcompletion-6.17.0_1 libbreeze-icons-6.17.0_1 
  kf6-kiconthemes-6.17.0_1 kf6-kbookmarks-6.17.0_1 kf6-kio-6.17.0_2 
  kf6-kglobalaccel-6.17.0_1 kf6-kconfigwidgets-6.17.0_1 
  kf6-kxmlgui-6.17.0_1 libaspell-0.60.8.1_1 kf6-sonnet-6.17.0_1 
  qt6-speech-6.8.2_2 kf6-ktextwidgets-6.17.0_1 libsane-1.3.1_2 
  ksanecore6-25.08.0_1 libksane6-24.08.0_1 kolourpaint-24.12.2_1 

Size to download:               28MB
Size required on disk:         128MB
Space available on disk:        17GB

Do you want to continue? [Y/n] 

-

(8). バージョン:
$ kolourpaint --version
kolourpaint 25.08.3

-

(9). 起動:

「アプリケーション」→「グラフィックス」→「KolourPaint」

-

(10). 詳細は、「こちら」を参照:

-

-


8). PDF ビュワー「qpdfview」のインストール:

項番 6-3.」のスクリプトにてインストール済みです:

-

(1). インストールできるか確認:
$ xbps-query -Rs qpdfv
:
[-] qpdfview-0.5.0_1 Tabbed document viewer

-

(2). インストール:
$ sudo xbps-install -S qpdfview
:
パスワード: 
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...

Name              Action    Version     New version           Download size
libdjvulibre      install   -           3.5.29_1              709KB 
qt5-core          install   -           5.15.11+20231124_5    2441KB 
qt5-dbus          install   -           5.15.11+20231124_5    209KB 
qt5-network       install   -           5.15.11+20231124_5    746KB 
qt5-gui           install   -           5.15.11+20231124_5    4090KB 
qt5-xml           install   -           5.15.11+20231124_5    104KB 
poppler-qt5       install   -           25.06.0_1             209KB 
qt5-concurrent    install   -           5.15.11+20231124_5    11KB 
qt5-sql           install   -           5.15.11+20231124_5    102KB 
qt5-plugin-sqlite install   -           5.15.11+20231124_5    29KB 
qt5-widgets       install   -           5.15.11+20231124_5    2652KB 
qt5-printsupport  install   -           5.15.11+20231124_5    197KB 
qt5-svg           install   -           5.15.11+20231124_5    152KB 
qpdfview          install   -           0.5.0_1               843KB 

→インストールされたのは、「qpdfview 0.5.0」です:

-

(3). 起動して確認:

「アプリケーション」→「オフィス」→「qpdfview」を起動:

-

→ヘルプ以外は日本語化されています:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- --

18. 「ゲーム」のインストール:

-

個人的によく使っているゲームを、「項番 6-4.」のスクリプトにてインストール済み です:

→追記: 「項番 15-2.」にて、メニューの日本語化を行う「パッチ」を作成しました:

これも「項番 6-4.」のスクリプトに含めました:

-

-


1). 「swell-foop」をインストール:

項番 6-4.」のスクリプトにてインストール済みで、メニューの日本語化もされています:

-

「さめざめ」もどきで、音が出ないのが惜しいです。

-

(1). インストールできるか確認:
$ xbps-query -Rs swell-f
:
[-] swell-foop-48.1_1 GNOME puzzle game where you remove similar objects

→検索する「アプリ名」か「説明文」の、一部がわかれば、ヒットします:

-

(2). インストール:
$ sudo xbps-install -S swell-foop
:
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...
6 packages will be downloaded:
  libxmlb-0.3.22_2 AppStream-1.0.4_2 libadwaita-1.7.5_1 
  libgee-0.20.8_2 libgnome-games-support2-2.0.2_1 swell-foop-48.1_1 
6 packages will be installed:
  libxmlb-0.3.22_2 AppStream-1.0.4_2 libadwaita-1.7.5_1 
  libgee-0.20.8_2 libgnome-games-support2-2.0.2_1 swell-foop-48.1_1 

-

(3). メニューの修正:
$ sudo featherpad /usr/share/applications/org.gnome.SwellFoop.desktop

↓ 行を修正:

Name[ja]=Swell Foop さめざめもどき

-

(4). 起動:

「アプリケーション」→「ゲーム」→「Swell Foop さめざめもどき」

-

実行時の画面:

-

-


2). 「マインスイーパ」のインストール:

項番 6-4.」のスクリプトにてインストール済みで、メニューの日本語化もされています:

-

(1). インストールできるか確認:
$ xbps-query -Rs kmines
:
[-] kmines-24.08.0_1 Classic Minesweeper game

-

(2). インストール:
$ sudo xbps-install -S kmines
:
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...
x86_64-repodata: 2070KB [avg rate: 1866KB/s]

Name            Action    Version       New version        Download size
kf6-kdnssd      install   -             6.17.0_1           85KB 
kf6-attica      install   -             6.17.0_1           192KB 
kf6-syndication install   -             6.17.0_1           222KB 
kf6-kpackage    install   -             6.17.0_1           178KB 
kf6-knewstuff   install   -             6.17.0_1           743KB 
libkdegames     install   -             24.08.0_1          9041KB 
kmines          install   -             24.08.0_1          1163KB 

-

(3). メニューの修正:
$ sudo featherpad /usr/share/applications/org.kde.kmines.desktop

↓ 行を修正:

Name[ja]=KMines マインスイーパ

-

(4). 起動:

「アプリケーション」→「ゲーム」→「KMines マインスイーパ」

-

実行時の画面:

-

-


3). 「ソリティア」(クロンダイク)のインストール:

項番 6-4.」のスクリプトにてインストール済みで、メニューの日本語化もされています:

-

カードゲーム集なので、いくつかのカードゲームで遊べます:

-

(1). インストールできるか確認:
$ xbps-query -Rs aisleriot
:
[-] aisleriot-3.22.35_1 GNOME solitaire card game

-

(2). インストール:
$ sudo xbps-install -S aisleriot
:
パスワード: 
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...

Name      Action    Version       New version        Download size
gc        install   -             8.2.8_1            106KB 
libguile  install   -             3.0.10_1           506KB 
guile     install   -             3.0.10_1           9681KB 
yelp-xsl  install   -             42.4_1             214KB 
yelp      install   -             42.3_1             851KB 
aisleriot install   -             3.22.35_1          9467KB 

-

(3). 起動:

「アプリケーション」→「ゲーム」→「AisleRiot ソリティア」

-

実行時の画面:

-

-


4). 「上海」 (KMahjongg) のインストール:

項番 6-4.」のスクリプトにてインストール済みで、メニューの日本語化もされています:

-

(1). インストールできるか確認:
$ xbps-query -Rs kmahjongg
:
[-] kmahjongg-25.04.3_1          Mahjong Solitaire
[-] libkmahjongg-25.04.3_1       Common code, backgrounds and tile sets for M...
[-] libkmahjongg-devel-25.04.3_1 Common code, backgrounds and tile sets for M...

-

(2). インストール:
$ sudo xbps-install -S kmahjongg
:
パスワード: 
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...
x86_64-repodata: 2070KB [avg rate: 933KB/s]

Name         Action    Version       New version        Download size
libkmahjongg install   -             25.04.3_1          1657KB 
kmahjongg    install   -             25.04.3_1          3838KB 

-

(3). メニューの修正:
$ sudo featherpad /usr/share/applications/org.kde.kmahjongg.desktop

↓ 行を修正:

Name[ja]=KMahjongg 上海

-

(4). 起動:

「アプリケーション」→「ゲーム」→「KMahjongg 上海」

-

実行時の画面:

-

-


5). 「宇宙船スクロールシューティングゲーム」(kobodeluxe) のインストール:

項番 6-4.」のスクリプトにてインストール済みで、メニューの日本語化もされています:

-

(1). インストールできるか確認:
$ xbps-query -Rs kobodeluxe
:
[-] kobodeluxe-0.5.1_3 Space shooter in 2D

-

(2). インストール:
$ sudo xbps-install -S kobodeluxe
:
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...

Name         Action    Version       New version        Download size
sdl12-compat install   -             1.2.68_2           - 
SDL_image    install   -             1.2.12_14          29KB 
kobodeluxe   install   -             0.5.1_3            1555KB 

-

(3). メニューの修正:
$ sudo featherpad /usr/share/applications/kobodl.desktop

↓ 行を追加:

Name[ja]=kobodeluxe 宇宙船スクロールシューティング

-

(4). 起動:

「アプリケーション」→「ゲーム」→「kobodeluxe 宇宙船スクロールシューティング」

-

実行時の画面:

-

キビキビ動きます。速すぎるので難しいです。 レーダーで自分の位置を確認しながら、基地のパイプの先の球体にビームを当てて破壊します。

shift: 前後にビーム
矢印: 方向転換
スペース: 一時停止

-

-


6). LbreakoutHD(ブロックくずし もどき)のインストール:

項番 6-4.」のスクリプトにてインストール済みで、メニューの日本語化もされています:

-

(1). インストールできるか確認:
$ xbps-query -Rs lbreakout2
:
[-] lbreakout2-2.6.5_2   Breakout-style arcade game
[-] lbreakouthd-1.1.10_1 Scalable 16:9 remake of LBreakout2

→解像度で 2つのアプリに別れています:

-

(2). インストール:
$ sudo xbps-install -S lbreakouthd
:
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...

Name        Action    Version       New version        Download size
libmikmod   install   -             3.3.11.1_1         95KB 
smpeg2      install   -             2.0.0_6            125KB 
SDL2_mixer  install   -             2.8.1_1            162KB 
SDL2_image  install   -             2.8.8_1            98KB 
SDL2_ttf    install   -             2.20.2_2           34KB 
lbreakouthd install   -             1.1.10_1           3808KB 

-

(3). メニューの修正:
$ sudo featherpad /usr/share/applications/lbreakouthd.desktop

↓ 行を追加:

Name[ja]=LbreakoutHD ブロックくずし

-

(4). 起動:

「アプリケーション」→「ゲーム」→「LbreakoutHD ブロックくずし」

-

実行時の画面:

-

ラケットで受けている途中で、お宝に気を奪われると、受け損ないます:

→落ちてくるのがお宝と限らないのが面白いところ。 ラケットの幅が広くなるお宝と狭くなるお宝があります。ボールが2個に増えるのもありました。

-

-


7). LTris(テトリス もどき)のインストール:

項番 6-4.」のスクリプトにてインストール済みで、メニューの日本語化もされています:

-

(1). インストールできるか確認:
$ xbps-query -Rs ltris:
[-] ltris-1.2.6_2 Tetris clone using SDL

-

(2). インストール:
$ sudo xbps-install -S ltris
:
[*] Updating repository `https://repo-fi.voidlinux.org/current/x86_64-repodata' ...
x86_64-repodata: 2069KB [avg rate: 1064KB/s]

Name      Action    Version       New version        Download size
smpeg     install   -             0.4.5_7            119KB 
SDL_mixer install   -             1.2.12_15          78KB 
ltris     install   -             1.2.6_2            1388KB 

-

(3). メニューの修正:
$ sudo featherpad /usr/share/applications/ltris.desktop

↓ 行を追加:

Name[ja]= LTris テトリス

-

(4). 起動:

「アプリケーション」→「ゲーム」→「LTris2 テトリス」

-

実行時の画面:

-

落ちる場所がぼんやりと表示されて親切だけど、落ち方が乱暴なテトリスです。

操作が矢印キーだけなので窮屈です。スペースキーで落とすか、回転してほしいです。

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ---

18-2. 参考: ゲームの起動メニューの「日本語化」を行う、「パッチ」を作成:

-

こちらの作業は要りません:

項番 6-4.」のスクリプトに、こちらのメニューの日本語化も含んでいます:

-


1). 「patch」のインストール:

$ sudo xbps-install -S patch

-


2). パッチの作成:

$ cd ~/ダウンロード/
$ featherpad game-ja.patch

↓ すべて貼付け:

--- a/usr/share/applications/kobodl.desktop 2026-01-26 14:48:59.438557893 +0900
+++ b/usr/share/applications/kobodl.desktop 2026-01-26 14:56:47.134380324 +0900
@@ -1,6 +1,7 @@
 [Desktop Entry]
 Encoding=UTF-8
 Name=KoboDeluxe
+Name[ja]=kobodeluxe 宇宙船スクロールシューティング
 GenericName=Arcade Game
 Comment=An excellent 2D Shootem-up game.
 Exec=kobodl

--- a/usr/share/applications/lbreakouthd.desktop 2026-01-26 14:48:59.447558673 +0900
+++ b/usr/share/applications/lbreakouthd.desktop 2026-01-26 14:58:02.835831928 +0900
@@ -1,5 +1,6 @@
 [Desktop Entry]
 Name=LBreakoutHD
+Name[ja]=LbreakoutHD ブロックくずし
 Comment=A ball-and-paddle game with nice graphics.
 Exec=lbreakouthd
 Icon=lbreakouthd
  
--- a/usr/share/applications/ltris.desktop 2026-01-26 14:48:59.451559019 +0900
+++ b/usr/share/applications/ltris.desktop 2026-01-26 14:59:06.621425414 +0900
@@ -1,5 +1,6 @@
 [Desktop Entry]
 Name=LTris
+Name[ja]= LTris テトリス
 Comment=A tetris clone with nice graphics.
 Exec=ltris
 Icon=/usr/share/icons/ltris128.png

--- a/usr/share/applications/org.gnome.SwellFoop.desktop 2026-01-26 14:48:59.415555900 +0900
+++ b/usr/share/applications/org.gnome.SwellFoop.desktop 2026-01-26 14:53:26.582616596 +0900
@@ -30,7 +30,7 @@
 Name[hu]=Swell Foop
 Name[id]=Swell Foop
 Name[it]=Swell Foop
-Name[ja]=Swell Foop
+Name[ja]=Swell Foop さめざめもどき
 Name[ka]=Swell Foop
 Name[kk]=Swell Foop
 Name[km]=Swell Foop

--- a/usr/share/applications/org.kde.kmahjongg.desktop 2026-01-26 14:48:59.430557200 +0900
+++ b/usr/share/applications/org.kde.kmahjongg.desktop 2026-01-26 14:55:42.322699336 +0900
@@ -30,7 +30,7 @@
 Name[id]=KMahjong
 Name[is]=KMahjongg
 Name[it]=KMahjongg
-Name[ja]=KMahjongg
+Name[ja]=KMahjongg 上海
 Name[ka]=KMahjongg
 Name[kk]=KMahjongg
 Name[km]=KMahjongg

--- a/usr/share/applications/org.kde.kmines.desktop 2026-01-26 14:48:59.422556507 +0900
+++ b/usr/share/applications/org.kde.kmines.desktop 2026-01-26 14:54:40.071085587 +0900
@@ -32,7 +32,7 @@
 Name[id]=KMines
 Name[is]=KMines
 Name[it]=KMines
-Name[ja]=KMines
+Name[ja]=KMines マインスイーパ
 Name[ka]=KMines
 Name[kk]=KMines
 Name[km]=KMines

わざと末尾は「空行」x2 を開けてます:

→Ctrl+S で保存:

-


3). コピー:

$ sudo cp ~/ダウンロード/game-ja.patch /

-


4). パッチの実施:

$ cd /
$ sudo patch -p1 < game-ja.patch
:
patching file usr/share/applications/kobodl.desktop
patching file usr/share/applications/lbreakouthd.desktop
patching file usr/share/applications/ltris.desktop
patching file usr/share/applications/org.gnome.SwellFoop.desktop
patching file usr/share/applications/org.kde.kmahjongg.desktop
patching file usr/share/applications/org.kde.kmines.desktop

-


5). ログアウト→ログイン:

-


6). 確認:

「アプリケーション」→「ゲーム」

ゲームのメニューが日本語化されているか確認:

-


7). 後始末:

$ sudo rm /game-ja.patch

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----

19. 「flatpak」でアプリをインストール:

-

「flatpak」を使えば、(ソースからビルドしなくても)使える「アプリ」を増やせます:

ヒットした「アプリ」のみ載せました:

-

(1).「flatpak」をインストール:

(2).「flatpak」で、「四川省」 (Shisen-Sho) をインストール: ←〈H179-5〉にて xbps-src で移植済

(3).「flatpak」で、「フローズン・バブル」 (frozen-bubble) をインストール:

(4).「flatpak」で、「Firefox」をインストール:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- -----

30. 参考: 「Xfce」デスクトップ環境のインストールについて:

-

こちらの作業は要りません:

項番 6-1.」のスクリプトにて、「xfce」、および、その他のアプリはインストール済みです:

-


1). 「dbus」のインストール:

$ LANG=C sudo xbps-install dbus

-


2). 「dbus」の有効化:

リンク:
$ sudo ln -sf /etc/sv/dbus /var/service/

→行末の「/」を忘れずに:
(フォルダの中にリンクを貼ります)

-

確認:
$ sudo sv status dbus
:
run: dbus: (pid 986) 139s; run: log: (pid 985) 139s

-


3). 「xorg」のインストール:

これをインストールしないと、ログイン画面が表示されません:

$ LANG=C sudo xbps-install xorg

-


4). 「Xfce4」のインストール:

-

(1). 「Xfce4」のインストール:
$ LANG=C sudo xbps-install xfce4

-

(2). 「elogind」のインストールの確認:
$ xbps-query -l | grep elogind
:
ii elogind-252.9_2                         Standalone logind fork
ii libelogind-252.9_2                      Standalone logind fork - elogind library

→一覧が表示されれば、インストールされています:

-

リンク:
$ sudo ln -sf /etc/sv/elogind /var/service/

→行末の「/」を忘れずに:
(フォルダの中にリンクを貼ります)

-

サービスが有効かの確認:
$ sudo sv status elogind
run: elogind: (pid 1519) 6s; run: log: (pid 1518) 6s

→有効になりました:

-

(3). 「端末」の「xfce4-terminal」のインストールの確認:
$ xbps-query -l | grep xfce4-term
:
ii xfce4-terminal-1.1.5_1          Modern terminal emulator primarly for the Xfce desktop environment

→インストールされました:

-

(4). ファイルマネージャの「thunar」のインストールの確認:
$ xbps-query -l | grep thun
:
ii thunar-volman-4.20.0_1          Thunar Volume Manager

→インストールされました:

-


5). 「Xfce4 プラグイン」のインストール:

「↑」キーを数回押すと、入力履歴が表示されるので、それに追加入力すると楽:

$ LANG=C sudo xbps-install xfce4-plugins
:
38 packages will be installed:
  xfce4-battery-plugin-1.2.0_1 libqrencode-4.1.1_1 
  xfce4-clipman-plugin-1.7.0_1 xfce4-cpufreq-plugin-1.3.0_1 
  xfce4-cpugraph-plugin-1.3.0_1 xfce4-diskperf-plugin-2.8.0_1 
  xfce4-fsguard-plugin-1.2.0_1 xfce4-genmon-plugin-4.2.1_1 
  xfce4-mailwatch-plugin-1.4.0_1 xfce4-mpc-plugin-0.6.0_1 
  xfce4-netload-plugin-1.5.0_1 xfce4-places-plugin-1.9.0_1 
  libsigc++3-3.4.0_1 glibmm2.68-2.78.0_1 libcloudproviders-0.3.6_1 
  libtinysparql-3.9.2_1 gtk4-4.18.6_1 cairomm1.16-1.16.1_1 
  pangomm2.48-2.50.0_1 gtkmm4-4.18.0_1 pavucontrol-6.1_1 
  libkeybinder3-0.3.2_2 xfce4-pulseaudio-plugin-0.5.1_1 
  xfce4-sensors-plugin-1.5.0_1 xfce4-systemload-plugin-1.4.0_1 
  xfce4-time-out-plugin-1.2.0_1 xfce4-timer-plugin-1.8.0_1 
  xfce4-verve-plugin-2.1.0_1 xfce4-wavelan-plugin-0.7.0_1 
  libproxy-0.5.11_1 glib-networking-2.80.1_1 libsoup3-3.4.2_1 
  xfce4-weather-plugin-0.11.3_1 accountsservice-23.13.9_2 
  xfce4-whiskermenu-plugin-2.10.0_1 xfce4-xkb-plugin-0.9.0_1 
  xfce4-smartbookmark-plugin-0.6.0_1 xfce4-plugins-1.4_1 

-


6). 「LightDM」のインストール:

$ LANG=C sudo xbps-install lightdm

→ディスプレイマネージャです:

-


7). 「LightDM」の有効化:

-

作業前の確認1:

参考なので、面倒なら要りません:

$ sudo sv status lightdm
:
fail: lightdm: unable to change to service directory: gile does not exist

-

作業前の確認2:

参考なので、面倒なら要りません:

$ ls -l /etc/sv/lightdm
:
drwxr-xr-x 2 root root 4096 Oct 19 03:55 log
-rwxr-xr-x 1 root root  145 May 12 02:51 run
lrwxrwxrwx 1 root root   28 May 12 02:51 supervise -> /run/runit/supervise.lightdm

一番下が赤色で表示:

→インストールしただけでは、うまくリンクされていません:

-

リンク:
$ sudo ln -sf /etc/sv/lightdm /var/service/

→行末の「/」を忘れずに:
(フォルダの中にリンクを貼ります)

-

作業後の確認:
$ sudo sv status lightdm
:
run: lightdm: (pid 1705) 2167s; run: log: (pid 1704) 2167s

→サービスが動いています:

-

作業後の確認2:

参考なので、面倒なら要りません:

$ ls -l /etc/sv/lightdm
:
drwxr-xr-x 2 root root 4096 Oct 19 03:55 log
-rwxr-xr-x 1 root root  145 May 12 02:51 run
lrwxrwxrwx 1 root root   28 May 12 02:51 supervise -> /run/runit/supervise.lightdm

→一番下が「水色」になりました:

(正常な状態)

-

「リンク:」の項番に書いたコマンドで「リンク」を貼ると、こちらの「水色」のリンクが自動で作られます:

-


8). 「ネットワークマネージャ」のインストール:

一部の文字が大文字なので注意:

-

$ LANG=C sudo xbps-install NetworkManager
:
10 packages will be installed:
  openresolv-3.17.0_1 mobile-broadband-provider-info-20250613_1 
  libmm-glib-1.24.0_1 libnm-1.50.0_1 oniguruma-6.9.10_1 slang-2.3.2_2 
  popt-1.19_1 newt-0.52.24_2 libndp-1.9_1 NetworkManager-1.50.0_1 

-


9). 「ネットワークマネージャ」の有効化:

-

リンク:
$ sudo ln -sf /etc/sv/NetworkManager /var/service/

-

確認:
$ sudo sv status NetworkManager
:
run: NetworkManager: (pid 3371) 27s; run: log: (pid 3370) 27s

-


10). 「ネットワーク アプレット」のインストール:

すべて小文字で「-」が含まれているので注意:

-

$ sudo xbps-install network-manager-applet
:
5 packages will be installed:
  libayatana-appindicator-0.5.94_1 gcr-3.41.2_1 libnma-1.10.6_1 
  libsecret-0.21.7_1 network-manager-applet-1.36.0_1 

→「ネットワークマネージャ」のサポートを行います:

-


11). 「pulseaudio」のインストール:

$ sudo xbps-install pulseaudio pavucontrol
:
ERROR: Package `pavucontrol' already installed.

Name             Action    Version     New version      Download size
pulseaudio-utils install   -           16.1_2           70KB 
rtkit            install   -           0.13_3           31KB 
pulseaudio       install   -           16.1_2           498KB 

→「pavucontrol」はインストール済でした:

-


12). 「その他の「ツール」をインストール:

$ sudo xbps-install htop git unzip p7zip archiver

-

スクリーンショット関連:
$ sudo xbps-install xfce4-screenshooter shotwell

-

$ sudo xbps-install psensor

→「lm-sensors」は、「lm_sensors」でした:

どちらにしても、依存で入りました:

-

パッケージのアップデート通知:
$ sudo xbps-install octoxbps

-

Thunar ファイルマネージャの「ゴミ箱」の表示:
$ sudo xbps-install -S gvfs
:
Name            Action    Version     New version      Download size
gcr4            install   -           4.4.0.1_2        539KB 
fuse3           install   -           3.16.2_1         100KB 
avahi-glib-libs install   -           0.8_8            24KB 
libnfs          install   -           5.0.3_1          133KB 
gvfs            install   -           1.56.1_1         1130KB 

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- -

50. 参考: 入手した PC について:

-

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- --

50-1. Windows11 にてマシンのスペックを確認:

-

今回の、中古の Windows11 のマシンを選ぶときに、スペックの確認に使いました:

現物があり触れるなら、中古だけでなく、新品の Windows11 マシンを選ぶときも使えます。

-


1). 「Windows」(スタート)ボタンを右クリック→「システム」

-

(1). 「Windowsの仕様」をクリック:

「Windows エディション」と「バージョン」を確認

Windows 11, version 25H2(2025-09-30 〜)

最新は、

Windows 11, version 26H1(2026-02-10 〜 )

-

(2). 「デバイスの仕様」をクリック:

「プロセッサ」→CPUを確認

「実装RAM」→メモリを確認

-

(3). 「ストレージ」をクリック

HDD や SSD を確認

-


2). 「Windows」(スタート)ボタンを右クリック→「タスクマネージャー」

もしくは、

「Ctrl + Shift + Esc」キーで「タスクマネージャー」を起動:

-

「パフォーマンス」タブをクリック

現在の負荷状況だけでなく、ハードウェアの詳細なスペックを確認できます:

左側で項目を切り替え、右側に詳細:

右側の右上に「スペック名」が表示されていたりします:

  • CPU
  • メモリ
  • ストレージ
  • グラフィックス(GPU)
  • ディスプレイ

-

最低でも 第 8世代以降のプロセッサが(快適なので)オススメです:
例えば、i5 プロセッサであれば、i5-8xxx です:

また、第8世代(のボード)であれば、高速な「NVMe」のSSD や「m.2」が使えるかはギリギリで、
第10世代(のボード)であれば、「NVMe」のSSD や「m.2」が使える可能性が高まります:

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ---

50-2. 入手したマシンのスペック:

-

「NEC VersaPro VX-4」(PC-VKT16XZG4

 発売時期: 2019年1月

-

1). NEC の法人向けで、リース切れした「NEC VersaPro VX-4」の整備品のようです:

「キーボード」、「タッチパッド」、「電源アダプタ」が新品同様だったので、酷使されたマシンみたい。 交換はされているので、(ネットで買うより少し高いけど)良心的なお店だったようです。
ただし酷使されている可能性が高いので、当たりか外れかは、しばらく使ってみないとわかりません:

-

ビジネスモデル(PC-VKT16XZG4)で、プロセッサは第8世代 Intel Core i5- 8250U、メモリ 8GB(4GB x2)、SSD 256GB で、「DVD-ROM」ドライブを内蔵。

-

Windows11 が動くスペックなので、Linux で使うには十分な性能です。

-

2). 多くの接続ポートを内蔵:

-

(1). USB 3.0 ポート (Type-A) x 5

右側面 ×3
背面 ×1
左側面 ×1 (パワーオフUSB充電機能付き)

-

(2). 「外部ディスプレイ」や「プロジェクタ」を接続できる、2種類のポート:

HDMIポート x 1

ミニD-Sub 15ピン (VGA) x 1 →「アナログRGB」の 旧モニタ、プロジェクタ接続用

-

(3). シリアル接続:

RS-232C D-sub 9ピン x 1(最高115.2kbps対応)

ルータやスイッチングハブ、外部機器等の設定時に使えます:

-

(4). SD (SDHC/SDXC) メモリカード スロット ×1

著作権保護機能(CPRM)には対応していません。
「マルチメディアカード(MMC)」、「SDIOカード」は使用できません。
高速転送規格「UHS-I」に対応しています

-

(5). PCカード スロット ×1

Type I、Type II に対応 (Type III 使用不可)
PC Card Standard 準拠、CardBus 対応

-

(6). 有線LAN (RJ45) コネクタ ×1

1000BASE-T、100BASE-TX、10BASE-T
Remote Power On (Wake On LAN) 機能対応

-

3). 「メモリ」と「SSD」などのパーツの交換が楽です:

底面の内側のネジ 3本 を小さなプラス ドライバーでゆるめるだけで、
カバーが外れ、すぐにパーツの交換ができます:

-

問題は、パーツの購入に、本体をもう一台買えるくらい、お金がかかること。

以前よりもパーツ代が高くなりました。

-

追記: パーツの購入は必要になったときに、考えるつもりでしたが、

コスパの良い「メモリ」や「SSD」で定番で、(将来、購入の予定だった)
「Crucial」(クルーシャル) が 2026年2月 までの販売で撤退する、ことを耳にしました:

「Crucial」(クルーシャル) は、半導体大手の Micron のコンシューマ(消費者)向け「ブランド名」で、 信頼が高く、高品質でコスパが良かったです。
時代の流れで、今後は AI などのデータセンター向けの出荷に注力する、みたい。

-

来月からは「Crucial」(だけでなく他のメーカーも)のメモリや SSD の入手が難しそうなので、
メモリが安い?うちに Amazon で注文しました:

「CFD販売 ノートPC用メモリ DDR4-2400 (PC4-19200) 8GB×1枚」を 2つ

(バラの方が安くて、保証付きの「新品」とのことなので、それを 2つ)

SSD の「Crucial MX500(1TB)」も欲しかったけど、ネットにあるほとんどは中古で保証も付きません。サイフも空なので我慢。

-

4). 画面が狭いのが難点:

ディスプレイは 15.6 インチでノングレアです。

安いモデルなので、くっきりしてない TFT 液晶だし、解像度が (1366×768)と縦方向が狭いです。

Hatena ブログの編集画面は、フルHD 前提のデザインで編集に使えるのは 10行ほど。これでは効率爆下がりなので、ブログ編集をメインにするなら、フルHDの外付けディスプレイに「ブラウザ」画面を割当てるのがベター。

-

同じモデルで、画面が IPS 液晶で フルHD のマシンもあるようですが、見かけませんし、あっても高価です。

-

5). コンソール画面付きの「ミニ PC」と思えば、使い道が広がります:

外付けの「無線マウス」と「無線キーボード」をつなげても、「USB 3.0」ポートが 3つも残ります:

有線LAN ポートもあるし、「HDMI」で外付けの「フルHD のディスプレイ」をつなげれば、「コンソール」画面付きの「ミニ PC」として使えます。

-

これなら、現在、本番使用の「ミニPC」が壊れたときに使えそうです:

なので、(VirtualBox のホストOS としても使えるように)メモリ 16GB を追加注文しました:

メモリが増えれば、VirtualBox で使わなくても快適になります。

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----

50-3. Linux にてマシンのスペックを確認:

-

Linux のインストール後に、 マシンに使われているチップ名(ファームウェアやドライバーのパッケージ名を検索するキー)の確認に使いました:

-


1). CPU情報:

CPU のモデル名、コア数、スレッド数を表示:

$ lscpu
:
ベンダー ID:                       GenuineIntel
  モデル名:                        Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
    CPU ファミリー:                6
    モデル:                       142
    コアあたりのスレッド数:          2
    ソケットあたりのコア数:          4
    ソケット数:                    1

    仮想化:                        VT-x

-


2). メモリ総量:

物理メモリとスワップの総量・使用量を人間が読みやすい形式(GB/MB)で表示:

$ free -h
:
           total       used       free     shared  buff/cache   available
Mem:       7.7Gi      1.4Gi      5.8Gi      268Mi       1.0Gi       6.3Gi
Swap:         0B         0B         0B

-


3). ディスク容量:

ハードディスク や SSD の容量・使用状況を表示:

$ df -h
:
ファイルシス      サイズ  使用   残り  使用%   マウント位置
/dev/sda2        233G  6.6G  215G    3%   /
/dev/sda1       1022M  152K 1022M    1%   /boot/efi

-


4). BIOS/マザーボード情報やメモリの詳細(スロット情報)を表示:

ツールのインストール:

$ sudo xbps-install -S lshw
:
Name Action    Version         New version          Download size
lshw install   -               B.02.20_1            2035KB 

-

確認:

$ sudo lshw -short
:
H/W path       Device     Class          Description
====================================================
                          system         PC-VKT16XZG4 (PC-VKT16XAGMAY4ZDWFY)
/0                        bus            V-VD181-R
/0/3                      memory         8GiB System Memory
/0/3/0                    memory         4GiB SODIMM DDR4 Synchronous Unbuffered
/0/3/1                    memory         4GiB SODIMM DDR4 Synchronous Unbuffered
/0/7                      memory         256KiB L1 cache
/0/8                      memory         1MiB L2 cache
/0/9                      memory         6MiB L3 cache
/0/a                      processor      Intel(R) Core(TM) i5-8250U CPU @ 1.60GH
/0/b                      memory         128KiB BIOS
/0/100                    bridge         Xeon E3-1200 v6/7th Gen Core Processor 
/0/100/2       /dev/fb0   display        Kaby Lake-R GT2 [UHD Graphics 620]
/0/100/8                  generic        Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7
/0/100/14                 bus            Sunrise Point-LP USB 3.0 xHCI Controlle
/0/100/14.2               generic        Sunrise Point-LP Thermal subsystem
/0/100/16                 communication  Sunrise Point-LP CSME HECI #1
/0/100/17                 storage        Sunrise Point-LP SATA Controller [AHCI 
/0/100/1c                 bridge         Sunrise Point-LP PCI Express Root Port 
/0/100/1c.1               bridge         Sunrise Point-LP PCI Express Root Port 
/0/100/1c.1/0             bridge         O2 Micro, Inc.
/0/100/1c.3               bridge         Sunrise Point-LP PCI Express Root Port 
/0/100/1c.3/0  wlp4s0     network        Wireless 8265 / 8275
/0/100/1d                 bridge         Sunrise Point-LP PCI Express Root Port 
/0/100/1d.3               bridge         Intel Corporation
/0/100/1d.3/0  mmc0       bus            OZ711 SD/MMC Card Reader Controller
/0/100/1f                 bridge         Sunrise Point LPC/eSPI Controller
/0/100/1f/0               system         Motherboard registers
/0/100/1f/1               system         Motherboard registers
/0/100/1f/2               system         Motherboard registers
/0/100/1f/3               system         AT Real-Time Clock
/0/100/1f/4               communication  16550A-compatible COM port
/0/100/1f/5               generic        PnP device NCT0011
/0/100/1f/6               generic        PnP device LEN009d
/0/100/1f/7               system         Motherboard registers
/0/100/1f/8               system         Motherboard registers
/0/100/1f/9               system         Motherboard registers
/0/100/1f/a               system         System Board
/0/100/1f.2               memory         Memory controller
/0/100/1f.3    card0      multimedia     Sunrise Point-LP HD Audio
/0/100/1f.3/0  input10    input          HDA Digital PCBeep
/0/100/1f.3/1  input11    input          HDA Intel PCH Mic
/0/100/1f.3/2  input12    input          HDA Intel PCH Headphone
/0/100/1f.3/3  input13    input          HDA Intel PCH HDMI/DP,pcm=3
/0/100/1f.3/4  input14    input          HDA Intel PCH HDMI/DP,pcm=7
/0/100/1f.3/5  input15    input          HDA Intel PCH HDMI/DP,pcm=8
/0/100/1f.4               bus            Sunrise Point-LP SMBus
/0/100/1f.6    enp0s31f6  network        Ethernet Connection (4) I219-V
/1                        power          00NY489
/2             input0     input          AT Translated Set 2 keyboard
/3             input2     input          Sleep Button
/4             input3     input          Power Button
/5             input4     input          Lid Switch
/6             input5     input          Power Button
/7             input6     input          AlpsPS/2 ALPS GlidePoint
/8             input7     input          ThinkPad Extra Buttons
/9             input8     input          Video Bus
/a             input9     input          PC Speaker

-

抜粋:

システム:
                system         PC-VKT16XZG4 (PC-VKT16XAGMAY4ZDWFY)

→出荷時の注文のスペックが指示されているので、ネットで検索するときに詳細が確認しやすくなります。 ただし、その後、パーツ類が交換されている可能性があります。

ちなみに、底面のラベルでも確認できます:

-

メモリ:
/0/3            memory         8GiB System Memory
/0/3/0          memory         4GiB SODIMM DDR4 Synchronous Unbuffered
/0/3/1          memory         4GiB SODIMM DDR4 Synchronous Unbuffered

→安い 普通の ノート用のメモリ 4GB x2 = 8GB

-

プロセッサ:
/0/a             processor      Intel(R) Core(TM) i5-8250U CPU @ 1.60GH
/0/b             memory         128KiB BIOS

→第 8世代の i5 プロセッサ

-

グラフィック:
/0/100/2        /dev/fb0   display    Kaby Lake-R GT2 [UHD Graphics 620]

→CPU 内臓のグラフィック

-

SATA SSD:
/0/100/17       storage     Sunrise Point-LP SATA Controller [AHCI mode]

→ [AHCI mode] では NVMe SSD を認識できません:

BIOS 設定では「PCIe/NVMe」のモードに変更する設定はないみたい。

-

有線LAN:
/0/100/1f.6     enp0s31f6  network      Ethernet Connection (4) I219-V

-

無線LAN:
/0/100/1c.3/0   wlp4s0     network       Wireless 8265 / 8275

→Blutooth 機能も内蔵:

-

SD カード:
/0/100/1d.3/0   mmc0      bus        OZ711 SD/MMC Card Reader Controller

→SDXG 対応です:

-

RS232C ポート:
/0/100/1f/4               communication  16550A-compatible COM port

-


5). GPU確認:

外部の場合:
$ lspci | grep -i nvidia
$

-

または、

CPU 内蔵の場合:
$ sudo lshw -C display
:
  *-display                 
       description: VGA compatible controller
       product: Kaby Lake-R GT2 [UHD Graphics 620]
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       logical name: /dev/fb0
       version: 07
       width: 64 bits
       clock: 33MHz
       capabilities: pciexpress msi pm vga_controller bus_master cap_list rom fb
       configuration: depth=32 driver=i915 latency=0 resolution=1366,768
       resources: irq:138 memory:f4000000-f4ffffff memory:e0000000-efffffff ioport:1000(size=64) memory:c0000-dffff

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- -----

50-4. 追記: メモリを 16GB に増設:

-

注文していたメモリ(8GB x2)が着いたので、
メモリ 8GB(4GB x2) を 16GB(8GB x2) に交換しました:

-

ちなみに、後で気付きましたが、価格がほぼ同じ 16GB x1 を注文して、少し遅くてもメモリ 20GB で使った方が良かったかもしれません。デュアルメモリにして、どれくらい速度が違うかですね。

-

-

検索すると、DDR4 で同じ製品(でないと効果なし)が 2枚なら理論上のメモリの転送帯域幅は 2倍になるみたい。今回の DDR4 は効果が大きいようです。
ちなみに、スロットが 4つのときは飛び飛びにセット。

同じ製品を 2枚注文したけど、バラなのでバージョンが違う可能性があります。
気になるときは、少し高くても(逆に安い場合もあり)、2枚組のメモリを注文した方が無難かも。

→新品でバージョンが同じだったので一安心。

-


1). 「メモリ」を 16GB(8GB x2)に交換しました:

-

(1). 底面の 2つのロックを解除しながら「バッテリ」を取り外し:

-

(2). 底面の内側のネジ 3本 を、小さなプラス ドライバーでゆるめて、カバーを取り外し:

ネジはカバーに付いたままで外れません:

-

(3). 「メモリ」を交換:

ロックを拡げながら、取り外し

斜めにセットして、コネクタ部が見えないように押し込んで、水平に倒します:

-

赤枠が、交換済のメモリ 2枚です:

左端に置いた、裏返したカバーには、ネジが付いたままです:

-

ちなみに、

右上が「CPU ファン」で、放熱バーが延びた下の「X」の部分に CPU があります:

左側にある黒い箱が SATA 2.5 インチ SSD(SAMSUNG PM871b 256GB)7mm 厚 です:

その上の アンテナ用の白黒のケーブル が付いているのが、「M.2」のType 2230 の「WiFi / Bluetooth」のモジュールです:

-

参考:

その左の空いているコネクタ部は、

Type 2230 よりも基盤(ネジの位置)が長いので、たぶん Type 2242 の「M.2」コネクタです:

NVMe(高速)でなく、SATA(低速)の「M.2」ストレージが付けられそう?(自己責任)です。 速度は SATA 2.5 インチ SSD と同じで、NVMe よりも発熱が低くて ヒートシンク が要らないのが利点:

-

「M.2 2242 SATA」で検索:

SATA 6Gb/s で、容量: 128GB、256GB 辺り。取付けネジが必要かも。
ORICO などの中華製は半額くらいで入手できますが価格なりのリスクがあるので注意。

認識できるかは「項番 50-5.」で確認。

→手持ちがあれば試してみる価値はアリですが、お金があるなら確実に動く 1TB 以上の SATA 2.5 インチ SSD を買います。

-

(4). カバー取り付け:

付けづらいので、ちゃんと閉めてからネジは閉めます。ネジがある方を押し込んでから、外側を押すと閉めやすいです。

-

(5). バッテリ取り付け:

-


2). メモリが増えたか BIOS で確認:

-

(1). 電源をオン:

「NEC」画面が表示されたら、すぐに Enter

(2). ブートの選択画面がでたら、F2

-

(3). 「BIOS Setup」画面が表示:

「Main」タブ:

画面の中央辺りに、

Installed memory  16384 MB

→16GB であることを確認:

-

(4). Esc キーを押して、Enter を数回

→再起動されました:

-


3). メモリが増えたか コマンド で確認:

$ sudo lshw -short | head -n 8 -
:
H/W path       Device     Class          Description
====================================================
                          system         PC-VKT16XZG4 (PC-VKT16XAGMAY4ZDWFY)
/0                        bus            V-VD181-R
/0/3                      memory         16GiB System Memory
/0/3/0                    memory         8GiB SODIMM DDR4 Synchronous Unbuffered (Unregistered) 2400 MHz (0.4 ns)
/0/3/1                    memory         8GiB SODIMM DDR4 Synchronous Unbuffered (Unregistered) 2400 MHz (0.4 ns)
:

→16GB(8GB x2)がちゃんと認識されています:

対応速度までわかります。

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- ----- ----- ----- ----- -

50-5. BIOS の Boot デバイスの項目:

-

「Void Linux」をインストール後に、BIOS の Boot デバイスの項目を確認したら、

 設定した内容ではあるけど、表示が変わっていました:

-

「Startup」タブ: の「Boot」の項目

Boot Priority Order

1.    void_grub  ←★
2.    USB HDD
3.    USB CD
4.    USB FDD
5.    ATAPI CD0 HL-DT-ST DVDROM DUE1N  ←(DVD-ROM)
6.    ATA HDD1
7.    NVMe0
8.    ATA HDD0 SAMGHHSUNG M27LN256HAJQ-000L7  ←(SSD)
9.    PCI LAN
10.   Windows Boot Manager

「1.」の「 void_grub」に注目:(たぶん、UEFI のパーティション1 を指しているみたい)
実体(パーティション2)は「8.」番目です。

→SATA(低速)の「M.2」ストレージが認識されれば、この画面の「6.」番目?に「製品名」が表示されると思われます:

-

ちなみに、「7.」番目を見ると「NVMe」のSSD が認識できそうですが、コマンド確認で、コントローラが「AHCI mode」(SATA用)だし、BIOS で別のモードに変更する項目もないので、認識される可能性は低そう。

-

-


まとめ

古い「ノート PC」(SSD) に、「Void Linux」をコマンド ラインである base イメージの「iso」からインストールして、「Xfce」デスクトップ環境を追加しました:

-

「Xfce」デスクトップ環境の追加は、ssh 接続してスクリプトを実行したので、だいぶ楽ができました。

-

今回は、前回の内容に、ノート PC で使いそうな機能を追記しました。

「Void Linux」にて、(使ったことがない)知らない「サービス名」がまだまだありそうです。奥が深いですね。

-

-

-


-

-

    目次

-

「投稿の先頭 へ」

-

-


-

「この目次 の先頭へ」

「本編の目次 に戻る」

-

「Void Linux」の「xbps-src」にて、「@kajongg」ゲームを移植「改定版」〈H179-12〉

登録日: 2026-02-15 / 更新日: 2026-03-02

前回 は、「Void Linux」の「xbps-src」にて、 「中国式四人麻雀」ゲームの「@kajongg」を移植しました:

-

ただし、日本語化したけど、「.po」ファイルを翻訳しただけでは多くの翻訳漏れが出ました:

今回は、新規に「.po」ファイルを作り、翻訳し直しました。
ちなみに、続編ではなく「改定版」としているので、前回と同じ内容が含まれます:

-

その備忘録です。

-

-

使用したPC は「ASUS Chromebox CN60」で、F/W を置換して「UEFI 立ち上げ」にしています。
プロセッサは第 4世代の「Intel Celeron 2955U」です。

-

(注)リンクを戻るときはブラウザの左上の「←」をクリック
Android スマホであれば「ホーム」ボタン隣の「<」をタップ

-

-


目次

-

前回の作業:

「Void Linux」の「xbps-src」にて、「@kajongg」ゲームを移植〈H179-11〉

-

今回の作業:

-

  1. 「xbps-src」のビルド環境を更新:

  2. 「仮想マシン」なら「クローン」を作成:

  3. 「@kajongg」ゲームの「テンプレート」を作成:

  4. 「@kajongg」ゲームのパッチを作成:

  5. 「@kajongg」ゲームの「パッケージ化」とインストール:

-

参考にできそうな作業:

-

  1. 「kajongg」ゲームの移植について:

  2. 「@kajongg」のパッチを作成した履歴(旧、新):

  3. 「@kajongg」を「パッケージ化」した時のメッセージ:

  4. 「Python」プログラムから「POT ファイル」を作成する例(新):

  5. 「gettext」を使った、Python の日本語化の例:

  6. 「pygettext.py」を使った、Python の日本語化の例:

-

「まとめ へ」

「目次詳細 へ」

-

-


- --- - --- - --- - --- - --- - --- - --- -

「Void-Linux」(Xfce) を起動:

-

移植した「@kajongg 中国式四人麻雀」を起動:

前回の「翻訳」:

プレイには支障ありませんが、

→単に「.po」ファイルを翻訳しただけでは、多くの翻訳漏れが出ました:

-

今回の「翻訳」:

→イチから「.po」ファイルを作り直しました:

ちなみに、「ロボット」でなく「賢者」と翻訳しました。味があります:

半角スペースを入れた「賢 人」の方が見栄えが良いかも。

-

-


- --- - --- - --- - --- - --- - --- - --- --

「Void Linux」について:

-

1). 公式サイト:

The Void (Linux) distribution

英語のみのサイトです:

-

2). 「Void Linux」について:

こちら」を参照:

-

3). 「xbps-src」について:

こちら」を参照:

-

-


現在のOS のバージョンを表示:

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

OS : 「Void Linux」

2026-02-11 現在

-

カーネル:
$ uname -r
6.12.68_1

→Ubuntu よりも進んでいます:

-

リリース:
$ cat /etc/os-release
:
NAME="Void"
ID="void"
PRETTY_NAME="Void Linux"
HOME_URL="https://voidlinux.org/"
DOCUMENTATION_URL="https://docs.voidlinux.org/"
LOGO="void-logo"
ANSI_COLOR="0;38;2;71;128;97"

DISTRIB_ID="void"

→ローリングリリースです:

-

「x11」と「Wayland」のどちらで動作してるか確認:
$ echo $XDG_SESSION_TYPE
x11

→「Wayland」ではなく、「x11」で動作しています。

-

-


- --- - --- - --- - --- - --- - --- - --- ---

前回の作業の「改定版」です:

-

前回の作業の「続き」ではなく、前回の作業の「改定版」です:

-

1). 前回の作業:

「Void Linux」の「xbps-src」にて、「@kajongg」ゲームを移植〈H179-11〉

-

2). 反省:

-

「@kajongg」アプリを起動:

「アプリケーション」→「ゲーム」→「Kajongg 中国式四人麻雀」

→起動メニューが日本語化されました:

-

アプリが起動しました:

→せっかく、がんばって日本語に翻訳したのに、多くの「翻訳漏れ」があります:

-

よくあることですが、アプリのみが更新され、翻訳ファイルの「.po」の更新はなかったみたい。
アプリとの矛盾が生じているので、翻訳しても翻訳漏れが出ます:

-

なので、

-

3). 今回は、新規に「.po」ファイルを作り、翻訳し直しました:

-

新規に「.po」ファイルを作り、翻訳し直しなおした履歴は「項番 60.」を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- ----

1. 事前作業:

-

-


- --- - --- - --- - --- - --- - --- - --- -----

1-1. 「xbps-src」のビルド環境を更新:

-

日々、「xbps-src」のビルド環境は更新されています:

アプリの移植時に、意味不明のメッセージが表示されるときは、一度更新してみると良いです:

-


1). システム更新:

$ sudo xbps-install -Su
ERROR: The 'xbps' package must be updated, please run `xbps-install -u xbps`

→xbps の更新がありました:

-

xbps の更新:

$ sudo xbps-install -u xbps
:
Name    Action    Version           New version            Download size
libxbps update    0.60.6_1          0.60.7_1               143KB 
xbps    update    0.60.6_1          0.60.7_1               118KB 

-

システム更新のやり直し:

$ sudo xbps-install -Su
:
24 packages will be updated:
  gc (8.2.8_1 -> 8.2.12_1) hyphen-en (26.2.0.1_1 -> 26.2.0.3_1) 
  kmahjongg (25.08.3_1 -> 25.12.2_1) kmines (25.08.3_1 -> 25.12.2_1) 
  ksanecore6 (25.12.0_1 -> 25.12.2_1) libX11 (1.8.12_2 -> 1.8.13_1) 
  libbpf (1.6.2_1 -> 1.6.3_1) libcap (2.76_1 -> 2.77_1) 
  libcap-progs (2.76_1 -> 2.77_1) libharfbuzz (12.3.0_1 -> 12.3.2_1) 
  libkmahjongg (25.08.3_1 -> 25.12.2_1) libwacom (2.17.0_1 -> 2.18.0_1) 
  libz3 (4.15.4_2 -> 4.15.5_1) linux6.12 (6.12.68_1 -> 6.12.69_1) 
  nghttp2 (1.67.1_1 -> 1.68.0_1) polkit (126_2 -> 127_1) 
  python3 (3.14.2_2 -> 3.14.3_1) python3-pyqt6 (6.10.0_3 -> 6.10.2_1) 
  python3-pyqt6-gui (6.10.0_3 -> 6.10.2_1) 
  python3-pyqt6-sip (13.10.2_2 -> 13.11.0_1) 
  python3-pyqt6-svg (6.10.0_3 -> 6.10.2_1) 
  python3-pyqt6-widgets (6.10.0_3 -> 6.10.2_1) 
  sdl12-compat (1.2.72_2 -> 1.2.74_1) xcalc (1.1.2_1 -> 1.1.3_1) 

-


2). 再起動:

$ sudo reboot

-


3). ローカルリポジトリの更新:

$ cd ~/git/void-packages/
$ git pull
:
remote: Enumerating objects: 1797, done.
remote: Counting objects: 100% (1797/1797), done.
remote: Compressing objects: 100% (573/573), done.
remote: Total 1343 (delta 767), reused 1176 (delta 623), pack-reused 0 (from 0)
Receiving objects: 100% (1343/1343), 463.10 KiB | 39.00 KiB/s, done.
Resolving deltas: 100% (767/767), completed with 200 local objects.
From https://github.com/void-linux/void-packages
   701acbda..9199c0a6  master     -> origin/master
Updating 701acbda..9199c0a6
Fast-forward
 .github/workflows/build.yaml                       |     4 +-
 .github/workflows/cycles.yaml                      |     2 +-
 common/shlibs                                      |     8 +-
 srcpkgs/ART/template                               |     8 +-
 srcpkgs/MangoHud/template                          |     6 +-
 srcpkgs/PrismLauncher/template                     |     4 +-
 srcpkgs/SwayOSD/template                           |     4 +-
 srcpkgs/Waybar/template                            |     6 +-
 srcpkgs/afdko/template                             |    27 +
 srcpkgs/akonadi-calendar/template                  |     4 +-
 srcpkgs/akonadi-contacts/template                  |     4 +-
 srcpkgs/akonadi-import-wizard/template             |     4 +-
 srcpkgs/akonadi-mime/template                      |     4 +-
 srcpkgs/akonadi-search/template                    |     4 +-
 srcpkgs/akregator/template                         |     4 +-
 srcpkgs/android-studio/template                    |     4 +-
 srcpkgs/arcan/template                             |     2 +-
 srcpkgs/ark/template                               |     4 +-
 srcpkgs/asunder/template                           |     4 +-
 .../asymptote/patches/asymptote-2.70-info.patch    |    11 +
 .../patches/asymptote-2.92-xdg-utils.patch         |    23 +
 .../patches/asymptote-3.00-gc-check.patch          |    12 +
 .../patches/asymptote-3.05-boost-1.88.patch        |    68 +
 .../patches/asymptote-3.05-boost-1.89.patch        |    65 +
 .../patches/asymptote-3.05-system-gc.patch         |    59 +
 srcpkgs/asymptote/template                         |    33 +
 srcpkgs/atril/template                             |     2 +-
 srcpkgs/audex/template                             |     4 +-
 srcpkgs/baloo-widgets/template                     |     4 +-
 .../3eb68ef830447d91b10a928823edb3c50cf73f48.patch |    54 -
 srcpkgs/beets/template                             |    16 +-
 srcpkgs/borgmatic/template                         |     8 +-
 srcpkgs/bovo/template                              |     4 +-
 srcpkgs/caja-dropbox/template                      |     2 +-
 srcpkgs/caja-extensions/template                   |     2 +-
 srcpkgs/caja/template                              |     2 +-
 srcpkgs/calendarsupport/template                   |     4 +-
 srcpkgs/cava/template                              |     4 +-
 srcpkgs/chafa/template                             |     5 +-
 srcpkgs/clifm/patches/0001-musl-define.patch       |    32 -
 srcpkgs/clifm/template                             |     4 +-
 srcpkgs/colord-kde/template                        |     4 +-
 srcpkgs/crawl-tiles/template                       |     6 +-
 srcpkgs/crawl/template                             |     6 +-
 srcpkgs/discord/template                           |     4 +-
 srcpkgs/docker-compose/template                    |     4 +-
 srcpkgs/dolphin-plugins/template                   |     4 +-
 srcpkgs/dolphin/template                           |     6 +-
 srcpkgs/dragon-player/template                     |     6 +-
 srcpkgs/dvisvgm/template                           |    15 +
 srcpkgs/elisa/template                             |     6 +-
 srcpkgs/engrampa/template                          |     2 +-
 srcpkgs/eom/template                               |     2 +-
 srcpkgs/eventviews/template                        |     4 +-
 srcpkgs/falkon/template                            |     4 +-
 srcpkgs/fbpdf/template                             |     2 +-
 srcpkgs/ffmpegthumbs/template                      |     4 +-
 srcpkgs/filelight/template                         |     6 +-
 srcpkgs/font-kakwafont/template                    |     4 +-
 srcpkgs/fuzzel/template                            |     4 +-
 srcpkgs/gc/template                                |     6 +-
 srcpkgs/gitea/patches/config.patch                 |    74 +-
 srcpkgs/gitea/template                             |    22 +-
 srcpkgs/gofumpt/template                           |    20 +
 srcpkgs/golangci-lint/template                     |     4 +-
 srcpkgs/google-chrome/template                     |     4 +-
 srcpkgs/gpu-screen-recorder/files/README.voidlinux |    35 +
 srcpkgs/gpu-screen-recorder/template               |    24 +
 srcpkgs/gpu-screen-recorder/update                 |     3 +
 srcpkgs/gts/template                               |     2 +-
 srcpkgs/gwenview/template                          |     6 +-
 srcpkgs/harfbuzz/template                          |     4 +-
 srcpkgs/hydroxide/template                         |     4 +-
 srcpkgs/i2pd/patches/boost-1.89.patch              |    70 -
 srcpkgs/i2pd/template                              |     6 +-
 srcpkgs/icdiff/template                            |     4 +-
 srcpkgs/ifstate/template                           |     4 +-
 srcpkgs/incidenceeditor/template                   |     4 +-
 srcpkgs/isoimagewriter/template                    |     4 +-
 srcpkgs/iwd/template                               |     4 +-
 srcpkgs/jujutsu/template                           |     4 +-
 srcpkgs/juk/template                               |     4 +-
 srcpkgs/k3b/template                               |     4 +-
 srcpkgs/kaccounts-providers/template               |     4 +-
 srcpkgs/kaddressbook/template                      |     4 +-
 srcpkgs/kalarm/template                            |     4 +-
 srcpkgs/kamera/template                            |     4 +-
 srcpkgs/kamoso/template                            |     4 +-
 srcpkgs/kapman/template                            |     4 +-
 srcpkgs/kasts/template                             |     6 +-
 srcpkgs/kate/template                              |     6 +-
 srcpkgs/kblocks/template                           |     4 +-
 srcpkgs/kbreakout/template                         |     4 +-
 srcpkgs/kcalc/template                             |     8 +-
 srcpkgs/kcalutils/template                         |     4 +-
 srcpkgs/kcolorchooser/template                     |     4 +-
 srcpkgs/kdeconnect/template                        |     6 +-
 srcpkgs/kdegraphics-thumbnailers/template          |     4 +-
 srcpkgs/kdenlive/template                          |     6 +-
 srcpkgs/kdepim-runtime/template                    |     4 +-
 srcpkgs/kdevelop-php/template                      |     4 +-
 srcpkgs/kdevelop-python/template                   |     4 +-
 srcpkgs/kdevelop/template                          |     4 +-
 srcpkgs/kdialog/template                           |     4 +-
 srcpkgs/kexec-tools/template                       |     6 +-
 srcpkgs/kf6-akonadi/template                       |     6 +-
 srcpkgs/kf6-grantleetheme/template                 |     4 +-
 .../patches/cmake-parse-args.patch                 |    18 -
 srcpkgs/kf6-kaccounts-integration/template         |     4 +-
 srcpkgs/kget/template                              |     4 +-
 srcpkgs/kgpg/template                              |     4 +-
 srcpkgs/khelpcenter/template                       |     4 +-
 srcpkgs/kidentitymanagement/template               |     6 +-
 srcpkgs/kimap/template                             |     4 +-
 srcpkgs/kio-admin/template                         |     4 +-
 srcpkgs/kio-extras/template                        |     4 +-
 srcpkgs/kldap/template                             |     4 +-
 srcpkgs/kleopatra/template                         |     4 +-
 srcpkgs/kmahjongg/template                         |     4 +-
 srcpkgs/kmail-account-wizard/template              |     6 +-
 srcpkgs/kmail/template                             |     4 +-
 srcpkgs/kmailtransport/template                    |     4 +-
 srcpkgs/kmbox/template                             |     4 +-
 srcpkgs/kmime6/template                            |     4 +-
 srcpkgs/kmines/template                            |     4 +-
 srcpkgs/kmplot/template                            |     4 +-
 srcpkgs/knights/template                           |     4 +-
 srcpkgs/konqueror/template                         |     6 +-
 srcpkgs/konquest/template                          |     4 +-
 srcpkgs/konsole/template                           |     4 +-
 srcpkgs/kontact/template                           |     4 +-
 srcpkgs/kontactinterface/template                  |     6 +-
 srcpkgs/korganizer/template                        |     4 +-
 srcpkgs/kpimtextedit/template                      |     4 +-
 srcpkgs/kpmcore/template                           |     4 +-
 srcpkgs/kqtquickcharts/template                    |     4 +-
 srcpkgs/krdc/template                              |     4 +-
 srcpkgs/krfb/template                              |     6 +-
 srcpkgs/ksanecore6/template                        |     4 +-
 srcpkgs/ksmtp/template                             |     4 +-
 srcpkgs/ktnef/template                             |     4 +-
 srcpkgs/ktorrent/template                          |     4 +-
 srcpkgs/ktuberling/template                        |     4 +-
 srcpkgs/kunifiedpush/template                      |     4 +-
 srcpkgs/kwalletmanager/template                    |     4 +-
 srcpkgs/lazygit/template                           |     4 +-
 srcpkgs/libX11/template                            |     6 +-
 srcpkgs/libbpf/template                            |     4 +-
 srcpkgs/libcap/template                            |     4 +-
 srcpkgs/libgravatar/template                       |     4 +-
 srcpkgs/libkdcraw-qt6/template                     |     4 +-
 srcpkgs/libkdcraw5/template                        |     4 +-
 srcpkgs/libkdepim/template                         |     4 +-
 srcpkgs/libkexiv2/template                         |     4 +-
 srcpkgs/libkgapi/template                          |     4 +-
 srcpkgs/libkleo/template                           |     4 +-
 srcpkgs/libkmahjongg/template                      |     4 +-
 srcpkgs/libksieve/template                         |     4 +-
 srcpkgs/libktorrent/template                       |     4 +-
 srcpkgs/libmatekbd/template                        |     2 +-
 srcpkgs/libmatemixer/template                      |     2 +-
 srcpkgs/libmateweather/template                    |     2 +-
 srcpkgs/liborcus/template                          |    19 +-
 srcpkgs/libqmobipocket6/template                   |     4 +-
 srcpkgs/libreoffice-dictionaries/template          |     7 +-
 srcpkgs/libreoffice/template                       |    35 +-
 srcpkgs/libwacom/template                          |     4 +-
 srcpkgs/libwpe/template                            |     4 +-
 srcpkgs/limine/template                            |     4 +-
 srcpkgs/linux-asahi/files/arm64-dotconfig          |     6 +-
 srcpkgs/linux-asahi/template                       |     4 +-
 srcpkgs/linux6.1/files/i386-dotconfig              |     2 +-
 srcpkgs/linux6.1/files/x86_64-dotconfig            |     2 +-
 srcpkgs/linux6.12/files/arm64-dotconfig            |     3 +-
 srcpkgs/linux6.12/files/i386-dotconfig             |     4 +-
 srcpkgs/linux6.12/files/x86_64-dotconfig           |     4 +-
 srcpkgs/linux6.12/patches/x13s-camera.patch        |   105 -
 srcpkgs/linux6.12/template                         |     4 +-
 srcpkgs/linux6.18/files/arm64-dotconfig            |     3 +-
 srcpkgs/linux6.18/files/i386-dotconfig             |     4 +-
 srcpkgs/linux6.18/files/x86_64-dotconfig           |    13 +-
 srcpkgs/linux6.18/patches/x13s-camera.patch        |   105 -
 srcpkgs/linux6.18/template                         |     4 +-
 srcpkgs/linux6.19-dbg                              |     1 +
 srcpkgs/linux6.19-headers                          |     1 +
 srcpkgs/linux6.19/files/arm64-dotconfig            | 14340 +++++++++++++++++++
 srcpkgs/linux6.19/files/i386-dotconfig             | 11654 +++++++++++++++
 srcpkgs/linux6.19/files/mv-debug                   |     8 +
 srcpkgs/linux6.19/files/x86_64-dotconfig           | 12198 ++++++++++++++++
 srcpkgs/linux6.19/patches/fix-musl-btf-ids.patch   |    15 +
 srcpkgs/linux6.19/patches/fixdep-largefile.patch   |    11 +
 srcpkgs/linux6.19/template                         |   358 +
 srcpkgs/linux6.6/files/arm64-dotconfig             |     3 +-
 srcpkgs/linux6.6/files/i386-dotconfig              |     4 +-
 srcpkgs/linux6.6/files/x86_64-dotconfig            |     4 +-
 srcpkgs/linux6.6/template                          |     4 +-
 srcpkgs/luanti/template                            |     4 +-
 srcpkgs/mailcommon/template                        |     4 +-
 srcpkgs/mailimporter/template                      |     4 +-
 srcpkgs/mangowc/template                           |     4 +-
 srcpkgs/marco/template                             |     2 +-
 srcpkgs/marknote/template                          |    18 +
 srcpkgs/mate-applets/template                      |     2 +-
 srcpkgs/mate-backgrounds/template                  |     2 +-
 srcpkgs/mate-common/template                       |     2 +-
 srcpkgs/mate-control-center/template               |     2 +-
 srcpkgs/mate-desktop/template                      |     2 +-
 srcpkgs/mate-extra/template                        |     2 +-
 srcpkgs/mate-icon-theme/template                   |     2 +-
 srcpkgs/mate-indicator-applet/template             |     2 +-
 srcpkgs/mate-media/template                        |     2 +-
 srcpkgs/mate-menus/template                        |     2 +-
 srcpkgs/mate-netbook/template                      |     2 +-
 srcpkgs/mate-notification-daemon/template          |     2 +-
 srcpkgs/mate-panel/template                        |     2 +-
 srcpkgs/mate-polkit/template                       |     2 +-
 srcpkgs/mate-power-manager/template                |     2 +-
 srcpkgs/mate-screensaver/template                  |     2 +-
 srcpkgs/mate-sensors-applet/template               |     2 +-
 srcpkgs/mate-session-manager/template              |     2 +-
 srcpkgs/mate-settings-daemon/template              |     2 +-
 srcpkgs/mate-system-monitor/template               |     2 +-
 srcpkgs/mate-terminal/template                     |     2 +-
 srcpkgs/mate-themes/template                       |     2 +-
 srcpkgs/mate-user-guide/template                   |     2 +-
 srcpkgs/mate-utils/template                        |     2 +-
 srcpkgs/mate/template                              |     2 +-
 srcpkgs/merkuro/template                           |     6 +-
 srcpkgs/messagelib/template                        |     4 +-
 srcpkgs/mimetreeparser/template                    |     6 +-
 srcpkgs/mise/template                              |     8 +-
 srcpkgs/mkinitcpio-tailscale/template              |     8 +-
 srcpkgs/mozo/template                              |     2 +-
 srcpkgs/mupdf/template                             |    24 +-
 srcpkgs/neochat/template                           |     6 +-
 srcpkgs/nghttp2/template                           |     4 +-
 srcpkgs/nginx/template                             |    10 +-
 srcpkgs/ntfy/template                              |     4 +-
 srcpkgs/numbat/template                            |     4 +-
 srcpkgs/okteta/template                            |     4 +-
 srcpkgs/okular/template                            |     6 +-
 srcpkgs/oniux/template                             |     4 +-
 srcpkgs/ostree/template                            |     7 +-
 srcpkgs/partitionmanager/template                  |     4 +-
 srcpkgs/pim-data-exporter/template                 |     4 +-
 srcpkgs/pimcommon/template                         |     4 +-
 srcpkgs/pluma/template                             |     2 +-
 srcpkgs/polkit/template                            |     6 +-
 srcpkgs/probe-rs/template                          |     5 +-
 srcpkgs/python3-defcon/template                    |    17 +
 srcpkgs/python3-fontpens/template                  |    18 +
 srcpkgs/python3-parso/template                     |     6 +-
 srcpkgs/python3-pip/template                       |     4 +-
 srcpkgs/python3-pyproject-metadata/template        |     4 +-
 srcpkgs/python3-pyrate-limiter/template            |    23 +
 srcpkgs/python3-redis/template                     |     4 +-
 srcpkgs/python3-requests-ratelimiter/template      |    20 +
 srcpkgs/python3-tkinter/template                   |     4 +-
 srcpkgs/python3/template                           |     6 +-
 srcpkgs/qtutilities/template                       |     4 +-
 srcpkgs/rpi-base/template                          |     4 +-
 srcpkgs/rpi-eeprom/template                        |     6 +-
 srcpkgs/rpi-firmware/template                      |    10 +-
 srcpkgs/rpi-kernel/files/arm64-dotconfig           |     9 +-
 srcpkgs/rpi-kernel/files/armv6-dotconfig           |     6 +-
 srcpkgs/rpi-kernel/files/armv7-dotconfig           |     6 +-
 srcpkgs/rpi-kernel/template                        |     6 +-
 srcpkgs/rpi-utils/template                         |     6 +-
 srcpkgs/sdl12-compat/template                      |     6 +-
 srcpkgs/seaweedfs/template                         |     4 +-
 srcpkgs/sioyek/template                            |     2 +-
 srcpkgs/supersonic-desktop/template                |     4 +-
 srcpkgs/tarlz/template                             |     4 +-
 srcpkgs/tombi/template                             |     4 +-
 srcpkgs/ty/template                                |     4 +-
 srcpkgs/typos-lsp/template                         |     4 +-
 srcpkgs/warzone2100/template                       |     6 +-
 srcpkgs/wine/template                              |     6 +-
 srcpkgs/wl-mirror/template                         |     4 +-
 srcpkgs/wofi/template                              |     4 +-
 .../patches/musl-missing-include.patch             |    22 +
 srcpkgs/wpebackend-fdo/template                    |     4 +-
 srcpkgs/xbps/template                              |     4 +-
 srcpkgs/xcalc/template                             |     4 +-
 srcpkgs/xl2tpd/template                            |     4 +-
 srcpkgs/yq-go/template                             |     4 +-
 srcpkgs/z3/template                                |     6 +-
 srcpkgs/zathura-pdf-mupdf/template                 |     2 +-
 288 files changed, 39694 insertions(+), 1016 deletions(-)
 create mode 100644 srcpkgs/afdko/template
 create mode 100644 srcpkgs/asymptote/patches/asymptote-2.70-info.patch
 create mode 100644 srcpkgs/asymptote/patches/asymptote-2.92-xdg-utils.patch
 create mode 100644 srcpkgs/asymptote/patches/asymptote-3.00-gc-check.patch
 create mode 100644 srcpkgs/asymptote/patches/asymptote-3.05-boost-1.88.patch
 create mode 100644 srcpkgs/asymptote/patches/asymptote-3.05-boost-1.89.patch
 create mode 100644 srcpkgs/asymptote/patches/asymptote-3.05-system-gc.patch
 create mode 100644 srcpkgs/asymptote/template
 delete mode 100644 srcpkgs/beets/patches/3eb68ef830447d91b10a928823edb3c50cf73f48.patch
 delete mode 100644 srcpkgs/clifm/patches/0001-musl-define.patch
 create mode 100644 srcpkgs/dvisvgm/template
 create mode 100644 srcpkgs/gofumpt/template
 create mode 100644 srcpkgs/gpu-screen-recorder/files/README.voidlinux
 create mode 100644 srcpkgs/gpu-screen-recorder/template
 create mode 100644 srcpkgs/gpu-screen-recorder/update
 delete mode 100644 srcpkgs/i2pd/patches/boost-1.89.patch
 delete mode 100644 srcpkgs/kf6-kaccounts-integration/patches/cmake-parse-args.patch
 delete mode 100644 srcpkgs/linux6.12/patches/x13s-camera.patch
 delete mode 100644 srcpkgs/linux6.18/patches/x13s-camera.patch
 create mode 120000 srcpkgs/linux6.19-dbg
 create mode 120000 srcpkgs/linux6.19-headers
 create mode 100644 srcpkgs/linux6.19/files/arm64-dotconfig
 create mode 100644 srcpkgs/linux6.19/files/i386-dotconfig
 create mode 100755 srcpkgs/linux6.19/files/mv-debug
 create mode 100644 srcpkgs/linux6.19/files/x86_64-dotconfig
 create mode 100644 srcpkgs/linux6.19/patches/fix-musl-btf-ids.patch
 create mode 100644 srcpkgs/linux6.19/patches/fixdep-largefile.patch
 create mode 100644 srcpkgs/linux6.19/template
 create mode 100644 srcpkgs/marknote/template
 create mode 100644 srcpkgs/python3-defcon/template
 create mode 100644 srcpkgs/python3-fontpens/template
 create mode 100644 srcpkgs/python3-pyrate-limiter/template
 create mode 100644 srcpkgs/python3-requests-ratelimiter/template
 create mode 100644 srcpkgs/wpebackend-fdo/patches/musl-missing-include.patch

-


4). 「ブートストラップ パッケージ」の更新:

$ cd ~/git/void-packages/
$ ./xbps-src bootstrap-update
:
=> xbps-src: updating repositories for host (x86_64)...
[*] Updating repository `https://repo-default.voidlinux.org/current/bootstrap/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/nonfree/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/debug/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/multilib/bootstrap/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/multilib/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/multilib/nonfree/x86_64-repodata' ...
=> xbps-src: updating software in / masterdir...
=> xbps-src: cleaning up / masterdir...
=> xbps-src: removing autodeps, please wait...

-


5). 再起動:

$ sudo reboot

-

-


- --- - --- - --- - --- - --- - --- - --- ----- -

1-2. もし、「仮想マシン」で作業しているなら「クローン」を作成:

-

クローンを作成しておけば、思い切ったトライができます:

-

操作例は「こちら」を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- --

2. 中国式四人麻雀「@kajongg」ゲームの移植:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ---

2-1. 「@kajongg」ゲームの移植について:

-

「中国式四人麻雀」 (kajongg) ゲームは、 「Void Linux」のリポジトリからインストールできません:

 動かしたいときは、今のところ「Flatpak」でインストールすることになります。

-

今回は、その「@kajongg」ゲームを「Void Linux」に移植してみました:

-

公式サイト: Kajongg

-

ソース:   Browse source code

リリース:  25.12.02 (2026-02-05)

-

依存パッケージ:

→ソースの「CMakeLists.txt」にて、「find_package」をキーにして検索しました:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----

2-2. 「@kajongg」の依存パッケージを確認:

-

公式サイト には、「debian.control」などの Ubuntu 向けの情報しか見当たりません:

パッケージ名が「Void Linux」に近い「Arch Linux」系なら使えるので、探してみました:

-


1). アプリの「パッケージ化」(ビルド)時に必要なパッケージ:

参考: PKGBUILD · main · Arch Linux / Packaging / Packages / kajongg

-

「Void Linux」でのパッケージ名:
libkmahjongg-devel
python3
python3-QtPy
python3-Twisted
python3-zope.interface
python3-pyqt6-bindings
extra-cmake-modules
kf6-kdoctools-devel

-


2). アプリの「実行時」に必要なパッケージ:

例. 「Alter Linux Xfce」(Arch 系)にて、 「kajongg」(バイナリ)をインストール:

$ sudo apt install kajongg
自動でインストールされたパッケージ:
パッケージ(12)

python-attrs          → python3-attrs
python-automat         → python3-automat
python-click          → python3-click
python-constantly       → python3-constantly
python-hyperlink        → python3-hyperlink
python-increment        → python3-incremental
python-pyqt5          → python3-pyqt6
python-pyqt5-sip        → python3-pyqt6-sip
python-twisted         → python3-Twisted
python-typing_extensions   → python3-typing_extensions
python-zope-interface     → python3-zope.interface
kajongg             → 「本パッケージ」
→つまり、「kajongg」の「実行時」に必要なパッケージです:

使うのは、この中の数個:

-


3). 「音声」を聞きたい場合にインストール:

vorbis-tools

-

-


- --- - --- - --- - --- - --- - --- - --- ----- -----

3. 「@kajongg」ゲームの「テンプレート」を作成:

-


1). 「テンプレート」フォルダを作成:

$ cd ~/git/void-packages/
$ mkdir -p srcpkgs/@kajongg/patches/

→日本語化するので、「patches/」まで作っておくのがミソ:

-


2). 「テンプレート」ファイルを作成:

$ sudo featherpad ~/git/void-packages/srcpkgs/@kajongg/template

↓ すべて貼付け:

# Template file for '@kajongg'
pkgname=@kajongg
version=25.12.2
revision=1
build_style=cmake
_pyqt="python3-QtPy python3-Twisted python3-zope.interface"
hostmakedepends="python3 qt6-tools pkg-config"
makedepends="gettext extra-cmake-modules qt6-svg-devel qt6-widgets 
   python3 ${_pyqt}
   kf6-ki18n-devel kf6-kdoctools-devel libkmahjongg-devel"
depends="python3-pyqt6 ${_pyqt} 
   python3-pyqt6-svg python3-pyqt6-gui python3-pyqt6-widgets vorbis-tools"
short_desc="The ancient Chinese Mahjong for 4 players"
maintainer="Kubuntu Developers <kubuntu-devel@lists.ubuntu.com>"
license="GPL-2.0-or-later"
homepage="https://apps.kde.org/kajongg/"
distfiles="https://invent.kde.org/games/kajongg/-/archive/v${version}/kajongg-v${version}.tar.gz"
checksum=390808d9b8f89f8f52a546ce17c008ef6255f31f3914d5796347a9ba081179a0
python_version=3

→Ctrl+S で保存:

-


3). エラー回避のために、いくつかのパッケージを追加しました:

-

(1). 「パッケージ化」(ビルド)時に必要なパッケージは、

「hostmakedepends=」と「makedepends=」で指定しました:

-

「パッケージ化」後のパッケージのインストール時に、自動でインストールされる、つまり、

(2). 実行時に必要なパッケージは、

(今回の場合は「qtpy」関連を)「depends=」で指定しました:

-

(3). インストール時に「画面表示しない」問題が出たので、

「端末」で「$ kajongg」としてアプリを起動し、

表示された、不足しているパッケージを「depends=」で指定しました:

-

エラー例.  ImportError: cannot import name 'QtWidgets' from 'PyQt6'

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- -

4. 「@kajongg」ゲームのパッチを作成:

-

日本語化のパッチです:

-

パッチを作成した履歴は「項番 60.」を参照:

-


1). 「パッチ1」(起動メニューの日本語化)の作成:

詳細は「項番 61.」を参照:

-

$ cd ~/git/void-packages/srcpkgs/@kajongg/patches/
$ sudo featherpad 01.kajongg.desktop.patch

↓ すべて貼付け:

--- a/org.kde.kajongg.desktop    2026-02-11 03:17:31.409714551 +0900
+++ b/org.kde.kajongg.desktop   2026-02-11 03:27:08.990654361 +0900
@@ -25,6 +25,7 @@
 Name[ia]=Re Kajongg
 Name[is]=Kajongg
 Name[it]=Kajongg
+Name[ja]=Kajongg 中国式四人麻雀
 Name[ka]=Kajongg
 Name[kk]=Kajongg
 Name[km]=​Kajongg

お尻に 2つの空行を追加

→Ctrl+S で保存:

-


2). 「パッチ2」(既存のPO ファイルの削除)の作成:

既存の「翻訳ファイル」は、 アプリの更新に伴う翻訳漏れがあったので、削除しました:

詳細は「項番 62.」を参照:

-

$ cd ~/git/void-packages/srcpkgs/@kajongg/patches/
$ sudo featherpad 02.kajongg.po-del.patch

↓ すべて貼付け:

--- a/po/ja/kajongg.po   2026-02-11 03:45:48.240778172 +0900
+++ b/po/ja/kajongg.po  1970-01-01 09:00:00.000000000 +0900
@@ -1,2427 +0,0 @@
-# Translation of kmj into Japanese.
-# Yukiko Bando <ybando@k6.dion.ne.jp>, 2009.
-msgid ""
-msgstr ""
-"Project-Id-Version: kmj\n"
-"Report-Msgid-Bugs-To: wolfgang@rohdewald.de\n"
-"POT-Creation-Date: 2025-11-17 14:39+0000\n"
-"PO-Revision-Date: 2010-09-26 12:18-0700\n"
-"Last-Translator: Fumiaki Okushi <okushi@kde.gr.jp>\n"
-"Language-Team: Japanese <kde-jp@kde.org>\n"
-"Language: ja\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Accelerator-Marker: &\n"
-"X-Text-Markup: kde4\n"
-
-msgctxt "kajongg"
-msgid "Game"
-msgstr "ゲーム"
-
-msgid "View"
-msgstr ""
-
-msgid "Toolbar"
-msgstr "ツールバー"
-
-#: src/background.py:71 src/tileset.py:48
-msgid "file <filename>%1</filename> contains no valid SVG"
-msgstr "ファイル <filename>%1</filename> には有効な SVG が含まれていません"
-
-#: src/backgroundselector.py:107
-#, fuzzy
-#| msgid "Preview"
-msgctxt "BackgroundSelector"
-msgid "Preview"
-msgstr "プレビュー"
-
-#: src/backgroundselector.py:108
-#, fuzzy
-#| msgid "Properties"
-msgctxt "BackgroundSelector"
-msgid "Properties"
-msgstr "プロパティ"
-
-#: src/backgroundselector.py:109
-#, fuzzy
-#| msgid "Author:"
-msgctxt "BackgroundSelector"
-msgid "Author:"
-msgstr "作者:"
-
-#: src/backgroundselector.py:110
-#, fuzzy
-#| msgid "Contact:"
-msgctxt "BackgroundSelector"
-msgid "Contact:"
-msgstr "連絡先:"
-
-#: src/backgroundselector.py:111
-#, fuzzy
-#| msgid "Description:"
-msgctxt "BackgroundSelector"
-msgid "Description:"
-msgstr "説明:"
-
-#: src/board.py:335
-msgctxt "kajongg:arrow keys hjkl like in konqueror"
-msgid "hjklHJKL"
-msgstr ""
-
-#: src/board.py:385
-msgid "Choose from"
-msgstr ""
-
-#: src/chat.py:51
-msgid "Time"
-msgstr ""
-
-#: src/chat.py:51 src/playerlist.py:90
-#, fuzzy
-#| msgctxt "kajongg"
-#| msgid "Player"
-msgid "Player"
-msgstr "プレイヤー"
-
-#: src/chat.py:51
-msgid "Message"
-msgstr ""
-
-#: src/chat.py:125
-msgid "Chat on table %1 at %2"
-msgstr ""
-
-#: src/client.py:69
-msgctxt "table status"
-msgid "Suspended"
-msgstr ""
-
-#: src/client.py:74
-msgctxt "table status"
-msgid "Running"
-msgstr ""
-
-#: src/client.py:75
-msgctxt "table status"
-msgid "New"
-msgstr "新規"
-
-#: src/configdialog.py:47
-msgid "Show tile shadows"
-msgstr ""
-
-#: src/configdialog.py:50
-msgid "Rearrange undisclosed tiles to melds"
-msgstr ""
-
-#: src/configdialog.py:53
-#, fuzzy
-#| msgid "Show only pending games"
-msgid "Show only possible actions"
-msgstr "進行中のゲームのみを表示する"
-
-#: src/configdialog.py:56
-msgid "Propose what to do"
-msgstr ""
-
-#: src/configdialog.py:62
-msgid "Animation speed:"
-msgstr ""
-
-#: src/configdialog.py:66
-msgid "Use sounds if available"
-msgstr ""
-
-#: src/configdialog.py:69
-msgid "Let others hear my voice"
-msgstr ""
-
-#: src/configdialog.py:103
-msgctxt "kajongg"
-msgid "Play"
-msgstr "プレイ"
-
-#: src/configdialog.py:106
-msgid "Tiles"
-msgstr "牌"
-
-#: src/configdialog.py:109
-msgid "Backgrounds"
-msgstr "背景"
-
-#: src/deferredutil.py:272 src/deferredutil.py:436
-msgid "The game server lost connection to player %1"
-msgstr ""
-
-#: src/deferredutil.py:275
-msgid ""
-"Error for player %1: %2\n"
-"%3"
-msgstr ""
-
-#: src/differ.py:72
-msgctxt "Kajongg"
-msgid "Rule"
-msgstr ""
-
-#: src/differ.py:127
-msgctxt "@title:window"
-msgid "Compare"
-msgstr ""
-
-#: src/differ.py:170 src/differ.py:172
-msgctxt "Kajongg-Rule"
-msgid "not defined"
-msgstr ""
-
-#: src/game.py:404
-msgid "Score computed manually"
-msgstr ""
-
-#: src/game.py:502
-msgid "Player %1 not known"
-msgstr ""
-
-#: src/game.py:925
-msgid "Short living wall: Tile is invisible, hence dangerous"
-msgstr ""
-
-#: src/games.py:95 src/playerlist.py:67 src/tables.py:67
-msgid "Players"
-msgstr "プレイヤー"
-
-#: src/games.py:95
-msgid "Started"
-msgstr ""
-
-#: src/games.py:107
-#, fuzzy
-#| msgctxt "kajongg"
-#| msgid "Games"
-msgctxt "@title:window"
-msgid "Games"
-msgstr "ゲーム"
-
-#: src/games.py:124
-#, fuzzy
-#| msgid "&New"
-msgctxt "start a new game"
-msgid "&New"
-msgstr "新規(&N)"
-
-#: src/games.py:129
-msgid "&Load"
-msgstr "読み込み(&L)"
-
-#: src/games.py:134 src/playerlist.py:56
-msgid "&Delete"
-msgstr "削除(&D)"
-
-#: src/games.py:139
-msgid "Show only pending games"
-msgstr "進行中のゲームのみを表示する"
-
-#: src/games.py:247
-msgid ""
-"Do you really want to delete <numid>%1</numid> games?<br>This will be final, "
-"you cannot cancel it with the cancel button"
-msgstr ""
-
-#: src/guiutil.py:134 src/kdestub.py:120 src/kdestub.py:123
-msgid "Kajongg"
-msgstr "Kajongg"
-
-#: src/humanclient.py:66
-msgid "Which chow do you want to expose?"
-msgstr ""
-
-#: src/humanclient.py:104
-msgid "Which kong do you want to declare?"
-msgstr ""
-
-#: src/humanclient.py:172
-msgid "Choose"
-msgstr ""
-
-#: src/humanclient.py:383
-msgid "You cannot say %1"
-msgstr ""
-
-#: src/humanclient.py:608
-msgid "Player %1 has left the table"
-msgstr ""
-
-#: src/humanclient.py:671
-msgid ""
-"The game on table <numid>%1</numid> can begin. Are you ready to play now?"
-msgstr ""
-
-#: src/humanclient.py:691
-msgid "Ready for next hand?"
-msgstr ""
-
-#: src/humanclient.py:967
-msgid "The connection to the server %1 broke, please try again later."
-msgstr ""
-
-#: src/kajongg.py:81 src/kdestub.py:1092
-msgid "Mah Jongg - the ancient Chinese board game for 4 players"
-msgstr ""
-
-#: src/kajongg.py:85
-msgid "all robots play with visible concealed tiles"
-msgstr ""
-
-#: src/kajongg.py:86
-msgid "start with demo mode"
-msgstr ""
-
-#: src/kajongg.py:87
-msgid "login to HOST"
-msgstr ""
-
-#: src/kajongg.py:88
-msgid "start new TABLE"
-msgstr ""
-
-#: src/kajongg.py:89
-msgid "join TABLE"
-msgstr ""
-
-#: src/kajongg.py:90
-msgid "use RULESET without asking"
-msgstr ""
-
-#: src/kajongg.py:91
-msgid "prefer PLAYER for next login"
-msgstr ""
-
-#: src/kajongg.py:92
-msgid "use AI variant for human player in demo mode"
-msgstr ""
-
-#: src/kajongg.py:93
-msgid "write statistics to CSV"
-msgstr ""
-
-#: src/kajongg.py:94
-msgid "show all available rulesets"
-msgstr ""
-
-#: src/kajongg.py:95
-msgid "for testing purposes: Initializes the random generator"
-msgstr ""
-
-#: src/kajongg.py:97
-msgid "show no graphical user interface. Intended only for testing"
-msgstr ""
-
-#: src/kajongg.py:99
-msgid ""
-"use a dedicated server already running and listening on SOCKET. Intended "
-"only for testing"
-msgstr ""
-
-#: src/kajongg.py:101
-msgid ""
-"use a dedicated server already running and listening on PORT. Intended only "
-"for testing"
-msgstr ""
-
-#: src/kdestub.py:278
-#, fuzzy
-#| msgctxt "kajongg"
-#| msgid "OK"
-msgid "&OK"
-msgstr "OK"
-
-#: src/kdestub.py:279
-msgid "&Apply"
-msgstr ""
-
-#: src/kdestub.py:280
-msgid "&Cancel"
-msgstr "キャンセル(&C)"
-
-#: src/kdestub.py:281 src/kdestub.py:469
-msgid "&Help"
-msgstr ""
-
-#: src/kdestub.py:282
-msgid "&Defaults"
-msgstr ""
-
-#: src/kdestub.py:352
-#, fuzzy
-#| msgid "Toolbar"
-msgctxt "@action:inmenu"
-msgid "Show St&atusbar"
-msgstr "ツールバー"
-
-#: src/kdestub.py:358
-#, fuzzy
-#| msgid "Toolbar"
-msgctxt "@action:inmenu"
-msgid "Show &Toolbar"
-msgstr "ツールバー"
-
-#: src/kdestub.py:364
-#, fuzzy
-#| msgid "Kajongg"
-msgid "Configure Tool&bars..."
-msgstr "Kajongg"
-
-#: src/kdestub.py:366
-msgid "Configure toolbars"
-msgstr ""
-
-#: src/kdestub.py:373
-#, fuzzy
-#| msgid "Kajongg"
-msgid "Configure &Kajongg..."
-msgstr "Kajongg"
-
-#: src/kdestub.py:375 src/kdestub.py:1153
-msgid "Configure"
-msgstr ""
-
-#: src/kdestub.py:465
-#, fuzzy
-#| msgctxt "kajongg"
-#| msgid "Game"
-msgid "&Game"
-msgstr "ゲーム"
-
-#: src/kdestub.py:466
-msgid "&View"
-msgstr ""
-
-#: src/kdestub.py:467
-msgid "&Settings"
-msgstr ""
-
-#: src/kdestub.py:477
-msgctxt "@action:inmenu"
-msgid "&Help"
-msgstr ""
-
-#: src/kdestub.py:480 src/kdestub.py:857
-msgid "Switch Application Language"
-msgstr ""
-
-#: src/kdestub.py:484
-#, fuzzy
-#| msgid "Kajongg"
-msgctxt "@action:inmenu"
-msgid "About &Kajongg"
-msgstr "Kajongg"
-
-#: src/kdestub.py:862
-msgid "Please choose the language which should be used for this application:"
-msgstr ""
-
-#: src/kdestub.py:881
-msgid "Add Fallback Language"
-msgstr ""
-
-#: src/kdestub.py:893
-msgid "Primary language:"
-msgstr ""
-
-#: src/kdestub.py:893
-msgid "Fallback language:"
-msgstr ""
-
-#: src/kdestub.py:899
-msgid "Remove"
-msgstr ""
-
-#: src/kdestub.py:903
-msgid ""
-"This is the main application language which will be used first, before any "
-"other languages."
-msgstr ""
-
-#: src/kdestub.py:905
-msgid ""
-"This is the language which will be used if any previous languages do not "
-"contain a proper translation."
-msgstr ""
-
-#: src/kdestub.py:1035
-#, fuzzy
-#| msgid "Kajongg"
-msgid "About Kajongg"
-msgstr "Kajongg"
-
-#: src/kdestub.py:1055
-msgid "Version: %1"
-msgstr ""
-
-#: src/kdestub.py:1056
-msgid "Protocol version %1"
-msgstr ""
-
-#: src/kdestub.py:1059
-msgid "Original author"
-msgstr ""
-
-#: src/kdestub.py:1066
-msgid "KDE Frameworks (not installed or not usable)"
-msgstr ""
-
-#: src/kdestub.py:1072
-msgctxt "kajongg"
-msgid "Using versions %1"
-msgstr ""
-
-# skip-rule: player2
-#: src/kdestub.py:1093
-msgid ""
-"This is the classical Mah Jongg for four players. If you are looking for Mah "
-"Jongg solitaire please use the application kmahjongg."
-msgstr ""
-"これは 4 人でプレイする伝統的なマージャンです。マージャン牌を使ったソリティア"
-"ゲームを探しているのであれば、KMahjongg を使ってください。"
-
-#: src/kdestub.py:1110
-msgid ""
-"Please use <a href=\"https://bugs.kde.org\">https://bugs.kde.org</a> to "
-"report bugs."
-msgstr ""
-
-#: src/kdestub.py:1115
-#, fuzzy
-#| msgid "Author:"
-msgid "Authors:"
-msgstr "作者:"
-
-#: src/kdestub.py:1356
-msgid "Configure Toolbars"
-msgstr ""
-
-#: src/kdestub.py:1358
-msgid "A&vailable actions:"
-msgstr ""
-
-#: src/kdestub.py:1369
-msgid "Curr&ent actions:"
-msgstr ""
-
-#: src/login.py:177
-msgid "trying to start local server %1"
-msgstr ""
-
-#: src/login.py:188 src/login.py:637
-msgid "removed stale socket <filename>%1</filename>"
-msgstr ""
-
-#: src/login.py:208
-msgid "started the local kajongg server: pid=<numid>%1</numid> %2"
-msgstr ""
-
-#: src/login.py:251
-msgctxt "kajongg"
-msgid "Login"
-msgstr ""
-
-#: src/login.py:300 src/login.py:406
-msgid "Game server:"
-msgstr ""
-
-#: src/login.py:303 src/login.py:408
-msgid "Username:"
-msgstr ""
-
-#: src/login.py:306 src/login.py:411
-msgid "Password:"
-msgstr ""
-
-#: src/login.py:308
-msgctxt "kajongg"
-msgid "Ruleset:"
-msgstr ""
-
-#: src/login.py:400
-msgctxt "@title:window"
-msgid "Create User Account"
-msgstr ""
-
-#: src/login.py:414
-msgid "Repeat password:"
-msgstr ""
-
-#: src/login.py:565
-msgid "You are already connected to server %1"
-msgstr ""
-
-#: src/login.py:605
-msgctxt "USER is not known on SERVER"
-msgid "%1 is not known on %2, do you want to open an account?"
-msgstr ""
-
-#: src/login.py:618
-msgid "Server %1 did not answer"
-msgstr ""
-
-#: src/login.py:620
-msgid "Server %1 refused connection"
-msgstr ""
-
-#: src/login.py:622
-msgid "Server %1 does not run a kajongg server"
-msgstr ""
-
-#: src/login.py:624
-msgid "Address for server %1 cannot be found"
-msgstr ""
-
-#: src/login.py:627
-msgid "Login to server %1 failed: You have no network connection"
-msgstr ""
-
-#: src/login.py:638
-msgid "Please try again"
-msgstr ""
-
-#: src/mainwindow.py:486
-#, fuzzy
-#| msgid "&Score Table"
-msgctxt "@action:inmenu"
-msgid "&Score Manual Game"
-msgstr "スコア表(&S)"
-
-#: src/mainwindow.py:488
-#, fuzzy
-#| msgid "&Score Table"
-msgctxt "@action:intoolbar"
-msgid "Manual Game"
-msgstr "スコア表(&S)"
-
-#: src/mainwindow.py:491
-#, fuzzy
-#| msgid "&Score Table"
-msgctxt "kajongg @info:tooltip"
-msgid "&Score a manual game."
-msgstr "スコア表(&S)"
-
-#: src/mainwindow.py:493
-#, fuzzy
-#| msgid "&Play"
-msgctxt "@action:intoolbar"
-msgid "&Play"
-msgstr "プレイ(&P)"
-
-#: src/mainwindow.py:496
-#, fuzzy
-#| msgid "&Score Table"
-msgctxt "kajongg @info:tooltip"
-msgid "Start a new game."
-msgstr "スコア表(&S)"
-
-#: src/mainwindow.py:498
-#, fuzzy
-#| msgid "&Abort"
-msgctxt "@action:inmenu"
-msgid "&Abort Game"
-msgstr "中止(&A)"
-
-#: src/mainwindow.py:502
-msgctxt "kajongg @info:tooltip"
-msgid "Abort the current game."
-msgstr ""
-
-#: src/mainwindow.py:504
-#, fuzzy
-#| msgid "Kajongg"
-msgctxt "@action:inmenu"
-msgid "&Quit Kajongg"
-msgstr "Kajongg"
-
-#: src/mainwindow.py:507
-#, fuzzy
-#| msgid "&Players"
-msgctxt "@action:intoolbar"
-msgid "&Players"
-msgstr "プレイヤー(&P)"
-
-#: src/mainwindow.py:510
-msgctxt "kajongg @info:tooltip"
-msgid "define your players."
-msgstr ""
-
-#: src/mainwindow.py:512
-msgctxt "@action:intoolbar"
-msgid "&Rulesets"
-msgstr ""
-
-#: src/mainwindow.py:515
-msgctxt "kajongg @info:tooltip"
-msgid "customize rulesets."
-msgstr ""
-
-#: src/mainwindow.py:519
-msgctxt "@action:inmenu"
-msgid "&Change Visual Angle"
-msgstr ""
-
-#: src/mainwindow.py:520
-msgctxt "@action:intoolbar"
-msgid "Angle"
-msgstr ""
-
-#: src/mainwindow.py:523
-msgctxt "kajongg @info:tooltip"
-msgid "Change the visual appearance of the tiles."
-msgstr ""
-
-#: src/mainwindow.py:527
-msgctxt "@action:inmenu"
-msgid "F&ull Screen Mode"
-msgstr ""
-
-#: src/mainwindow.py:530
-#, fuzzy
-#| msgctxt "kajongg"
-#| msgid "&Score Table"
-msgctxt "kajongg @action:inmenu"
-msgid "&Score Table"
-msgstr "スコア表(&S)"
-
-#: src/mainwindow.py:532
-#, fuzzy
-#| msgctxt "kajongg"
-#| msgid "Scores"
-msgctxt "kajongg @action:intoolbar"
-msgid "&Scores"
-msgstr "スコア"
-
-#: src/mainwindow.py:534
-msgctxt "kajongg @info:tooltip"
-msgid "Show or hide the score table for the current game."
-msgstr ""
-
-#: src/mainwindow.py:536
-#, fuzzy
-#| msgid "Scores"
-msgctxt "@action:inmenu"
-msgid "&Explain Scores"
-msgstr "スコア"
-
-#: src/mainwindow.py:537
-#, fuzzy
-#| msgid "Scores"
-msgctxt "@action:intoolbar"
-msgid "&Explain"
-msgstr "スコア"
-
-#: src/mainwindow.py:539
-msgctxt "kajongg @info:tooltip"
-msgid "Explain the scoring for all players in the current game."
-msgstr ""
-
-#: src/mainwindow.py:541
-msgctxt "@action:inmenu"
-msgid "&Demo Mode"
-msgstr ""
-
-#: src/mainwindow.py:544
-msgctxt "kajongg @info:tooltip"
-msgid "Let the computer take over for you. Start a new local game if needed."
-msgstr ""
-
-#: src/mainwindow.py:546
-msgid "C&hat"
-msgstr ""
-
-#: src/mainwindow.py:549
-msgctxt "kajongg @info:tooltip"
-msgid "Chat with the other players."
-msgstr ""
-
-#: src/message.py:250
-msgid "saying %1 violates Original Call"
-msgstr ""
-
-#: src/message.py:263
-msgid ""
-"claiming %1 is dangerous because you will have to discard a dangerous tile"
-msgstr ""
-
-#: src/message.py:268
-msgid ""
-"claiming %1 for %2 is dangerous because you will have to discard a dangerous "
-"tile"
-msgstr ""
-
-#: src/message.py:271
-msgid "You may say %1"
-msgstr ""
-
-#: src/message.py:280
-msgctxt "kajongg"
-msgid "Pung"
-msgstr "ポン"
-
-#: src/message.py:281
-msgctxt "kajongg game dialog:Key for Pung"
-msgid "P"
-msgstr "P"
-
-#: src/message.py:299
-msgctxt "kajongg"
-msgid "Kong"
-msgstr "カン"
-
-#: src/message.py:300
-msgctxt "kajongg game dialog:Key for Kong"
-msgid "K"
-msgstr "K"
-
-#: src/message.py:326
-msgid "saying Kong for %1 violates Original Call"
-msgstr ""
-
-#: src/message.py:330
-msgid "You may say Kong for %1"
-msgstr ""
-
-#: src/message.py:344
-msgctxt "kajongg"
-msgid "Chow"
-msgstr "チー"
-
-#: src/message.py:345
-msgctxt "kajongg game dialog:Key for Chow"
-msgid "C"
-msgstr "C"
-
-#: src/message.py:378
-#, fuzzy
-#| msgid "Score"
-msgctxt "kajongg"
-msgid "Mah Jongg"
-msgstr "スコア"
-
-#: src/message.py:379
-msgctxt "kajongg game dialog:Key for Mah Jongg"
-msgid "M"
-msgstr "M"
-
-#: src/message.py:387
-msgid "Press here and you win"
-msgstr ""
-
-#: src/message.py:401
-msgctxt "kajongg"
-msgid "Original Call"
-msgstr ""
-
-#: src/message.py:402
-msgctxt "kajongg game dialog:Key for Original Call"
-msgid "O"
-msgstr ""
-
-#: src/message.py:418
-msgid "discarding %1 and declaring Original Call makes this hand unwinnable"
-msgstr ""
-
-#: src/message.py:422
-msgid ""
-"Discard a tile, declaring Original Call meaning you need only one tile to "
-"complete the hand and will not alter the hand in any way (except bonus tiles)"
-msgstr ""
-
-#: src/message.py:447
-msgctxt "kajongg"
-msgid "Discard"
-msgstr ""
-
-#: src/message.py:448
-msgctxt "kajongg game dialog:Key for Discard"
-msgid "D"
-msgstr ""
-
-#: src/message.py:465
-msgid "discarding %1 violates Original Call"
-msgstr ""
-
-#: src/message.py:468
-msgid "discarding %1 is Dangerous Game"
-msgstr ""
-
-#: src/message.py:471
-msgid "discard the least useful tile"
-msgstr ""
-
-#: src/message.py:551
-#, fuzzy
-#| msgid "Do you really want to abort this game?"
-msgid "%1 is not ready to start the game"
-msgstr "本当にこのゲームを中止しますか?"
-
-#: src/message.py:590
-msgid "Kajongg <numid>%1</numid>"
-msgstr ""
-
-#: src/message.py:676
-msgctxt "kajongg"
-msgid "Violates Original Call"
-msgstr ""
-
-#: src/message.py:819
-#, fuzzy
-#| msgid "&Score Table"
-msgctxt "kajongg"
-msgid "Dangerous Game"
-msgstr "スコア表(&S)"
-
-#: src/message.py:834
-msgctxt "kajongg"
-msgid "No Choice"
-msgstr ""
-
-#: src/message.py:896
-msgctxt "kajongg"
-msgid "OK"
-msgstr "OK"
-
-#: src/message.py:897
-msgctxt "kajongg game dialog:Key for OK"
-msgid "O"
-msgstr ""
-
-#: src/message.py:901
-msgid "Confirm that you saw the message"
-msgstr ""
-
-#: src/message.py:909
-msgctxt "kajongg"
-msgid "No Claim"
-msgstr ""
-
-#: src/message.py:910
-msgctxt "kajongg game dialog:Key for No claim"
-msgid "N"
-msgstr ""
-
-#: src/message.py:914
-msgid "You cannot or do not want to claim this tile"
-msgstr ""
-
-#: src/mjresource.py:92
-#, fuzzy
-#| msgid "cannot find any tileset, is libkmahjongg installed?"
-msgid ""
-"cannot find any %1 in the following directories, is libkmahjongg installed?"
-msgstr "牌セットが見つかりません。libkmahjongg はインストールされていますか?"
-
-#: src/mjresource.py:116
-#, fuzzy
-#| msgid "cannot find tileset %1, using default"
-msgid "cannot find %1, using default"
-msgstr "牌セットが見つかりません。デフォルトを使用します。"
-
-#: src/mjresource.py:131
-#, fuzzy
-#| msgid "Backgrounds"
-msgid "unknown name"
-msgstr "背景"
-
-#: src/mjresource.py:132
-msgid "unknown author"
-msgstr ""
-
-#: src/mjresource.py:135
-msgid "no description available"
-msgstr ""
-
-#: src/mjresource.py:138
-msgid "no E-Mail address available"
-msgstr ""
-
-#: src/player.py:725
-msgid "%1 claiming MahJongg: She does not really have tile %2"
-msgstr ""
-
-#: src/player.py:734
-msgid ""
-"%1 claiming MahJongg: She did not pass all concealed tiles to the server"
-msgstr ""
-
-#: src/player.py:855
-msgid "Player %1 has 3 or 4 exposed melds, all are green"
-msgstr ""
-
-#: src/player.py:863
-msgid "Player %1 may try a True Color Game"
-msgstr ""
-
-#: src/player.py:866
-msgid "Player %1 may try an All Terminals Game"
-msgstr ""
-
-#: src/player.py:879
-msgid "Player %1 exposed many winds"
-msgstr ""
-
-#: src/player.py:883
-msgid "Player %1 exposed many dragons"
-msgstr ""
-
-#: src/playerlist.py:50
-#, fuzzy
-#| msgid "&New"
-msgctxt "define a new player"
-msgid "&New"
-msgstr "新規(&N)"
-
-#: src/playerlist.py:110
-msgid "Player %1 already exists"
-msgstr ""
-
-#: src/playerlist.py:121
-msgid "Error while adding player %1: %2"
-msgstr ""
-
-#: src/playerlist.py:176
-msgid ""
-"There are %1 finished and %2 unfinished games for %3, delete %3 anyway?  "
-"This will also delete all games played by %3!"
-msgstr ""
-
-#: src/predefined.py:29
-msgid "Classical Chinese standard"
-msgstr ""
-
-#: src/predefined.py:35
-msgid "Classical Chinese"
-msgstr ""
-
-#: src/predefined.py:41
-msgid "Last Tile Taken from Dead Wall"
-msgstr ""
-
-#: src/predefined.py:43
-msgid ""
-"The dead wall is also called kong box: The last 16 tiles of the wall used as "
-"source of replacement tiles"
-msgstr ""
-
-#: src/predefined.py:46
-msgid "Last Tile is Last Tile of Wall"
-msgstr ""
-
-#: src/predefined.py:48
-msgid ""
-"Winner said Mah Jong with the last tile taken from the living end of the wall"
-msgstr ""
-
-#: src/predefined.py:50
-msgid "Last Tile is Last Tile of Wall Discarded"
-msgstr ""
-
-#: src/predefined.py:52
-msgid ""
-"Winner said Mah Jong by claiming the last tile taken from the living end of "
-"the wall, discarded by another player"
-msgstr ""
-
-#: src/predefined.py:55
-msgid "Robbing the Kong"
-msgstr ""
-
-#: src/predefined.py:56
-msgid ""
-"Winner said Mah Jong by claiming the 4th tile of a kong another player just "
-"declared"
-msgstr ""
-
-#: src/predefined.py:59
-msgid "Mah Jongg with Original Call"
-msgstr ""
-
-#: src/predefined.py:62
-msgid ""
-"Just before the first discard, a player can declare Original Call meaning "
-"she needs only one tile to complete the hand and announces she will not "
-"alter the hand in any way (except bonus tiles)"
-msgstr ""
-
-#: src/predefined.py:65
-msgid "Dangerous Game"
-msgstr ""
-
-#: src/predefined.py:66
-msgid ""
-"In some situations discarding a tile that has a high chance to help somebody "
-"to win is declared to be dangerous, and if that tile actually makes somebody "
-"win, the discarder pays the winner for all"
-msgstr ""
-
-#: src/predefined.py:70
-msgid "Twofold Fortune"
-msgstr ""
-
-#: src/predefined.py:71
-msgid ""
-"Kong after Kong: Declare Kong and a second Kong with the replacement tile "
-"and Mah Jong with the second replacement tile"
-msgstr ""
-
-#: src/predefined.py:75
-msgid "Blessing of Heaven"
-msgstr ""
-
-#: src/predefined.py:76
-msgid "East says Mah Jong with the unmodified dealt tiles"
-msgstr ""
-
-#: src/predefined.py:78
-msgid "Blessing of Earth"
-msgstr ""
-
-#: src/predefined.py:79
-msgid ""
-"South, West or North says Mah Jong with the first tile discarded by East"
-msgstr ""
-
-#: src/predefined.py:81
-msgid "East won nine times in a row"
-msgstr ""
-
-#: src/predefined.py:82
-msgid "If that happens, East gets a limit score and the winds rotate"
-msgstr ""
-
-#: src/predefined.py:87
-msgid ""
-"False Naming of Discard, Claimed for Mah Jongg and False Declaration of Mah "
-"Jongg"
-msgstr ""
-
-#: src/predefined.py:93
-msgid "Own Flower and Own Season"
-msgstr ""
-
-#: src/predefined.py:96
-msgid "All Flowers"
-msgstr ""
-
-#: src/predefined.py:97
-msgid "All Seasons"
-msgstr ""
-
-#: src/predefined.py:99
-msgid "Three Concealed Pongs"
-msgstr ""
-
-#: src/predefined.py:103
-msgid "Long Hand"
-msgstr ""
-
-#: src/predefined.py:104
-msgid "The hand contains too many tiles"
-msgstr ""
-
-#: src/predefined.py:109
-msgid "Tiles in Hand"
-msgstr ""
-
-#: src/predefined.py:114
-msgid "Points Needed for Mah Jongg"
-msgstr ""
-
-#: src/predefined.py:118
-msgid "Minimum number of doubles needed for Mah Jongg"
-msgstr ""
-
-#: src/predefined.py:121
-msgid "Points for a Limit Hand"
-msgstr ""
-
-#: src/predefined.py:125
-msgid "Play with the roof off"
-msgstr ""
-
-#: src/predefined.py:126
-msgid "Play with no upper scoring limit"
-msgstr ""
-
-#: src/predefined.py:128
-msgid "Claim Timeout"
-msgstr ""
-
-#: src/predefined.py:132
-msgid "Size of Kong Box"
-msgstr ""
-
-#: src/predefined.py:133
-msgid "The Kong Box is used for replacement tiles when declaring kongs"
-msgstr ""
-
-#: src/predefined.py:135
-msgid "Play with Bonus Tiles"
-msgstr ""
-
-#: src/predefined.py:136
-msgid "Bonus tiles increase the luck factor"
-msgstr ""
-
-#: src/predefined.py:138
-msgid "Minimum number of rounds in game"
-msgstr ""
-
-#: src/predefined.py:142
-msgid "number of allowed chows"
-msgstr ""
-
-#: src/predefined.py:143
-msgid "The number of chows a player may build"
-msgstr ""
-
-#: src/predefined.py:145
-msgid "must declare calling hand"
-msgstr ""
-
-#: src/predefined.py:147
-msgid "Mah Jongg is only allowed after having declared to have a calling hand"
-msgstr ""
-
-#: src/predefined.py:149
-msgid "Standard Rotation"
-msgstr ""
-
-#: src/predefined.py:152
-msgid "Discard tiles ordered"
-msgstr ""
-
-#: src/predefined.py:154
-msgid "Discard tiles ordered from top left"
-msgstr ""
-
-#: src/predefined.py:156
-msgid "Leave holes for claimed discards"
-msgstr ""
-
-#: src/predefined.py:159
-msgid ""
-"Only when discarding tiles ordered: Do not place the next discard where the "
-"claimed discard was"
-msgstr ""
-
-#: src/predefined.py:168
-msgid "Last Tile Completes Pair of 2..8"
-msgstr ""
-
-#: src/predefined.py:172
-msgid "Last Tile Completes Pair of Terminals or Honors"
-msgstr ""
-
-#: src/predefined.py:175
-msgid "Last Tile is Only Possible Tile"
-msgstr ""
-
-#: src/predefined.py:179
-msgid "Won with Last Tile Taken from Wall"
-msgstr ""
-
-#: src/predefined.py:184
-msgid "Zero Point Hand"
-msgstr ""
-
-#: src/predefined.py:185
-msgid "The hand has 0 basis points excluding bonus tiles"
-msgstr ""
-
-#: src/predefined.py:186
-msgid "No Chow"
-msgstr ""
-
-#: src/predefined.py:188
-msgid "Only Concealed Melds"
-msgstr ""
-
-#: src/predefined.py:192
-msgid "False Color Game"
-msgstr ""
-
-#: src/predefined.py:193
-msgid ""
-"Only same-colored tiles (only bamboo/stone/character) plus any number of "
-"winds and dragons"
-msgstr ""
-
-#: src/predefined.py:196
-msgid "True Color Game"
-msgstr ""
-
-#: src/predefined.py:197
-msgid "Only same-colored tiles (only bamboo/stone/character)"
-msgstr ""
-
-#: src/predefined.py:199
-msgid "Concealed True Color Game"
-msgstr ""
-
-#: src/predefined.py:200
-msgid "All tiles concealed and of the same suit, no honors"
-msgstr ""
-
-#: src/predefined.py:202
-msgid "Only Terminals and Honors"
-msgstr ""
-
-#: src/predefined.py:203
-msgid "Only winds, dragons, 1 and 9"
-msgstr ""
-
-#: src/predefined.py:204
-msgid "Only Honors"
-msgstr ""
-
-#: src/predefined.py:205
-msgid "Only winds and dragons"
-msgstr ""
-
-#: src/predefined.py:207
-msgid "Hidden Treasure"
-msgstr ""
-
-#: src/predefined.py:208
-msgid "Only hidden Pungs or Kongs, last tile from wall"
-msgstr ""
-
-#: src/predefined.py:210
-msgid "Heads and Tails"
-msgstr ""
-
-#: src/predefined.py:211
-msgid "Only 1 and 9"
-msgstr ""
-
-#: src/predefined.py:213
-msgid "Fourfold Plenty"
-msgstr ""
-
-#: src/predefined.py:214
-#, fuzzy
-#| msgid "Score"
-msgid "4 Kongs"
-msgstr "スコア"
-
-#: src/predefined.py:216 src/predefined.py:430
-msgid "Three Great Scholars"
-msgstr ""
-
-#: src/predefined.py:217 src/predefined.py:337
-msgid "3 Pungs or Kongs of dragons"
-msgstr ""
-
-#: src/predefined.py:218
-msgid "Four Blessings Hovering over the Door"
-msgstr ""
-
-#: src/predefined.py:220 src/predefined.py:342
-msgid "4 Pungs or Kongs of winds"
-msgstr ""
-
-#: src/predefined.py:221
-msgid "Imperial Jade"
-msgstr ""
-
-#: src/predefined.py:222
-msgid "Only green tiles: Green dragon and Bamboo 2,3,4,6,8"
-msgstr ""
-
-#: src/predefined.py:223
-msgid "Gathering the Plum Blossom from the Roof"
-msgstr ""
-
-#: src/predefined.py:225
-msgid "Mah Jong with stone 5 from the dead wall"
-msgstr ""
-
-#: src/predefined.py:227
-msgid "Plucking the Moon from the Bottom of the Sea"
-msgstr ""
-
-#: src/predefined.py:228
-msgid "Mah Jong with the last tile from the wall being a stone 1"
-msgstr ""
-
-#: src/predefined.py:230
-msgid "Scratching a Carrying Pole"
-msgstr ""
-
-#: src/predefined.py:231
-msgid "Robbing the Kong of bamboo 2"
-msgstr ""
-
-#: src/predefined.py:237 src/predefined.py:526
-msgid "Standard Mah Jongg"
-msgstr ""
-
-#: src/predefined.py:242
-msgid "Nine Gates"
-msgstr ""
-
-#: src/predefined.py:244
-msgid ""
-"A concealed hand in one color 1112345678999 plus last tile of this suit "
-"(from wall or discarded)"
-msgstr ""
-
-#: src/predefined.py:246
-msgid "Thirteen Orphans"
-msgstr ""
-
-#: src/predefined.py:247
-msgid ""
-"13 single tiles: All dragons, winds, 1, 9 and a 14th tile building a pair "
-"with one of them"
-msgstr ""
-
-#: src/predefined.py:251
-msgid "Pung/Kong of Dragons"
-msgstr ""
-
-#: src/predefined.py:253
-msgid "Pung/Kong of Own Wind"
-msgstr ""
-
-#: src/predefined.py:256
-msgid "Pung/Kong of Round Wind"
-msgstr ""
-
-#: src/predefined.py:260
-msgid "Exposed Kong"
-msgstr ""
-
-#: src/predefined.py:263
-msgid "Exposed Kong of Terminals"
-msgstr ""
-
-#: src/predefined.py:266
-msgid "Exposed Kong of Honors"
-msgstr ""
-
-#: src/predefined.py:269
-msgid "Exposed Pung"
-msgstr ""
-
-#: src/predefined.py:272
-msgid "Exposed Pung of Terminals"
-msgstr ""
-
-#: src/predefined.py:275
-msgid "Exposed Pung of Honors"
-msgstr ""
-
-#: src/predefined.py:279
-msgid "Concealed Kong"
-msgstr ""
-
-#: src/predefined.py:282
-msgid "Concealed Kong of Terminals"
-msgstr ""
-
-#: src/predefined.py:285
-msgid "Concealed Kong of Honors"
-msgstr ""
-
-#: src/predefined.py:288
-msgid "Concealed Pung"
-msgstr ""
-
-#: src/predefined.py:291
-msgid "Concealed Pung of Terminals"
-msgstr ""
-
-#: src/predefined.py:294
-msgid "Concealed Pung of Honors"
-msgstr ""
-
-#: src/predefined.py:297
-msgid "Pair of Own Wind"
-msgstr ""
-
-#: src/predefined.py:299
-msgid "Pair of Round Wind"
-msgstr ""
-
-#: src/predefined.py:301
-msgid "Pair of Dragons"
-msgstr ""
-
-#: src/predefined.py:305
-msgid "Flower"
-msgstr ""
-
-#: src/predefined.py:307
-msgid "Season"
-msgstr ""
-
-#: src/predefined.py:316
-msgid "Classical Chinese DMJL"
-msgstr ""
-
-#: src/predefined.py:322
-msgid "Classical Chinese as defined by the Deutsche Mah Jongg Liga (DMJL) e.V."
-msgstr ""
-
-#: src/predefined.py:329
-msgid "Squirming Snake"
-msgstr ""
-
-#: src/predefined.py:330
-msgid ""
-"All tiles of same color. Pung or Kong of 1 and 9, pair of 2, 5 or 8 and two "
-"Chows of the remaining values"
-msgstr ""
-
-#: src/predefined.py:333
-msgid "Little Three Dragons"
-msgstr ""
-
-#: src/predefined.py:334
-msgid "2 Pungs or Kongs of dragons and 1 pair of dragons"
-msgstr ""
-
-#: src/predefined.py:336
-msgid "Big Three Dragons"
-msgstr ""
-
-#: src/predefined.py:339
-msgid "Little Four Joys"
-msgstr ""
-
-#: src/predefined.py:340
-msgid "3 Pungs or Kongs of winds and 1 pair of winds"
-msgstr ""
-
-#: src/predefined.py:341
-msgid "Big Four Joys"
-msgstr ""
-
-#: src/predefined.py:347
-msgid "False Naming of Discard, Claimed for Chow"
-msgstr ""
-
-#: src/predefined.py:350
-msgid "False Naming of Discard, Claimed for Pung/Kong"
-msgstr ""
-
-#: src/predefined.py:353 src/predefined.py:444 src/predefined.py:556
-msgid "False Declaration of Mah Jongg by One Player"
-msgstr ""
-
-#: src/predefined.py:356
-msgid "False Declaration of Mah Jongg by Two Players"
-msgstr ""
-
-#: src/predefined.py:359
-msgid "False Declaration of Mah Jongg by Three Players"
-msgstr ""
-
-#: src/predefined.py:362 src/predefined.py:447 src/predefined.py:559
-msgid "False Naming of Discard, Claimed for Mah Jongg"
-msgstr ""
-
-#: src/predefined.py:371
-msgid "Classical Chinese BMJA"
-msgstr ""
-
-#: src/predefined.py:377
-msgid "Classical Chinese as defined by the British Mah-Jong Association"
-msgstr ""
-
-#: src/predefined.py:392 src/predefined.py:532
-msgid "Original Call"
-msgstr ""
-
-#: src/predefined.py:396
-msgid "Gates of Heaven"
-msgstr ""
-
-#: src/predefined.py:397
-msgid ""
-"All tiles concealed of same color: Values 1112345678999 with one pair from 2 "
-"to 8 (last tile from wall or discarded)"
-msgstr ""
-
-#: src/predefined.py:400
-msgid "Wriggling Snake"
-msgstr ""
-
-#: src/predefined.py:401
-msgid ""
-"Pair of 1s and a run from 2 to 9 in the same suit with each of the winds"
-msgstr ""
-
-#: src/predefined.py:403
-msgid "Triple Knitting"
-msgstr ""
-
-#: src/predefined.py:404
-msgid ""
-"Four sets of three tiles in the different suits and a pair: No Winds or "
-"Dragons"
-msgstr ""
-
-#: src/predefined.py:405
-msgid "Knitting"
-msgstr ""
-
-#: src/predefined.py:406
-msgid "7 pairs of tiles in any 2 out of 3 suits; no Winds or Dragons"
-msgstr ""
-
-#: src/predefined.py:408
-msgid "All pair honors"
-msgstr ""
-
-#: src/predefined.py:409
-msgid "7 pairs of 1s/9s/Winds/Dragons"
-msgstr ""
-
-#: src/predefined.py:412 src/predefined.py:536
-msgid "Own Flower"
-msgstr ""
-
-#: src/predefined.py:413 src/predefined.py:537
-msgid "Own Season"
-msgstr ""
-
-#: src/predefined.py:425
-msgid "Buried Treasure"
-msgstr ""
-
-#: src/predefined.py:426
-msgid "Concealed pungs of one suit with winds/dragons and a pair"
-msgstr ""
-
-#: src/predefined.py:427 src/predefined.py:548
-msgid "Purity"
-msgstr ""
-
-#: src/predefined.py:428 src/predefined.py:549
-msgid "Only same-colored tiles (no chows, dragons or winds)"
-msgstr ""
-
-#: src/predefined.py:431
-msgid "3 Pungs or Kongs of dragons plus any pung/kong and a pair"
-msgstr ""
-
-#: src/predefined.py:434
-msgid "The 13 Unique Wonders"
-msgstr ""
-
-#: src/predefined.py:441 src/predefined.py:553
-msgid "False Naming of Discard, Claimed for Chow/Pung/Kong"
-msgstr ""
-
-#: src/predefined.py:451
-msgid "Calling for Only Honors"
-msgstr ""
-
-#: src/predefined.py:455
-msgid "Calling for Wriggling Snake"
-msgstr ""
-
-#: src/predefined.py:459
-msgid "Calling for Triple Knitting"
-msgstr ""
-
-#: src/predefined.py:463
-msgid "Calling for Gates of Heaven"
-msgstr ""
-
-#: src/predefined.py:466
-msgid "Calling for Knitting"
-msgstr ""
-
-#: src/predefined.py:470
-msgid "Calling for Imperial Jade"
-msgstr ""
-
-#: src/predefined.py:474
-msgid "Calling for The 13 Unique Wonders"
-msgstr ""
-
-#: src/predefined.py:477
-msgid "Calling for Three Great Scholars"
-msgstr ""
-
-#: src/predefined.py:480
-msgid "Calling for All pair honors"
-msgstr ""
-
-#: src/predefined.py:484
-msgid "Calling for Heads and Tails"
-msgstr ""
-
-#: src/predefined.py:488
-msgid "Calling for Four Blessings Hovering over the Door"
-msgstr ""
-
-#: src/predefined.py:491
-msgid "Calling for Buried Treasure"
-msgstr ""
-
-#: src/predefined.py:495
-msgid "Calling for Fourfold Plenty"
-msgstr ""
-
-#: src/predefined.py:499
-msgid "Calling for Purity"
-msgstr ""
-
-#: src/predefined.py:509
-msgid "Taiwanese 16-tile game, FOR DEVELOPERS"
-msgstr ""
-
-#: src/predefined.py:515
-msgid ""
-"Taiwanese 16-Tiles Mah Jongg, early alpha. See https://bugs.kde.org/show_bug."
-"cgi?id=298821"
-msgstr ""
-
-#: src/query.py:197
-#, fuzzy
-#| msgid "&Score Table"
-msgctxt "kajongg name for local game server"
-msgid "Local Game"
-msgstr "スコア表(&S)"
-
-#: src/query.py:430
-msgid "Database %1 updated from schema %2 to %3"
-msgstr ""
-
-#: src/rule.py:49 src/scoringdialog.py:703 src/scoringdialog.py:782
-msgid "points"
-msgstr ""
-
-#: src/rule.py:50
-msgctxt "kajongg"
-msgid "doubles"
-msgstr ""
-
-#: src/rule.py:51
-#, fuzzy
-#| msgid "Upper limit"
-msgctxt "kajongg"
-msgid "limits"
-msgstr "上限"
-
-#: src/rule.py:91
-msgctxt "Kajongg"
-msgid "%1 points"
-msgstr "%1 符"
-
-#: src/rule.py:93
-msgctxt "Kajongg"
-msgid "%1 doubles"
-msgstr ""
-
-#: src/rule.py:98
-#, fuzzy
-#| msgid "Upper limit"
-msgctxt "Kajongg"
-msgid "%1 limits"
-msgstr "上限"
-
-#: src/rule.py:366
-msgid "Meld Rules"
-msgstr ""
-
-#: src/rule.py:367
-msgid ""
-"Meld rules are applied to single melds independent of the rest of the hand"
-msgstr ""
-
-#: src/rule.py:368
-msgid "Hand Rules"
-msgstr ""
-
-#: src/rule.py:369
-msgid "Hand rules are applied to the entire hand, for all players"
-msgstr ""
-
-#: src/rule.py:370
-msgid "Winner Rules"
-msgstr ""
-
-#: src/rule.py:371
-msgid "Winner rules are applied to the entire hand but only for the winner"
-msgstr ""
-
-#: src/rule.py:372
-msgid "Loser Rules"
-msgstr ""
-
-#: src/rule.py:373
-msgid "Loser rules are applied to the entire hand but only for non-winners"
-msgstr ""
-
-#: src/rule.py:374
-msgid "Mah Jongg Rules"
-msgstr ""
-
-#: src/rule.py:375
-msgid "Only hands matching a Mah Jongg rule can win"
-msgstr ""
-
-#: src/rule.py:376
-msgctxt "kajongg"
-msgid "Options"
-msgstr ""
-
-#: src/rule.py:377
-msgid "Here we have several special game related options"
-msgstr ""
-
-#: src/rule.py:378
-#, fuzzy
-#| msgid "Properties"
-msgid "Penalties"
-msgstr "プロパティ"
-
-#: src/rule.py:379
-msgid ""
-"Penalties are applied manually by the user. They are only used for scoring "
-"games.\n"
-"When playing against the computer or over the net, Kajongg will never let "
-"you get\n"
-"into a situation where you have to pay a penalty"
-msgstr ""
-
-#: src/rule.py:579
-msgctxt "Ruleset._newKey:%1 is empty or space plus number"
-msgid "Copy%1 of %2"
-msgstr ""
-
-#: src/rule.py:935
-msgctxt "%1 can be a sentence"
-msgid "%4 have impossible values %2/%3 in rule \"%1\""
-msgstr ""
-
-#: src/rule.py:1023
-msgctxt "wrong value for rule"
-msgid "%1: %2 is too small, minimal value is %3"
-msgstr ""
-
-#: src/rulesetselector.py:511
-msgctxt "@title:window"
-msgid "Customize rulesets"
-msgstr ""
-
-#: src/rulesetselector.py:530
-msgctxt "kajongg"
-msgid "Rule"
-msgstr ""
-
-#: src/rulesetselector.py:592
-msgid "C&opy"
-msgstr ""
-
-#: src/rulesetselector.py:593
-msgctxt "Kajongg ruleset comparer"
-msgid "Co&mpare"
-msgstr ""
-
-#: src/rulesetselector.py:594
-msgid "&Remove"
-msgstr ""
-
-#: src/rulesetselector.py:595
-msgid "&Close"
-msgstr ""
-
-#: src/scene.py:389 src/scene.py:517
-msgid "Do you really want to abort this game?"
-msgstr "本当にこのゲームを中止しますか?"
-
-#: src/scoring.py:60
-msgctxt "@title:window"
-msgid "Swap Seats"
-msgstr ""
-
-#: src/scoring.py:62
-msgid "By the rules, %1 and %2 should now exchange their seats. "
-msgstr ""
-
-#: src/scoring.py:64
-msgid "&Exchange"
-msgstr ""
-
-#: src/scoring.py:66
-msgid "&Keep seat"
-msgstr ""
-
-#: src/scoring.py:85
-msgctxt "@title:window"
-msgid "Select four players"
-msgstr ""
-
-#: src/scoring.py:360
-msgid "Move Exposed Tiles Here"
-msgstr ""
-
-#: src/scoring.py:361
-msgid "Move Concealed Tiles Here"
-msgstr ""
-
-#: src/scoring.py:673
-msgid "Please define four players in <interface>Settings|Players</interface>"
-msgstr ""
-
-#: src/scoringdialog.py:258
-msgid "Round/Hand"
-msgstr ""
-
-#: src/scoringdialog.py:299 src/scoringdialog.py:834
-msgctxt "kajongg"
-msgid "Score"
-msgstr "スコア"
-
-#: src/scoringdialog.py:299
-#, fuzzy
-#| msgid "Players"
-msgctxt "kajongg"
-msgid "Payments"
-msgstr "プレイヤー"
-
-#: src/scoringdialog.py:300
-msgctxt "kajongg"
-msgid "Balance"
-msgstr ""
-
-#: src/scoringdialog.py:300
-msgctxt "kajongg"
-msgid "Chart"
-msgstr ""
-
-#: src/scoringdialog.py:410
-msgctxt "kajongg"
-msgid "Scores"
-msgstr "スコア"
-
-#: src/scoringdialog.py:452
-msgctxt "kajongg"
-msgid "Used Rules"
-msgstr ""
-
-#: src/scoringdialog.py:487
-msgid "Final scores for game <numid>%1</numid>"
-msgstr ""
-
-#: src/scoringdialog.py:489
-msgid "Scores for game <numid>%1</numid>"
-msgstr ""
-
-#: src/scoringdialog.py:569
-#, fuzzy
-#| msgid "Explain Scores"
-msgctxt "@title:window"
-msgid "Explain Scores"
-msgstr "スコアの説明"
-
-#: src/scoringdialog.py:585
-msgid "There is no active game"
-msgstr ""
-
-#: src/scoringdialog.py:588
-msgid "%1"
-msgstr ""
-
-#: src/scoringdialog.py:602
-msgid "Manual score for %1: %2 points"
-msgstr ""
-
-#: src/scoringdialog.py:689
-#, fuzzy
-#| msgid "Properties"
-msgid "Penalty"
-msgstr "プロパティ"
-
-#: src/scoringdialog.py:692
-msgid "Offense:"
-msgstr ""
-
-#: src/scoringdialog.py:699
-#, fuzzy
-#| msgid "Properties"
-msgid "Total Penalty"
-msgstr "プロパティ"
-
-#: src/scoringdialog.py:727
-msgid "&Execute"
-msgstr ""
-
-#: src/scoringdialog.py:805
-#, fuzzy
-#| msgctxt "Kajongg"
-#| msgid "%1 points"
-msgctxt "penalty dialog, appears behind paying player combobox"
-msgid "pays %1 points"
-msgstr "%1 符"
-
-#: src/scoringdialog.py:810
-#, fuzzy
-#| msgctxt "Kajongg"
-#| msgid "%1 points"
-msgctxt "penalty dialog, appears behind profiting player combobox"
-msgid "gets %1 points"
-msgstr "%1 符"
-
-#: src/scoringdialog.py:821
-msgctxt "@title:window"
-msgid "Scoring for this Hand"
-msgstr ""
-
-#: src/scoringdialog.py:832
-msgctxt "kajongg"
-msgid "Player"
-msgstr "プレイヤー"
-
-#: src/scoringdialog.py:833
-msgctxt "kajongg"
-msgid "Wind"
-msgstr ""
-
-#: src/scoringdialog.py:835
-msgid "Winner"
-msgstr ""
-
-#: src/scoringdialog.py:841
-msgctxt "kajongg"
-msgid "Draw"
-msgstr "引き分け"
-
-#: src/scoringdialog.py:843
-#, fuzzy
-#| msgid "Properties"
-msgid "&Penalties"
-msgstr "プロパティ"
-
-#: src/scoringdialog.py:845
-#, fuzzy
-#| msgid "&New hand"
-msgid "&Save Hand"
-msgstr "新しい手(&N)"
-
-#: src/scoringdialog.py:867
-msgid "&Last Tile:"
-msgstr ""
-
-#: src/scoringdialog.py:876
-msgid "L&ast Meld:"
-msgstr ""
-
-#: src/server.py:122
-msgid "Wrong password"
-msgstr ""
-
-#: src/server.py:218
-msgid "table with id <numid>%1</numid> not found"
-msgstr ""
-
-#: src/server.py:366
-msgid "Player %1 has logged out"
-msgstr ""
-
-#: src/server.py:436
-msgid "the server will listen on PORT ({int(defaultPort)})"
-msgstr ""
-
-#: src/server.py:439
-msgid "the server will listen on SOCKET"
-msgstr ""
-
-#: src/server.py:443
-msgid "name of the database"
-msgstr ""
-
-#: src/server.py:447
-msgid "do not terminate local game server after last client disconnects"
-msgstr ""
-
-#: src/servertable.py:181
-msgid "You already joined this table"
-msgstr ""
-
-#: src/servertable.py:183
-msgid "All seats are already taken"
-msgstr ""
-
-#: src/servertable.py:188
-msgid "takes a seat"
-msgstr ""
-
-#: src/servertable.py:196
-msgid "leaves the table"
-msgstr ""
-
-#: src/servertable.py:242
-msgctxt "kajongg, name of robot player, to be translated"
-msgid "Robot 1"
-msgstr ""
-
-#: src/servertable.py:245
-msgctxt "kajongg, name of robot player, to be translated"
-msgid "Robot 2"
-msgstr ""
-
-#: src/servertable.py:246
-msgctxt "kajongg, name of robot player, to be translated"
-msgid "Robot 3"
-msgstr ""
-
-#: src/servertable.py:302
-msgid "Only the initiator %1 can start this game, you are %2"
-msgstr ""
-
-#: src/servertable.py:701
-msgid "Game <numid>%1</numid> is over!"
-msgstr ""
-
-#: src/servertable.py:730
-msgid "%1 wrongly said %2 for meld %3"
-msgstr ""
-
-#: src/servertable.py:735
-msgid "%1 wrongly said %2: claims to have concealed tiles %3 but only has %4"
-msgstr ""
-
-#: src/servertable.py:772
-msgid "declareKong:%1 wrongly said Kong for meld %2"
-msgstr ""
-
-#: src/servertable.py:821
-msgid "%1 claiming MahJongg: This is not a winning hand: %2"
-msgstr ""
-
-#: src/sound.py:70
-msgid "No voices will be heard because the program %1 is missing"
-msgstr ""
-
-#: src/sound.py:375
-#, fuzzy
-#| msgid "file <filename>%1</filename> contains no valid SVG"
-msgid "cannot write <filename>%1</filename>: %2"
-msgstr "ファイル <filename>%1</filename> には有効な SVG が含まれていません"
-
-#: src/sound.py:378
-msgid "The voice files have changed, their checksum has changed."
-msgstr ""
-
-#: src/sound.py:379
-msgid "Please reinstall kajongg or do, with sufficient permissions:"
-msgstr ""
-
-#: src/tables.py:65
-msgid "Table"
-msgstr "雀卓"
-
-#: src/tables.py:69
-msgctxt "table status"
-msgid "Status"
-msgstr ""
-
-#: src/tables.py:70
-msgid "Ruleset"
-msgstr ""
-
-#: src/tables.py:149
-msgid "Select a ruleset"
-msgstr ""
-
-#: src/tables.py:186
-#, fuzzy
-#| msgid "&New"
-msgctxt "allocate a new table"
-msgid "&New"
-msgstr "新規(&N)"
-
-#: src/tables.py:187 src/tables.py:331 src/tables.py:363
-msgid "Allocate a new table"
-msgstr ""
-
-#: src/tables.py:193 src/tables.py:332 src/tables.py:364
-#, fuzzy
-#| msgid "Score"
-msgid "&Join"
-msgstr "スコア"
-
-#: src/tables.py:194 src/tables.py:333 src/tables.py:365
-msgid "Join a table"
-msgstr ""
-
-#: src/tables.py:200
-#, fuzzy
-#| msgid "&Game"
-msgid "&Leave"
-msgstr "ゲーム(&G)"
-
-#: src/tables.py:201
-msgid "Leave a table"
-msgstr ""
-
-#: src/tables.py:207
-msgctxt "Kajongg-Ruleset"
-msgid "Compare"
-msgstr ""
-
-#: src/tables.py:208
-msgid "Compare the rules of this table with my own rulesets"
-msgstr ""
-
-#: src/tables.py:214
-msgid "&Chat"
-msgstr ""
-
-#: src/tables.py:221
-msgid "&Start"
-msgstr ""
-
-#: src/tables.py:222
-msgid "Start playing on a table. Empty seats will be taken by robot players."
-msgstr ""
-
-#: src/tables.py:281
-msgid "opens a chat window"
-msgstr ""
-
-#: src/tables.py:300
-msgid "Local Games with Ruleset %1"
-msgstr ""
-
-#: src/tables.py:304
-msgid "Tables at %1"
-msgstr ""
-
-#: src/tables.py:357
-msgid "Start a new game"
-msgstr ""
-
-#: src/tables.py:359
-msgctxt "resuming a local suspended game"
-msgid "&Resume"
-msgstr ""
-
-#: src/tables.py:361
-msgid "Resume the selected suspended game"
-msgstr ""
-
-#: src/tables.py:379
-msgid "Chat with others on this table"
-msgstr ""
-
-#: src/tables.py:382
-msgid "For chatting with others on this table, please first take a seat"
-msgstr ""
-
-#: src/tile.py:277
-msgctxt "kajongg"
-msgid "hidden"
-msgstr ""
-
-#: src/tile.py:278
-msgctxt "kajongg"
-msgid "stone"
-msgstr ""
-
-#: src/tile.py:279
-msgctxt "kajongg"
-msgid "bamboo"
-msgstr ""
-
-#: src/tile.py:280
-msgctxt "kajongg"
-msgid "character"
-msgstr ""
-
-#: src/tile.py:281
-msgctxt "kajongg"
-msgid "wind"
-msgstr ""
-
-#: src/tile.py:282
-msgctxt "kajongg"
-msgid "dragon"
-msgstr ""
-
-#: src/tile.py:283
-msgctxt "kajongg"
-msgid "flower"
-msgstr ""
-
-#: src/tile.py:284
-msgctxt "kajongg"
-msgid "season"
-msgstr ""
-
-#: src/tile.py:290
-msgctxt "kajongg"
-msgid "tile"
-msgstr "牌"
-
-#: src/tile.py:291
-msgctxt "kajongg"
-msgid "white"
-msgstr ""
-
-#: src/tile.py:292
-msgctxt "kajongg"
-msgid "red"
-msgstr ""
-
-#: src/tile.py:293
-msgctxt "kajongg"
-msgid "green"
-msgstr ""
-
-#: src/tile.py:294
-msgctxt "kajongg"
-msgid "East"
-msgstr ""
-
-#: src/tile.py:295
-msgctxt "kajongg"
-msgid "South"
-msgstr ""
-
-#: src/tile.py:296
-msgctxt "kajongg"
-msgid "West"
-msgstr ""
-
-#: src/tile.py:297
-msgctxt "kajongg"
-msgid "North"
-msgstr ""
-
-#: src/tile.py:306
-msgid "East Wind"
-msgstr ""
-
-#: src/tile.py:307
-msgid "South Wind"
-msgstr ""
-
-#: src/tile.py:308
-msgid "West Wind"
-msgstr ""
-
-#: src/tile.py:309
-msgid "North Wind"
-msgstr ""
-
-#: src/tile.py:311
-#, python-brace-format
-msgctxt "kajongg tile name"
-msgid "{group} {value}"
-msgstr ""
-
-#: src/tile.py:880
-msgctxt "kajongg meld type"
-msgid "Bonus"
-msgstr ""
-
-#: src/tile.py:882
-msgctxt "kajongg meld type"
-msgid "&single"
-msgstr ""
-
-#: src/tile.py:884
-msgctxt "kajongg meld type"
-msgid "&pair"
-msgstr ""
-
-#: src/tile.py:886
-msgctxt "kajongg meld type"
-msgid "&chow"
-msgstr ""
-
-#: src/tile.py:888
-msgctxt "kajongg meld type"
-msgid "p&ung"
-msgstr "ポン(&U)"
-
-#: src/tile.py:890
-msgctxt "kajongg meld type"
-msgid "c&laimed kong"
-msgstr ""
-
-#: src/tile.py:892
-msgctxt "kajongg meld type"
-msgid "k&ong"
-msgstr "カン(&O)"
-
-#: src/tile.py:893
-msgctxt "kajongg meld type"
-msgid "rest of tiles"
-msgstr ""
-
-#: src/tile.py:900
-msgctxt "kajongg meld state"
-msgid "Exposed"
-msgstr ""
-
-#: src/tile.py:901
-msgctxt "kajongg meld state"
-msgid "Concealed"
-msgstr ""
-
-#: src/tile.py:907
-#, python-brace-format
-msgctxt "kajongg meld name, do not translate parameter names"
-msgid "{state} {meldType} {name}"
-msgstr ""
-
-#: src/tilesetselector.py:141
-#, fuzzy
-#| msgid "Preview"
-msgctxt "TilesetSelector"
-msgid "Preview"
-msgstr "プレビュー"
-
-#: src/tilesetselector.py:142
-#, fuzzy
-#| msgid "Properties"
-msgctxt "TilesetSelector"
-msgid "Properties"
-msgstr "プロパティ"
-
-#: src/tilesetselector.py:143
-#, fuzzy
-#| msgid "Author:"
-msgctxt "TilesetSelector"
-msgid "Author:"
-msgstr "作者:"
-
-#: src/tilesetselector.py:144
-#, fuzzy
-#| msgid "Contact:"
-msgctxt "TilesetSelector"
-msgid "Contact:"
-msgstr "連絡先:"
-
-#: src/tilesetselector.py:145
-#, fuzzy
-#| msgid "Description:"
-msgctxt "TilesetSelector"
-msgid "Description:"
-msgstr "説明:"
-
-#: src/user.py:94
-msgid ""
-"Your client has a version older than 4.9.0 but you need %1 for this server"
-msgstr ""
-
-#: src/user.py:98
-msgid "Your client has version %1 but you need %2 for this server"
-msgstr ""

お尻に 2つの空行を追加

→Ctrl+S で保存:

-


3). 「パッチ3」(新規のPO ファイルを翻訳)の作成:

「翻訳ファイル」は、イチから作成し直しました:

詳細は「項番 64.」を参照:

-

$ cd ~/git/void-packages/srcpkgs/@kajongg/patches/
$ sudo featherpad 03.kajongg.po-ja.patch

↓ すべて貼付け:

--- a/po/ja/kajongg.po   1970-01-01 09:00:00.000000000 +0900
+++ b/po/ja/kajongg.po  2026-02-15 10:52:29.092394586 +0900
@@ -0,0 +1,1916 @@
+# Japanese translations for @kajongg package.
+# Copyright (C) 2026 THE @kajongg'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the @kajongg package.
+# Automatically generated, 2026.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: @kajongg 25.12.2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-02-14 12:35+0900\n"
+"PO-Revision-Date: 2026-02-14 12:35+0900\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: src/background.py:71 src/tileset.py:48
+msgid "file <filename>%1</filename> contains no valid SVG"
+msgstr "<filename>%1</filename> ファイル には有効な SVG が含まれていません"
+
+#: src/board.py:385
+msgid "Choose from"
+msgstr "選択"
+
+#: src/chat.py:51
+msgid "Time"
+msgstr "時間"
+
+#: src/chat.py:51 src/playerlist.py:90
+msgid "Player"
+msgstr "プレイヤー"
+
+#: src/chat.py:51
+msgid "Message"
+msgstr "メッセージ"
+
+#: src/chat.py:125
+msgid "Chat on table %1 at %2"
+msgstr "テーブル %1、%2 でチャット"
+
+#: src/configdialog.py:47
+msgid "Show tile shadows"
+msgstr "牌の影を表示"
+
+#: src/configdialog.py:50
+msgid "Rearrange undisclosed tiles to melds"
+msgstr "未公開の牌をメルドに再配置"
+
+#: src/configdialog.py:53
+msgid "Show only possible actions"
+msgstr "可能なアクションのみを表示"
+
+#: src/configdialog.py:56
+msgid "Propose what to do"
+msgstr "何をすべきかを提案"
+
+#: src/configdialog.py:62
+msgid "Animation speed:"
+msgstr "アニメーション速度:"
+
+#: src/configdialog.py:66
+msgid "Use sounds if available"
+msgstr "利用可能な場合はサウンドを使用"
+
+#: src/configdialog.py:69
+msgid "Let others hear my voice"
+msgstr "他の人に私の声を聞いてもらいます"
+
+#: src/configdialog.py:106
+msgid "Tiles"
+msgstr "牌"
+
+#: src/configdialog.py:109
+msgid "Backgrounds"
+msgstr "背景"
+
+#: src/game.py:404
+msgid "Score computed manually"
+msgstr "スコアは手動で計算されます"
+
+#: src/game.py:502
+msgid "Player %1 not known"
+msgstr "プレイヤー %1 は不明です"
+
+#: src/game.py:925
+msgid "Short living wall: Tile is invisible, hence dangerous"
+msgstr "寿命が短い壁: 牌は目に見えないため危険です"
+
+#: src/games.py:95 src/playerlist.py:67 src/tables.py:67
+msgid "Players"
+msgstr "プレイヤー"
+
+#: src/games.py:95
+msgid "Started"
+msgstr "開始"
+
+#: src/games.py:129
+msgid "&Load"
+msgstr "ロード(&L)"
+
+#: src/games.py:134 src/playerlist.py:56
+msgid "&Delete"
+msgstr "削除(&D)"
+
+#: src/games.py:139
+msgid "Show only pending games"
+msgstr "保留中のゲームのみを表示"
+
+#: src/games.py:247
+msgid ""
+"Do you really want to delete <numid>%1</numid> games?<br>This will be final, "
+"you cannot cancel it with the cancel button"
+msgstr ""
+"本当に <numid>%1</numid> 個のゲームを削除しますか?<br>"
+"これは最終的な削除であり、キャンセルボタンでキャンセルすることはできません"
+
+#: src/guiutil.py:134 src/kdestub.py:120 src/kdestub.py:123
+msgid "Kajongg"
+msgstr ""
+
+#: src/humanclient.py:66
+msgid "Which chow do you want to expose?"
+msgstr "どのレシピを公開したいですか?"
+
+#: src/humanclient.py:104
+msgid "Which kong do you want to declare?"
+msgstr "どのカンを宣言しますか?"
+
+#: src/humanclient.py:172
+msgid "Choose"
+msgstr "選択"
+
+#: src/humanclient.py:383
+msgid "You cannot say %1"
+msgstr "%1 とは宣言できません"
+
+#: src/humanclient.py:608
+msgid "Player %1 has left the table"
+msgstr "プレイヤー %1 がテーブルから退席しました"
+
+#: src/humanclient.py:671
+msgid ""
+"The game on table <numid>%1</numid> can begin. Are you ready to play now?"
+msgstr ""
+"テーブル <numid>%1</numid> でゲームを開始できます。今すぐプレイする準備はできていますか?"
+
+#: src/humanclient.py:691
+msgid "Ready for next hand?"
+msgstr "次の役の準備はできていますか?"
+
+#: src/humanclient.py:967
+msgid "The connection to the server %1 broke, please try again later."
+msgstr "サーバー %1 への接続が切断されました。後でもう一度試してください。"
+
+#: src/kajongg.py:81 src/kdestub.py:1092
+msgid "Mah Jongg - the ancient Chinese board game for 4 players"
+msgstr "Mah Jongg - 古代中国の 4 人用ボード ゲーム"
+
+#: src/kajongg.py:85
+msgid "all robots play with visible concealed tiles"
+msgstr "すべてのロボットは目に見える未公開の牌でプレイします"
+
+#: src/kajongg.py:86
+msgid "start with demo mode"
+msgstr "デモモードから開始"
+
+#: src/kajongg.py:87
+msgid "login to HOST"
+msgstr "ホストにログイン"
+
+#: src/kajongg.py:88
+msgid "start new TABLE"
+msgstr "新しいテーブルを開始"
+
+#: src/kajongg.py:89
+msgid "join TABLE"
+msgstr "テーブルに参加"
+
+#: src/kajongg.py:90
+msgid "use RULESET without asking"
+msgstr "何も尋ねずにルールセットを使用"
+
+#: src/kajongg.py:91
+msgid "prefer PLAYER for next login"
+msgstr "次回のログインでは プレーヤー を優先します"
+
+#: src/kajongg.py:92
+msgid "use AI variant for human player in demo mode"
+msgstr "デモモードで人間のプレイヤーに AI バリアントを使用"
+
+#: src/kajongg.py:93
+msgid "write statistics to CSV"
+msgstr "統計情報を CSV に書き込む"
+
+#: src/kajongg.py:94
+msgid "show all available rulesets"
+msgstr "利用可能なすべてのルールセットを表示"
+
+#: src/kajongg.py:95
+msgid "for testing purposes: Initializes the random generator"
+msgstr "テスト目的: ランダムジェネレーターを初期化"
+
+#: src/kajongg.py:97
+msgid "show no graphical user interface. Intended only for testing"
+msgstr "グラフィカル ユーザー インターフェイスは表示されません。テストのみを目的としています"
+
+#: src/kajongg.py:99
+msgid ""
+"use a dedicated server already running and listening on SOCKET. Intended "
+"only for testing"
+msgstr ""
+"すでに稼働しSOCKETをリッスン(接続要求の待ち)している専用サーバーを"
+"使用します。テストのみを目的としています。"
+
+#: src/kajongg.py:101
+msgid ""
+"use a dedicated server already running and listening on PORT. Intended only "
+"for testing"
+msgstr ""
+"すでに稼働中でPORTをリッスン(接続要求の待ち)している専用サーバーを使用してください。"
+"テスト専用です。"
+
+#: src/kdestub.py:278
+msgid "&OK"
+msgstr "OK(&O)"
+
+#: src/kdestub.py:279
+msgid "&Apply"
+msgstr "適用(&A)"
+
+#: src/kdestub.py:280
+msgid "&Cancel"
+msgstr "キャンセル(&C)"
+
+#: src/kdestub.py:281 src/kdestub.py:469
+msgid "&Help"
+msgstr "ヘルプ(&H)"
+
+#: src/kdestub.py:282
+msgid "&Defaults"
+msgstr "デフォルト(&D)"
+
+#: src/kdestub.py:364
+msgid "Configure Tool&bars..."
+msgstr "ツールバーを設定...(&b)"
+
+#: src/kdestub.py:366
+msgid "Configure toolbars"
+msgstr "ツールバーの設定"
+
+#: src/kdestub.py:373
+msgid "Configure &Kajongg..."
+msgstr "Kajongg の設定...(&K)"
+
+#: src/kdestub.py:375 src/kdestub.py:1153
+msgid "Configure"
+msgstr "設定"
+
+#: src/kdestub.py:465
+msgid "&Game"
+msgstr "ゲーム(&G)"
+
+#: src/kdestub.py:466
+msgid "&View"
+msgstr "表示(&V)"
+
+#: src/kdestub.py:467
+msgid "&Settings"
+msgstr "設定(&S)"
+
+#: src/kdestub.py:480 src/kdestub.py:857
+msgid "Switch Application Language"
+msgstr "アプリケーション言語を切り替え"
+
+#: src/kdestub.py:862
+msgid "Please choose the language which should be used for this application:"
+msgstr "このアプリケーションに使用する言語を選択してください:"
+
+#: src/kdestub.py:881
+msgid "Add Fallback Language"
+msgstr "フォールバック(代替え時に使われる)言語の追加"
+
+#: src/kdestub.py:893
+msgid "Primary language:"
+msgstr "主な言語:"
+
+#: src/kdestub.py:893
+msgid "Fallback language:"
+msgstr "フォールバック(代替え時に使われる)言語:"
+
+#: src/kdestub.py:899
+msgid "Remove"
+msgstr "削除"
+
+#: src/kdestub.py:903
+msgid ""
+"This is the main application language which will be used first, before any "
+"other languages."
+msgstr ""
+"これは、他の言語よりも先に最初に使用されるメインのアプリケーション言語です。"
+
+#: src/kdestub.py:905
+msgid ""
+"This is the language which will be used if any previous languages do not "
+"contain a proper translation."
+msgstr ""
+"前の言語に適切な翻訳が含まれていない場合に使用される言語です。"
+
+#: src/kdestub.py:1035
+msgid "About Kajongg"
+msgstr "Kajongg について"
+
+#: src/kdestub.py:1055
+msgid "Version: %1"
+msgstr "バージョン: %1"
+
+#: src/kdestub.py:1056
+msgid "Protocol version %1"
+msgstr "プロトコルバージョン %1"
+
+#: src/kdestub.py:1059
+msgid "Original author"
+msgstr "原作者"
+
+#: src/kdestub.py:1066
+msgid "KDE Frameworks (not installed or not usable)"
+msgstr "KDE フレームワーク (インストールされていないか、使用できません)"
+
+#: src/kdestub.py:1093
+msgid ""
+"This is the classical Mah Jongg for four players. If you are looking for Mah "
+"Jongg solitaire please use the application kmahjongg."
+msgstr ""
+"これは 4人用のクラシックな麻雀です。麻雀ソリティアをお探しの方は、"
+"kmahjongg アプリをご利用ください。"
+
+#: src/kdestub.py:1110
+msgid ""
+"Please use <a href=\"https://bugs.kde.org\">https://bugs.kde.org</a> to "
+"report bugs."
+msgstr ""
+"不具合を報告するには、<a href=\"https://bugs.kde.org\">https://bugs.kde.org</a> "
+"を使用してください。"
+
+#: src/kdestub.py:1115
+msgid "Authors:"
+msgstr "作者:"
+
+#: src/kdestub.py:1356
+msgid "Configure Toolbars"
+msgstr "ツールバーの設定"
+
+#: src/kdestub.py:1358
+msgid "A&vailable actions:"
+msgstr "利用可能なアクション(&v):"
+
+#: src/kdestub.py:1369
+msgid "Curr&ent actions:"
+msgstr "現在のアクション(&e):"
+
+#: src/login.py:177
+msgid "trying to start local server %1"
+msgstr "ローカルサーバー %1 を起動しようとしています"
+
+#: src/login.py:188 src/login.py:637
+msgid "removed stale socket <filename>%1</filename>"
+msgstr "古いソケット <filename>%1</filename> を削除しました"
+
+#: src/login.py:208
+msgid "started the local kajongg server: pid=<numid>%1</numid> %2"
+msgstr "ローカルの kajongg サーバーを開始しました"
+": pid=<numid>%1</numid> %2"
+
+#: src/login.py:300 src/login.py:406
+msgid "Game server:"
+msgstr "ゲームサーバー:"
+
+#: src/login.py:303 src/login.py:408
+msgid "Username:"
+msgstr "ユーザ名:"
+
+#: src/login.py:306 src/login.py:411
+msgid "Password:"
+msgstr "パスワード:"
+
+#: src/login.py:414
+msgid "Repeat password:"
+msgstr "パスワードを再入力:"
+
+#: src/login.py:565
+msgid "You are already connected to server %1"
+msgstr "すでにサーバー %1 に接続しています"
+
+#: src/login.py:618
+msgid "Server %1 did not answer"
+msgstr "サーバー %1 が応答しませんでした"
+
+#: src/login.py:620
+msgid "Server %1 refused connection"
+msgstr "サーバー %1 が接続を拒否しました"
+
+#: src/login.py:622
+msgid "Server %1 does not run a kajongg server"
+msgstr "サーバー %1 は kajongg サーバーを実行していません"
+
+#: src/login.py:624
+msgid "Address for server %1 cannot be found"
+msgstr "サーバー %1 のアドレスが見つかりません"
+
+#: src/login.py:627
+msgid "Login to server %1 failed: You have no network connection"
+msgstr "サーバー %1 へのログインに失敗しました: ネットワーク接続がありません"
+
+#: src/login.py:638
+msgid "Please try again"
+msgstr "もう一度試してください"
+
+#: src/mainwindow.py:546
+msgid "C&hat"
+msgstr "チャット(&h)"
+
+#: src/message.py:250
+msgid "saying %1 violates Original Call"
+msgstr "%1 が「オリジナル コール」(最初の捨て牌でテンパイ)に違反している"
+"と言っています"
+
+#: src/message.py:263
+msgid ""
+"claiming %1 is dangerous because you will have to discard a dangerous tile"
+msgstr ""
+
+#: src/message.py:268
+msgid ""
+"claiming %1 for %2 is dangerous because you will have to discard a dangerous "
+"tile"
+msgstr ""
+"%1 を %2 に請求するのは、リスクがある牌を捨てる必要があるため危険です。"
+
+#: src/message.py:271
+msgid "You may say %1"
+msgstr "%1 と宣言するかもしれません"
+
+#: src/message.py:326
+msgid "saying Kong for %1 violates Original Call"
+msgstr "%1 のカンが「オリジナル コール」(最初の捨て牌でテンパイ)に違反"
+"していると言っています"
+
+#: src/message.py:330
+msgid "You may say Kong for %1"
+msgstr "%1 の場合はカンと言ってください"
+
+#: src/message.py:387
+msgid "Press here and you win"
+msgstr "ここを押せば勝ちです"
+
+#: src/message.py:418
+msgid "discarding %1 and declaring Original Call makes this hand unwinnable"
+msgstr "%1 を捨てて、「オリジナル コール」(最初の捨て牌でテンパイ)を宣言"
+"すると、この役は勝てなくなります"
+
+#: src/message.py:422
+msgid ""
+"Discard a tile, declaring Original Call meaning you need only one tile to "
+"complete the hand and will not alter the hand in any way (except bonus tiles)"
+msgstr ""
+"牌を 1枚捨てて、「オリジナル コール」(最初の捨て牌でテンパイ)を宣言。"
+"これは、手札を完成させるには牌が 1枚だけ必要であり、手札を一切変更しない"
+"ことを意味します(ボーナス牌を除く)"
+
+#: src/message.py:465
+msgid "discarding %1 violates Original Call"
+msgstr "%1 を捨てると元の宣言に違反します"
+
+#: src/message.py:468
+msgid "discarding %1 is Dangerous Game"
+msgstr "%1 を捨てるのは危険なゲームです"
+
+#: src/message.py:471
+msgid "discard the least useful tile"
+msgstr "最も役に立たない牌を捨てます"
+
+#: src/message.py:551
+msgid "%1 is not ready to start the game"
+msgstr "%1 はゲームを開始する準備ができていません"
+
+#: src/message.py:590
+msgid "Kajongg <numid>%1</numid>"
+msgstr ""
+
+#: src/message.py:901
+msgid "Confirm that you saw the message"
+msgstr "メッセージが表示されたことを確認"
+
+#: src/message.py:914
+msgid "You cannot or do not want to claim this tile"
+msgstr "この牌を要求できない、または要求したくない"
+
+#: src/mjresource.py:92
+msgid ""
+"cannot find any %1 in the following directories, is libkmahjongg installed?"
+msgstr ""
+"次のディレクトリに %1 が見つかりません。libkmahjongg はインストール"
+"されていますか?"
+
+#: src/mjresource.py:116
+msgid "cannot find %1, using default"
+msgstr "%1 が見つかりません。デフォルトを使用します"
+
+#: src/mjresource.py:131
+msgid "unknown name"
+msgstr "名前がわかりません"
+
+#: src/mjresource.py:132
+msgid "unknown author"
+msgstr "作者がわかりません"
+
+#: src/mjresource.py:135
+msgid "no description available"
+msgstr "説明がありません"
+
+#: src/mjresource.py:138
+msgid "no E-Mail address available"
+msgstr "利用可能な電子メールアドレスがありません"
+
+#: src/player.py:855
+msgid "Player %1 has 3 or 4 exposed melds, all are green"
+msgstr ""
+"プレイヤー %1 には 3つ または 4つ の公開したメルド(3つ か 4つ の牌の組合せ)"
+"があり、すべて緑色です"
+
+#: src/player.py:863
+msgid "Player %1 may try a True Color Game"
+msgstr "プレイヤー %1 は「九蓮宝燈(チューレンポウトウ)」の役を試せます"
+
+#: src/player.py:866
+msgid "Player %1 may try an All Terminals Game"
+msgstr "プレイヤー %1 は「清老頭(チンロウトウ)」の役を試せます"
+
+#: src/player.py:879
+msgid "Player %1 exposed many winds"
+msgstr "プレイヤー %1 は多くの風を公開しました"
+
+#: src/player.py:883
+msgid "Player %1 exposed many dragons"
+msgstr "プレイヤー %1 は多くの龍を公開しました"
+
+#: src/playerlist.py:110
+msgid "Player %1 already exists"
+msgstr "プレイヤー %1 はすでに存在します"
+
+#: src/playerlist.py:121
+msgid "Error while adding player %1: %2"
+msgstr "プレイヤー %1 の追加中にエラーが発生しました: %2"
+
+#: src/playerlist.py:176
+msgid ""
+"There are %1 finished and %2 unfinished games for %3, delete %3 anyway?  "
+"This will also delete all games played by %3!"
+msgstr ""
+"%3 には完了したゲームが %1 個、未完了のゲームが %2 個あります。"
+"それでも %3 を削除しますか? "
+"これにより、%3 がプレイしたゲームもすべて削除されます"
+
+#: src/predefined.py:35
+msgid "Classical Chinese"
+msgstr "古典的な中国式"
+
+#: src/predefined.py:43
+msgid ""
+"The dead wall is also called kong box: The last 16 tiles of the wall used as "
+"source of replacement tiles"
+msgstr ""
+"デッドウォールは カン ボックス とも呼ばれ、"
+"交換用 牌のソースとして使用される壁の最後の16 枚の牌です。"
+
+#: src/predefined.py:48
+msgid ""
+"Winner said Mah Jong with the last tile taken from the living end of the wall"
+msgstr ""
+"勝者は壁の生きている端から取った最後の牌で MahJong(上がり)を宣言"
+"しました"
+
+#: src/predefined.py:52
+msgid ""
+"Winner said Mah Jong by claiming the last tile taken from the living end of "
+"the wall, discarded by another player"
+msgstr ""
+"勝者は、他のプレイヤーが捨てた壁の生きている端から取った"
+"最後の牌を獲得して MahJong(上がり)を宣言しました"
+
+#: src/predefined.py:56
+msgid ""
+"Winner said Mah Jong by claiming the 4th tile of a kong another player just "
+"declared"
+msgstr ""
+"勝者は、他のプレイヤーが宣言したカンの 4 番目の牌を獲得して"
+"MahJong(上がり)を宣言しました"
+
+#: src/predefined.py:62
+msgid ""
+"Just before the first discard, a player can declare Original Call meaning "
+"she needs only one tile to complete the hand and announces she will not "
+"alter the hand in any way (except bonus tiles)"
+msgstr ""
+"最初の捨て牌の直前に、プレイヤーは「オリジナル コール」(最初の捨て牌でテンパイ) "
+"を宣言できます。これは、手牌を完成させるのに 1 枚だけ必要であり、いかなる形でも"
+"手牌を変更しないことを宣言することを意味します(ボーナス牌を除く)"
+
+#: src/predefined.py:66
+msgid ""
+"In some situations discarding a tile that has a high chance to help somebody "
+"to win is declared to be dangerous, and if that tile actually makes somebody "
+"win, the discarder pays the winner for all"
+msgstr ""
+"状況によっては、誰かの勝利に繋がる可能性が高い牌を捨てることは危険である"
+"と言われ、その牌が実際に誰かの勝利につながる場合、牌を捨てた人は勝者に"
+"全額を支払うことになります"
+
+#: src/predefined.py:71
+msgid ""
+"Kong after Kong: Declare Kong and a second Kong with the replacement tile "
+"and Mah Jong with the second replacement tile"
+msgstr ""
+"カンの後にカン: 交換牌でカンと 2 番目の カン を宣言し、2 番目の 交換牌 で"
+"MahJong(上がり)を宣言しました"
+
+#: src/predefined.py:76
+msgid "East says Mah Jong with the unmodified dealt tiles"
+msgstr ""
+"東 は配牌を修正せずに MahJong(上がり)を宣言しました"
+
+#: src/predefined.py:79
+msgid ""
+"South, West or North says Mah Jong with the first tile discarded by East"
+msgstr ""
+"南、西、北 のいずれかが、東 が最初に捨てた牌で MahJong(上がり)を宣言しました"
+
+#: src/predefined.py:82
+msgid "If that happens, East gets a limit score and the winds rotate"
+msgstr ""
+"そうなると 東 は 上限のスコア を獲得し、風 が回転します"
+
+#: src/predefined.py:104
+msgid "The hand contains too many tiles"
+msgstr "役に含まれる牌が多すぎます"
+
+#: src/predefined.py:126
+msgid "Play with no upper scoring limit"
+msgstr "得点上限なしでプレー"
+
+#: src/predefined.py:133
+msgid "The Kong Box is used for replacement tiles when declaring kongs"
+msgstr "カン ボックスは、カン を宣言するときに牌を交換するために使用されます。"
+
+#: src/predefined.py:136
+msgid "Bonus tiles increase the luck factor"
+msgstr "ボーナス牌は運の要素を増やします"
+
+#: src/predefined.py:143
+msgid "The number of chows a player may build"
+msgstr "プレイヤーが作れるチーの数"
+
+#: src/predefined.py:147
+msgid "Mah Jongg is only allowed after having declared to have a calling hand"
+msgstr "MahJong(上がり)は役を持っていると宣言した場合にのみ許可されます"
+
+#: src/predefined.py:154
+msgid "Discard tiles ordered from top left"
+msgstr "左上から順に牌を捨てます"
+
+#: src/predefined.py:159
+msgid ""
+"Only when discarding tiles ordered: Do not place the next discard where the "
+"claimed discard was"
+msgstr ""
+"牌を捨てる場合のみ: 要求された捨て札があった場所に次の捨て札を置かないでください"
+
+#: src/predefined.py:185
+msgid "The hand has 0 basis points excluding bonus tiles"
+msgstr ""
+"ボーナス 牌を除いて、役の基本のポイントは 0 です"
+
+#: src/predefined.py:193
+msgid ""
+"Only same-colored tiles (only bamboo/stone/character) plus any number of "
+"winds and dragons"
+msgstr ""
+"同色牌のみ(竹・石・文字のみ)と任意の数の 風 と 龍"
+
+#: src/predefined.py:197
+msgid "Only same-colored tiles (only bamboo/stone/character)"
+msgstr "同色牌のみ(竹・石・文字のみ)"
+
+#: src/predefined.py:200
+msgid "All tiles concealed and of the same suit, no honors"
+msgstr "すべての牌が未公開で、同じ組合せの場合、勝ちはありません"
+
+#: src/predefined.py:203
+msgid "Only winds, dragons, 1 and 9"
+msgstr "風、龍、1 と 9 のみ"
+
+#: src/predefined.py:205
+msgid "Only winds and dragons"
+msgstr "風と龍 のみ"
+
+#: src/predefined.py:208
+msgid "Only hidden Pungs or Kongs, last tile from wall"
+msgstr "未公開の ポン または カン のみ、壁の最後の牌"
+
+#: src/predefined.py:211
+msgid "Only 1 and 9"
+msgstr "1 と 9 のみ"
+
+#: src/predefined.py:214
+msgid "4 Kongs"
+msgstr "4つの カン"
+
+#: src/predefined.py:217 src/predefined.py:337
+msgid "3 Pungs or Kongs of dragons"
+msgstr "龍の 3つのポン または カン"
+
+#: src/predefined.py:220 src/predefined.py:342
+msgid "4 Pungs or Kongs of winds"
+msgstr "風の 4つのポン または カン"
+
+#: src/predefined.py:222
+msgid "Only green tiles: Green dragon and Bamboo 2,3,4,6,8"
+msgstr "緑 の牌のみ: 緑の龍 と 竹 2、3、4、6、8"
+
+#: src/predefined.py:225
+msgid "Mah Jong with stone 5 from the dead wall"
+msgstr "デッドウォールから 石 5 を使った MahJong(上がり)"
+
+#: src/predefined.py:228
+msgid "Mah Jong with the last tile from the wall being a stone 1"
+msgstr "壁の最後の牌が 石 1 である Mah Jong(上がり)"
+
+#: src/predefined.py:231
+msgid "Robbing the Kong of bamboo 2"
+msgstr "カン から 竹 2 を奪う"
+
+#: src/predefined.py:244
+msgid ""
+"A concealed hand in one color 1112345678999 plus last tile of this suit "
+"(from wall or discarded)"
+msgstr ""
+"1 色の未公開の手札 1112345678999 プラス この組合せの最後の牌(壁から、または捨て牌)"
+
+#: src/predefined.py:247
+msgid ""
+"13 single tiles: All dragons, winds, 1, 9 and a 14th tile building a pair "
+"with one of them"
+msgstr ""
+"13 枚のシングル牌:すべての龍、風、1、9、"
+"そして 14番目の牌は、そのうちの 1つとペアを構築します"
+
+#: src/predefined.py:322
+msgid "Classical Chinese as defined by the Deutsche Mah Jongg Liga (DMJL) e.V."
+msgstr "ドイツ麻雀リーグ (DMJL) e.V. で定義されている古典的な中国式"
+
+#: src/predefined.py:330
+msgid ""
+"All tiles of same color. Pung or Kong of 1 and 9, pair of 2, 5 or 8 and two "
+"Chows of the remaining values"
+msgstr ""
+"すべて同じ色の牌。1 と 9 の ポンまたは カン と、2、5、または 8 のペア と、残りの牌は 2つの チー"
+
+#: src/predefined.py:334
+msgid "2 Pungs or Kongs of dragons and 1 pair of dragons"
+msgstr "龍の 2つのポン または カン と、龍の 1ペア"
+
+#: src/predefined.py:340
+msgid "3 Pungs or Kongs of winds and 1 pair of winds"
+msgstr "風の 3つの ポン または カン と、風の 1ペア"
+
+#: src/predefined.py:377
+msgid "Classical Chinese as defined by the British Mah-Jong Association"
+msgstr "イギリス麻雀協会 が定義する 古典的な中国式"
+
+#: src/predefined.py:397
+msgid ""
+"All tiles concealed of same color: Values 1112345678999 with one pair from 2 "
+"to 8 (last tile from wall or discarded)"
+msgstr ""
+"未公開のすべての牌が同じ色: 値は 1112345678999 で、"
+"2 から 8 までの 1つの ペア (壁の最後の牌 または 捨てられた牌)"
+
+#: src/predefined.py:401
+msgid ""
+"Pair of 1s and a run from 2 to 9 in the same suit with each of the winds"
+msgstr ""
+"それぞれの 風 で、同じ組合せで、1 の ペアと、2 から 9 までの並び"
+
+#: src/predefined.py:404
+msgid ""
+"Four sets of three tiles in the different suits and a pair: No Winds or "
+"Dragons"
+msgstr ""
+"異なる組合せの 3つ の牌を 4 セットと、1つの ペア: 風と龍 はなし"
+
+#: src/predefined.py:406
+msgid "7 pairs of tiles in any 2 out of 3 suits; no Winds or Dragons"
+msgstr "3つ の組合せのうち任意の 2つ の牌の 7つの ペア: 風と龍 はなし"
+
+#: src/predefined.py:409
+msgid "7 pairs of 1s/9s/Winds/Dragons"
+msgstr "1 / 9 / 風 / 龍 の 7つの ペア"
+
+#: src/predefined.py:426
+msgid "Concealed pungs of one suit with winds/dragons and a pair"
+msgstr "風 / 龍 とペアの 1つの組合せの未公開の ポン"
+
+#: src/predefined.py:428 src/predefined.py:549
+msgid "Only same-colored tiles (no chows, dragons or winds)"
+msgstr "同じ色の牌のみ (チー、龍、風 はなし)"
+
+#: src/predefined.py:431
+msgid "3 Pungs or Kongs of dragons plus any pung/kong and a pair"
+msgstr "龍のポン または カン 3つ と、任意の ポン/カン および ペア"
+
+#: src/predefined.py:515
+msgid ""
+"Taiwanese 16-Tiles Mah Jongg, early alpha. See https://bugs.kde.org/show_bug."
+"cgi?id=298821"
+msgstr ""
+"台湾の 16 牌麻雀、初期アルファ版。"
+"https://bugs.kde.org/show_bug.cgi?id=298821 を参照してください。"
+
+#: src/query.py:430
+msgid "Database %1 updated from schema %2 to %3"
+msgstr "データベース %1 がスキーマ %2 から %3 に更新されました"
+
+#: src/rule.py:366
+msgid "Meld Rules"
+msgstr "メルド(3つか 4つの牌の組合せ)のルール"
+
+#: src/rule.py:367
+msgid ""
+"Meld rules are applied to single melds independent of the rest of the hand"
+msgstr ""
+"メルド(3つか 4つの牌の組合せ)のルールは、役の残りの部分とは独立して単一のメルドに適用されます"
+
+#: src/rule.py:368
+msgid "Hand Rules"
+msgstr "役のルール"
+
+#: src/rule.py:369
+msgid "Hand rules are applied to the entire hand, for all players"
+msgstr "役のルールはすべてのプレイヤーの役 全体に適用されます"
+
+#: src/rule.py:370
+msgid "Winner Rules"
+msgstr "勝者のルール"
+
+#: src/rule.py:371
+msgid "Winner rules are applied to the entire hand but only for the winner"
+msgstr "勝者のルールは役 全体に適用されますが、勝者にのみ適用されます"
+
+#: src/rule.py:372
+msgid "Loser Rules"
+msgstr "敗者のルール"
+
+#: src/rule.py:373
+msgid "Loser rules are applied to the entire hand but only for non-winners"
+msgstr "敗者のルールは役 全体に適用されますが、勝者以外にのみ適用されます"
+
+#: src/rule.py:374
+msgid "Mah Jongg Rules"
+msgstr "MahJongg(上がり)のルール"
+
+#: src/rule.py:375
+msgid "Only hands matching a Mah Jongg rule can win"
+msgstr "MahJongg(上がり)のルールに一致する役だけが勝つことができます"
+
+#: src/rule.py:377
+msgid "Here we have several special game related options"
+msgstr "ここには特別なゲーム関連のオプションがいくつかあります"
+
+#: src/rule.py:378
+msgid "Penalties"
+msgstr "ペナルティ"
+
+#: src/rule.py:379
+msgid ""
+"Penalties are applied manually by the user. They are only used for scoring "
+"games.\n"
+"When playing against the computer or over the net, Kajongg will never let "
+"you get\n"
+"into a situation where you have to pay a penalty"
+msgstr ""
+"ペナルティはユーザが手動で適用します。ゲームのスコアリングにのみ使用されます。\n"
+"コンピュータやネット対戦の場合、\n"
+"Kajongg ではペナルティを課されるような状況に陥ることはありません。"
+
+#: src/rulesetselector.py:592
+msgid "C&opy"
+msgstr "コピー(&o)"
+
+#: src/rulesetselector.py:594
+msgid "&Remove"
+msgstr "削除(&R)"
+
+#: src/rulesetselector.py:595
+msgid "&Close"
+msgstr "閉じる(&C)"
+
+#: src/scene.py:389 src/scene.py:517
+msgid "Do you really want to abort this game?"
+msgstr "本当にこのゲームを中止してもよろしいですか?"
+
+#: src/scoring.py:62
+msgid "By the rules, %1 and %2 should now exchange their seats. "
+msgstr "ルールにより、%1 と %2 は席を交換する必要があります。"
+
+#: src/scoring.py:64
+msgid "&Exchange"
+msgstr "席の交換(&E)"
+
+#: src/scoring.py:66
+msgid "&Keep seat"
+msgstr "席をキープ(&K)"
+
+#: src/scoring.py:360
+msgid "Move Exposed Tiles Here"
+msgstr "公開した牌をここに移動"
+
+#: src/scoring.py:361
+msgid "Move Concealed Tiles Here"
+msgstr "未公開の牌をここに移動"
+
+#: src/scoring.py:673
+msgid "Please define four players in <interface>Settings|Players</interface>"
+msgstr "<interface>設定 | プレイヤー</interface> で 4 人のプレーヤーを定義してください"
+
+#: src/scoringdialog.py:258
+msgid "Round/Hand"
+msgstr "回転 / 役"
+
+#: src/scoringdialog.py:487
+msgid "Final scores for game <numid>%1</numid>"
+msgstr "ゲーム <numid>%1</numid> の最終スコア"
+
+#: src/scoringdialog.py:489
+msgid "Scores for game <numid>%1</numid>"
+msgstr "ゲーム <numid>%1</numid> のスコア"
+
+#: src/scoringdialog.py:585
+msgid "There is no active game"
+msgstr "アクティブなゲームはありません"
+
+#: src/scoringdialog.py:588
+msgid "%1"
+msgstr ""
+
+#: src/scoringdialog.py:602
+msgid "Manual score for %1: %2 points"
+msgstr "%1 の手動スコア: %2 ポイント"
+
+#: src/scoringdialog.py:689
+msgid "Penalty"
+msgstr "ペナルティ"
+
+#: src/scoringdialog.py:692
+msgid "Offense:"
+msgstr "罪科:"
+
+#: src/scoringdialog.py:699
+msgid "Total Penalty"
+msgstr "合計ペナルティ"
+
+#: src/scoringdialog.py:703 src/scoringdialog.py:782 src/rule.py:49
+msgid "points"
+msgstr "ポイント"
+
+#: src/scoringdialog.py:727
+msgid "&Execute"
+msgstr "実行(&E)"
+
+#: src/scoringdialog.py:835
+msgid "Winner"
+msgstr "勝者"
+
+#: src/scoringdialog.py:843
+msgid "&Penalties"
+msgstr "ペナルティ(&P)"
+
+#: src/scoringdialog.py:845
+msgid "&Save Hand"
+msgstr "役の保存(&S)"
+
+#: src/scoringdialog.py:867
+msgid "&Last Tile:"
+msgstr "最後の牌:(&L)"
+
+#: src/scoringdialog.py:876
+msgid "L&ast Meld:"
+msgstr "最後のメルド:(&a)"
+
+#: src/server.py:436
+msgid "the server will listen on PORT ({int(defaultPort)})"
+msgstr "サーバーは PORT ({int(defaultPort)}) でリッスン(接続要求待ち)します"
+
+#: src/server.py:439
+msgid "the server will listen on SOCKET"
+msgstr "サーバーは SOCKET でリッスン(接続要求待ち)します"
+
+#: src/server.py:443
+msgid "name of the database"
+msgstr "データベースの名前"
+
+#: src/server.py:447
+msgid "do not terminate local game server after last client disconnects"
+msgstr "最後のクライアントが切断された後はローカル ゲーム サーバーを終了しないでください"
+
+#: src/sound.py:70
+msgid "No voices will be heard because the program %1 is missing"
+msgstr "プログラム %1 が見つからないため、音声はありません"
+
+#: src/sound.py:375
+msgid "cannot write <filename>%1</filename>: %2"
+msgstr "<filename>%1</filename>: を書き込めません: %2"
+
+#: src/sound.py:378
+msgid "The voice files have changed, their checksum has changed."
+msgstr "音声ファイルが変更され、そのチェックサムも変更されました。"
+
+#: src/sound.py:379
+msgid "Please reinstall kajongg or do, with sufficient permissions:"
+msgstr "kajongg を再インストールするか、十分な権限を持って実行してください:"
+
+#: src/tables.py:65
+msgid "Table"
+msgstr "テーブル"
+
+#: src/tables.py:70
+msgid "Ruleset"
+msgstr "ルールセット"
+
+#: src/tables.py:149
+msgid "Select a ruleset"
+msgstr "ルールセットを選択"
+
+#: src/tables.py:187 src/tables.py:331 src/tables.py:363
+msgid "Allocate a new table"
+msgstr "新しいテーブルを割り当て"
+
+#: src/tables.py:193 src/tables.py:332 src/tables.py:364
+msgid "&Join"
+msgstr "参加(&J)"
+
+#: src/tables.py:194 src/tables.py:333 src/tables.py:365
+msgid "Join a table"
+msgstr "テーブルに参加"
+
+#: src/tables.py:200
+msgid "&Leave"
+msgstr "離席(&L)"
+
+#: src/tables.py:201
+msgid "Leave a table"
+msgstr "テーブルを離れます"
+
+#: src/tables.py:208
+msgid "Compare the rules of this table with my own rulesets"
+msgstr "このテーブルのルールを私自身のルールセットと比較してください"
+
+#: src/tables.py:214
+msgid "&Chat"
+msgstr "チャット(&C)"
+
+#: src/tables.py:221
+msgid "&Start"
+msgstr "開始(&S)"
+
+#: src/tables.py:222
+msgid "Start playing on a table. Empty seats will be taken by robot players."
+msgstr "テーブルの上でプレイします。空いた席にはロボットプレイヤーが座ります。"
+
+#: src/tables.py:300
+msgid "Local Games with Ruleset %1"
+msgstr "ルールセット %1 のローカル ゲーム"
+
+#: src/tables.py:304
+msgid "Tables at %1"
+msgstr "%1 のテーブル"
+
+#: src/tables.py:357
+msgid "Start a new game"
+msgstr "新しいゲームを開始"
+
+#: src/tables.py:361
+msgid "Resume the selected suspended game"
+msgstr "選択した中断されたゲームを再開します"
+
+#: src/tables.py:379
+msgid "Chat with others on this table"
+msgstr "このテーブルで他の人とチャットします"
+
+#: src/tables.py:382
+msgid "For chatting with others on this table, please first take a seat"
+msgstr "このテーブルでチャットする場合は、まず着席してください"
+
+#: src/tile.py:306
+msgid "East Wind"
+msgstr "東の風"
+
+#: src/tile.py:307
+msgid "South Wind"
+msgstr "南の風"
+
+#: src/tile.py:308
+msgid "West Wind"
+msgstr "西の風"
+
+#: src/tile.py:309
+msgid "North Wind"
+msgstr "北の風"
+
+#: src/backgroundselector.py:107
+msgctxt "BackgroundSelector"
+msgid "Preview"
+msgstr "表示"
+
+#: src/backgroundselector.py:108
+msgctxt "BackgroundSelector"
+msgid "Properties"
+msgstr "プロパティ"
+
+#: src/backgroundselector.py:109
+msgctxt "BackgroundSelector"
+msgid "Author:"
+msgstr " 作者:"
+
+#: src/backgroundselector.py:110
+msgctxt "BackgroundSelector"
+msgid "Contact:"
+msgstr "手がかり:"
+
+#: src/backgroundselector.py:111
+msgctxt "BackgroundSelector"
+msgid "Description:"
+msgstr "説明:"
+
+#: src/board.py:335
+msgctxt "kajongg:arrow keys hjkl like in konqueror"
+msgid "hjklHJKL"
+msgstr ""
+
+#: src/client.py:69
+msgctxt "table status"
+msgid "Suspended"
+msgstr "一時停止中"
+
+#: src/client.py:74
+msgctxt "table status"
+msgid "Running"
+msgstr "実行中"
+
+#: src/client.py:75
+msgctxt "table status"
+msgid "New"
+msgstr "新規"
+
+#: src/configdialog.py:103
+msgctxt "kajongg"
+msgid "Play"
+msgstr "プレイ"
+
+#: src/differ.py:72
+msgctxt "Kajongg"
+msgid "Rule"
+msgstr "ルール"
+
+#: src/differ.py:127
+msgctxt "@title:window"
+msgid "Compare"
+msgstr "比較"
+
+#: src/differ.py:170 src/differ.py:172
+msgctxt "Kajongg-Rule"
+msgid "not defined"
+msgstr "定義されていません"
+
+#: src/games.py:107
+msgctxt "@title:window"
+msgid "Games"
+msgstr "ゲーム"
+
+#: src/games.py:124
+msgctxt "start a new game"
+msgid "&New"
+msgstr "新規(&N)"
+
+#: src/kdestub.py:352
+msgctxt "@action:inmenu"
+msgid "Show St&atusbar"
+msgstr "ステータスバーを表示(&a)"
+
+#: src/kdestub.py:358
+msgctxt "@action:inmenu"
+msgid "Show &Toolbar"
+msgstr "ツールバーを表示(&T)"
+
+#: src/kdestub.py:477
+msgctxt "@action:inmenu"
+msgid "&Help"
+msgstr "ヘルプ(&H)"
+
+#: src/kdestub.py:484
+msgctxt "@action:inmenu"
+msgid "About &Kajongg"
+msgstr "Kajongg について(&K)"
+
+#: src/kdestub.py:1072
+msgctxt "kajongg"
+msgid "Using versions %1"
+msgstr "バージョン %1 を使用しています"
+
+#: src/login.py:251
+msgctxt "kajongg"
+msgid "Login"
+msgstr "ログイン"
+
+#: src/login.py:308
+msgctxt "kajongg"
+msgid "Ruleset:"
+msgstr "ルールセット:"
+
+#: src/login.py:400
+msgctxt "@title:window"
+msgid "Create User Account"
+msgstr "ユーザ アカウントの作成"
+
+#: src/login.py:605
+msgctxt "USER is not known on SERVER"
+msgid "%1 is not known on %2, do you want to open an account?"
+msgstr "%1 は %2 では不明です。アカウントを開設しますか?"
+
+#: src/mainwindow.py:486
+msgctxt "@action:inmenu"
+msgid "&Score Manual Game"
+msgstr "手動ゲームのスコア(&S)"
+
+#: src/mainwindow.py:488
+msgctxt "@action:intoolbar"
+msgid "Manual Game"
+msgstr "手動ゲーム"
+
+#: src/mainwindow.py:491
+msgctxt "kajongg @info:tooltip"
+msgid "&Score a manual game."
+msgstr "手動ゲームでスコアを付けます。(&S)"
+
+#: src/mainwindow.py:493
+msgctxt "@action:intoolbar"
+msgid "&Play"
+msgstr "プレイ(&P)"
+
+#: src/mainwindow.py:496
+msgctxt "kajongg @info:tooltip"
+msgid "Start a new game."
+msgstr "新しいゲームを開始します。"
+
+#: src/mainwindow.py:498
+msgctxt "@action:inmenu"
+msgid "&Abort Game"
+msgstr "ゲームを中止(&A)"
+
+#: src/mainwindow.py:502
+msgctxt "kajongg @info:tooltip"
+msgid "Abort the current game."
+msgstr "現在のゲームを中止します。"
+
+#: src/mainwindow.py:504
+msgctxt "@action:inmenu"
+msgid "&Quit Kajongg"
+msgstr "終了(&Q)"
+
+#: src/mainwindow.py:507
+msgctxt "@action:intoolbar"
+msgid "&Players"
+msgstr "プレイヤー(&P)"
+
+#: src/mainwindow.py:510
+msgctxt "kajongg @info:tooltip"
+msgid "define your players."
+msgstr "プレイヤーを定義します。"
+
+#: src/mainwindow.py:512
+msgctxt "@action:intoolbar"
+msgid "&Rulesets"
+msgstr "ルールセット(&R)"
+
+#: src/mainwindow.py:515
+msgctxt "kajongg @info:tooltip"
+msgid "customize rulesets."
+msgstr "ルールセットをカスタマイズします。"
+
+#: src/mainwindow.py:519
+msgctxt "@action:inmenu"
+msgid "&Change Visual Angle"
+msgstr "視角を変更(&C)"
+
+#: src/mainwindow.py:520
+msgctxt "@action:intoolbar"
+msgid "Angle"
+msgstr "角度"
+
+#: src/mainwindow.py:523
+msgctxt "kajongg @info:tooltip"
+msgid "Change the visual appearance of the tiles."
+msgstr "牌の外観を変更します。"
+
+#: src/mainwindow.py:527
+msgctxt "@action:inmenu"
+msgid "F&ull Screen Mode"
+msgstr "全画面モード(&u)"
+
+#: src/mainwindow.py:530
+msgctxt "kajongg @action:inmenu"
+msgid "&Score Table"
+msgstr "テーブルスコア(&S)"
+
+#: src/mainwindow.py:532
+msgctxt "kajongg @action:intoolbar"
+msgid "&Scores"
+msgstr "スコア(&S)"
+
+#: src/mainwindow.py:534
+msgctxt "kajongg @info:tooltip"
+msgid "Show or hide the score table for the current game."
+msgstr "現在のゲームのスコア表を表示または非表示にします。"
+
+#: src/mainwindow.py:536
+msgctxt "@action:inmenu"
+msgid "&Explain Scores"
+msgstr "スコアの説明(&E)"
+
+#: src/mainwindow.py:537
+msgctxt "@action:intoolbar"
+msgid "&Explain"
+msgstr "説明(&E)"
+
+#: src/mainwindow.py:539
+msgctxt "kajongg @info:tooltip"
+msgid "Explain the scoring for all players in the current game."
+msgstr "現在の試合の全プレイヤーの得点を説明します。"
+
+#: src/mainwindow.py:541
+msgctxt "@action:inmenu"
+msgid "&Demo Mode"
+msgstr "デモ モード(&D)"
+
+#: src/mainwindow.py:544
+msgctxt "kajongg @info:tooltip"
+msgid "Let the computer take over for you. Start a new local game if needed."
+msgstr "コンピュータに代わってもらい、必要に応じて、"
+"新しいローカル ゲームを開始します。"
+
+#: src/mainwindow.py:549
+msgctxt "kajongg @info:tooltip"
+msgid "Chat with the other players."
+msgstr "他のプレイヤーとチャットします。"
+
+#: src/playerlist.py:50
+msgctxt "define a new player"
+msgid "&New"
+msgstr "新規(&N)"
+
+#: src/rule.py:91
+msgctxt "Kajongg"
+msgid "%1 points"
+msgstr "%1 ポイント"
+
+#: src/rule.py:93
+msgctxt "Kajongg"
+msgid "%1 doubles"
+msgstr "%1 ダブルス"
+
+#: src/rule.py:98
+msgctxt "Kajongg"
+msgid "%1 limits"
+msgstr "限界値 %1"
+
+#: src/rule.py:376
+msgctxt "kajongg"
+msgid "Options"
+msgstr "オプション"
+
+#: src/rule.py:579
+msgctxt "Ruleset._newKey:%1 is empty or space plus number"
+msgid "Copy%1 of %2"
+msgstr "コピー %1/%2"
+
+#: src/rule.py:935
+msgctxt "%1 can be a sentence"
+msgid "%4 have impossible values %2/%3 in rule \"%1\""
+msgstr "%4 にはルール \"%1\" に不可能な値 %2/%3 があります"
+
+#: src/rule.py:1023
+msgctxt "wrong value for rule"
+msgid "%1: %2 is too small, minimal value is %3"
+msgstr "%1: %2 は小さすぎます。最小値は %3 です"
+
+#: src/rulesetselector.py:511
+msgctxt "@title:window"
+msgid "Customize rulesets"
+msgstr "ルールセットのカスタマイズ"
+
+#: src/rulesetselector.py:593
+msgctxt "Kajongg ruleset comparer"
+msgid "Co&mpare"
+msgstr "比較(&m)"
+
+#: src/scoring.py:60
+msgctxt "@title:window"
+msgid "Swap Seats"
+msgstr "席を交換"
+
+#: src/scoring.py:85
+msgctxt "@title:window"
+msgid "Select four players"
+msgstr "4人のプレイヤーを選択してください"
+
+#: src/scoringdialog.py:299 src/scoringdialog.py:834
+msgctxt "kajongg"
+msgid "Score"
+msgstr "スコア"
+
+#: src/scoringdialog.py:299
+msgctxt "kajongg"
+msgid "Payments"
+msgstr "支払い"
+
+#: src/scoringdialog.py:300
+msgctxt "kajongg"
+msgid "Balance"
+msgstr "バランス"
+
+#: src/scoringdialog.py:300
+msgctxt "kajongg"
+msgid "Chart"
+msgstr "チャート"
+
+#: src/scoringdialog.py:410
+msgctxt "kajongg"
+msgid "Scores"
+msgstr "スコア"
+
+#: src/scoringdialog.py:452
+msgctxt "kajongg"
+msgid "Used Rules"
+msgstr "使用されたルール"
+
+#: src/scoringdialog.py:569
+msgctxt "@title:window"
+msgid "Explain Scores"
+msgstr "スコアの説明"
+
+#: src/scoringdialog.py:805
+msgctxt "penalty dialog, appears behind paying player combobox"
+msgid "pays %1 points"
+msgstr "%1 ポイントを支払います"
+
+#: src/scoringdialog.py:810
+msgctxt "penalty dialog, appears behind profiting player combobox"
+msgid "gets %1 points"
+msgstr "%1 ポイントを獲得します"
+
+#: src/scoringdialog.py:821
+msgctxt "@title:window"
+msgid "Scoring for this Hand"
+msgstr "この役のスコア"
+
+#: src/scoringdialog.py:832
+msgctxt "kajongg"
+msgid "Player"
+msgstr "プレイヤー"
+
+#: src/scoringdialog.py:833
+msgctxt "kajongg"
+msgid "Wind"
+msgstr "風"
+
+#: src/scoringdialog.py:841
+msgctxt "kajongg"
+msgid "Draw"
+msgstr "引き分け"
+
+#: src/tables.py:69
+msgctxt "table status"
+msgid "Status"
+msgstr "状態"
+
+#: src/tables.py:186
+msgctxt "allocate a new table"
+msgid "&New"
+msgstr "新規(&N)"
+
+#: src/tables.py:207
+msgctxt "Kajongg-Ruleset"
+msgid "Compare"
+msgstr "比較"
+
+#: src/tables.py:359
+msgctxt "resuming a local suspended game"
+msgid "&Resume"
+msgstr "再開(&R)"
+
+#: src/tile.py:277
+msgctxt "kajongg"
+msgid "hidden"
+msgstr "未公開"
+
+#: src/tile.py:278
+msgctxt "kajongg"
+msgid "stone"
+msgstr "石"
+
+#: src/tile.py:279
+msgctxt "kajongg"
+msgid "bamboo"
+msgstr "竹"
+
+#: src/tile.py:280
+msgctxt "kajongg"
+msgid "character"
+msgstr "文字"
+
+#: src/tile.py:281
+msgctxt "kajongg"
+msgid "wind"
+msgstr "風"
+
+#: src/tile.py:282
+msgctxt "kajongg"
+msgid "dragon"
+msgstr "龍"
+
+#: src/tile.py:283
+msgctxt "kajongg"
+msgid "flower"
+msgstr "花"
+
+#: src/tile.py:284
+msgctxt "kajongg"
+msgid "season"
+msgstr "季節"
+
+#: src/tile.py:290
+msgctxt "kajongg"
+msgid "tile"
+msgstr "牌"
+
+#: src/tile.py:291
+msgctxt "kajongg"
+msgid "white"
+msgstr "白"
+
+#: src/tile.py:292
+msgctxt "kajongg"
+msgid "red"
+msgstr "赤"
+
+#: src/tile.py:293
+msgctxt "kajongg"
+msgid "green"
+msgstr "緑"
+
+#: src/tile.py:294
+msgctxt "kajongg"
+msgid "East"
+msgstr "東"
+
+#: src/tile.py:295
+msgctxt "kajongg"
+msgid "South"
+msgstr "南"
+
+#: src/tile.py:296
+msgctxt "kajongg"
+msgid "West"
+msgstr "西"
+
+#: src/tile.py:297
+msgctxt "kajongg"
+msgid "North"
+msgstr "北"
+
+#: src/tile.py:311
+#, python-brace-format
+msgctxt "kajongg tile name"
+msgid "{group} {value}"
+msgstr ""
+
+#: src/tile.py:880
+msgctxt "kajongg meld type"
+msgid "Bonus"
+msgstr "ボーナス"
+
+#: src/tile.py:882
+msgctxt "kajongg meld type"
+msgid "&single"
+msgstr "シングル(&s)"
+
+#: src/tile.py:884
+msgctxt "kajongg meld type"
+msgid "&pair"
+msgstr "ペア(&p)"
+
+#: src/tile.py:886
+msgctxt "kajongg meld type"
+msgid "&chow"
+msgstr "チー(&c)"
+
+#: src/tile.py:888
+msgctxt "kajongg meld type"
+msgid "p&ung"
+msgstr "ポン(&u)"
+
+#: src/tile.py:890
+msgctxt "kajongg meld type"
+msgid "c&laimed kong"
+msgstr "カンを宣言(&l)"
+
+#: src/tile.py:892
+msgctxt "kajongg meld type"
+msgid "k&ong"
+msgstr "カン(&o)"
+
+#: src/tile.py:893
+msgctxt "kajongg meld type"
+msgid "rest of tiles"
+msgstr "残りの牌"
+
+#: src/tile.py:900
+msgctxt "kajongg meld state"
+msgid "Exposed"
+msgstr "公開"
+
+#: src/tile.py:901
+msgctxt "kajongg meld state"
+msgid "Concealed"
+msgstr "未公開"
+
+#: src/tile.py:907
+#, python-brace-format
+msgctxt "kajongg meld name, do not translate parameter names"
+msgid "{state} {meldType} {name}"
+msgstr ""
+
+#: src/tilesetselector.py:141
+msgctxt "TilesetSelector"
+msgid "Preview"
+msgstr "表示"
+
+#: src/tilesetselector.py:142
+msgctxt "TilesetSelector"
+msgid "Properties"
+msgstr "プロパティ"
+
+#: src/tilesetselector.py:143
+msgctxt "TilesetSelector"
+msgid "Author:"
+msgstr "作者:"
+
+#: src/tilesetselector.py:144
+msgctxt "TilesetSelector"
+msgid "Contact:"
+msgstr "手がかり:"
+
+#: src/tilesetselector.py:145
+msgctxt "TilesetSelector"
+msgid "Description:"
+msgstr "説明:"
+
+#: src/deferredutil.py:272 src/deferredutil.py:436
+msgid "The game server lost connection to player %1"
+msgstr "ゲームサーバーはプレイヤー %1 への接続を失いました"
+
+#: src/deferredutil.py:275
+msgid ""
+"Error for player %1: %2\n"
+"%3"
+msgstr ""
+"プレイヤー %1 のエラー: %2\n"
+"%3"
+
+#: src/player.py:725
+msgid "%1 claiming MahJongg: She does not really have tile %2"
+msgstr "%1 が MahJongg(上がり)を宣言しています: 彼女は実際には牌 %2 を持っていません"
+
+#: src/player.py:734
+msgid ""
+"%1 claiming MahJongg: She did not pass all concealed tiles to the server"
+msgstr ""
+"%1 が MahJongg(上がり)を宣言しています: 彼女はすべての未公開の牌をサーバーに渡しませんでした"
+
+#: src/predefined.py:29
+msgid "Classical Chinese standard"
+msgstr "古典的な中国式の標準"
+
+#: src/predefined.py:316
+msgid "Classical Chinese DMJL"
+msgstr "古典的な中国式 DMJL"
+
+#: src/predefined.py:371
+msgid "Classical Chinese BMJA"
+msgstr "古典的な中国式 BMJA"
+
+#: src/predefined.py:509
+msgid "Taiwanese 16-tile game, FOR DEVELOPERS"
+msgstr "台湾の 16 牌 ゲーム、開発者向け"
+
+#: src/server.py:122
+msgid "Wrong password"
+msgstr "パスワードが間違っています"
+
+#: src/server.py:218
+msgid "table with id <numid>%1</numid> not found"
+msgstr "ID <numid>%1</numid> のテーブルが見つかりません"
+
+#: src/server.py:366
+msgid "Player %1 has logged out"
+msgstr "プレイヤー %1 がログアウトしました"
+
+#: src/servertable.py:181
+msgid "You already joined this table"
+msgstr "あなたはすでにこのテーブルに参加しています"
+
+#: src/servertable.py:183
+msgid "All seats are already taken"
+msgstr "もうすべての席が埋まっています"
+
+#: src/servertable.py:188
+msgid "takes a seat"
+msgstr "席に着きます"
+
+#: src/servertable.py:196
+msgid "leaves the table"
+msgstr "テーブルを離れます"
+
+#: src/servertable.py:302
+msgid "Only the initiator %1 can start this game, you are %2"
+msgstr "このゲームを開始できるのは開始者 %1 だけです。あなたは %2 です"
+
+#: src/servertable.py:701
+msgid "Game <numid>%1</numid> is over!"
+msgstr "ゲーム <numid>%1</numid> は終了しました!"
+
+#: src/servertable.py:730
+msgid "%1 wrongly said %2 for meld %3"
+msgstr "%1 はメルド %3 に対して %2 と間違って宣言しました"
+
+#: src/servertable.py:735
+msgid "%1 wrongly said %2: claims to have concealed tiles %3 but only has %4"
+msgstr "%1 は %2 と間違っています: 未公開の牌 %3 があると"
+"宣言していますが、%4 しかありません"
+
+#: src/servertable.py:772
+msgid "declareKong:%1 wrongly said Kong for meld %2"
+msgstr "カンの宣言:%1 がカンをメルド %2 と間違えました"
+
+#: src/servertable.py:821
+msgid "%1 claiming MahJongg: This is not a winning hand: %2"
+msgstr "%1 が MahJongg(上がり)を宣言しています: "
+"これは勝ちの役ではありません: %2"
+
+#: src/tables.py:281
+msgid "opens a chat window"
+msgstr "チャット ウィンドウ を開きます"
+
+#: src/user.py:94
+msgid ""
+"Your client has a version older than 4.9.0 but you need %1 for this server"
+msgstr ""
+"クライアントのバージョンは 4.9.0 より古いですが、このサーバーには %1 が必要です"
+
+#: src/user.py:98
+msgid "Your client has version %1 but you need %2 for this server"
+msgstr "クライアントのバージョンは %1 ですが、このサーバー"
+"には %2 が必要です"
+
+#: src/message.py:280
+msgctxt "kajongg"
+msgid "Pung"
+msgstr "ポン"
+
+#: src/message.py:281
+msgctxt "kajongg game dialog:Key for Pung"
+msgid "P"
+msgstr ""
+
+#: src/message.py:299
+msgctxt "kajongg"
+msgid "Kong"
+msgstr "カン"
+
+#: src/message.py:300
+msgctxt "kajongg game dialog:Key for Kong"
+msgid "K"
+msgstr ""
+
+#: src/message.py:344
+msgctxt "kajongg"
+msgid "Chow"
+msgstr "チー"
+
+#: src/message.py:345
+msgctxt "kajongg game dialog:Key for Chow"
+msgid "C"
+msgstr ""
+
+#: src/message.py:378
+msgctxt "kajongg"
+msgid "Mah Jongg"
+msgstr "MahJongg"
+
+#: src/message.py:379
+msgctxt "kajongg game dialog:Key for Mah Jongg"
+msgid "M"
+msgstr ""
+
+#: src/message.py:401
+msgctxt "kajongg"
+msgid "Original Call"
+msgstr "オリジナル コール(最初の捨て牌でテンパイ)"
+
+#: src/message.py:402
+msgctxt "kajongg game dialog:Key for Original Call"
+msgid "O"
+msgstr ""
+
+#: src/message.py:447
+msgctxt "kajongg"
+msgid "Discard"
+msgstr "捨てる"
+
+#: src/message.py:448
+msgctxt "kajongg game dialog:Key for Discard"
+msgid "D"
+msgstr ""
+
+#: src/message.py:676
+msgctxt "kajongg"
+msgid "Violates Original Call"
+msgstr "オリジナル コール(最初の捨て牌でテンパイ)に違反します"
+
+#: src/message.py:819
+msgctxt "kajongg"
+msgid "Dangerous Game"
+msgstr "危険なゲーム"
+
+#: src/message.py:834
+msgctxt "kajongg"
+msgid "No Choice"
+msgstr "選択なし"
+
+#: src/message.py:896
+msgctxt "kajongg"
+msgid "OK"
+msgstr ""
+
+#: src/message.py:897
+msgctxt "kajongg game dialog:Key for OK"
+msgid "O"
+msgstr ""
+
+#: src/message.py:909
+msgctxt "kajongg"
+msgid "No Claim"
+msgstr "宣言なし"
+
+#: src/message.py:910
+msgctxt "kajongg game dialog:Key for No claim"
+msgid "N"
+msgstr ""
+
+#: src/query.py:197
+msgctxt "kajongg name for local game server"
+msgid "Local Game"
+msgstr "ローカルゲーム"
+
+#: src/rule.py:50
+msgctxt "kajongg"
+msgid "doubles"
+msgstr "ダブルス"
+
+#: src/rule.py:51
+msgctxt "kajongg"
+msgid "limits"
+msgstr "限界値"
+
+#: src/rulesetselector.py:530
+msgctxt "kajongg"
+msgid "Rule"
+msgstr "ルール"
+
+#: src/servertable.py:242
+msgctxt "kajongg, name of robot player, to be translated"
+msgid "Robot 1"
+msgstr "賢 人 1"
+
+#: src/servertable.py:245
+msgctxt "kajongg, name of robot player, to be translated"
+msgid "Robot 2"
+msgstr "賢 人 2"
+
+#: src/servertable.py:246
+msgctxt "kajongg, name of robot player, to be translated"
+msgid "Robot 3"
+msgstr "賢 人 3"
+

お尻に 2つの空行を追加

→Ctrl+S で保存:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- --

5. 「@kajongg」ゲームの「パッケージ化」とインストール:

-

表示されたメッセージの詳細は「項番 50.」を参照:

-


1). パッケージ化:

$ cd ~/git/void-packages/
$ ./xbps-src clean @kajongg
$ ./xbps-src pkg @kajongg
:
=> @kajongg-25.12.2_1: running pre-pkg hook: 999-collected-rdeps ...
   python3-pyqt6>=0 python3-QtPy>=0 python3-Twisted>=0 python3-zope.interface>=0 python3-pyqt6-svg>=0 python3-pyqt6-gui>=0 python3-pyqt6-widgets>=0 vorbis-tools>=0 
=> @kajongg-25.12.2_1: running do-pkg hook: 00-gen-pkg ...
=> Creating @kajongg-25.12.2_1.x86_64.xbps for repository /host/binpkgs ...
=> @kajongg-25.12.2_1: running post-pkg hook: 00-register-pkg ...
=> Registering new packages to /host/binpkgs
index: added `@kajongg-25.12.2_1' (x86_64).
index: 63 packages registered.
=> @kajongg-25.12.2_1: removing autodeps, please wait...
=> @kajongg-25.12.2_1: cleaning build directory...
=> @kajongg: removing files from destdir...
[user@user-pc void-packages]$ 

→パッケージ化は完了:

-


2). 以前にインストールしたパッケージがあれば削除:

$ sudo xbps-remove @kajongg
:
Name     Action    Version           New version            Download size
@kajongg remove    25.12.2_1         -                      - 

-


3). flatpak でインストールされている「@kajongg」があれば削除:

-

「Application ID」を確認:
$ flatpak search kajongg
:
bash: flatpak: command not found

→「flatpak」自体をインストールしていませんでした:

-


4). インストール:

$ xi @kajongg
:
30 packages will be installed:
  python3-parsing-3.3.2_1 python3-packaging-26.0_1 python3-QtPy-2.4.3_3 
  python3-pyqt6-sip-13.10.2_2 python3-pyqt6-6.10.0_3 
  python3-pyqt6-svg-6.10.0_3 python3-pyqt6-gui-6.10.0_3 
  python3-pyqt6-widgets-6.10.0_3 python3-setuptools-80.10.2_1 
  python3-zope.interface-7.2_2 python3-constantly-23.10.4_3 
  python3-incremental-24.7.2_3 python3-attrs-25.4.0_1 
  python3-six-1.17.0_2 python3-automat-24.8.1_3 python3-idna-3.11_1 
  python3-hyperlink-21.0.0_6 python3-typing_extensions-4.15.0_1 
  python3-ply-3.11_10 python3-pycparser-2.21_4 python3-cffi-2.0.0_2 
  python3-cryptography-46.0.3_2 python3-openssl-25.3.0_2 
  python3-pyasn1-0.6.1_2 python3-pyasn1-modules-0.4.1_2 
  python3-service_identity-24.2.0_2 python3-Twisted-24.11.0_3 
  libao-1.2.2_4 vorbis-tools-1.4.3_1 @kajongg-25.12.2_1 

「libao」は「vorbis-tools」の依存で入ります:

-

2度目からは、

Name     Action    Version           New version            Download size
@kajongg install   -                 25.12.2_1              - 

-


5). 確認:

-

(1). システムにインストールされている「python」関連:
$ xbps-query -l | grep python3
:
ii python3-3.14.3_1                          Python programming language (3.14 series)
ii python3-QtPy-2.4.3_3                      Abstraction layer on top of various Python Qt bindings
ii python3-Twisted-24.11.0_3                 Asynchronous networking framework written in Python (Python3)
ii python3-attrs-25.4.0_1                    Attributes without boilerplate (Python3)
ii python3-automat-24.8.1_3                  Finite-state machines in Python (Python3)
ii python3-cairo-1.27.0_3                    Python3 bindings for the cairo graphics library
ii python3-cffi-2.0.0_2                      C foreign function interface for Python3
ii python3-constantly-23.10.4_3              Symbolic constants in Python (Python3)
ii python3-cryptography-46.0.3_2             Python3 library that provides cryptographic recipes and primitives
ii python3-gobject-3.54.2_2                  Python3 bindings for GObject
ii python3-hyperlink-21.0.0_6                Pure-Python implementation of immutable URLs (Python3)
ii python3-idna-3.11_1                       Internationalized Domain Names in Applications (IDNA) for Python3
ii python3-incremental-24.7.2_3              Small library that versions your Python projects (Python3)
ii python3-openssl-25.3.0_2                  Python3 interface to the OpenSSL library
ii python3-packaging-26.0_1                  Core utilities for Python packages (Python3)
ii python3-parsing-3.3.2_1                   Python parsing module
ii python3-ply-3.11_10                       Lex and Yacc for Python3
ii python3-pyasn1-0.6.1_2                    ASN.1 library for Python
ii python3-pyasn1-modules-0.4.1_2            Collection of ASN.1-based protocols modules
ii python3-pycparser-2.21_4                  Complete C99 parser in pure Python (Python3)
ii python3-pyqt6-6.10.2_1                    Python 3 bindings for Qt6
ii python3-pyqt6-gui-6.10.2_1                Python 3 bindings for Qt6 - GUI
ii python3-pyqt6-sip-13.11.0_1               PyQt6 SIP bindings with C and C++ for Python 3
ii python3-pyqt6-svg-6.10.2_1                Python 3 bindings for Qt6 - svg
ii python3-pyqt6-widgets-6.10.2_1            Python 3 bindings for Qt6 - Widgets
ii python3-service_identity-24.2.0_2         Service identity verification for Python (Python3)
ii python3-setuptools-80.10.2_1              Easily build and distribute Python3 packages
ii python3-six-1.17.0_2                      Python 2 and 3 compatibility utilities (Python3)
ii python3-typing_extensions-4.15.0_1        Backported and Experimental Type Hints for Python 3.5+
ii python3-zope.interface-7.2_2              Zope interfaces for Python3

-

(2). システムにある、「アプリ」のフォルダを確認:
$ ls -p /usr/share/kajongg/
:
altint.py              hand.py           move.py             servertable.py
animation.py           handboard.py      permutations.py     sound.py
appversion.py          humanclient.py    player.py           statesaver.py
background.py          intelligence.py   playerlist.py       tables.py
backgroundselector.py  kajcsv.py         point.py            tile.py
board.py               kajongg.py        predefined.py       tileset.py
chat.py                kajonggserver.py  qt.py               tilesetselector.py
client.py              kajonggui.rc      qtreactor.py        tilesource.py
common.py              kde.py            query.py            tree.py
config.py              kdepaths.py       rand.py             uitile.py
configdialog.py        kdestub.py        rule.py             uiwall.py
deferredutil.py        log.py            rulecode.py         user.py
dialogs.py             login.py          rulesetselector.py  util.py
differ.py              mainwindow.py     scene.py            visible.py
game.py                message.py        scoring.py          voices/
games.py               mi18n.py          scoringdialog.py    wall.py
genericdelegates.py    mjresource.py     server.py           wind.py
guiutil.py             modeltest.py      servercommon.py

→「voices/」(音声)フォルダがあることに注目:

-


6). アプリを起動して確認:

メニュー→「ゲーム」→「Kajongg 中国式四人麻雀

-

初期画面:

「@kajongg」ゲームの使い方は「こちら」を参照:

-

プレイヤー設定後、

-

プレイをクリック →ゲームの選択:

-

ゲームが開始されました:

捨て牌時の英語の音声がちゃんと出ます:

-

→がんばって「.po」をイチから作り直して翻訳したので、まずまずの出来です:

-

-

今回は、ここまで:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ---

50. 参考: 「@kajongg」ゲームを「パッケージ化」した時のメッセージ:

-

こちらの作業は要りません:

項番 5.」で、「パッケージ化」した時に表示されたメッセージです:

-


パッケージ化:

$ cd ~/git/void-packages/
$ ./xbps-src clean @kajongg
$ ./xbps-src pkg @kajongg
=> xbps-src: updating repositories for host (x86_64)...
[*] Updating repository `https://repo-default.voidlinux.org/current/bootstrap/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/nonfree/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/debug/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/multilib/bootstrap/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/multilib/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/multilib/nonfree/x86_64-repodata' ...
=> xbps-src: updating software in / masterdir...
=> xbps-src: cleaning up / masterdir...
=> @kajongg-25.12.2_1: removing autodeps, please wait...
=> @kajongg-25.12.2_1: building with [cmake] for x86_64...

   [host] python3-3.14.2_2: found (https://repo-default.voidlinux.org/current) ←★「hostmakedepends=」で指定
   [host] qt6-tools-6.10.2_1: found (https://repo-default.voidlinux.org/current)
   [host] pkg-config-0.29.2_3: found (https://repo-default.voidlinux.org/current)
   [host] cmake-bootstrap-4.1.2_1: found (https://repo-default.voidlinux.org/current/bootstrap)
   [host] ninja-1.13.2_2: found (https://repo-default.voidlinux.org/current)
   [target] gettext-0.22.5_1: found (https://repo-default.voidlinux.org/current) ←★「makedepends=」で指定
   [target] extra-cmake-modules-6.21.0_1: found (https://repo-default.voidlinux.org/current)
   [target] qt6-svg-devel-6.10.2_1: not found
   [target] qt6-widgets-6.10.2_1: not found
   [target] python3-3.14.2_2: found (https://repo-default.voidlinux.org/current)
   [target] python3-QtPy-2.4.3_3: found (https://repo-default.voidlinux.org/current)
   [target] python3-Twisted-24.11.0_3: found (https://repo-default.voidlinux.org/current)
   [target] python3-zope.interface-7.2_2: found (https://repo-default.voidlinux.org/current)
   [target] kf6-ki18n-devel-6.21.0_1: found (https://repo-default.voidlinux.org/current)
   [target] kf6-kdoctools-devel-6.21.0_1: found (https://repo-default.voidlinux.org/current)
   [target] libkmahjongg-devel-25.08.3_1: found (https://repo-default.voidlinux.org/current)
   [runtime] python3-pyqt6-6.10.2_1: not found        ←★「depends=」で指定
   [runtime] python3-QtPy-2.4.3_3: found (https://repo-default.voidlinux.org/current)
   [runtime] python3-Twisted-24.11.0_3: found (https://repo-default.voidlinux.org/current)
   [runtime] python3-zope.interface-7.2_2: found (https://repo-default.voidlinux.org/current)
   [runtime] python3-pyqt6-svg-6.10.2_1: not found
   [runtime] python3-pyqt6-gui-6.10.2_1: not found
   [runtime] python3-pyqt6-widgets-6.10.2_1: not found
   [runtime] vorbis-tools-1.4.3_1: found (https://repo-default.voidlinux.org/current)

画面をクリック後、「←」「→」キーで横に、「↑」「↓」キーで上下に、スクロールできます:

=> @kajongg-25.12.2_1: installing host dependencies: python3-3.14.2_2 qt6-tools-6.10.2_1 pkg-config-0.29.2_3 cmake-bootstrap-4.1.2_1 ninja-1.13.2_2 ...
=> @kajongg-25.12.2_1: installing target dependencies: gettext-0.22.5_1 extra-cmake-modules-6.21.0_1 python3-3.14.2_2 python3-QtPy-2.4.3_3 python3-Twisted-24.11.0_3 python3-zope.interface-7.2_2 kf6-ki18n-devel-6.21.0_1 kf6-kdoctools-devel-6.21.0_1 libkmahjongg-devel-25.08.3_1 qt6-svg-devel-6.10.2_1 qt6-widgets-6.10.2_1 ...
ERROR: Package `python3-3.14.2_2' already installed.
ERROR: Package `qt6-widgets-6.10.2_1' already installed.
=> @kajongg-25.12.2_1: running do-fetch hook: 00-distfiles ...
=> @kajongg-25.12.2_1: running do-extract hook: 00-distfiles ...
=> @kajongg-25.12.2_1: extracting distfile(s), please wait...

=> @kajongg-25.12.2_1: running do-patch hook: 00-patches ...  ←(パッチの実行)
=> @kajongg-25.12.2_1: patching: 01.kajongg.desktop.patch.
=> @kajongg-25.12.2_1: patching: 02.kajongg.po-del.patch.
=> @kajongg-25.12.2_1: patching: 03.kajongg.po-ja.patch.

=> @kajongg-25.12.2_1: running pre-configure hook: 00-gnu-configure-asneeded ...
=> @kajongg-25.12.2_1: running pre-configure hook: 01-override-config ...
=> @kajongg-25.12.2_1: running pre-configure hook: 02-script-wrapper ...
=> @kajongg-25.12.2_1: running do_configure ...
-- The C compiler identification is GNU 14.2.1
-- The CXX compiler identification is GNU 14.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Warning at /usr/share/ECM/kde-modules/KDEInstallDirsCommon.cmake:169 (message):
  KDE_INSTALL_SBINDIR got its value from CMAKE_INSTALL_SBINDIR.  In most
  cases this is unintended, check if you included GNUInstallDirs before
  KDEInstallDirs.  Some third party modules include GNUInstallDirs too so eg.
  find_package(Qt6 ...) is equivalent to include(GNUInstallDirs).  If you set
  CMAKE_INSTALL_SBINDIR deliberately before including KDEInstallDirs its
  recommended to use KDE_INSTALL_SBINDIR instead to suppress this message.
Call Stack (most recent call first):
  /usr/share/ECM/kde-modules/KDEInstallDirsCommon.cmake:258 (_define_relative)
  /usr/share/ECM/kde-modules/KDEInstallDirs6.cmake:201 (include)
  /usr/share/ECM/kde-modules/KDEInstallDirs.cmake:17 (include)
  CMakeLists.txt:22 (include)
: 省略

CMake Warning at /usr/share/ECM/kde-modules/KDEInstallDirsCommon.cmake:169 (message):
  KDE_INSTALL_SYSCONFDIR got its value from CMAKE_INSTALL_SYSCONFDIR.  In
  most cases this is unintended, check if you included GNUInstallDirs before
  KDEInstallDirs.  Some third party modules include GNUInstallDirs too so eg.
  find_package(Qt6 ...) is equivalent to include(GNUInstallDirs).  If you set
  CMAKE_INSTALL_SYSCONFDIR deliberately before including KDEInstallDirs its
  recommended to use KDE_INSTALL_SYSCONFDIR instead to suppress this message.
Call Stack (most recent call first):
  /usr/share/ECM/kde-modules/KDEInstallDirsCommon.cmake:220 (_define_relative)
  /usr/share/ECM/kde-modules/KDEInstallDirsCommon.cmake:387 (_define_absolute)
  /usr/share/ECM/kde-modules/KDEInstallDirs6.cmake:201 (include)
  /usr/share/ECM/kde-modules/KDEInstallDirs.cmake:17 (include)
  CMakeLists.txt:22 (include)

-- Performing Test HAVE_STDATOMIC
-- Performing Test HAVE_STDATOMIC - Success
-- Installing in the same prefix as Qt, adopting their path scheme.
-- Could not set up the appstream test. appstreamcli is missing.
-- Found Python3: /usr/bin/python3.14 (found suitable version "3.14.2", minimum required is "3.8.0") found components: Interpreter
-- Found python3-twisted
-- Found OpenGL: /usr/lib/libOpenGL.so
-- Found WrapOpenGL: TRUE
-- Found WrapVulkanHeaders: /usr/include
-- Found KF6DocTools: /usr/lib64/cmake/KF6DocTools/KF6DocToolsConfig.cmake (found version "6.21.0")
-- Found Gettext: /usr/bin/msgmerge (found version "0.22.5")
-- Found KF6I18n: /usr/lib64/cmake/KF6I18n/KF6I18nConfig.cmake (found version "6.21.0")
-- Found KF6: success (found suitable version "6.21.0", minimum required is "6.0.0") found components: DocTools I18n

CMake Warning (dev) at cmake-modules/KDEPython.cmake:64 (add_custom_command):
  The following keywords are not supported when using
  add_custom_command(TARGET): DEPENDS.

  Policy CMP0175 is not set: add_custom_command() rejects invalid arguments.
  Run "cmake --help-policy CMP0175" for policy details.  Use the cmake_policy
  command to set the policy and suppress this warning.
Call Stack (most recent call first):
  cmake-modules/KDEPython.cmake:91 (python_install)
  CMakeLists.txt:131 (KDE_INSTALL_PYTHON_FILES)
This warning is for project developers.  Use -Wno-dev to suppress it.
: 省略

  Policy CMP0175 is not set: add_custom_command() rejects invalid arguments.
  Run "cmake --help-policy CMP0175" for policy details.  Use the cmake_policy
  command to set the policy and suppress this warning.
Call Stack (most recent call first):
  cmake-modules/KDEPython.cmake:91 (python_install)
  CMakeLists.txt:133 (KDE_INSTALL_PYTHON_FILES)
This warning is for project developers.  Use -Wno-dev to suppress it.

-- The following OPTIONAL packages have been found:  ←★

 * OpenGL
 * Qt6Svg (required version >= 6.5.0)
 * Qt6SvgWidgets (required version >= 6.5.0)
 * WrapVulkanHeaders
 * Qt6DBusTools (required version >= 6.10.2)
 * Qt6QmlTools (required version >= 6.10.2)
 * Qt6CoreTools (required version >= 6.10.2)
 * Qt6GuiTools (required version >= 6.10.2)
 * Qt6WidgetsTools (required version >= 6.10.2)

-- The following REQUIRED packages have been found:  ←★

 * ECM (required version >= 6.0.0)
 * Python3 (required version >= 3.8.0)
 * Twisted (required version >= 16.6.0)
 * Qt6 (required version >= 6.5.0)
 * KF6DocTools (required version >= 6.0.0)
 * Gettext
 * KF6I18n (required version >= 6.0.0)
 * KF6 (required version >= 6.0.0)
 * Qt6Gui (required version >= 6.5.0)
 * Qt6Core (required version >= 6.8.0)
 * KMahjongglib6 (required version >= 6.0.0)

-- Configuring done (1.1s)
-- Generating done (0.0s)
-- Build files have been written to: /builddir/@kajongg-25.12.2/build
=> @kajongg-25.12.2_1: running pre-build hook: 02-script-wrapper ...
=> @kajongg-25.12.2_1: running do_build ...
[1/84] Running utility command for src_background.py_rule
Byte-compiling /builddir/@kajongg-25.12.2/build/src/background.py to /builddir/@kajongg-25.12.2/build/src/__pycache__/background.cpython-314.pyc
: 省略

[70/84] Running utility command for src_kajcsv.py_rule
Byte-compiling /builddir/@kajongg-25.12.2/build/src/kajcsv.py to /builddir/@kajongg-25.12.2/build/src/__pycache__/kajcsv.cpython-314.pyc
[71/84] Generating mo...
[72/84] Generating po/ca/docs/kajongg/index.cache.bz2
[73/84] Generating po/it/docs/kajongg/index.cache.bz2
[74/84] Generating po/nl/docs/kajongg/index.cache.bz2
[75/84] Generating po/de/docs/kajongg/index.cache.bz2
[76/84] Generating po/es/docs/kajongg/index.cache.bz2
[77/84] Generating po/et/docs/kajongg/index.cache.bz2
[78/84] Generating po/gl/docs/kajongg/index.cache.bz2
[79/84] Generating po/pt/docs/kajongg/index.cache.bz2
[80/84] Generating po/uk/docs/kajongg/index.cache.bz2
[81/84] Generating po/sl/docs/kajongg/index.cache.bz2
[82/84] Generating po/pt_BR/docs/kajongg/index.cache.bz2
I/O warning : failed to load "/usr/share/kf6/kdoctools/customization/xsl/pt-BR.xml": No such file or directory
No "pt_br" localization of "footer-doc-comment" exists; using "en".
: 省略

No "pt_br" localization of "footer-doc-teamname" exists; using "en".
[83/84] Generating po/sv/docs/kajongg/index.cache.bz2
[84/84] Generating index.cache.bz2
=> @kajongg-25.12.2_1: skipping check (XBPS_CHECK_PKGS is disabled) ...
=> @kajongg-25.12.2_1: running pre-install hook: 00-libdir ...
=> @kajongg-25.12.2_1: running pre-install hook: 02-script-wrapper ...
=> @kajongg-25.12.2_1: running pre-install hook: 98-fixup-gir-path ...
=> @kajongg-25.12.2_1: running do_install ...
[1/72] Running utility command for src_mjresource.py_rule
Byte-compiling /builddir/@kajongg-25.12.2/build/src/mjresource.py to /builddir/@kajongg-25.12.2/build/src/__pycache__/mjresource.cpython-314.pyc
: 省略

[71/72] Running utility command for build_src_kdepaths.py_rule
Byte-compiling /builddir/@kajongg-25.12.2/build//builddir/@kajongg-25.12.2/build/src/kdepaths.py to /builddir/@kajongg-25.12.2/build//builddir/@kajongg-25.12.2/build/src/__pycache__/kdepaths.cpython-314.pyc
[71/72] Install the project...
-- Install configuration: "None"
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/voices//male1
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/voices//male1/c2.ogg
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/voices//male1/b5.ogg
: 省略

-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/voices/de/female2/mahjongg.ogg
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/voices/de/female2/s9.ogg
-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/en/kajongg/index.cache.bz2
-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/en/kajongg/index.docb
: 省略

-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/en/kajongg/ruleseteditor.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/en/kajongg/scoretable.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/128x128/apps/kajongg.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/64x64/apps/kajongg.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/48x48/apps/kajongg.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/32x32/apps/kajongg.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/22x22/apps/kajongg.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/16x16/apps/kajongg.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/scalable/apps/kajongg.svgz
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/scalable/actions/games-kajongg-law.svgz
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/permutations.py
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/__pycache__/
: 省略

-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/appversion.py
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/__pycache__/appversion.cpython-314.pyc
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/kajonggui.rc
-- Installing: /destdir/@kajongg-25.12.2/usr/share/applications/org.kde.kajongg.desktop
-- Installing: /destdir/@kajongg-25.12.2/usr/share/metainfo/org.kde.kajongg.appdata.xml
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/lt
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/lt/LC_MESSAGES
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/lt/LC_MESSAGES/kajongg.mo
: 省略

-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/ja
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/ja/LC_MESSAGES
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/ja/LC_MESSAGES/kajongg.mo ←(日本語)
: 省略

-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/ar
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/ar/LC_MESSAGES
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/ar/LC_MESSAGES/kajongg.mo
-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/ca/kajongg/index.cache.bz2
-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/ca/kajongg/index.docbook
: 省略

-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/uk/kajongg/ruleseteditor.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/uk/kajongg/scoretable.png
=> @kajongg-25.12.2_1: running post-install hook: 00-compress-info-files ...
=> @kajongg-25.12.2_1: running post-install hook: 00-fixup-gir-path ...
=> @kajongg-25.12.2_1: running post-install hook: 00-libdir ...
=> @kajongg-25.12.2_1: running post-install hook: 00-uncompress-manpages ...
=> @kajongg-25.12.2_1: running post-install hook: 01-remove-misc ...
=> @kajongg-25.12.2_1: running post-install hook: 02-remove-libtool-archives ...
=> @kajongg-25.12.2_1: running post-install hook: 02-remove-perl-files ...
=> @kajongg-25.12.2_1: running post-install hook: 02-remove-python-bytecode-files ...
=> @kajongg-25.12.2_1: running post-install hook: 03-remove-empty-dirs ...
=> WARNING: @kajongg-25.12.2_1: removed empty dir: /usr/share/kajongg/__pycache__
=> WARNING: @kajongg-25.12.2_1: removed empty dir: /usr/lib
=> @kajongg-25.12.2_1: running post-install hook: 04-create-xbps-metadata-scripts ...
   Added trigger 'gtk-icon-cache' for the 'INSTALL' script.
   Added trigger 'update-desktopdb' for the 'INSTALL' script.
   Added trigger 'gtk-icon-cache' for the 'REMOVE' script.
   Added trigger 'update-desktopdb' for the 'REMOVE' script.
=> @kajongg-25.12.2_1: running post-install hook: 05-generate-gitrevs ...
=> @kajongg-25.12.2_1: running post-install hook: 06-strip-and-debug-pkgs ...
=> @kajongg-25.12.2_1: running post-install hook: 10-pkglint-devel-paths ...
=> @kajongg-25.12.2_1: running post-install hook: 11-pkglint-elf-in-usrshare ...
=> @kajongg-25.12.2_1: running post-install hook: 12-rename-python3-c-bindings ...
=> @kajongg-25.12.2_1: running post-install hook: 13-pkg-config-clean-xbps-cross-base-ref ...
=> @kajongg-25.12.2_1: running post-install hook: 14-fix-permissions ...
=> @kajongg-25.12.2_1: running post-install hook: 15-qt-private-api ...
=> @kajongg-25.12.2_1: running post-install hook: 80-prepare-32bit ...
=> @kajongg-25.12.2_1: running post-install hook: 98-shlib-provides ...
=> @kajongg-25.12.2_1: running post-install hook: 99-pkglint-warn-cross-cruft ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 03-restrict-py3-version ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 03-rewrite-python-shebang ...
   Shebang converted to '#!/usr/bin/python3': /usr/share/kajongg/kajonggserver.py
   Shebang converted to '#!/usr/bin/python3': /usr/share/kajongg/kajongg.py
=> @kajongg-25.12.2_1: running pre-pkg hook: 04-generate-provides ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 04-generate-runtime-deps ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 05-generate-32bit-runtime-deps ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 06-verify-python-deps ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 90-set-timestamps ...
=> @kajongg-25.12.2_1: setting mtimes to Fri Feb  6 06:55:59 AM UTC 2026
=> @kajongg-25.12.2_1: running pre-pkg hook: 99-pkglint-subpkgs ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 99-pkglint ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 999-collected-rdeps ...
   python3-pyqt6>=0 python3-QtPy>=0 python3-Twisted>=0   
   python3-zope.interface>=0 python3-pyqt6-svg>=0 python3-pyqt6-gui>=0  
   python3-pyqt6-widgets>=0 vorbis-tools>=0 
=> @kajongg-25.12.2_1: running do-pkg hook: 00-gen-pkg ...

=> Creating @kajongg-25.12.2_1.x86_64.xbps for repository /host/binpkgs ...
=> @kajongg-25.12.2_1: running post-pkg hook: 00-register-pkg ...
=> Registering new packages to /host/binpkgs
index: added `@kajongg-25.12.2_1' (x86_64).
index: 61 packages registered.
=> @kajongg-25.12.2_1: removing autodeps, please wait...
=> @kajongg-25.12.2_1: cleaning build directory...
=> @kajongg: removing files from destdir...
[user@user-pc void-packages]$ 

→パッケージ化が成功:

(インストールして起動できるかは別)

-

-

項番 5.」に戻る:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----

60. 参考: 「@kajongg」ゲームのパッチを作成した履歴:

-

パッチを作成したときの作業で、こちらの作業は要りません:

-

(1). 「パッチ1」の履歴は こちら:

-

(2). 「パッチ2」の履歴は こちら:

-

(3). 「パッチ3(旧)」の履歴で「POT ファイル」の作成は こちら で、

  パッチの作成は こちら:

-

(4). 「パッチ3(新)」の履歴で「POT ファイル」の作成は こちらで、 ★

  パッチの作成は こちら:

-

戻るときは、

 「項番 4.」へ:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- -----

60-1. 参考: 「gettext」を使った、Python の日本語化の例:

-

「.po ファイル」を作成するための、参考例です:

-

「Python」アプリの日本語化(国際化・ローカライゼーション)において、 「.po ファイル」を作成し、翻訳するには、

標準ライブラリの「gettext」を使うのが一般的みたい:

-

Pythonの「gettext」モジュールを使用し、文字列を_("...")で囲んでマークし、
.po(テキスト)ファイルから.mo(バイナリ)ファイルへコンパイルして配置することで、
日本語化(国際化)を実現できます。

locale ディレクトリに ja/LC_MESSAGES/ 構造で配置し、プログラム実行時に言語環境を切り替えます:

-


1). ツールの確認:

「.mo」を「.po」に変換する「msgunfmt」ツールを含む、「gettext」パッケージをインストール:

-

確認:

$ xbps-query -Rs gettext
:
パスワード: 
[-] gettext-0.22.5_1                Internationalized Message Handling Libra...
[-] gettext-devel-0.22.5_1          Internationalized Message Handling Libra...
[-] gettext-devel-examples-0.22.5_1 Internationalized Message Handling Libra...
[-] gettext-devel-tools-0.22.5_1    Internationalized Message Handling Libra...
[-] gettext-stub-1_2                Gettext little stub
[-] gettext-stub-devel-1_2          Gettext little stub - development files
[-] gettext-tiny-0.3.2_1            Tiny Internationalized Message Handling ...
[-] gettext-tiny-devel-0.3.2_1      Tiny Internationalized Message Handling ...
[*] kf6-ki18n-6.21.0_1              KDE Gettext-based UI text internationali...
[-] kf6-ki18n-devel-6.21.0_1        KDE Gettext-based UI text internationali...
[-] ki18n-5.116.0_1                 KDE Gettext-based UI text internationali...
[-] ki18n-devel-5.116.0_1           KDE Gettext-based UI text internationali...
[-] perl-Locale-PO-0.27_4           Perl module for manipulating .po entries...
[-] perl-Locale-gettext-1.07_16     Permits access from Perl to the gettext(...
[-] poedit-3.7_3                    Cross-platform gettext catalogs (.po fil...
[-] python3-polib-1.1.0_9           Python3 library to manipulate gettext files

→「poedit」もインストールできます:

-

パッケージのインストール:

$ sudo xbps-install -S gettext
:
Name    Action    Version           New version            Download size
gettext install   -                 0.22.5_1               2328KB 

-

ツールがインストールされたか確認:

$ xgettext --help

-

$ msginit --help

-


2). ソースコードの準備:

翻訳する文字列を _("...") で囲み、gettext を設定します:

-

python プログラムの作成:

$ cd ~/ドキュメント/
$ nano app.py

↓ すべて貼付け:

#!/usr/bin/python3
# -*- coding : utf-8 -*-

import gettext
import os

# 言語設定:
translate = gettext.translation('app', localedir='locale', languages=['ja'])
translate.install()

#表示:
print(_("Hello, world !"))

「localedir='locale'」と指定すると、
現在の作業ディレクトリに、「locale/ja/LC_MESSAGES/app.mo」がある指定になります:

-

→Ctrl+O でファイルを確認後、Enter

→Ctrl+X で終了:

-


3). 「POT ファイル」を生成:

ソースコードから翻訳テンプレートファイル (.pot) を生成:

$ xgettext -o app.pot *.py

-

$ ls -1
app.pot
app.py

-

$ cat app.pot
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-02-10 10:32+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: app.py:12
msgid "Hello, world !"
msgstr ""

-

-D, --directory=DIRECTORY 入力ファイルの検索リストに DIRECTORY を追加します

-


4). 日本語向けの「PO ファイル」を作成:

「locale/ja/LC_MESSAGES/」ディレクトリが必要なので作成:

$ mkdir -p locale/ja/LC_MESSAGES/

-

PO ファイルの作成:

$ msginit --no-translator -i app.pot -l ja -o locale/ja/LC_MESSAGES/app.po
:
locale/ja/LC_MESSAGES/app.po を生成.

「--no-translator」は、(しつこく)メールアドレス(チーム情報ファイル(team-address))を聞いてこないようにするオプションです:

-

確認:

$ cat locale/ja/LC_MESSAGES/app.po
# Japanese translations for PACKAGE package.
# Copyright (C) 2026 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Automatically generated, 2026.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-02-10 10:32+0900\n"
"PO-Revision-Date: 2026-02-10 10:32+0900\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ASCII\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: app.py:12
msgid "Hello, world !"
msgstr ""

-


5). PO ファイルの編集:

生成された日本語用 app.po ファイルをテキストエディタや「Poedit」などで編集:

-

編集:

$ nano locale/ja/LC_MESSAGES/app.po

使用コードの設定誤りの修正:

16 行目:

"Content-Type: text/plain; charset=ASCII\n"

↓ 修正:

"Content-Type: text/plain; charset=UTF-8\n"

-

翻訳:

msgid "Hello, World !"
msgstr ""

↓ 編集:

msgid "Hello, World !"
msgstr "こんにちは世界 !"

→Ctrl+O でファイルを確認後、Enter

→Ctrl+X で終了:

-


6). MO ファイルの生成:

翻訳ファイルを読み込み用 (.mo) にコンパイル:

$ msgfmt locale/ja/LC_MESSAGES/app.po -o locale/ja/LC_MESSAGES/app.mo

-


7). 実行:

プログラムを実行すると日本語が表示されます:

確認:

$ ls -1p
:
app.pot
app.py
locale/

-

$ ls -1p locale/ja/LC_MESSAGES/
:
app.mo
app.po

-

実行:

$ python app.py
:
こんにちは世界 !

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- -

60-2. 「@kajongg」の .po を新規に作成: POT の作成(旧)

-


1). ソースファイルをダウンロードして展開:

$ cd ~/git/void-packages/
$ ./xbps-src clean @kajongg
$ ./xbps-src extract @kajongg

-


2). 「builddir」フォルダ配下のソースファイルに移動:

$ ls -1p ~/git/void-packages/masterdir-x86_64/builddir/
:
@kajongg-25.12.2/

-

作業フォルダに移動:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ ls -p
:
CMakeLists.txt             bash_completion.d/           org.kde.kajongg.desktop
CMakePresets.json.license  cmake-modules/               po/
COPYING.DOC                debian.control               setup.cfg
LICENSE                    doc/                         setup.py
MANIFEST.in                git-pre-commit               snapcraft.yaml
Messages.sh                icons/                       src/
README                     logo.png                     voices/
README.packagers           make_debian_package
README.windows             org.kde.kajongg.appdata.xml

-


3). ソースの「python」プログラムの位置を確認:

$ ls -p src/
:
altint.py              handboard.py      permutations.py     servertable.py
animation.py           humanclient.py    player.py           sound.py
appversion.py.in       intelligence.py   playerlist.py       statesaver.py
background.py          kajcsv.py         point.py            table.sh
backgroundselector.py  kajongg.py        predefined.py       tables.py
board.py               kajonggserver.py  pylintrc            tile.py
chat.py                kajonggtest       pyproject.toml      tileset.py
check_unused           kajonggtest.py    qt.py               tilesetselector.py
client.py              kajonggui.rc      qtreactor.py        tilesource.py
common.py              kde.py            query.py            tree.py
config.py              kdepaths.py.in    rand.py             uitile.py
configdialog.py        kdestub.py        rule.py             uiwall.py
deferredutil.py        log.py            rulecode.py         user.py
dialogs.py             login.py          rulesetselector.py  util.py
differ.py              mainwindow.py     scene.py            vg.supp
game.py                message.py        scoring.py          visible.py
games.py               mi18n.py          scoringdialog.py    wall.py
genericdelegates.py    mjresource.py     scoringtest.py      wind.py
guiutil.py             modeltest.py      server.py
hand.py                move.py           servercommon.py

-


4). 現在の「PO ファイル」を確認:

$ ls -p po/
:
ar/           da/     eu/  hu/  km/   nl/     sa/                 sv/
ast/          de/     fi/  ia/  lt/   nn/     sk/                 tr/
bg/           el/     fr/  is/  mai/  pl/     sl/                 ug/
bs/           en_GB/  ga/  it/  ml/   pt/     sr/                 uk/
ca/           eo/     gl/  ja/  mr/   pt_BR/  sr@ijekavian/       zh_CN/
ca@valencia/  es/     he/  ka/  nb/   ro/     sr@ijekavianlatin/  zh_TW/
cs/           et/     hi/  kk/  nds/  ru/     sr@latin/

-

$ ls -p po/ja/
:
kajongg.po

-


5). 「xgettext」は「setup.py」があるフォルダで実行する必要があります:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ ls setup.py
setup.py

→OK

-


6). 「POT ファイル」の生成に必要な「キーワード」を確認:

ソースファイルを国際化するときに使った、翻訳対象の文字列を囲った文字が「デフォルト」の「_( )」なのか確認しました:

-

(1). キーワードを「xgettext」のデフォルトの「_(」にして、ソースファイルを検索:
$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/src/
$ sudo grep -rl "_("
: 
tables.py
differ.py
scene.py
: 省略

game.py

→たくさん表示されたので、デフォルトのキーで良さそう:

-

(2). 念の為、実際にあまり見かけない「翻訳した文字列」の方で検索:
$ sudo grep -rl "Show tile shadows"
:
configdialog.py

→あまり見かけない文字列なので、当然ながらヒットしたのはひとつ:

-

(3). ヒットした「ファイル」を開いて確認:
$ featherpad configdialog.py

「Show tile shadows」で検索すると:

47 行目:

        self.kcfg_showShadows = QCheckBox(i18n('Show tile shadows'), self)

→あれれ、デフォルトでなく、「i18n」のキーが使われています:

-

(4). 「_(」で検索すると、

37 行目:

    def __init__(self, parent:QWidget) ->None:

-

38 行目:

        super().__init__(parent)

: 省略

-

→「Python」の場合、「キーワード」に「_(」は使いづらいようです:

なので、別のキーが使われたみたい:

-

(5). キーワードを「i18」にして、ソースファイルを検索:
$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/src/
$ sudo grep -rl "i18"
:
tables.py
differ.py
scene.py
guiutil.py
player.py
client.py
chat.py
predefined.py
games.py
servercommon.py
playerlist.py
statesaver.py
background.py
configdialog.py
tile.py
kajonggtest.py
login.py
message.py
log.py
humanclient.py
user.py
scoringdialog.py
deferredutil.py
visible.py
board.py
rulesetselector.py
rule.py
servertable.py
backgroundselector.py
tilesetselector.py
mainwindow.py
scoring.py
server.py
mjresource.py
kdestub.py
kajongg.py
common.py
query.py
wind.py
sound.py
tileset.py
mi18n.py
game.py

→「.py」ファイル以外はヒットしません:

-

(6). 他の「キーワード」もないか、確認するため、

上記のファイルを

エディタで開き、「i18」で検索して、「import」文を確認しました:
$ featherpad servertable.py

↓ 「i18」で検索:

from mi18n import i18nE, i18n, i18ncE

 3つの「キーワード」が必要:

-

参考: 「i18ncE」で検索:

239 行目:

robotNames = [
    i18ncE(
        'kajongg, name of robot player, to be translated',
        'Robot 1'),                              ←★
    i18ncE(
        'kajongg, name of robot player, to be translated',
        'Robot 2'),                              ←★
    i18ncE('kajongg, name of robot player, to be translated', 'Robot 3')] ←★
while len(names) < 4:

→関数のようで、囲みの中に2つの文字列を含み、xgettext でうまく抽出できるか疑問:

-

$ featherpad servertable.py
↓
from mi18n import i18nE, i18n, i18ncE

 3つの「キーワード」が必要:

-

$ featherpad playerlist.py
↓
from mi18n import i18n, i18nc

 2つの「キーワード」が必要:

-

$ featherpad tables.py
↓
from mi18n import i18n, i18nc, i18nE

 3つの「キーワード」が必要:

-

$ featherpad player.py
↓
from mi18n import i18n, i18nc, i18nE

 3つの「キーワード」が必要:

-

(7). 最低、4つの「キーワード」の指定が必要みたい:

i18n
i18nc
i18nE
i18ncE

-


7). 以前に作った「POT ファイル」を削除:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ rm new-kajongg.pot

-


8). 新規に「POT ファイル」を作成:

言語を「Python」で、複数の「キーワード」を指定:

*」が使えるか確認:

$ xgettext -L Python -k"i18n"* -o new-kajongg.pot src/*.py
$

→エラーはなし:

-

確認:

$ featherpad new-kajongg.pot

→空です:

*」は使えません:

-

言語を「Python」で、複数の「キーワード」を指定:

$ xgettext -L Python -ki18n -ki18nc -ki18nE -ki18ncE -o new-kajongg.pot src/*.py
$

→エラーはなし:

-

確認:

$ featherpad new-kajongg.pot

→作成されました:

全行数 1348 です。

-


9). 作成された「POT ファイル」を確認:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ featherpad new-kajongg.pot
気づいた、「POT ファイル」に抽出されなかった部分:

前回の投稿の「パッチファイル」と比較すると:

下記の部分が存在しません。

 #: src/message.py:447
 msgctxt "kajongg"
 msgid "Discard"
-msgstr ""
+msgstr "捨てる"

-

 #: src/message.py:909
 msgctxt "kajongg"
 msgid "No Claim"
-msgstr ""
+msgstr "宣言なし"

-

 #: src/servertable.py:242
 msgctxt "kajongg, name of robot player, to be translated"
 msgid "Robot 1"
-msgstr ""
+msgstr "ロボット 1"
 
 #: src/servertable.py:245
 msgctxt "kajongg, name of robot player, to be translated"
 msgid "Robot 2"
-msgstr ""
+msgstr "ロボット 2"
 
 #: src/servertable.py:246
 msgctxt "kajongg, name of robot player, to be translated"
 msgid "Robot 3"
-msgstr ""
+msgstr "ロボット 3"

-


10). 作成された「POT ファイル」で確認:

$ featherpad new-kajongg.pot

-

「#: src/message.py:447」で検索:

→なし:

-

「src/message.py:447」で検索:

#: src/configdialog.py:103 src/kdestub.py:1071 src/login.py:251
#: src/login.py:308 src/message.py:98 src/message.py:280 src/message.py:299
#: src/message.py:344 src/message.py:378 src/message.py:401 src/message.py:447
#: src/message.py:675 src/message.py:819 src/message.py:834 src/message.py:896
#: src/message.py:909 src/rule.py:50 src/rule.py:51 src/rule.py:376
#: src/rulesetselector.py:249 src/rulesetselector.py:529
#: src/scoringdialog.py:299 src/scoringdialog.py:300 src/scoringdialog.py:410
#: src/scoringdialog.py:452 src/scoringdialog.py:832 src/scoringdialog.py:833
#: src/scoringdialog.py:834 src/scoringdialog.py:841 src/tile.py:277
#: src/tile.py:278 src/tile.py:279 src/tile.py:280 src/tile.py:281
#: src/tile.py:282 src/tile.py:283 src/tile.py:284 src/tile.py:290
#: src/tile.py:291 src/tile.py:292 src/tile.py:293 src/tile.py:294
#: src/tile.py:295 src/tile.py:296 src/tile.py:297
msgid "kajongg"
msgstr ""

→1つ目の文字列「kajongg」はヒット:

-


11). 実際のファイルを開いて確認:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ featherpad src/message.py

446 行目:

    def __init__(self) ->None:
        super().__init__(name=i18ncE('kajongg', 'Discard'),
                         shortcut=i18ncE('kajongg game dialog:Key for Discard', 'D'))

→やはり、2つ目の文字列「Discard」はヒットしていません:

-

追記:

後でわかったことですが、2行目の 最初の引数だけ抽出され、2つ目の引数がヒットしないだけでなく、2行目の両方の引数もヒットしていませんでした。

-


12). 参考: 前回の投稿の「パッチファイル」より抜粋:

 #: src/message.py:447
 msgctxt "kajongg"
 msgid "Discard"
-msgstr ""
+msgstr "捨てる"

-


13). 関数ごとの引数の数を確認:

$ featherpad src/tables.py
↓
from mi18n import i18n, i18nc, i18nE

-

(1). i18n  ←引数は 1つ

193 行目:

            i18n("&Join"),
            i18n("Join a table"),

-

(2). i18nc  ←引数は 2つ

133 行目:

                result = i18nc('table status', status) + dateVal

-

186 行目:

            i18nc('allocate a new table', "&New"),
            i18n("Allocate a new table"),

-

(3). i18nE  ←引数は 1つ

281 行目:

            line = i18nE('opens a chat window')

-

違うファイルで確認:

$ featherpad src/servertable.py
:
from mi18n import i18nE, i18n, i18ncE

-

i18nE  ←引数は 1つ

            raise srvError(i18nE('You already joined this table'))
        if len(self.users) == self.maxSeats():
            raise srvError(i18nE('All seats are already taken'))

-

188 行目:

                   i18nE('takes a seat'), isStatusMessage=True))

-

(4). i18ncE  ←引数は 2つ

240 行目:

            i18ncE(
                'kajongg, name of robot player, to be translated',
                'Robot 1'),
            i18ncE(
                'kajongg, name of robot player, to be translated',
                'Robot 2'),
            i18ncE('kajongg, name of robot player, to be translated', 'Robot 3')]

-


12). キーワード指定に、引数の位置を指定して「POT ファイル」を作成:

xgettext にて、 Python にて、同一行から複数の文字列を抽出するには、

1行に複数ある文字列が1つの ngettext のような「複数形」対応の関数に含まれている場合は、 引数の位置を指定できるみたい。

-

「キーワード」指定に、引数の位置を指定:

$ xgettext -L Python -ki18n -ki18nc:1,2 -ki18nE -ki18ncE:1,2 -o new-kajongg.pot src/*.py
xgettext: 警告: msgid 'Kajongg' は複数形なしと複数形ありで使われます.
                src/guiutil.py:134: ここでは複数形なしでの発生を示しています.
                src/differ.py:72: ここでは複数形での発生を示しています.
                回避策: msgid が文の場合は, 言葉遣いを変更し, そうでない場合は, コンテキストを使って曖昧さを解消します.
xgettext: 警告: msgid 'Kajongg' は複数形なしと複数形ありで使われます.
                src/kdestub.py:120: ここでは複数形なしでの発生を示しています.
                src/differ.py:72: ここでは複数形での発生を示しています.
                回避策: msgid が文の場合は, 言葉遣いを変更し, そうでない場合は, コンテキストを使って曖昧さを解消します.
xgettext: 警告: msgid 'Kajongg' は複数形なしと複数形ありで使われます.
                src/kdestub.py:123: ここでは複数形なしでの発生を示しています.
                src/differ.py:72: ここでは複数形での発生を示しています.
                回避策: msgid が文の場合は, 言葉遣いを変更し, そうでない場合は, コンテキストを使って曖昧さを解消します.

-


13). 作成された「POT ファイル」を確認:

$ featherpad new-kajongg.pot

抜粋:

#: src/servertable.py:196
msgid "leaves the table"
msgstr ""

#: src/servertable.py:241 src/servertable.py:244 src/servertable.py:246
msgid "kajongg, name of robot player, to be translated"
msgid_plural "Robot 1"
msgstr[0] ""
msgstr[1] ""

#: src/servertable.py:302
msgid "Only the initiator %1 can start this game, you are %2"
msgstr ""

→1行の中の、1つ目だけでなく、2つ目の文字列も抽出できましたが、抽出された形(男、単数形・女、複数形)が期待していたものと違います:

-


14). 作成された「POT ファイル」を修正:

うまいやり方がわからないので、このファイルを加工しました:

-

(1). ヘッダー部を修正:

19 行目:

"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"

↓ 置換:

"Plural-Forms: nplurals=1; plural=0;\n"

-

(2). 加工 1:
msgid_plural "

↓ 置換:

msgstr ""

#: 上部のコメント行と同じ:
msgid "

-

(3). 加工 2:
msgstr[0] ""
msgstr[1] ""

↓ 置換:

msgstr ""

-

39 個置換されました:

-

(4). 時間があれば、「#: 上部のコメント行と同じ:」に上部のコメント行をコピー:

コメント行をコピー: する気がないなら、そのままでも OK

もしくは、

#: 上部のコメント行と同じ:

↓ 置換:

#: 

-

(5). おかしなところがないか、全体を見渡します:

-


15). 日本語向けの「PO ファイル」を作成:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ msginit --no-translator -i new-kajongg.pot -l ja -o jp-kajongg.po
:
new-kajongg.pot:667: メッセージが二重に定義されています...
new-kajongg.pot:622: ...これは最初の定義の場所です
new-kajongg.pot:745: メッセージが二重に定義されています...
new-kajongg.pot:189: ...これは最初の定義の場所です
new-kajongg.pot:1342: メッセージが二重に定義されています...
new-kajongg.pot:189: ...これは最初の定義の場所です
new-kajongg.pot:1370: メッセージが二重に定義されています...
new-kajongg.pot:153: ...これは最初の定義の場所です
new-kajongg.pot:1483: メッセージが二重に定義されています...
new-kajongg.pot:33: ...これは最初の定義の場所です
msginit: found 5 fatal errors

5つの二重の定義があります:

たぶん、加工したとき、行を2つに分けた影響です。どちらかを削除すれば行けると思われます:

-


16). 「POT ファイル」を修正:

$ featherpad new-kajongg.pot

順番が乱れないように、一番大きな行から削除して行きます:

-

1483 行目: ..前後の 3行を削除

#: 上部のコメント行と同じ:
msgid "Preview"
msgstr ""

-

1370 行目: ..前後の 3行を削除

#: 上部のコメント行と同じ:
msgid "Compare"
msgstr ""

-

1342 行目: ..前後の 3行を削除

#: 上部のコメント行と同じ:
msgid "&New"
msgstr ""

-

745 行目: ..前後の 3行を削除

#: 上部のコメント行と同じ:
msgid "&New"
msgstr ""

-

667 行目: ..前後の 3行を削除

#: 上部のコメント行と同じ:
msgid "O"
msgstr ""

-

622 行目: ...これは残します

#: 上部のコメント行と同じ:
msgid "O"
msgstr ""

-

189 行目: ...これは残します

#: 上部のコメント行と同じ:
msgid "&New"
msgstr ""

-

189 行目: ...これは残します

#: 上部のコメント行と同じ:
msgid "&New"
msgstr ""

-

153 行目: ...これは残します

#: 上部のコメント行と同じ:
msgid "Compare"
msgstr ""

-

33 行目: ...これは残します

#: 上部のコメント行と同じ:
msgid "Preview"
msgstr ""

→Ctrl+S で保存:

-


17). 日本語向けの「PO ファイル」を作成:

削除:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ rm jp-kajongg.po

-

作成:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ msginit --no-translator -i new-kajongg.pot -l ja -o jp-kajongg.po
:
jp-kajongg.po を生成.

-

確認:

$ ls -p | grep po
:
jp-kajongg.po
new-kajongg.pot
po/

-


18). PO ファイルの確認:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ featherpad jp-kajongg.po
# Japanese translations for @kajongg package.
# Copyright (C) 2026 THE @kajongg'S COPYRIGHT HOLDER
# This file is distributed under the same license as the @kajongg package.
# Automatically generated, 2026.
#
msgid ""
msgstr ""
"Project-Id-Version: @kajongg 25.12.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-02-12 18:02+0900\n"
"PO-Revision-Date: 2026-02-12 18:02+0900\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ASCII\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: src/background.py:71 src/tileset.py:48
msgid "file <filename>%1</filename> contains no valid SVG"
msgstr ""

#: src/backgroundselector.py:107 src/backgroundselector.py:108
#: src/backgroundselector.py:109 src/backgroundselector.py:110
#: src/backgroundselector.py:111
msgid "BackgroundSelector"
msgstr ""

: 省略

-


19). PO ファイルのヘッダー部を修正:

使用コードの設定誤りを修正:

16 行目:

"Content-Type: text/plain; charset=ASCII\n"

↓ 修正:

"Content-Type: text/plain; charset=UTF-8\n"

→Ctrl+S で保存:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- --

61. 「パッチ1」(起動メニューの日本語化)の作成:

-

項番 4.」はこちら:

項番 60.」はこちら:

-


1). 差分を作成するためのフォルダを作成:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ mkdir -p a/
$ mkdir -p b/

-


2). パッチを作成するために、ソースをコピー:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ sudo cp org.kde.kajongg.desktop a/
$ sudo cp org.kde.kajongg.desktop b/

-


3). 確認:

$ ls a
:
org.kde.kajongg.desktop

-

$ ls b
:
org.kde.kajongg.desktop

-


4). 「b/」フォルダのソースを修正:

$ featherpad b/org.kde.kajongg.desktop

↓ 下記を追加:

28 行目:

Name[ja]=Kajongg 中国式四人麻雀

→Ctrl+S で保存:

-


5). 「パッチ1」(差分)の作成:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ diff -Naur a b > 01.kajongg.desktop.patch

-

$ sudo featherpad 01.kajongg.desktop.patch

↓ すべて貼付け:

--- a/org.kde.kajongg.desktop    2026-02-11 03:17:31.409714551 +0900
+++ b/org.kde.kajongg.desktop   2026-02-11 03:27:08.990654361 +0900
@@ -25,6 +25,7 @@
 Name[ia]=Re Kajongg
 Name[is]=Kajongg
 Name[it]=Kajongg
+Name[ja]=Kajongg 中国式四人麻雀
 Name[ka]=Kajongg
 Name[kk]=Kajongg
 Name[km]=​Kajongg

先頭行を削除、お尻に 2つの空行を追加

→Ctrl+S で保存:

-


6). フォルダの同期:

$ sudo rm  a/org.kde.kajongg.desktop
$ sudo rm  b/org.kde.kajongg.desktop

-

$ ls a
$

-

$ ls b
$

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ---

62. 「パッチ2」(既存のPO ファイルの削除)の作成:

-

項番 4.」はこちら:

項番 60.」はこちら:

-


1). 差分を作成するためのフォルダを作成:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ mkdir -p a/po/ja/
$ mkdir -p b/po/ja/

-


2). パッチを作成するために、ソースをコピー:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ sudo cp -r po/ja a/po/ja/

-


3). 確認:

$ ls a/po/ja/
:
kajongg.po

-

$ ls b/po/ja/
$

-


4). 「パッチ2」(差分)の作成:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ diff -Naur a b > 02.kajongg.po-del.patch

-

$ sudo featherpad 02.kajongg.po-del.patch

↓ すべて貼付け:

--- a/po/ja/kajongg.po   2026-02-11 03:45:48.240778172 +0900
+++ b/po/ja/kajongg.po  1970-01-01 09:00:00.000000000 +0900
@@ -1,2427 +0,0 @@
-# Translation of kmj into Japanese.
-# Yukiko Bando <ybando@k6.dion.ne.jp>, 2009.
-msgid ""
-msgstr ""
-"Project-Id-Version: kmj\n"
-"Report-Msgid-Bugs-To: wolfgang@rohdewald.de\n"
-"POT-Creation-Date: 2025-11-17 14:39+0000\n"
-"PO-Revision-Date: 2010-09-26 12:18-0700\n"
-"Last-Translator: Fumiaki Okushi <okushi@kde.gr.jp>\n"
-"Language-Team: Japanese <kde-jp@kde.org>\n"
-"Language: ja\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Accelerator-Marker: &\n"
-"X-Text-Markup: kde4\n"
-
-msgctxt "kajongg"
-msgid "Game"
-msgstr "ゲーム"
-
-msgid "View"
-msgstr ""
-
-msgid "Toolbar"
-msgstr "ツールバー"
-
-#: src/background.py:71 src/tileset.py:48
-msgid "file <filename>%1</filename> contains no valid SVG"
-msgstr "ファイル <filename>%1</filename> には有効な SVG が含まれていません"
-
-#: src/backgroundselector.py:107
-#, fuzzy
-#| msgid "Preview"
-msgctxt "BackgroundSelector"
-msgid "Preview"
-msgstr "プレビュー"
-
-#: src/backgroundselector.py:108
-#, fuzzy
-#| msgid "Properties"
-msgctxt "BackgroundSelector"
-msgid "Properties"
-msgstr "プロパティ"
-
-#: src/backgroundselector.py:109
-#, fuzzy
-#| msgid "Author:"
-msgctxt "BackgroundSelector"
-msgid "Author:"
-msgstr "作者:"
-
-#: src/backgroundselector.py:110
-#, fuzzy
-#| msgid "Contact:"
-msgctxt "BackgroundSelector"
-msgid "Contact:"
-msgstr "連絡先:"
-
-#: src/backgroundselector.py:111
-#, fuzzy
-#| msgid "Description:"
-msgctxt "BackgroundSelector"
-msgid "Description:"
-msgstr "説明:"
-
-#: src/board.py:335
-msgctxt "kajongg:arrow keys hjkl like in konqueror"
-msgid "hjklHJKL"
-msgstr ""
-
-#: src/board.py:385
-msgid "Choose from"
-msgstr ""
-
-#: src/chat.py:51
-msgid "Time"
-msgstr ""
-
-#: src/chat.py:51 src/playerlist.py:90
-#, fuzzy
-#| msgctxt "kajongg"
-#| msgid "Player"
-msgid "Player"
-msgstr "プレイヤー"
-
-#: src/chat.py:51
-msgid "Message"
-msgstr ""
-
-#: src/chat.py:125
-msgid "Chat on table %1 at %2"
-msgstr ""
-
-#: src/client.py:69
-msgctxt "table status"
-msgid "Suspended"
-msgstr ""
-
-#: src/client.py:74
-msgctxt "table status"
-msgid "Running"
-msgstr ""
-
-#: src/client.py:75
-msgctxt "table status"
-msgid "New"
-msgstr "新規"
-
-#: src/configdialog.py:47
-msgid "Show tile shadows"
-msgstr ""
-
-#: src/configdialog.py:50
-msgid "Rearrange undisclosed tiles to melds"
-msgstr ""
-
-#: src/configdialog.py:53
-#, fuzzy
-#| msgid "Show only pending games"
-msgid "Show only possible actions"
-msgstr "進行中のゲームのみを表示する"
-
-#: src/configdialog.py:56
-msgid "Propose what to do"
-msgstr ""
-
-#: src/configdialog.py:62
-msgid "Animation speed:"
-msgstr ""
-
-#: src/configdialog.py:66
-msgid "Use sounds if available"
-msgstr ""
-
-#: src/configdialog.py:69
-msgid "Let others hear my voice"
-msgstr ""
-
-#: src/configdialog.py:103
-msgctxt "kajongg"
-msgid "Play"
-msgstr "プレイ"
-
-#: src/configdialog.py:106
-msgid "Tiles"
-msgstr "牌"
-
-#: src/configdialog.py:109
-msgid "Backgrounds"
-msgstr "背景"
-
-#: src/deferredutil.py:272 src/deferredutil.py:436
-msgid "The game server lost connection to player %1"
-msgstr ""
-
-#: src/deferredutil.py:275
-msgid ""
-"Error for player %1: %2\n"
-"%3"
-msgstr ""
-
-#: src/differ.py:72
-msgctxt "Kajongg"
-msgid "Rule"
-msgstr ""
-
-#: src/differ.py:127
-msgctxt "@title:window"
-msgid "Compare"
-msgstr ""
-
-#: src/differ.py:170 src/differ.py:172
-msgctxt "Kajongg-Rule"
-msgid "not defined"
-msgstr ""
-
-#: src/game.py:404
-msgid "Score computed manually"
-msgstr ""
-
-#: src/game.py:502
-msgid "Player %1 not known"
-msgstr ""
-
-#: src/game.py:925
-msgid "Short living wall: Tile is invisible, hence dangerous"
-msgstr ""
-
-#: src/games.py:95 src/playerlist.py:67 src/tables.py:67
-msgid "Players"
-msgstr "プレイヤー"
-
-#: src/games.py:95
-msgid "Started"
-msgstr ""
-
-#: src/games.py:107
-#, fuzzy
-#| msgctxt "kajongg"
-#| msgid "Games"
-msgctxt "@title:window"
-msgid "Games"
-msgstr "ゲーム"
-
-#: src/games.py:124
-#, fuzzy
-#| msgid "&New"
-msgctxt "start a new game"
-msgid "&New"
-msgstr "新規(&N)"
-
-#: src/games.py:129
-msgid "&Load"
-msgstr "読み込み(&L)"
-
-#: src/games.py:134 src/playerlist.py:56
-msgid "&Delete"
-msgstr "削除(&D)"
-
-#: src/games.py:139
-msgid "Show only pending games"
-msgstr "進行中のゲームのみを表示する"
-
-#: src/games.py:247
-msgid ""
-"Do you really want to delete <numid>%1</numid> games?<br>This will be final, "
-"you cannot cancel it with the cancel button"
-msgstr ""
-
-#: src/guiutil.py:134 src/kdestub.py:120 src/kdestub.py:123
-msgid "Kajongg"
-msgstr "Kajongg"
-
-#: src/humanclient.py:66
-msgid "Which chow do you want to expose?"
-msgstr ""
-
-#: src/humanclient.py:104
-msgid "Which kong do you want to declare?"
-msgstr ""
-
-#: src/humanclient.py:172
-msgid "Choose"
-msgstr ""
-
-#: src/humanclient.py:383
-msgid "You cannot say %1"
-msgstr ""
-
-#: src/humanclient.py:608
-msgid "Player %1 has left the table"
-msgstr ""
-
-#: src/humanclient.py:671
-msgid ""
-"The game on table <numid>%1</numid> can begin. Are you ready to play now?"
-msgstr ""
-
-#: src/humanclient.py:691
-msgid "Ready for next hand?"
-msgstr ""
-
-#: src/humanclient.py:967
-msgid "The connection to the server %1 broke, please try again later."
-msgstr ""
-
-#: src/kajongg.py:81 src/kdestub.py:1092
-msgid "Mah Jongg - the ancient Chinese board game for 4 players"
-msgstr ""
-
-#: src/kajongg.py:85
-msgid "all robots play with visible concealed tiles"
-msgstr ""
-
-#: src/kajongg.py:86
-msgid "start with demo mode"
-msgstr ""
-
-#: src/kajongg.py:87
-msgid "login to HOST"
-msgstr ""
-
-#: src/kajongg.py:88
-msgid "start new TABLE"
-msgstr ""
-
-#: src/kajongg.py:89
-msgid "join TABLE"
-msgstr ""
-
-#: src/kajongg.py:90
-msgid "use RULESET without asking"
-msgstr ""
-
-#: src/kajongg.py:91
-msgid "prefer PLAYER for next login"
-msgstr ""
-
-#: src/kajongg.py:92
-msgid "use AI variant for human player in demo mode"
-msgstr ""
-
-#: src/kajongg.py:93
-msgid "write statistics to CSV"
-msgstr ""
-
-#: src/kajongg.py:94
-msgid "show all available rulesets"
-msgstr ""
-
-#: src/kajongg.py:95
-msgid "for testing purposes: Initializes the random generator"
-msgstr ""
-
-#: src/kajongg.py:97
-msgid "show no graphical user interface. Intended only for testing"
-msgstr ""
-
-#: src/kajongg.py:99
-msgid ""
-"use a dedicated server already running and listening on SOCKET. Intended "
-"only for testing"
-msgstr ""
-
-#: src/kajongg.py:101
-msgid ""
-"use a dedicated server already running and listening on PORT. Intended only "
-"for testing"
-msgstr ""
-
-#: src/kdestub.py:278
-#, fuzzy
-#| msgctxt "kajongg"
-#| msgid "OK"
-msgid "&OK"
-msgstr "OK"
-
-#: src/kdestub.py:279
-msgid "&Apply"
-msgstr ""
-
-#: src/kdestub.py:280
-msgid "&Cancel"
-msgstr "キャンセル(&C)"
-
-#: src/kdestub.py:281 src/kdestub.py:469
-msgid "&Help"
-msgstr ""
-
-#: src/kdestub.py:282
-msgid "&Defaults"
-msgstr ""
-
-#: src/kdestub.py:352
-#, fuzzy
-#| msgid "Toolbar"
-msgctxt "@action:inmenu"
-msgid "Show St&atusbar"
-msgstr "ツールバー"
-
-#: src/kdestub.py:358
-#, fuzzy
-#| msgid "Toolbar"
-msgctxt "@action:inmenu"
-msgid "Show &Toolbar"
-msgstr "ツールバー"
-
-#: src/kdestub.py:364
-#, fuzzy
-#| msgid "Kajongg"
-msgid "Configure Tool&bars..."
-msgstr "Kajongg"
-
-#: src/kdestub.py:366
-msgid "Configure toolbars"
-msgstr ""
-
-#: src/kdestub.py:373
-#, fuzzy
-#| msgid "Kajongg"
-msgid "Configure &Kajongg..."
-msgstr "Kajongg"
-
-#: src/kdestub.py:375 src/kdestub.py:1153
-msgid "Configure"
-msgstr ""
-
-#: src/kdestub.py:465
-#, fuzzy
-#| msgctxt "kajongg"
-#| msgid "Game"
-msgid "&Game"
-msgstr "ゲーム"
-
-#: src/kdestub.py:466
-msgid "&View"
-msgstr ""
-
-#: src/kdestub.py:467
-msgid "&Settings"
-msgstr ""
-
-#: src/kdestub.py:477
-msgctxt "@action:inmenu"
-msgid "&Help"
-msgstr ""
-
-#: src/kdestub.py:480 src/kdestub.py:857
-msgid "Switch Application Language"
-msgstr ""
-
-#: src/kdestub.py:484
-#, fuzzy
-#| msgid "Kajongg"
-msgctxt "@action:inmenu"
-msgid "About &Kajongg"
-msgstr "Kajongg"
-
-#: src/kdestub.py:862
-msgid "Please choose the language which should be used for this application:"
-msgstr ""
-
-#: src/kdestub.py:881
-msgid "Add Fallback Language"
-msgstr ""
-
-#: src/kdestub.py:893
-msgid "Primary language:"
-msgstr ""
-
-#: src/kdestub.py:893
-msgid "Fallback language:"
-msgstr ""
-
-#: src/kdestub.py:899
-msgid "Remove"
-msgstr ""
-
-#: src/kdestub.py:903
-msgid ""
-"This is the main application language which will be used first, before any "
-"other languages."
-msgstr ""
-
-#: src/kdestub.py:905
-msgid ""
-"This is the language which will be used if any previous languages do not "
-"contain a proper translation."
-msgstr ""
-
-#: src/kdestub.py:1035
-#, fuzzy
-#| msgid "Kajongg"
-msgid "About Kajongg"
-msgstr "Kajongg"
-
-#: src/kdestub.py:1055
-msgid "Version: %1"
-msgstr ""
-
-#: src/kdestub.py:1056
-msgid "Protocol version %1"
-msgstr ""
-
-#: src/kdestub.py:1059
-msgid "Original author"
-msgstr ""
-
-#: src/kdestub.py:1066
-msgid "KDE Frameworks (not installed or not usable)"
-msgstr ""
-
-#: src/kdestub.py:1072
-msgctxt "kajongg"
-msgid "Using versions %1"
-msgstr ""
-
-# skip-rule: player2
-#: src/kdestub.py:1093
-msgid ""
-"This is the classical Mah Jongg for four players. If you are looking for Mah "
-"Jongg solitaire please use the application kmahjongg."
-msgstr ""
-"これは 4 人でプレイする伝統的なマージャンです。マージャン牌を使ったソリティア"
-"ゲームを探しているのであれば、KMahjongg を使ってください。"
-
-#: src/kdestub.py:1110
-msgid ""
-"Please use <a href=\"https://bugs.kde.org\">https://bugs.kde.org</a> to "
-"report bugs."
-msgstr ""
-
-#: src/kdestub.py:1115
-#, fuzzy
-#| msgid "Author:"
-msgid "Authors:"
-msgstr "作者:"
-
-#: src/kdestub.py:1356
-msgid "Configure Toolbars"
-msgstr ""
-
-#: src/kdestub.py:1358
-msgid "A&vailable actions:"
-msgstr ""
-
-#: src/kdestub.py:1369
-msgid "Curr&ent actions:"
-msgstr ""
-
-#: src/login.py:177
-msgid "trying to start local server %1"
-msgstr ""
-
-#: src/login.py:188 src/login.py:637
-msgid "removed stale socket <filename>%1</filename>"
-msgstr ""
-
-#: src/login.py:208
-msgid "started the local kajongg server: pid=<numid>%1</numid> %2"
-msgstr ""
-
-#: src/login.py:251
-msgctxt "kajongg"
-msgid "Login"
-msgstr ""
-
-#: src/login.py:300 src/login.py:406
-msgid "Game server:"
-msgstr ""
-
-#: src/login.py:303 src/login.py:408
-msgid "Username:"
-msgstr ""
-
-#: src/login.py:306 src/login.py:411
-msgid "Password:"
-msgstr ""
-
-#: src/login.py:308
-msgctxt "kajongg"
-msgid "Ruleset:"
-msgstr ""
-
-#: src/login.py:400
-msgctxt "@title:window"
-msgid "Create User Account"
-msgstr ""
-
-#: src/login.py:414
-msgid "Repeat password:"
-msgstr ""
-
-#: src/login.py:565
-msgid "You are already connected to server %1"
-msgstr ""
-
-#: src/login.py:605
-msgctxt "USER is not known on SERVER"
-msgid "%1 is not known on %2, do you want to open an account?"
-msgstr ""
-
-#: src/login.py:618
-msgid "Server %1 did not answer"
-msgstr ""
-
-#: src/login.py:620
-msgid "Server %1 refused connection"
-msgstr ""
-
-#: src/login.py:622
-msgid "Server %1 does not run a kajongg server"
-msgstr ""
-
-#: src/login.py:624
-msgid "Address for server %1 cannot be found"
-msgstr ""
-
-#: src/login.py:627
-msgid "Login to server %1 failed: You have no network connection"
-msgstr ""
-
-#: src/login.py:638
-msgid "Please try again"
-msgstr ""
-
-#: src/mainwindow.py:486
-#, fuzzy
-#| msgid "&Score Table"
-msgctxt "@action:inmenu"
-msgid "&Score Manual Game"
-msgstr "スコア表(&S)"
-
-#: src/mainwindow.py:488
-#, fuzzy
-#| msgid "&Score Table"
-msgctxt "@action:intoolbar"
-msgid "Manual Game"
-msgstr "スコア表(&S)"
-
-#: src/mainwindow.py:491
-#, fuzzy
-#| msgid "&Score Table"
-msgctxt "kajongg @info:tooltip"
-msgid "&Score a manual game."
-msgstr "スコア表(&S)"
-
-#: src/mainwindow.py:493
-#, fuzzy
-#| msgid "&Play"
-msgctxt "@action:intoolbar"
-msgid "&Play"
-msgstr "プレイ(&P)"
-
-#: src/mainwindow.py:496
-#, fuzzy
-#| msgid "&Score Table"
-msgctxt "kajongg @info:tooltip"
-msgid "Start a new game."
-msgstr "スコア表(&S)"
-
-#: src/mainwindow.py:498
-#, fuzzy
-#| msgid "&Abort"
-msgctxt "@action:inmenu"
-msgid "&Abort Game"
-msgstr "中止(&A)"
-
-#: src/mainwindow.py:502
-msgctxt "kajongg @info:tooltip"
-msgid "Abort the current game."
-msgstr ""
-
-#: src/mainwindow.py:504
-#, fuzzy
-#| msgid "Kajongg"
-msgctxt "@action:inmenu"
-msgid "&Quit Kajongg"
-msgstr "Kajongg"
-
-#: src/mainwindow.py:507
-#, fuzzy
-#| msgid "&Players"
-msgctxt "@action:intoolbar"
-msgid "&Players"
-msgstr "プレイヤー(&P)"
-
-#: src/mainwindow.py:510
-msgctxt "kajongg @info:tooltip"
-msgid "define your players."
-msgstr ""
-
-#: src/mainwindow.py:512
-msgctxt "@action:intoolbar"
-msgid "&Rulesets"
-msgstr ""
-
-#: src/mainwindow.py:515
-msgctxt "kajongg @info:tooltip"
-msgid "customize rulesets."
-msgstr ""
-
-#: src/mainwindow.py:519
-msgctxt "@action:inmenu"
-msgid "&Change Visual Angle"
-msgstr ""
-
-#: src/mainwindow.py:520
-msgctxt "@action:intoolbar"
-msgid "Angle"
-msgstr ""
-
-#: src/mainwindow.py:523
-msgctxt "kajongg @info:tooltip"
-msgid "Change the visual appearance of the tiles."
-msgstr ""
-
-#: src/mainwindow.py:527
-msgctxt "@action:inmenu"
-msgid "F&ull Screen Mode"
-msgstr ""
-
-#: src/mainwindow.py:530
-#, fuzzy
-#| msgctxt "kajongg"
-#| msgid "&Score Table"
-msgctxt "kajongg @action:inmenu"
-msgid "&Score Table"
-msgstr "スコア表(&S)"
-
-#: src/mainwindow.py:532
-#, fuzzy
-#| msgctxt "kajongg"
-#| msgid "Scores"
-msgctxt "kajongg @action:intoolbar"
-msgid "&Scores"
-msgstr "スコア"
-
-#: src/mainwindow.py:534
-msgctxt "kajongg @info:tooltip"
-msgid "Show or hide the score table for the current game."
-msgstr ""
-
-#: src/mainwindow.py:536
-#, fuzzy
-#| msgid "Scores"
-msgctxt "@action:inmenu"
-msgid "&Explain Scores"
-msgstr "スコア"
-
-#: src/mainwindow.py:537
-#, fuzzy
-#| msgid "Scores"
-msgctxt "@action:intoolbar"
-msgid "&Explain"
-msgstr "スコア"
-
-#: src/mainwindow.py:539
-msgctxt "kajongg @info:tooltip"
-msgid "Explain the scoring for all players in the current game."
-msgstr ""
-
-#: src/mainwindow.py:541
-msgctxt "@action:inmenu"
-msgid "&Demo Mode"
-msgstr ""
-
-#: src/mainwindow.py:544
-msgctxt "kajongg @info:tooltip"
-msgid "Let the computer take over for you. Start a new local game if needed."
-msgstr ""
-
-#: src/mainwindow.py:546
-msgid "C&hat"
-msgstr ""
-
-#: src/mainwindow.py:549
-msgctxt "kajongg @info:tooltip"
-msgid "Chat with the other players."
-msgstr ""
-
-#: src/message.py:250
-msgid "saying %1 violates Original Call"
-msgstr ""
-
-#: src/message.py:263
-msgid ""
-"claiming %1 is dangerous because you will have to discard a dangerous tile"
-msgstr ""
-
-#: src/message.py:268
-msgid ""
-"claiming %1 for %2 is dangerous because you will have to discard a dangerous "
-"tile"
-msgstr ""
-
-#: src/message.py:271
-msgid "You may say %1"
-msgstr ""
-
-#: src/message.py:280
-msgctxt "kajongg"
-msgid "Pung"
-msgstr "ポン"
-
-#: src/message.py:281
-msgctxt "kajongg game dialog:Key for Pung"
-msgid "P"
-msgstr "P"
-
-#: src/message.py:299
-msgctxt "kajongg"
-msgid "Kong"
-msgstr "カン"
-
-#: src/message.py:300
-msgctxt "kajongg game dialog:Key for Kong"
-msgid "K"
-msgstr "K"
-
-#: src/message.py:326
-msgid "saying Kong for %1 violates Original Call"
-msgstr ""
-
-#: src/message.py:330
-msgid "You may say Kong for %1"
-msgstr ""
-
-#: src/message.py:344
-msgctxt "kajongg"
-msgid "Chow"
-msgstr "チー"
-
-#: src/message.py:345
-msgctxt "kajongg game dialog:Key for Chow"
-msgid "C"
-msgstr "C"
-
-#: src/message.py:378
-#, fuzzy
-#| msgid "Score"
-msgctxt "kajongg"
-msgid "Mah Jongg"
-msgstr "スコア"
-
-#: src/message.py:379
-msgctxt "kajongg game dialog:Key for Mah Jongg"
-msgid "M"
-msgstr "M"
-
-#: src/message.py:387
-msgid "Press here and you win"
-msgstr ""
-
-#: src/message.py:401
-msgctxt "kajongg"
-msgid "Original Call"
-msgstr ""
-
-#: src/message.py:402
-msgctxt "kajongg game dialog:Key for Original Call"
-msgid "O"
-msgstr ""
-
-#: src/message.py:418
-msgid "discarding %1 and declaring Original Call makes this hand unwinnable"
-msgstr ""
-
-#: src/message.py:422
-msgid ""
-"Discard a tile, declaring Original Call meaning you need only one tile to "
-"complete the hand and will not alter the hand in any way (except bonus tiles)"
-msgstr ""
-
-#: src/message.py:447
-msgctxt "kajongg"
-msgid "Discard"
-msgstr ""
-
-#: src/message.py:448
-msgctxt "kajongg game dialog:Key for Discard"
-msgid "D"
-msgstr ""
-
-#: src/message.py:465
-msgid "discarding %1 violates Original Call"
-msgstr ""
-
-#: src/message.py:468
-msgid "discarding %1 is Dangerous Game"
-msgstr ""
-
-#: src/message.py:471
-msgid "discard the least useful tile"
-msgstr ""
-
-#: src/message.py:551
-#, fuzzy
-#| msgid "Do you really want to abort this game?"
-msgid "%1 is not ready to start the game"
-msgstr "本当にこのゲームを中止しますか?"
-
-#: src/message.py:590
-msgid "Kajongg <numid>%1</numid>"
-msgstr ""
-
-#: src/message.py:676
-msgctxt "kajongg"
-msgid "Violates Original Call"
-msgstr ""
-
-#: src/message.py:819
-#, fuzzy
-#| msgid "&Score Table"
-msgctxt "kajongg"
-msgid "Dangerous Game"
-msgstr "スコア表(&S)"
-
-#: src/message.py:834
-msgctxt "kajongg"
-msgid "No Choice"
-msgstr ""
-
-#: src/message.py:896
-msgctxt "kajongg"
-msgid "OK"
-msgstr "OK"
-
-#: src/message.py:897
-msgctxt "kajongg game dialog:Key for OK"
-msgid "O"
-msgstr ""
-
-#: src/message.py:901
-msgid "Confirm that you saw the message"
-msgstr ""
-
-#: src/message.py:909
-msgctxt "kajongg"
-msgid "No Claim"
-msgstr ""
-
-#: src/message.py:910
-msgctxt "kajongg game dialog:Key for No claim"
-msgid "N"
-msgstr ""
-
-#: src/message.py:914
-msgid "You cannot or do not want to claim this tile"
-msgstr ""
-
-#: src/mjresource.py:92
-#, fuzzy
-#| msgid "cannot find any tileset, is libkmahjongg installed?"
-msgid ""
-"cannot find any %1 in the following directories, is libkmahjongg installed?"
-msgstr "牌セットが見つかりません。libkmahjongg はインストールされていますか?"
-
-#: src/mjresource.py:116
-#, fuzzy
-#| msgid "cannot find tileset %1, using default"
-msgid "cannot find %1, using default"
-msgstr "牌セットが見つかりません。デフォルトを使用します。"
-
-#: src/mjresource.py:131
-#, fuzzy
-#| msgid "Backgrounds"
-msgid "unknown name"
-msgstr "背景"
-
-#: src/mjresource.py:132
-msgid "unknown author"
-msgstr ""
-
-#: src/mjresource.py:135
-msgid "no description available"
-msgstr ""
-
-#: src/mjresource.py:138
-msgid "no E-Mail address available"
-msgstr ""
-
-#: src/player.py:725
-msgid "%1 claiming MahJongg: She does not really have tile %2"
-msgstr ""
-
-#: src/player.py:734
-msgid ""
-"%1 claiming MahJongg: She did not pass all concealed tiles to the server"
-msgstr ""
-
-#: src/player.py:855
-msgid "Player %1 has 3 or 4 exposed melds, all are green"
-msgstr ""
-
-#: src/player.py:863
-msgid "Player %1 may try a True Color Game"
-msgstr ""
-
-#: src/player.py:866
-msgid "Player %1 may try an All Terminals Game"
-msgstr ""
-
-#: src/player.py:879
-msgid "Player %1 exposed many winds"
-msgstr ""
-
-#: src/player.py:883
-msgid "Player %1 exposed many dragons"
-msgstr ""
-
-#: src/playerlist.py:50
-#, fuzzy
-#| msgid "&New"
-msgctxt "define a new player"
-msgid "&New"
-msgstr "新規(&N)"
-
-#: src/playerlist.py:110
-msgid "Player %1 already exists"
-msgstr ""
-
-#: src/playerlist.py:121
-msgid "Error while adding player %1: %2"
-msgstr ""
-
-#: src/playerlist.py:176
-msgid ""
-"There are %1 finished and %2 unfinished games for %3, delete %3 anyway?  "
-"This will also delete all games played by %3!"
-msgstr ""
-
-#: src/predefined.py:29
-msgid "Classical Chinese standard"
-msgstr ""
-
-#: src/predefined.py:35
-msgid "Classical Chinese"
-msgstr ""
-
-#: src/predefined.py:41
-msgid "Last Tile Taken from Dead Wall"
-msgstr ""
-
-#: src/predefined.py:43
-msgid ""
-"The dead wall is also called kong box: The last 16 tiles of the wall used as "
-"source of replacement tiles"
-msgstr ""
-
-#: src/predefined.py:46
-msgid "Last Tile is Last Tile of Wall"
-msgstr ""
-
-#: src/predefined.py:48
-msgid ""
-"Winner said Mah Jong with the last tile taken from the living end of the wall"
-msgstr ""
-
-#: src/predefined.py:50
-msgid "Last Tile is Last Tile of Wall Discarded"
-msgstr ""
-
-#: src/predefined.py:52
-msgid ""
-"Winner said Mah Jong by claiming the last tile taken from the living end of "
-"the wall, discarded by another player"
-msgstr ""
-
-#: src/predefined.py:55
-msgid "Robbing the Kong"
-msgstr ""
-
-#: src/predefined.py:56
-msgid ""
-"Winner said Mah Jong by claiming the 4th tile of a kong another player just "
-"declared"
-msgstr ""
-
-#: src/predefined.py:59
-msgid "Mah Jongg with Original Call"
-msgstr ""
-
-#: src/predefined.py:62
-msgid ""
-"Just before the first discard, a player can declare Original Call meaning "
-"she needs only one tile to complete the hand and announces she will not "
-"alter the hand in any way (except bonus tiles)"
-msgstr ""
-
-#: src/predefined.py:65
-msgid "Dangerous Game"
-msgstr ""
-
-#: src/predefined.py:66
-msgid ""
-"In some situations discarding a tile that has a high chance to help somebody "
-"to win is declared to be dangerous, and if that tile actually makes somebody "
-"win, the discarder pays the winner for all"
-msgstr ""
-
-#: src/predefined.py:70
-msgid "Twofold Fortune"
-msgstr ""
-
-#: src/predefined.py:71
-msgid ""
-"Kong after Kong: Declare Kong and a second Kong with the replacement tile "
-"and Mah Jong with the second replacement tile"
-msgstr ""
-
-#: src/predefined.py:75
-msgid "Blessing of Heaven"
-msgstr ""
-
-#: src/predefined.py:76
-msgid "East says Mah Jong with the unmodified dealt tiles"
-msgstr ""
-
-#: src/predefined.py:78
-msgid "Blessing of Earth"
-msgstr ""
-
-#: src/predefined.py:79
-msgid ""
-"South, West or North says Mah Jong with the first tile discarded by East"
-msgstr ""
-
-#: src/predefined.py:81
-msgid "East won nine times in a row"
-msgstr ""
-
-#: src/predefined.py:82
-msgid "If that happens, East gets a limit score and the winds rotate"
-msgstr ""
-
-#: src/predefined.py:87
-msgid ""
-"False Naming of Discard, Claimed for Mah Jongg and False Declaration of Mah "
-"Jongg"
-msgstr ""
-
-#: src/predefined.py:93
-msgid "Own Flower and Own Season"
-msgstr ""
-
-#: src/predefined.py:96
-msgid "All Flowers"
-msgstr ""
-
-#: src/predefined.py:97
-msgid "All Seasons"
-msgstr ""
-
-#: src/predefined.py:99
-msgid "Three Concealed Pongs"
-msgstr ""
-
-#: src/predefined.py:103
-msgid "Long Hand"
-msgstr ""
-
-#: src/predefined.py:104
-msgid "The hand contains too many tiles"
-msgstr ""
-
-#: src/predefined.py:109
-msgid "Tiles in Hand"
-msgstr ""
-
-#: src/predefined.py:114
-msgid "Points Needed for Mah Jongg"
-msgstr ""
-
-#: src/predefined.py:118
-msgid "Minimum number of doubles needed for Mah Jongg"
-msgstr ""
-
-#: src/predefined.py:121
-msgid "Points for a Limit Hand"
-msgstr ""
-
-#: src/predefined.py:125
-msgid "Play with the roof off"
-msgstr ""
-
-#: src/predefined.py:126
-msgid "Play with no upper scoring limit"
-msgstr ""
-
-#: src/predefined.py:128
-msgid "Claim Timeout"
-msgstr ""
-
-#: src/predefined.py:132
-msgid "Size of Kong Box"
-msgstr ""
-
-#: src/predefined.py:133
-msgid "The Kong Box is used for replacement tiles when declaring kongs"
-msgstr ""
-
-#: src/predefined.py:135
-msgid "Play with Bonus Tiles"
-msgstr ""
-
-#: src/predefined.py:136
-msgid "Bonus tiles increase the luck factor"
-msgstr ""
-
-#: src/predefined.py:138
-msgid "Minimum number of rounds in game"
-msgstr ""
-
-#: src/predefined.py:142
-msgid "number of allowed chows"
-msgstr ""
-
-#: src/predefined.py:143
-msgid "The number of chows a player may build"
-msgstr ""
-
-#: src/predefined.py:145
-msgid "must declare calling hand"
-msgstr ""
-
-#: src/predefined.py:147
-msgid "Mah Jongg is only allowed after having declared to have a calling hand"
-msgstr ""
-
-#: src/predefined.py:149
-msgid "Standard Rotation"
-msgstr ""
-
-#: src/predefined.py:152
-msgid "Discard tiles ordered"
-msgstr ""
-
-#: src/predefined.py:154
-msgid "Discard tiles ordered from top left"
-msgstr ""
-
-#: src/predefined.py:156
-msgid "Leave holes for claimed discards"
-msgstr ""
-
-#: src/predefined.py:159
-msgid ""
-"Only when discarding tiles ordered: Do not place the next discard where the "
-"claimed discard was"
-msgstr ""
-
-#: src/predefined.py:168
-msgid "Last Tile Completes Pair of 2..8"
-msgstr ""
-
-#: src/predefined.py:172
-msgid "Last Tile Completes Pair of Terminals or Honors"
-msgstr ""
-
-#: src/predefined.py:175
-msgid "Last Tile is Only Possible Tile"
-msgstr ""
-
-#: src/predefined.py:179
-msgid "Won with Last Tile Taken from Wall"
-msgstr ""
-
-#: src/predefined.py:184
-msgid "Zero Point Hand"
-msgstr ""
-
-#: src/predefined.py:185
-msgid "The hand has 0 basis points excluding bonus tiles"
-msgstr ""
-
-#: src/predefined.py:186
-msgid "No Chow"
-msgstr ""
-
-#: src/predefined.py:188
-msgid "Only Concealed Melds"
-msgstr ""
-
-#: src/predefined.py:192
-msgid "False Color Game"
-msgstr ""
-
-#: src/predefined.py:193
-msgid ""
-"Only same-colored tiles (only bamboo/stone/character) plus any number of "
-"winds and dragons"
-msgstr ""
-
-#: src/predefined.py:196
-msgid "True Color Game"
-msgstr ""
-
-#: src/predefined.py:197
-msgid "Only same-colored tiles (only bamboo/stone/character)"
-msgstr ""
-
-#: src/predefined.py:199
-msgid "Concealed True Color Game"
-msgstr ""
-
-#: src/predefined.py:200
-msgid "All tiles concealed and of the same suit, no honors"
-msgstr ""
-
-#: src/predefined.py:202
-msgid "Only Terminals and Honors"
-msgstr ""
-
-#: src/predefined.py:203
-msgid "Only winds, dragons, 1 and 9"
-msgstr ""
-
-#: src/predefined.py:204
-msgid "Only Honors"
-msgstr ""
-
-#: src/predefined.py:205
-msgid "Only winds and dragons"
-msgstr ""
-
-#: src/predefined.py:207
-msgid "Hidden Treasure"
-msgstr ""
-
-#: src/predefined.py:208
-msgid "Only hidden Pungs or Kongs, last tile from wall"
-msgstr ""
-
-#: src/predefined.py:210
-msgid "Heads and Tails"
-msgstr ""
-
-#: src/predefined.py:211
-msgid "Only 1 and 9"
-msgstr ""
-
-#: src/predefined.py:213
-msgid "Fourfold Plenty"
-msgstr ""
-
-#: src/predefined.py:214
-#, fuzzy
-#| msgid "Score"
-msgid "4 Kongs"
-msgstr "スコア"
-
-#: src/predefined.py:216 src/predefined.py:430
-msgid "Three Great Scholars"
-msgstr ""
-
-#: src/predefined.py:217 src/predefined.py:337
-msgid "3 Pungs or Kongs of dragons"
-msgstr ""
-
-#: src/predefined.py:218
-msgid "Four Blessings Hovering over the Door"
-msgstr ""
-
-#: src/predefined.py:220 src/predefined.py:342
-msgid "4 Pungs or Kongs of winds"
-msgstr ""
-
-#: src/predefined.py:221
-msgid "Imperial Jade"
-msgstr ""
-
-#: src/predefined.py:222
-msgid "Only green tiles: Green dragon and Bamboo 2,3,4,6,8"
-msgstr ""
-
-#: src/predefined.py:223
-msgid "Gathering the Plum Blossom from the Roof"
-msgstr ""
-
-#: src/predefined.py:225
-msgid "Mah Jong with stone 5 from the dead wall"
-msgstr ""
-
-#: src/predefined.py:227
-msgid "Plucking the Moon from the Bottom of the Sea"
-msgstr ""
-
-#: src/predefined.py:228
-msgid "Mah Jong with the last tile from the wall being a stone 1"
-msgstr ""
-
-#: src/predefined.py:230
-msgid "Scratching a Carrying Pole"
-msgstr ""
-
-#: src/predefined.py:231
-msgid "Robbing the Kong of bamboo 2"
-msgstr ""
-
-#: src/predefined.py:237 src/predefined.py:526
-msgid "Standard Mah Jongg"
-msgstr ""
-
-#: src/predefined.py:242
-msgid "Nine Gates"
-msgstr ""
-
-#: src/predefined.py:244
-msgid ""
-"A concealed hand in one color 1112345678999 plus last tile of this suit "
-"(from wall or discarded)"
-msgstr ""
-
-#: src/predefined.py:246
-msgid "Thirteen Orphans"
-msgstr ""
-
-#: src/predefined.py:247
-msgid ""
-"13 single tiles: All dragons, winds, 1, 9 and a 14th tile building a pair "
-"with one of them"
-msgstr ""
-
-#: src/predefined.py:251
-msgid "Pung/Kong of Dragons"
-msgstr ""
-
-#: src/predefined.py:253
-msgid "Pung/Kong of Own Wind"
-msgstr ""
-
-#: src/predefined.py:256
-msgid "Pung/Kong of Round Wind"
-msgstr ""
-
-#: src/predefined.py:260
-msgid "Exposed Kong"
-msgstr ""
-
-#: src/predefined.py:263
-msgid "Exposed Kong of Terminals"
-msgstr ""
-
-#: src/predefined.py:266
-msgid "Exposed Kong of Honors"
-msgstr ""
-
-#: src/predefined.py:269
-msgid "Exposed Pung"
-msgstr ""
-
-#: src/predefined.py:272
-msgid "Exposed Pung of Terminals"
-msgstr ""
-
-#: src/predefined.py:275
-msgid "Exposed Pung of Honors"
-msgstr ""
-
-#: src/predefined.py:279
-msgid "Concealed Kong"
-msgstr ""
-
-#: src/predefined.py:282
-msgid "Concealed Kong of Terminals"
-msgstr ""
-
-#: src/predefined.py:285
-msgid "Concealed Kong of Honors"
-msgstr ""
-
-#: src/predefined.py:288
-msgid "Concealed Pung"
-msgstr ""
-
-#: src/predefined.py:291
-msgid "Concealed Pung of Terminals"
-msgstr ""
-
-#: src/predefined.py:294
-msgid "Concealed Pung of Honors"
-msgstr ""
-
-#: src/predefined.py:297
-msgid "Pair of Own Wind"
-msgstr ""
-
-#: src/predefined.py:299
-msgid "Pair of Round Wind"
-msgstr ""
-
-#: src/predefined.py:301
-msgid "Pair of Dragons"
-msgstr ""
-
-#: src/predefined.py:305
-msgid "Flower"
-msgstr ""
-
-#: src/predefined.py:307
-msgid "Season"
-msgstr ""
-
-#: src/predefined.py:316
-msgid "Classical Chinese DMJL"
-msgstr ""
-
-#: src/predefined.py:322
-msgid "Classical Chinese as defined by the Deutsche Mah Jongg Liga (DMJL) e.V."
-msgstr ""
-
-#: src/predefined.py:329
-msgid "Squirming Snake"
-msgstr ""
-
-#: src/predefined.py:330
-msgid ""
-"All tiles of same color. Pung or Kong of 1 and 9, pair of 2, 5 or 8 and two "
-"Chows of the remaining values"
-msgstr ""
-
-#: src/predefined.py:333
-msgid "Little Three Dragons"
-msgstr ""
-
-#: src/predefined.py:334
-msgid "2 Pungs or Kongs of dragons and 1 pair of dragons"
-msgstr ""
-
-#: src/predefined.py:336
-msgid "Big Three Dragons"
-msgstr ""
-
-#: src/predefined.py:339
-msgid "Little Four Joys"
-msgstr ""
-
-#: src/predefined.py:340
-msgid "3 Pungs or Kongs of winds and 1 pair of winds"
-msgstr ""
-
-#: src/predefined.py:341
-msgid "Big Four Joys"
-msgstr ""
-
-#: src/predefined.py:347
-msgid "False Naming of Discard, Claimed for Chow"
-msgstr ""
-
-#: src/predefined.py:350
-msgid "False Naming of Discard, Claimed for Pung/Kong"
-msgstr ""
-
-#: src/predefined.py:353 src/predefined.py:444 src/predefined.py:556
-msgid "False Declaration of Mah Jongg by One Player"
-msgstr ""
-
-#: src/predefined.py:356
-msgid "False Declaration of Mah Jongg by Two Players"
-msgstr ""
-
-#: src/predefined.py:359
-msgid "False Declaration of Mah Jongg by Three Players"
-msgstr ""
-
-#: src/predefined.py:362 src/predefined.py:447 src/predefined.py:559
-msgid "False Naming of Discard, Claimed for Mah Jongg"
-msgstr ""
-
-#: src/predefined.py:371
-msgid "Classical Chinese BMJA"
-msgstr ""
-
-#: src/predefined.py:377
-msgid "Classical Chinese as defined by the British Mah-Jong Association"
-msgstr ""
-
-#: src/predefined.py:392 src/predefined.py:532
-msgid "Original Call"
-msgstr ""
-
-#: src/predefined.py:396
-msgid "Gates of Heaven"
-msgstr ""
-
-#: src/predefined.py:397
-msgid ""
-"All tiles concealed of same color: Values 1112345678999 with one pair from 2 "
-"to 8 (last tile from wall or discarded)"
-msgstr ""
-
-#: src/predefined.py:400
-msgid "Wriggling Snake"
-msgstr ""
-
-#: src/predefined.py:401
-msgid ""
-"Pair of 1s and a run from 2 to 9 in the same suit with each of the winds"
-msgstr ""
-
-#: src/predefined.py:403
-msgid "Triple Knitting"
-msgstr ""
-
-#: src/predefined.py:404
-msgid ""
-"Four sets of three tiles in the different suits and a pair: No Winds or "
-"Dragons"
-msgstr ""
-
-#: src/predefined.py:405
-msgid "Knitting"
-msgstr ""
-
-#: src/predefined.py:406
-msgid "7 pairs of tiles in any 2 out of 3 suits; no Winds or Dragons"
-msgstr ""
-
-#: src/predefined.py:408
-msgid "All pair honors"
-msgstr ""
-
-#: src/predefined.py:409
-msgid "7 pairs of 1s/9s/Winds/Dragons"
-msgstr ""
-
-#: src/predefined.py:412 src/predefined.py:536
-msgid "Own Flower"
-msgstr ""
-
-#: src/predefined.py:413 src/predefined.py:537
-msgid "Own Season"
-msgstr ""
-
-#: src/predefined.py:425
-msgid "Buried Treasure"
-msgstr ""
-
-#: src/predefined.py:426
-msgid "Concealed pungs of one suit with winds/dragons and a pair"
-msgstr ""
-
-#: src/predefined.py:427 src/predefined.py:548
-msgid "Purity"
-msgstr ""
-
-#: src/predefined.py:428 src/predefined.py:549
-msgid "Only same-colored tiles (no chows, dragons or winds)"
-msgstr ""
-
-#: src/predefined.py:431
-msgid "3 Pungs or Kongs of dragons plus any pung/kong and a pair"
-msgstr ""
-
-#: src/predefined.py:434
-msgid "The 13 Unique Wonders"
-msgstr ""
-
-#: src/predefined.py:441 src/predefined.py:553
-msgid "False Naming of Discard, Claimed for Chow/Pung/Kong"
-msgstr ""
-
-#: src/predefined.py:451
-msgid "Calling for Only Honors"
-msgstr ""
-
-#: src/predefined.py:455
-msgid "Calling for Wriggling Snake"
-msgstr ""
-
-#: src/predefined.py:459
-msgid "Calling for Triple Knitting"
-msgstr ""
-
-#: src/predefined.py:463
-msgid "Calling for Gates of Heaven"
-msgstr ""
-
-#: src/predefined.py:466
-msgid "Calling for Knitting"
-msgstr ""
-
-#: src/predefined.py:470
-msgid "Calling for Imperial Jade"
-msgstr ""
-
-#: src/predefined.py:474
-msgid "Calling for The 13 Unique Wonders"
-msgstr ""
-
-#: src/predefined.py:477
-msgid "Calling for Three Great Scholars"
-msgstr ""
-
-#: src/predefined.py:480
-msgid "Calling for All pair honors"
-msgstr ""
-
-#: src/predefined.py:484
-msgid "Calling for Heads and Tails"
-msgstr ""
-
-#: src/predefined.py:488
-msgid "Calling for Four Blessings Hovering over the Door"
-msgstr ""
-
-#: src/predefined.py:491
-msgid "Calling for Buried Treasure"
-msgstr ""
-
-#: src/predefined.py:495
-msgid "Calling for Fourfold Plenty"
-msgstr ""
-
-#: src/predefined.py:499
-msgid "Calling for Purity"
-msgstr ""
-
-#: src/predefined.py:509
-msgid "Taiwanese 16-tile game, FOR DEVELOPERS"
-msgstr ""
-
-#: src/predefined.py:515
-msgid ""
-"Taiwanese 16-Tiles Mah Jongg, early alpha. See https://bugs.kde.org/show_bug."
-"cgi?id=298821"
-msgstr ""
-
-#: src/query.py:197
-#, fuzzy
-#| msgid "&Score Table"
-msgctxt "kajongg name for local game server"
-msgid "Local Game"
-msgstr "スコア表(&S)"
-
-#: src/query.py:430
-msgid "Database %1 updated from schema %2 to %3"
-msgstr ""
-
-#: src/rule.py:49 src/scoringdialog.py:703 src/scoringdialog.py:782
-msgid "points"
-msgstr ""
-
-#: src/rule.py:50
-msgctxt "kajongg"
-msgid "doubles"
-msgstr ""
-
-#: src/rule.py:51
-#, fuzzy
-#| msgid "Upper limit"
-msgctxt "kajongg"
-msgid "limits"
-msgstr "上限"
-
-#: src/rule.py:91
-msgctxt "Kajongg"
-msgid "%1 points"
-msgstr "%1 符"
-
-#: src/rule.py:93
-msgctxt "Kajongg"
-msgid "%1 doubles"
-msgstr ""
-
-#: src/rule.py:98
-#, fuzzy
-#| msgid "Upper limit"
-msgctxt "Kajongg"
-msgid "%1 limits"
-msgstr "上限"
-
-#: src/rule.py:366
-msgid "Meld Rules"
-msgstr ""
-
-#: src/rule.py:367
-msgid ""
-"Meld rules are applied to single melds independent of the rest of the hand"
-msgstr ""
-
-#: src/rule.py:368
-msgid "Hand Rules"
-msgstr ""
-
-#: src/rule.py:369
-msgid "Hand rules are applied to the entire hand, for all players"
-msgstr ""
-
-#: src/rule.py:370
-msgid "Winner Rules"
-msgstr ""
-
-#: src/rule.py:371
-msgid "Winner rules are applied to the entire hand but only for the winner"
-msgstr ""
-
-#: src/rule.py:372
-msgid "Loser Rules"
-msgstr ""
-
-#: src/rule.py:373
-msgid "Loser rules are applied to the entire hand but only for non-winners"
-msgstr ""
-
-#: src/rule.py:374
-msgid "Mah Jongg Rules"
-msgstr ""
-
-#: src/rule.py:375
-msgid "Only hands matching a Mah Jongg rule can win"
-msgstr ""
-
-#: src/rule.py:376
-msgctxt "kajongg"
-msgid "Options"
-msgstr ""
-
-#: src/rule.py:377
-msgid "Here we have several special game related options"
-msgstr ""
-
-#: src/rule.py:378
-#, fuzzy
-#| msgid "Properties"
-msgid "Penalties"
-msgstr "プロパティ"
-
-#: src/rule.py:379
-msgid ""
-"Penalties are applied manually by the user. They are only used for scoring "
-"games.\n"
-"When playing against the computer or over the net, Kajongg will never let "
-"you get\n"
-"into a situation where you have to pay a penalty"
-msgstr ""
-
-#: src/rule.py:579
-msgctxt "Ruleset._newKey:%1 is empty or space plus number"
-msgid "Copy%1 of %2"
-msgstr ""
-
-#: src/rule.py:935
-msgctxt "%1 can be a sentence"
-msgid "%4 have impossible values %2/%3 in rule \"%1\""
-msgstr ""
-
-#: src/rule.py:1023
-msgctxt "wrong value for rule"
-msgid "%1: %2 is too small, minimal value is %3"
-msgstr ""
-
-#: src/rulesetselector.py:511
-msgctxt "@title:window"
-msgid "Customize rulesets"
-msgstr ""
-
-#: src/rulesetselector.py:530
-msgctxt "kajongg"
-msgid "Rule"
-msgstr ""
-
-#: src/rulesetselector.py:592
-msgid "C&opy"
-msgstr ""
-
-#: src/rulesetselector.py:593
-msgctxt "Kajongg ruleset comparer"
-msgid "Co&mpare"
-msgstr ""
-
-#: src/rulesetselector.py:594
-msgid "&Remove"
-msgstr ""
-
-#: src/rulesetselector.py:595
-msgid "&Close"
-msgstr ""
-
-#: src/scene.py:389 src/scene.py:517
-msgid "Do you really want to abort this game?"
-msgstr "本当にこのゲームを中止しますか?"
-
-#: src/scoring.py:60
-msgctxt "@title:window"
-msgid "Swap Seats"
-msgstr ""
-
-#: src/scoring.py:62
-msgid "By the rules, %1 and %2 should now exchange their seats. "
-msgstr ""
-
-#: src/scoring.py:64
-msgid "&Exchange"
-msgstr ""
-
-#: src/scoring.py:66
-msgid "&Keep seat"
-msgstr ""
-
-#: src/scoring.py:85
-msgctxt "@title:window"
-msgid "Select four players"
-msgstr ""
-
-#: src/scoring.py:360
-msgid "Move Exposed Tiles Here"
-msgstr ""
-
-#: src/scoring.py:361
-msgid "Move Concealed Tiles Here"
-msgstr ""
-
-#: src/scoring.py:673
-msgid "Please define four players in <interface>Settings|Players</interface>"
-msgstr ""
-
-#: src/scoringdialog.py:258
-msgid "Round/Hand"
-msgstr ""
-
-#: src/scoringdialog.py:299 src/scoringdialog.py:834
-msgctxt "kajongg"
-msgid "Score"
-msgstr "スコア"
-
-#: src/scoringdialog.py:299
-#, fuzzy
-#| msgid "Players"
-msgctxt "kajongg"
-msgid "Payments"
-msgstr "プレイヤー"
-
-#: src/scoringdialog.py:300
-msgctxt "kajongg"
-msgid "Balance"
-msgstr ""
-
-#: src/scoringdialog.py:300
-msgctxt "kajongg"
-msgid "Chart"
-msgstr ""
-
-#: src/scoringdialog.py:410
-msgctxt "kajongg"
-msgid "Scores"
-msgstr "スコア"
-
-#: src/scoringdialog.py:452
-msgctxt "kajongg"
-msgid "Used Rules"
-msgstr ""
-
-#: src/scoringdialog.py:487
-msgid "Final scores for game <numid>%1</numid>"
-msgstr ""
-
-#: src/scoringdialog.py:489
-msgid "Scores for game <numid>%1</numid>"
-msgstr ""
-
-#: src/scoringdialog.py:569
-#, fuzzy
-#| msgid "Explain Scores"
-msgctxt "@title:window"
-msgid "Explain Scores"
-msgstr "スコアの説明"
-
-#: src/scoringdialog.py:585
-msgid "There is no active game"
-msgstr ""
-
-#: src/scoringdialog.py:588
-msgid "%1"
-msgstr ""
-
-#: src/scoringdialog.py:602
-msgid "Manual score for %1: %2 points"
-msgstr ""
-
-#: src/scoringdialog.py:689
-#, fuzzy
-#| msgid "Properties"
-msgid "Penalty"
-msgstr "プロパティ"
-
-#: src/scoringdialog.py:692
-msgid "Offense:"
-msgstr ""
-
-#: src/scoringdialog.py:699
-#, fuzzy
-#| msgid "Properties"
-msgid "Total Penalty"
-msgstr "プロパティ"
-
-#: src/scoringdialog.py:727
-msgid "&Execute"
-msgstr ""
-
-#: src/scoringdialog.py:805
-#, fuzzy
-#| msgctxt "Kajongg"
-#| msgid "%1 points"
-msgctxt "penalty dialog, appears behind paying player combobox"
-msgid "pays %1 points"
-msgstr "%1 符"
-
-#: src/scoringdialog.py:810
-#, fuzzy
-#| msgctxt "Kajongg"
-#| msgid "%1 points"
-msgctxt "penalty dialog, appears behind profiting player combobox"
-msgid "gets %1 points"
-msgstr "%1 符"
-
-#: src/scoringdialog.py:821
-msgctxt "@title:window"
-msgid "Scoring for this Hand"
-msgstr ""
-
-#: src/scoringdialog.py:832
-msgctxt "kajongg"
-msgid "Player"
-msgstr "プレイヤー"
-
-#: src/scoringdialog.py:833
-msgctxt "kajongg"
-msgid "Wind"
-msgstr ""
-
-#: src/scoringdialog.py:835
-msgid "Winner"
-msgstr ""
-
-#: src/scoringdialog.py:841
-msgctxt "kajongg"
-msgid "Draw"
-msgstr "引き分け"
-
-#: src/scoringdialog.py:843
-#, fuzzy
-#| msgid "Properties"
-msgid "&Penalties"
-msgstr "プロパティ"
-
-#: src/scoringdialog.py:845
-#, fuzzy
-#| msgid "&New hand"
-msgid "&Save Hand"
-msgstr "新しい手(&N)"
-
-#: src/scoringdialog.py:867
-msgid "&Last Tile:"
-msgstr ""
-
-#: src/scoringdialog.py:876
-msgid "L&ast Meld:"
-msgstr ""
-
-#: src/server.py:122
-msgid "Wrong password"
-msgstr ""
-
-#: src/server.py:218
-msgid "table with id <numid>%1</numid> not found"
-msgstr ""
-
-#: src/server.py:366
-msgid "Player %1 has logged out"
-msgstr ""
-
-#: src/server.py:436
-msgid "the server will listen on PORT ({int(defaultPort)})"
-msgstr ""
-
-#: src/server.py:439
-msgid "the server will listen on SOCKET"
-msgstr ""
-
-#: src/server.py:443
-msgid "name of the database"
-msgstr ""
-
-#: src/server.py:447
-msgid "do not terminate local game server after last client disconnects"
-msgstr ""
-
-#: src/servertable.py:181
-msgid "You already joined this table"
-msgstr ""
-
-#: src/servertable.py:183
-msgid "All seats are already taken"
-msgstr ""
-
-#: src/servertable.py:188
-msgid "takes a seat"
-msgstr ""
-
-#: src/servertable.py:196
-msgid "leaves the table"
-msgstr ""
-
-#: src/servertable.py:242
-msgctxt "kajongg, name of robot player, to be translated"
-msgid "Robot 1"
-msgstr ""
-
-#: src/servertable.py:245
-msgctxt "kajongg, name of robot player, to be translated"
-msgid "Robot 2"
-msgstr ""
-
-#: src/servertable.py:246
-msgctxt "kajongg, name of robot player, to be translated"
-msgid "Robot 3"
-msgstr ""
-
-#: src/servertable.py:302
-msgid "Only the initiator %1 can start this game, you are %2"
-msgstr ""
-
-#: src/servertable.py:701
-msgid "Game <numid>%1</numid> is over!"
-msgstr ""
-
-#: src/servertable.py:730
-msgid "%1 wrongly said %2 for meld %3"
-msgstr ""
-
-#: src/servertable.py:735
-msgid "%1 wrongly said %2: claims to have concealed tiles %3 but only has %4"
-msgstr ""
-
-#: src/servertable.py:772
-msgid "declareKong:%1 wrongly said Kong for meld %2"
-msgstr ""
-
-#: src/servertable.py:821
-msgid "%1 claiming MahJongg: This is not a winning hand: %2"
-msgstr ""
-
-#: src/sound.py:70
-msgid "No voices will be heard because the program %1 is missing"
-msgstr ""
-
-#: src/sound.py:375
-#, fuzzy
-#| msgid "file <filename>%1</filename> contains no valid SVG"
-msgid "cannot write <filename>%1</filename>: %2"
-msgstr "ファイル <filename>%1</filename> には有効な SVG が含まれていません"
-
-#: src/sound.py:378
-msgid "The voice files have changed, their checksum has changed."
-msgstr ""
-
-#: src/sound.py:379
-msgid "Please reinstall kajongg or do, with sufficient permissions:"
-msgstr ""
-
-#: src/tables.py:65
-msgid "Table"
-msgstr "雀卓"
-
-#: src/tables.py:69
-msgctxt "table status"
-msgid "Status"
-msgstr ""
-
-#: src/tables.py:70
-msgid "Ruleset"
-msgstr ""
-
-#: src/tables.py:149
-msgid "Select a ruleset"
-msgstr ""
-
-#: src/tables.py:186
-#, fuzzy
-#| msgid "&New"
-msgctxt "allocate a new table"
-msgid "&New"
-msgstr "新規(&N)"
-
-#: src/tables.py:187 src/tables.py:331 src/tables.py:363
-msgid "Allocate a new table"
-msgstr ""
-
-#: src/tables.py:193 src/tables.py:332 src/tables.py:364
-#, fuzzy
-#| msgid "Score"
-msgid "&Join"
-msgstr "スコア"
-
-#: src/tables.py:194 src/tables.py:333 src/tables.py:365
-msgid "Join a table"
-msgstr ""
-
-#: src/tables.py:200
-#, fuzzy
-#| msgid "&Game"
-msgid "&Leave"
-msgstr "ゲーム(&G)"
-
-#: src/tables.py:201
-msgid "Leave a table"
-msgstr ""
-
-#: src/tables.py:207
-msgctxt "Kajongg-Ruleset"
-msgid "Compare"
-msgstr ""
-
-#: src/tables.py:208
-msgid "Compare the rules of this table with my own rulesets"
-msgstr ""
-
-#: src/tables.py:214
-msgid "&Chat"
-msgstr ""
-
-#: src/tables.py:221
-msgid "&Start"
-msgstr ""
-
-#: src/tables.py:222
-msgid "Start playing on a table. Empty seats will be taken by robot players."
-msgstr ""
-
-#: src/tables.py:281
-msgid "opens a chat window"
-msgstr ""
-
-#: src/tables.py:300
-msgid "Local Games with Ruleset %1"
-msgstr ""
-
-#: src/tables.py:304
-msgid "Tables at %1"
-msgstr ""
-
-#: src/tables.py:357
-msgid "Start a new game"
-msgstr ""
-
-#: src/tables.py:359
-msgctxt "resuming a local suspended game"
-msgid "&Resume"
-msgstr ""
-
-#: src/tables.py:361
-msgid "Resume the selected suspended game"
-msgstr ""
-
-#: src/tables.py:379
-msgid "Chat with others on this table"
-msgstr ""
-
-#: src/tables.py:382
-msgid "For chatting with others on this table, please first take a seat"
-msgstr ""
-
-#: src/tile.py:277
-msgctxt "kajongg"
-msgid "hidden"
-msgstr ""
-
-#: src/tile.py:278
-msgctxt "kajongg"
-msgid "stone"
-msgstr ""
-
-#: src/tile.py:279
-msgctxt "kajongg"
-msgid "bamboo"
-msgstr ""
-
-#: src/tile.py:280
-msgctxt "kajongg"
-msgid "character"
-msgstr ""
-
-#: src/tile.py:281
-msgctxt "kajongg"
-msgid "wind"
-msgstr ""
-
-#: src/tile.py:282
-msgctxt "kajongg"
-msgid "dragon"
-msgstr ""
-
-#: src/tile.py:283
-msgctxt "kajongg"
-msgid "flower"
-msgstr ""
-
-#: src/tile.py:284
-msgctxt "kajongg"
-msgid "season"
-msgstr ""
-
-#: src/tile.py:290
-msgctxt "kajongg"
-msgid "tile"
-msgstr "牌"
-
-#: src/tile.py:291
-msgctxt "kajongg"
-msgid "white"
-msgstr ""
-
-#: src/tile.py:292
-msgctxt "kajongg"
-msgid "red"
-msgstr ""
-
-#: src/tile.py:293
-msgctxt "kajongg"
-msgid "green"
-msgstr ""
-
-#: src/tile.py:294
-msgctxt "kajongg"
-msgid "East"
-msgstr ""
-
-#: src/tile.py:295
-msgctxt "kajongg"
-msgid "South"
-msgstr ""
-
-#: src/tile.py:296
-msgctxt "kajongg"
-msgid "West"
-msgstr ""
-
-#: src/tile.py:297
-msgctxt "kajongg"
-msgid "North"
-msgstr ""
-
-#: src/tile.py:306
-msgid "East Wind"
-msgstr ""
-
-#: src/tile.py:307
-msgid "South Wind"
-msgstr ""
-
-#: src/tile.py:308
-msgid "West Wind"
-msgstr ""
-
-#: src/tile.py:309
-msgid "North Wind"
-msgstr ""
-
-#: src/tile.py:311
-#, python-brace-format
-msgctxt "kajongg tile name"
-msgid "{group} {value}"
-msgstr ""
-
-#: src/tile.py:880
-msgctxt "kajongg meld type"
-msgid "Bonus"
-msgstr ""
-
-#: src/tile.py:882
-msgctxt "kajongg meld type"
-msgid "&single"
-msgstr ""
-
-#: src/tile.py:884
-msgctxt "kajongg meld type"
-msgid "&pair"
-msgstr ""
-
-#: src/tile.py:886
-msgctxt "kajongg meld type"
-msgid "&chow"
-msgstr ""
-
-#: src/tile.py:888
-msgctxt "kajongg meld type"
-msgid "p&ung"
-msgstr "ポン(&U)"
-
-#: src/tile.py:890
-msgctxt "kajongg meld type"
-msgid "c&laimed kong"
-msgstr ""
-
-#: src/tile.py:892
-msgctxt "kajongg meld type"
-msgid "k&ong"
-msgstr "カン(&O)"
-
-#: src/tile.py:893
-msgctxt "kajongg meld type"
-msgid "rest of tiles"
-msgstr ""
-
-#: src/tile.py:900
-msgctxt "kajongg meld state"
-msgid "Exposed"
-msgstr ""
-
-#: src/tile.py:901
-msgctxt "kajongg meld state"
-msgid "Concealed"
-msgstr ""
-
-#: src/tile.py:907
-#, python-brace-format
-msgctxt "kajongg meld name, do not translate parameter names"
-msgid "{state} {meldType} {name}"
-msgstr ""
-
-#: src/tilesetselector.py:141
-#, fuzzy
-#| msgid "Preview"
-msgctxt "TilesetSelector"
-msgid "Preview"
-msgstr "プレビュー"
-
-#: src/tilesetselector.py:142
-#, fuzzy
-#| msgid "Properties"
-msgctxt "TilesetSelector"
-msgid "Properties"
-msgstr "プロパティ"
-
-#: src/tilesetselector.py:143
-#, fuzzy
-#| msgid "Author:"
-msgctxt "TilesetSelector"
-msgid "Author:"
-msgstr "作者:"
-
-#: src/tilesetselector.py:144
-#, fuzzy
-#| msgid "Contact:"
-msgctxt "TilesetSelector"
-msgid "Contact:"
-msgstr "連絡先:"
-
-#: src/tilesetselector.py:145
-#, fuzzy
-#| msgid "Description:"
-msgctxt "TilesetSelector"
-msgid "Description:"
-msgstr "説明:"
-
-#: src/user.py:94
-msgid ""
-"Your client has a version older than 4.9.0 but you need %1 for this server"
-msgstr ""
-
-#: src/user.py:98
-msgid "Your client has version %1 but you need %2 for this server"
-msgstr ""

先頭行を削除、お尻に 2つの空行を追加

→Ctrl+S で保存:

-


5). フォルダの同期:

$ sudo rm a/po/ja/kajongg.po

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----

63. 「パッチ3」(新規のPO ファイルを翻訳)の作成:

-

追記:

こちらの「POT ファイル」の抽出のやり方がスマートでなかったので、

次の「項番 64.」で「POT ファイル」の作成をやり直してます:

-

項番 4.」はこちら:

項番 60.」はこちら:

-


1). 差分を作成するためのフォルダを確認:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/

-

$ ls -p
:
01.kajongg.desktop.patch   a/                   new-kajongg.pot
02.kajongg.po-del.patch    b/                   org.kde.kajongg.appdata.xml
CMakeLists.txt             bash_completion.d/   org.kde.kajongg.desktop
CMakePresets.json.license  cmake-modules/       po/
COPYING.DOC                debian.control       setup.cfg
LICENSE                    doc/                 setup.py
MANIFEST.in                git-pre-commit       snapcraft.yaml
Messages.sh                icons/               src/
README                     jp-kajongg.po        voices/
README.packagers           logo.png
README.windows             make_debian_package

-

$ ls -p | grep po
:
02.kajongg.po-del.patch
jp-kajongg.po
new-kajongg.pot
po/

-

フォルダの作成:

$ mkdir -p a/po/ja/
$ mkdir -p b/po/ja/

-

確認:

$ ls a/po/ja/
$

→OK

-

$ ls b/po/ja/
$

→OK

-


2). b フォルダに、新規の PO ファイルをコピー:

確認:

$ ls po/ja/
:
kajongg.po

-

コピー:

$ cp jp-kajongg.po b/po/ja/kajongg.po

確認:

$ ls b/po/ja/
:
kajongg.po

-


3). 新規の PO ファイルを翻訳:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ sudo featherpad b/po/ja/kajongg.po

↓ すべて貼付け:

# Japanese translations for @kajongg package.
# Copyright (C) 2026 THE @kajongg'S COPYRIGHT HOLDER
# This file is distributed under the same license as the @kajongg package.
# Automatically generated, 2026.
#
msgid ""
msgstr ""
"Project-Id-Version: @kajongg 25.12.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-02-12 18:02+0900\n"
"PO-Revision-Date: 2026-02-12 18:02+0900\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: src/background.py:71 src/tileset.py:48
msgid "file <filename>%1</filename> contains no valid SVG"
msgstr "<filename>%1</filename> ファイル には有効な SVG が含まれていません"

#: src/backgroundselector.py:107, 108, 109,110, 111
msgid "BackgroundSelector"
msgstr ""

#: src/backgroundselector.py:107, 108, 109,110, 111
msgid "Preview"
msgstr "表示"

#: src/board.py:334
msgid "kajongg:arrow keys hjkl like in konqueror"
msgstr "kajongg:konqueror のような矢印キー hjkl"

#: src/board.py:334
msgid "hjklHJKL"
msgstr ""

#: src/board.py:385
msgid "Choose from"
msgstr "選択"

#: src/chat.py:51
msgid "Time"
msgstr "時間"

#: src/chat.py:51 src/playerlist.py:90
msgid "Player"
msgstr "プレイヤー"

#: src/chat.py:51
msgid "Message"
msgstr "メッセージ"

#: src/chat.py:125
msgid "Chat on table %1 at %2"
msgstr "テーブル %1、%2 でチャット"

#: src/client.py:69 src/client.py:74 src/client.py:75 src/tables.py:68
msgid "table status"
msgstr "テーブルの状態"

#: 上部のコメント行と同じ:
msgid "Suspended"
msgstr "一時停止中"

#: src/configdialog.py:47
msgid "Show tile shadows"
msgstr "牌の影を表示"

#: src/configdialog.py:50
msgid "Rearrange undisclosed tiles to melds"
msgstr "未公開の牌をメルドに再配置"

#: src/configdialog.py:53
msgid "Show only possible actions"
msgstr "可能なアクションのみを表示"

#: src/configdialog.py:56
msgid "Propose what to do"
msgstr "何をすべきかを提案"

#: src/configdialog.py:62
msgid "Animation speed:"
msgstr "アニメーション速度:"

#: src/configdialog.py:66
msgid "Use sounds if available"
msgstr "利用可能な場合はサウンドを使用"

#: src/configdialog.py:69
msgid "Let others hear my voice"
msgstr "他の人に私の声を聞いてもらいます"

#: src/configdialog.py:103 src/kdestub.py:1071 src/login.py:251, 308
#: src/message.py:280, 299, 344, 378, 401, 447, 675, 819, 834, 896, 909
#: src/rule.py:50, 51, 376 src/rulesetselector.py:529
#: src/scoringdialog.py:299, 300, 410, 452, 832, 833, 834, 841
#: src/tile.py:277, 278, 279, 280, 281, 282, 283, 284, 290, 291, 292, 293, 294, 295, 296, 297
msgid "kajongg"
msgstr ""

#: 上部のコメント行と同じ:
msgid "Play"
msgstr "プレイ"

#: src/configdialog.py:106
msgid "Tiles"
msgstr ""

#: src/configdialog.py:109
msgid "Backgrounds"
msgstr "背景"

#: src/deferredutil.py:272 src/deferredutil.py:436
msgid "The game server lost connection to player %1"
msgstr "ゲームサーバーはプレーヤー %1 への接続を失いました"

#: src/deferredutil.py:275
msgid ""
"Error for player %1: %2\n"
"%3"
msgstr ""
"プレイヤー %1 のエラー: %2\n"
"%3"

#: src/differ.py:72 src/guiutil.py:134 src/kdestub.py:120, 123
#: src/rule.py:91, 93, 98
msgid "Kajongg"
msgstr ""

#: src/differ.py:72 src/guiutil.py:134 src/kdestub.py:120, 123
#: src/rule.py:91, 93, 98
msgid "Rule"
msgstr "ルール"

#: src/differ.py:127 src/games.py:107 src/login.py:400
#: src/rulesetselector.py:511 src/scoring.py:60, 85, 569, 821
msgid "@title:window"
msgstr ""

#: src/differ.py:127 src/games.py:107 src/login.py:400
#: src/rulesetselector.py:511 src/scoring.py:60, 85, 569, 821
msgid "Compare"
msgstr "比較"

#: src/differ.py:170 src/differ.py:172
msgid "Kajongg-Rule"
msgstr "Kajongg-ルール"

#: src/differ.py:170 src/differ.py:172
msgid "not defined"
msgstr "定義されていません"

#: src/game.py:404
msgid "Score computed manually"
msgstr "スコアは手動で計算されます"

#: src/game.py:502
msgid "Player %1 not known"
msgstr "プレイヤー %1 は不明です"

#: src/game.py:925
msgid "Short living wall: Tile is invisible, hence dangerous"
msgstr "寿命が短い壁: 牌は目に見えないため危険です"

#: src/games.py:95 src/playerlist.py:67 src/tables.py:67
msgid "Players"
msgstr "プレイヤー"

#: src/games.py:95
msgid "Started"
msgstr "開始"

#: src/games.py:124
msgid "start a new game"
msgstr "新しいゲームを開始"

#: src/games.py:124
msgid "&New"
msgstr "新規(&N)"

#: src/games.py:129
msgid "&Load"
msgstr "ロード(&L)"

#: src/games.py:134 src/playerlist.py:56
msgid "&Delete"
msgstr "削除(&D)"

#: src/games.py:139
msgid "Show only pending games"
msgstr "保留中のゲームのみを表示"

#: src/games.py:247
msgid ""
"Do you really want to delete <numid>%1</numid> games?<br>This will be final, "
"you cannot cancel it with the cancel button"
msgstr ""
"本当に <numid>%1</numid> 個のゲームを削除しますか?<br>"
"これは最終的な削除であり、キャンセルボタンでキャンセルすることはできません"

#: src/humanclient.py:66
msgid "Which chow do you want to expose?"
msgstr "どのレシピを公開したいですか?"

#: src/humanclient.py:104
msgid "Which kong do you want to declare?"
msgstr "どのカンを宣言しますか?"

#: src/humanclient.py:172
msgid "Choose"
msgstr "選択"

#: src/humanclient.py:383
msgid "You cannot say %1"
msgstr "%1 とは宣言できません"

#: src/humanclient.py:608
msgid "Player %1 has left the table"
msgstr "プレイヤー %1 がテーブルから退席しました"

#: src/humanclient.py:671
msgid ""
"The game on table <numid>%1</numid> can begin. Are you ready to play now?"
msgstr ""
"テーブル <numid>%1</numid> でゲームを開始できます。今すぐプレイする準備はできていますか?"

#: src/humanclient.py:691
msgid "Ready for next hand?"
msgstr "次の役の準備はできていますか?"

#: src/humanclient.py:967
msgid "The connection to the server %1 broke, please try again later."
msgstr "サーバー %1 への接続が切断されました。後でもう一度試してください。"

#: src/kajongg.py:81 src/kdestub.py:1092
msgid "Mah Jongg - the ancient Chinese board game for 4 players"
msgstr "Mah Jongg - 古代中国の 4 人用ボード ゲーム"

#: src/kajongg.py:85
msgid "all robots play with visible concealed tiles"
msgstr "すべてのロボットは目に見える非公開の牌でプレイします"

#: src/kajongg.py:86
msgid "start with demo mode"
msgstr "デモモードから開始"

#: src/kajongg.py:87
msgid "login to HOST"
msgstr "ホストにログイン"

#: src/kajongg.py:88
msgid "start new TABLE"
msgstr "新しいテーブルを開始"

#: src/kajongg.py:89
msgid "join TABLE"
msgstr "テーブルに参加"

#: src/kajongg.py:90
msgid "use RULESET without asking"
msgstr "何も尋ねずにルールセットを使用"

#: src/kajongg.py:91
msgid "prefer PLAYER for next login"
msgstr "次回のログインでは プレーヤー を優先します"

#: src/kajongg.py:92
msgid "use AI variant for human player in demo mode"
msgstr "デモモードで人間のプレイヤーに AI バリアントを使用"

#: src/kajongg.py:93
msgid "write statistics to CSV"
msgstr "統計情報を CSV に書き込む"

#: src/kajongg.py:94
msgid "show all available rulesets"
msgstr "利用可能なすべてのルールセットを表示"

#: src/kajongg.py:95
msgid "for testing purposes: Initializes the random generator"
msgstr "テスト目的: ランダムジェネレーターを初期化"

#: src/kajongg.py:97
msgid "show no graphical user interface. Intended only for testing"
msgstr "グラフィカル ユーザー インターフェイスは表示されません。テストのみを目的としています"

#: src/kajongg.py:99
msgid ""
"use a dedicated server already running and listening on SOCKET. Intended "
"only for testing"
msgstr ""
"すでに稼働しSOCKETをリッスン(接続要求の待ち)している専用サーバーを"
"使用します。テストのみを目的としています。"

#: src/kajongg.py:101
msgid ""
"use a dedicated server already running and listening on PORT. Intended only "
"for testing"
msgstr ""
"すでに稼働中でPORTをリッスン(接続要求の待ち)している専用サーバーを使用してください。"
"テスト専用です。"

#: src/kdestub.py:278
msgid "&OK"
msgstr "OK(&O)"

#: src/kdestub.py:279
msgid "&Apply"
msgstr "適用(&A)"

#: src/kdestub.py:280
msgid "&Cancel"
msgstr "キャンセル(&C)"

#: src/kdestub.py:281 src/kdestub.py:469
msgid "&Help"
msgstr "ヘルプ(&H)"

#: src/kdestub.py:282
msgid "&Defaults"
msgstr "デフォルト(&D)"

#: src/kdestub.py:352, 358, 477, 484
#: src/mainwindow.py:486, 498, 504, 518, 526, 536, 541
msgctxt "kajongg @action:inmenu"

#: src/kdestub.py:352, 358, 477, 484
#: src/mainwindow.py:486, 498, 504, 518, 526, 536, 541
msgid "Show St&atusbar"
msgstr "ステータスバーを表示(&a)"

#: src/kdestub.py:364
msgid "Configure Tool&bars..."
msgstr "ツールバーを設定..."

#: src/kdestub.py:366
msgid "Configure toolbars"
msgstr "ツールバーの設定"

#: src/kdestub.py:373
msgid "Configure &Kajongg..."
msgstr "Kajongg の設定...(&K)"

#: src/kdestub.py:375 src/kdestub.py:1153
msgid "Configure"
msgstr "設定"

#: src/kdestub.py:465
msgid "&Game"
msgstr "ゲーム(&G)"

#: src/kdestub.py:466
msgid "&View"
msgstr "表示(&V)"

#: src/kdestub.py:467
msgid "&Settings"
msgstr "設定(&S)"

#: src/kdestub.py:480 src/kdestub.py:857
msgid "Switch Application Language"
msgstr "アプリケーション言語を切り替え"

#: src/kdestub.py:862
msgid "Please choose the language which should be used for this application:"
msgstr "このアプリケーションに使用する言語を選択してください:"

#: src/kdestub.py:881
msgid "Add Fallback Language"
msgstr "フォールバック(代替え時に使われる)言語の追加"

#: src/kdestub.py:893
msgid "Primary language:"
msgstr "主な言語:"

#: src/kdestub.py:893
msgid "Fallback language:"
msgstr "フォールバック(代替え時に使われる)言語:"

#: src/kdestub.py:899
msgid "Remove"
msgstr "削除"

#: src/kdestub.py:903
msgid ""
"This is the main application language which will be used first, before any "
"other languages."
msgstr ""
"これは、他の言語よりも先に最初に使用されるメインのアプリケーション言語です。"

#: src/kdestub.py:905
msgid ""
"This is the language which will be used if any previous languages do not "
"contain a proper translation."
msgstr ""
"前の言語に適切な翻訳が含まれていない場合に使用される言語です。"

#: src/kdestub.py:1035
msgid "About Kajongg"
msgstr "Kajongg について"

#: src/kdestub.py:1055
msgid "Version: %1"
msgstr "バージョン: %1"

#: src/kdestub.py:1056
msgid "Protocol version %1"
msgstr "プロトコルバージョン %1"

#: src/kdestub.py:1059
msgid "Original author"
msgstr "原作者"

#: src/kdestub.py:1066
msgid "KDE Frameworks (not installed or not usable)"
msgstr "KDE フレームワーク (インストールされていないか、使用できません)"

#: src/kdestub.py:1093
msgid ""
"This is the classical Mah Jongg for four players. If you are looking for Mah "
"Jongg solitaire please use the application kmahjongg."
msgstr ""
"これは 4人用のクラシックな麻雀です。麻雀ソリティアをお探しの方は、"
"kmahjongg アプリをご利用ください。"

#: src/kdestub.py:1110
msgid ""
"Please use <a href=\"https://bugs.kde.org\">https://bugs.kde.org</a> to "
"report bugs."
msgstr ""
"不具合を報告するには、<a href=\"https://bugs.kde.org\">https://bugs.kde.org</a> "
"を使用してください。"

#: src/kdestub.py:1115
msgid "Authors:"
msgstr "作者:"

#: src/kdestub.py:1356
msgid "Configure Toolbars"
msgstr "ツールバーの設定"

#: src/kdestub.py:1358
msgid "A&vailable actions:"
msgstr "利用可能なアクション(&v):"

#: src/kdestub.py:1369
msgid "Curr&ent actions:"
msgstr "現在のアクション(&e):"

#: src/login.py:177
msgid "trying to start local server %1"
msgstr "ローカルサーバー %1 を起動しようとしています"

#: src/login.py:188 src/login.py:637
msgid "removed stale socket <filename>%1</filename>"
msgstr "古いソケット <filename>%1</filename> を削除しました"

#: src/login.py:208
msgid "started the local kajongg server: pid=<numid>%1</numid> %2"
msgstr "ローカルの kajongg サーバーを開始しました"
": pid=<numid>%1</numid> %2"

#: src/login.py:300 src/login.py:406
msgid "Game server:"
msgstr "ゲームサーバー:"

#: src/login.py:303 src/login.py:408
msgid "Username:"
msgstr "ユーザ名:"

#: src/login.py:306 src/login.py:411
msgid "Password:"
msgstr "パスワード:"

#: src/login.py:414
msgid "Repeat password:"
msgstr "パスワードを再入力:"

#: src/login.py:565
msgid "You are already connected to server %1"
msgstr "すでにサーバー %1 に接続しています"

#: src/login.py:604
msgid "USER is not known on SERVER"
msgstr "ユーザ が サーバー 上で認識されません"

#: 上部のコメント行と同じ:
msgid "%1 is not known on %2, do you want to open an account?"
msgstr "%1 は %2 では不明です。アカウントを開設しますか?"

#: src/login.py:618
msgid "Server %1 did not answer"
msgstr "サーバー %1 が応答しませんでした"

#: src/login.py:620
msgid "Server %1 refused connection"
msgstr "サーバー %1 が接続を拒否しました"

#: src/login.py:622
msgid "Server %1 does not run a kajongg server"
msgstr "サーバー %1 は kajongg サーバーを実行していません"

#: src/login.py:624
msgid "Address for server %1 cannot be found"
msgstr "サーバー %1 のアドレスが見つかりません"

#: src/login.py:627
msgid "Login to server %1 failed: You have no network connection"
msgstr "サーバー %1 へのログインに失敗しました: "
"ネットワーク接続がありません"

#: src/login.py:638
msgid "Please try again"
msgstr "もう一度試してください"

#: src/mainwindow.py:488, 493, 507, 512, 520, 537
msgctxt "kajongg @action:intoolbar"

#: src/mainwindow.py:488, 493, 507, 512, 520, 537
msgid "Manual Game"
msgstr "手動ゲーム"

#: src/mainwindow.py:490, 496, 501, 509, 514, 522, 533, 538, 543, 548
msgid "kajongg @info:tooltip"
msgstr ""

#: src/mainwindow.py:490, 496, 501, 509, 514, 522, 533, 538, 543, 548
msgid "&Score a manual game."
msgstr "手動ゲームでスコアを付けてください。(&S)"

#: src/mainwindow.py:530
msgctxt "kajongg @action:inmenu"

#: src/mainwindow.py:530
msgid "&Score Table"
msgstr "テーブルのスコア(&S)"

#: src/mainwindow.py:532
msgctxt "kajongg @action:intoolbar"

#: src/mainwindow.py:532
msgid "&Scores"
msgstr "スコア(&S)"

#: src/mainwindow.py:546
msgid "C&hat"
msgstr "チャット(&h)"

#: src/message.py:250
msgid "saying %1 violates Original Call"
msgstr "%1 が元の宣言に違反していると言っています"

#: src/message.py:263
msgid ""
"claiming %1 is dangerous because you will have to discard a dangerous tile"
msgstr ""
"リスクがある牌を捨てる必要があるため、%1 の宣言は危険です"

#: src/message.py:268
msgid ""
"claiming %1 for %2 is dangerous because you will have to discard a dangerous "
"tile"
msgstr ""
"%1 を %2 に請求するのは、リスクがある牌を捨てる必要があるため危険です。"

#: src/message.py:271
msgid "You may say %1"
msgstr "%1 と宣言するかもしれません"

#: src/message.py:281
msgid "kajongg game dialog:Key for Pung"
msgstr "kajongg ゲームのダイアログ:「ポン」キー"

#: src/message.py:281
msgid "P"
msgstr ""

#: src/message.py:300
msgid "kajongg game dialog:Key for Kong"
msgstr "kajongg ゲームのダイアログ:「カン」キー"

#: src/message.py:300
msgid "K"
msgstr ""

#: src/message.py:326
msgid "saying Kong for %1 violates Original Call"
msgstr "%1 のカンが元の宣言に違反していると言っています"

#: src/message.py:330
msgid "You may say Kong for %1"
msgstr "%1 の場合はカンと言ってください"

#: src/message.py:345
msgid "kajongg game dialog:Key for Chow"
msgstr "kajongg ゲームのダイアログ:「チー」キー"

#: src/message.py:345
msgid "C"
msgstr ""

#: src/message.py:379
msgid "kajongg game dialog:Key for Mah Jongg"
msgstr "kajongg ゲームのダイアログ:「Mah Jongg」(上がり)キー"

#: src/message.py:379
msgid "M"
msgstr ""

#: src/message.py:387
msgid "Press here and you win"
msgstr "ここを押せば勝ちです"

#: src/message.py:402
msgid "kajongg game dialog:Key for Original Call"
msgstr "kajongg ゲーム ダイアログ:「オリジナル コール」キー"

#: src/message.py:402
msgid "O"
msgstr ""

#: src/message.py:418
msgid "discarding %1 and declaring Original Call makes this hand unwinnable"
msgstr "%1 を捨てて、「オリジナル コール」(最初の捨て牌でテンパイ)を宣言すると、この役は勝てなくなります"

#: src/message.py:422
msgid ""
"Discard a tile, declaring Original Call meaning you need only one tile to "
"complete the hand and will not alter the hand in any way (except bonus tiles)"
msgstr ""
"牌を 1枚捨てて、「オリジナル コール」(最初の捨て牌でテンパイ)を宣言。これは、手札を完成させる"
"には牌が 1枚だけ必要であり、手札を一切変更しないことを意味します"
"(ボーナス牌を除く)"

#: src/message.py:448
msgid "kajongg game dialog:Key for Discard"
msgstr "kajongg ゲーム ダイアログ:「捨てる」キー"

#: src/message.py:448
msgid "D"
msgstr ""

#: src/message.py:465
msgid "discarding %1 violates Original Call"
msgstr "%1 を捨てると元の宣言に違反します"

#: src/message.py:468
msgid "discarding %1 is Dangerous Game"
msgstr "%1 を捨てるのは危険なゲームです"

#: src/message.py:471
msgid "discard the least useful tile"
msgstr "最も役に立たない牌を捨てます"

#: src/message.py:551
msgid "%1 is not ready to start the game"
msgstr "%1 はゲームを開始する準備ができていません"

#: src/message.py:590
msgid "Kajongg <numid>%1</numid>"
msgstr ""

#: src/message.py:897
msgid "kajongg game dialog:Key for OK"
msgstr "kajongg ゲーム ダイアログ:「OK」キー"

#: src/message.py:901
msgid "Confirm that you saw the message"
msgstr "メッセージが表示されたことを確認"

#: src/message.py:910
msgid "kajongg game dialog:Key for No claim"
msgstr "kajongg ゲーム ダイアログ:「宣言なし」キー"

#: src/message.py:910
msgid "N"
msgstr ""

#: src/message.py:914
msgid "You cannot or do not want to claim this tile"
msgstr "この牌を要求できない、または要求したくない"

#: src/mjresource.py:92
msgid ""
"cannot find any %1 in the following directories, is libkmahjongg installed?"
msgstr ""
"次のディレクトリに %1 が見つかりません。libkmahjongg はインストールされていますか?"


#: src/mjresource.py:116
msgid "cannot find %1, using default"
msgstr "%1 が見つかりません。デフォルトを使用します"

#: src/mjresource.py:131
msgid "unknown name"
msgstr "名前が不明"

#: src/mjresource.py:132
msgid "unknown author"
msgstr "作者が不明"

#: src/mjresource.py:135
msgid "no description available"
msgstr "説明がありません"

#: src/mjresource.py:138
msgid "no E-Mail address available"
msgstr "利用可能な電子メールアドレスがありません"

#: src/player.py:725
msgid "%1 claiming MahJongg: She does not really have tile %2"
msgstr  ""
"%1 が MahJongg(上がり)を宣言しています: "
"実際には牌 %2 を持っていません"

#: src/player.py:734
msgid ""
"%1 claiming MahJongg: She did not pass all concealed tiles to the server"
msgstr ""
"%1 が MahJongg(上がり)を宣言しています: "
"彼女はすべての未公開の牌をサーバーに渡しませんでした"

#: src/player.py:855
msgid "Player %1 has 3 or 4 exposed melds, all are green"
msgstr ""
"プレイヤー %1 には 3つ または 4つ の公開したメルド(3つ か 4つ の牌の組合せ)"
"があり、すべて緑色です"

#: src/player.py:863
msgid "Player %1 may try a True Color Game"
msgstr "プレイヤー %1 は「九蓮宝燈(チューレンポウトウ)」の役を試せます"

#: src/player.py:866
msgid "Player %1 may try an All Terminals Game"
msgstr "プレイヤー %1 は「清老頭(チンロウトウ)」の役を試せます"

#: src/player.py:879
msgid "Player %1 exposed many winds"
msgstr "プレイヤー %1 は多くの風を公開しました"

#: src/player.py:883
msgid "Player %1 exposed many dragons"
msgstr "プレイヤー %1 が多くの龍を公開しました"

#: src/playerlist.py:49
msgid "define a new player"
msgstr "新しいプレイヤーを設定"

#: src/playerlist.py:110
msgid "Player %1 already exists"
msgstr "プレイヤー %1 はすでに存在します"

#: src/playerlist.py:121
msgid "Error while adding player %1: %2"
msgstr "プレイヤー %1 の追加中にエラーが発生しました: %2"

#: src/playerlist.py:176
msgid ""
"There are %1 finished and %2 unfinished games for %3, delete %3 anyway?  "
"This will also delete all games played by %3!"
msgstr ""
"%3 には完了したゲームが %1 個、未完了のゲームが %2 個あります。"
"それでも %3 を削除しますか? "
"これにより、%3 がプレイしたゲームもすべて削除されます"

#: src/predefined.py:29
msgid "Classical Chinese standard"
msgstr "古典的な中国式の標準"

#: src/predefined.py:35
msgid "Classical Chinese"
msgstr "古典的な中国式"

#: src/predefined.py:43
msgid ""
"The dead wall is also called kong box: The last 16 tiles of the wall used as "
"source of replacement tiles"
msgstr ""
"デッドウォールは カン ボックス とも呼ばれ、"
"交換用 牌のソースとして使用される壁の最後の16 枚の牌です。"

#: src/predefined.py:48
msgid ""
"Winner said Mah Jong with the last tile taken from the living end of the wall"
msgstr ""
"勝者は壁の生きている端から取った最後の牌で Mah Jong(上がり)を宣言しました"

#: src/predefined.py:52
msgid ""
"Winner said Mah Jong by claiming the last tile taken from the living end of "
"the wall, discarded by another player"
msgstr ""
"勝者は、他のプレイヤーが捨てた壁の生きている端から取った"
"最後の牌を獲得して Mah Jong(上がり)を宣言しました"

#: src/predefined.py:56
msgid ""
"Winner said Mah Jong by claiming the 4th tile of a kong another player just "
"declared"
msgstr ""
"勝者は、他のプレイヤーが宣言したカンの 4 番目の牌を獲得して"
"Mah Jong(上がり)を宣言しました"

#: src/predefined.py:62
msgid ""
"Just before the first discard, a player can declare Original Call meaning "
"she needs only one tile to complete the hand and announces she will not "
"alter the hand in any way (except bonus tiles)"
msgstr ""
"最初の捨て牌の直前に、プレイヤーは「オリジナル コール」(最初の捨て牌でテンパイ) "
"を宣言できます。これは、手牌を完成させるのに 1 枚だけ必要であり、いかなる形でも"
"手牌を変更しないことを宣言することを意味します(ボーナス牌を除く)"

#: src/predefined.py:66
msgid ""
"In some situations discarding a tile that has a high chance to help somebody "
"to win is declared to be dangerous, and if that tile actually makes somebody "
"win, the discarder pays the winner for all"
msgstr ""
"状況によっては、誰かの勝利に繋がる可能性が高い牌を捨てることは危険である"
"と言われ、その牌が実際に誰かの勝利につながる場合、牌を捨てた人は勝者に"
"全額を支払うことになります"

#: src/predefined.py:71
msgid ""
"Kong after Kong: Declare Kong and a second Kong with the replacement tile "
"and Mah Jong with the second replacement tile"
msgstr ""
"カンの後にカン: 交換牌でカンと 2 番目の カン を宣言し、2 番目の 交換牌 で"
"Mah Jong(上がり)を宣言しました"

#: src/predefined.py:76
msgid "East says Mah Jong with the unmodified dealt tiles"
msgstr ""
"東 は配牌を修正せずに Mah Jong(上がり)を宣言しました"

#: src/predefined.py:79
msgid ""
"South, West or North says Mah Jong with the first tile discarded by East"
msgstr ""
"南、西、北 のいずれかが、東 が最初に捨てた牌で Mah Jong(上がり)を宣言しました"

#: src/predefined.py:82
msgid "If that happens, East gets a limit score and the winds rotate"
msgstr ""
"そうなると 東 は リミットスコア を獲得し、風 が回転します"

#: src/predefined.py:104
msgid "The hand contains too many tiles"
msgstr "役に含まれる牌が多すぎます"

#: src/predefined.py:126
msgid "Play with no upper scoring limit"
msgstr "得点上限なしでプレー"

#: src/predefined.py:133
msgid "The Kong Box is used for replacement tiles when declaring kongs"
msgstr "カン ボックスは、カン を宣言するときに牌を交換するために使用されます。"

#: src/predefined.py:136
msgid "Bonus tiles increase the luck factor"
msgstr "ボーナス牌は運の要素を増やします"

#: src/predefined.py:143
msgid "The number of chows a player may build"
msgstr "プレイヤーが作れるチーの数"

#: src/predefined.py:147
msgid "Mah Jongg is only allowed after having declared to have a calling hand"
msgstr "Mah Jong(上がり)は役を持っていると宣言した場合にのみ許可されます"

#: src/predefined.py:154
msgid "Discard tiles ordered from top left"
msgstr "左上から順に牌を捨てます"

#: src/predefined.py:159
msgid ""
"Only when discarding tiles ordered: Do not place the next discard where the "
"claimed discard was"
msgstr ""
"牌を捨てる場合のみ: 要求された捨て札があった場所に次の捨て札を置かないでください"

#: src/predefined.py:185
msgid "The hand has 0 basis points excluding bonus tiles"
msgstr ""
"ボーナス 牌を除いて、役の基本のポイントは 0 です"

#: src/predefined.py:193
msgid ""
"Only same-colored tiles (only bamboo/stone/character) plus any number of "
"winds and dragons"
msgstr ""
"同色牌のみ(竹・石・文字のみ)と任意の数の 風 と 龍"

#: src/predefined.py:197
msgid "Only same-colored tiles (only bamboo/stone/character)"
msgstr "同色牌のみ(竹・石・文字のみ)"

#: src/predefined.py:200
msgid "All tiles concealed and of the same suit, no honors"
msgstr "すべての牌が未公開で、同じ組合せの場合、勝ちはありません"

#: src/predefined.py:203
msgid "Only winds, dragons, 1 and 9"
msgstr "風、龍、1 と 9 のみ"

#: src/predefined.py:205
msgid "Only winds and dragons"
msgstr "風と龍だけ"

#: src/predefined.py:208
msgid "Only hidden Pungs or Kongs, last tile from wall"
msgstr "未公開の ポン または カン のみ、壁の最後の牌"

#: src/predefined.py:211
msgid "Only 1 and 9"
msgstr "1 と 9 だけ"

#: src/predefined.py:214
msgid "4 Kongs"
msgstr "4つの カン"

#: src/predefined.py:217 src/predefined.py:337
msgid "3 Pungs or Kongs of dragons"
msgstr "龍の 3つのポン または カン"

#: src/predefined.py:220 src/predefined.py:342
msgid "4 Pungs or Kongs of winds"
msgstr "風の 4つのポン または カン"

#: src/predefined.py:222
msgid "Only green tiles: Green dragon and Bamboo 2,3,4,6,8"
msgstr "緑 の牌のみ: 緑の龍 と 竹 2、3、4、6、8"

#: src/predefined.py:225
msgid "Mah Jong with stone 5 from the dead wall"
msgstr "デッドウォールから 石 5 を使った Mah Jong(上がり)"

#: src/predefined.py:228
msgid "Mah Jong with the last tile from the wall being a stone 1"
msgstr "壁の最後の牌が 石 1 である Mah Jong(上がり)"

#: src/predefined.py:231
msgid "Robbing the Kong of bamboo 2"
msgstr "カン から 竹 2 を奪う"

#: src/predefined.py:244
msgid ""
"A concealed hand in one color 1112345678999 plus last tile of this suit "
"(from wall or discarded)"
msgstr ""
"1 色の未公開の手札 1112345678999 プラス この組合せの最後の牌(壁から、または捨て牌)"

#: src/predefined.py:247
msgid ""
"13 single tiles: All dragons, winds, 1, 9 and a 14th tile building a pair "
"with one of them"
msgstr ""
"13 枚のシングル牌:すべての龍、風、1、9、"
"そして 14番目の牌は、そのうちの 1つとペアを構築します"

#: src/predefined.py:316
msgid "Classical Chinese DMJL"
msgstr "古典的な中国式 DMJL"

#: src/predefined.py:322
msgid "Classical Chinese as defined by the Deutsche Mah Jongg Liga (DMJL) e.V."
msgstr "ドイツ麻雀リーグ (DMJL) e.V. で定義されている古典的な中国式"

#: src/predefined.py:330
msgid ""
"All tiles of same color. Pung or Kong of 1 and 9, pair of 2, 5 or 8 and two "
"Chows of the remaining values"
msgstr ""
"すべて同じ色の牌。1 と 9 の ポンまたは カン と、2、5、または 8 のペア と、残りの牌は 2つの チー"

#: src/predefined.py:334
msgid "2 Pungs or Kongs of dragons and 1 pair of dragons"
msgstr "龍の 2つのポン または カン と、龍の 1ペア"

#: src/predefined.py:340
msgid "3 Pungs or Kongs of winds and 1 pair of winds"
msgstr "風の 3つの ポン または カン と、風の 1ペア"

#: src/predefined.py:371
msgid "Classical Chinese BMJA"
msgstr "古典的な中国式 BMJA"

#: src/predefined.py:377
msgid "Classical Chinese as defined by the British Mah-Jong Association"
msgstr "イギリス麻雀協会 が定義する 古典的な中国式"

#: src/predefined.py:397
msgid ""
"All tiles concealed of same color: Values 1112345678999 with one pair from 2 "
"to 8 (last tile from wall or discarded)"
msgstr ""
"未公開のすべての牌が同じ色: 値は 1112345678999 で、"
"2 から 8 までの 1つの ペア (壁の最後の牌 または 捨てられた牌)"


#: src/predefined.py:401
msgid ""
"Pair of 1s and a run from 2 to 9 in the same suit with each of the winds"
msgstr ""
"それぞれの 風 で、同じ組合せで、1 の ペアと、2 から 9 までの並び"

#: src/predefined.py:404
msgid ""
"Four sets of three tiles in the different suits and a pair: No Winds or "
"Dragons"
msgstr ""
"異なる組合せの 3つ の牌を 4 セットと、1つの ペア: 風と龍 はなし"

#: src/predefined.py:406
msgid "7 pairs of tiles in any 2 out of 3 suits; no Winds or Dragons"
msgstr "3つ の組合せのうち任意の 2つ の牌の 7つの ペア: 風と龍 はなし"

#: src/predefined.py:409
msgid "7 pairs of 1s/9s/Winds/Dragons"
msgstr "1・9・風・龍 の 7つの ペア"

#: src/predefined.py:426
msgid "Concealed pungs of one suit with winds/dragons and a pair"
msgstr "風・龍とペアの 1つの組合せの未公開の ポン"

#: src/predefined.py:428 src/predefined.py:549
msgid "Only same-colored tiles (no chows, dragons or winds)"
msgstr "同じ色の牌のみ (チー、龍、風 はなし)"

#: src/predefined.py:431
msgid "3 Pungs or Kongs of dragons plus any pung/kong and a pair"
msgstr "龍のポン または カン 3つ と、任意の ポン/カン および ペア"

#: src/predefined.py:509
msgid "Taiwanese 16-tile game, FOR DEVELOPERS"
msgstr "台湾の 16 牌 ゲーム、開発者向け"

#: src/predefined.py:515
msgid ""
"Taiwanese 16-Tiles Mah Jongg, early alpha. See https://bugs.kde.org/show_bug."
"cgi?id=298821"
msgstr ""
"台湾の 16 牌麻雀、初期アルファ版。"
"https://bugs.kde.org/show_bug.cgi?id=298821 を参照してください。"

#: src/query.py:196
msgid "kajongg name for local game server"
msgstr "ローカルゲームサーバーの kajongg 名"

#: src/query.py:196
msgid "Local Game"
msgstr "ローカルゲーム"

#: src/query.py:430
msgid "Database %1 updated from schema %2 to %3"
msgstr "データベース %1 がスキーマ %2 から %3 に更新されました"

#: src/rule.py:49 src/scoringdialog.py:703 src/scoringdialog.py:782
msgid "points"
msgstr "ポイント"

#: src/rule.py:366
msgid "Meld Rules"
msgstr "メルド(3つか 4つの牌の組合せ)のルール"

#: src/rule.py:367
msgid ""
"Meld rules are applied to single melds independent of the rest of the hand"
msgstr ""
"メルド(3つか 4つの牌の組合せ)のルールは、役の残りの部分とは独立して単一のメルドに適用されます"

#: src/rule.py:368
msgid "Hand Rules"
msgstr "役のルール"

#: src/rule.py:369
msgid "Hand rules are applied to the entire hand, for all players"
msgstr "役のルールはすべてのプレイヤーの役 全体に適用されます"

#: src/rule.py:370
msgid "Winner Rules"
msgstr "勝者のルール"

#: src/rule.py:371
msgid "Winner rules are applied to the entire hand but only for the winner"
msgstr "勝者のルールは役 全体に適用されますが、勝者にのみ適用されます"

#: src/rule.py:372
msgid "Loser Rules"
msgstr "敗者のルール"

#: src/rule.py:373
msgid "Loser rules are applied to the entire hand but only for non-winners"
msgstr "敗者のルールは役 全体に適用されますが、勝者以外にのみ適用されます"

#: src/rule.py:374
msgid "Mah Jongg Rules"
msgstr "麻雀のルール"

#: src/rule.py:375
msgid "Only hands matching a Mah Jongg rule can win"
msgstr "麻雀のルールに一致する役だけが勝つことができます"

#: src/rule.py:377
msgid "Here we have several special game related options"
msgstr "ここには特別なゲーム関連のオプションがいくつかあります"

#: src/rule.py:378
msgid "Penalties"
msgstr "ペナルティ"

#: src/rule.py:379
msgid ""
"Penalties are applied manually by the user. They are only used for scoring "
"games.\n"
"When playing against the computer or over the net, Kajongg will never let "
"you get\n"
"into a situation where you have to pay a penalty"
msgstr ""
"ペナルティはユーザが手動で適用します。ゲームのスコアリングにのみ使用されます。\n"
"コンピュータやネット対戦の場合、\n"
"Kajongg ではペナルティを課されるような状況に陥ることはありません。"

#: src/rule.py:578
msgid "Ruleset._newKey:%1 is empty or space plus number"
msgstr "Ruleset._newKey:%1 は空か、スペースと数字です"

#: src/rule.py:578
msgid "Copy%1 of %2"
msgstr "コピー %1/%2"

#: src/rule.py:935
msgid "%1 can be a sentence"
msgstr "%1 は文にすることもできます"

#: src/rule.py:935
msgid "%4 have impossible values %2/%3 in rule \"%1\""
msgstr "%4 にはルール \"%1\" に不可能な値 %2/%3 があります"

#: src/rule.py:1023
msgid "wrong value for rule"
msgstr "ルールの値が間違っています"

#: src/rule.py:1023
msgid "%1: %2 is too small, minimal value is %3"
msgstr "%1: %2 は小さすぎます。最小値は %3 です"

#: src/rulesetselector.py:592
msgid "C&opy"
msgstr "コピー(&o)"

#: src/rulesetselector.py:593
msgid "Kajongg ruleset comparer"
msgstr "Kajongg ルールセットを比較"

#: src/rulesetselector.py:593
msgid "Co&mpare"
msgstr "比較(&m)"

#: src/rulesetselector.py:594
msgid "&Remove"
msgstr "削除(&R)"

#: src/rulesetselector.py:595
msgid "&Close"
msgstr "閉じる(&C)"

#: src/scene.py:389 src/scene.py:517
msgid "Do you really want to abort this game?"
msgstr "本当にこのゲームを中止してもよろしいですか?"

#: src/scoring.py:62
msgid "By the rules, %1 and %2 should now exchange their seats. "
msgstr "ルールにより、%1 と %2 は席を交換する必要があります。"

#: src/scoring.py:64
msgid "&Exchange"
msgstr "席の交換(&E)"

#: src/scoring.py:66
msgid "&Keep seat"
msgstr "席をキープ(&K)"

#: src/scoring.py:360
msgid "Move Exposed Tiles Here"
msgstr "公開した牌をここに移動"

#: src/scoring.py:361
msgid "Move Concealed Tiles Here"
msgstr "未公開の牌をここに移動"

#: src/scoring.py:673
msgid "Please define four players in <interface>Settings|Players</interface>"
msgstr "<interface>設定 | プレイヤー</interface> で 4 人のプレーヤーを定義してください"

#: src/scoringdialog.py:258
msgid "Round/Hand"
msgstr "一巡 / 役"

#: src/scoringdialog.py:487
msgid "Final scores for game <numid>%1</numid>"
msgstr "ゲーム <numid>%1</numid> の最終スコア"

#: src/scoringdialog.py:489
msgid "Scores for game <numid>%1</numid>"
msgstr "ゲーム <numid>%1</numid> のスコア"

#: src/scoringdialog.py:585
msgid "There is no active game"
msgstr "アクティブなゲームはありません"

#: src/scoringdialog.py:588
msgid "%1"
msgstr ""

#: src/scoringdialog.py:602
msgid "Manual score for %1: %2 points"
msgstr "%1 の手動スコア: %2 ポイント"

#: src/scoringdialog.py:689
msgid "Penalty"
msgstr "ペナルティ"

#: src/scoringdialog.py:692
msgid "Offense:"
msgstr "罪科:"

#: src/scoringdialog.py:699
msgid "Total Penalty"
msgstr "合計ペナルティ"

#: src/scoringdialog.py:727
msgid "&Execute"
msgstr "実行(&E)"

#: src/scoringdialog.py:804
msgid "penalty dialog, appears behind paying player combobox"
msgstr "ペナルティ ダイアログ、支払いプレイヤーの コンボボックス の後ろに表示されます"

#: src/scoringdialog.py:804
msgid "pays %1 points"
msgstr "%1 ポイントを支払います"

#: src/scoringdialog.py:809
msgid "penalty dialog, appears behind profiting player combobox"
msgstr "ペナルティダイアログ、利益を上げているプレイヤーのコンボボックスの後ろに表示されます"

#: src/scoringdialog.py:809
msgid "gets %1 points"
msgstr "%1 ポイントを獲得します"

#: src/scoringdialog.py:835
msgid "Winner"
msgstr "勝者"

#: src/scoringdialog.py:843
msgid "&Penalties"
msgstr "ペナルティ(&P)"

#: src/scoringdialog.py:845
msgid "&Save Hand"
msgstr "役の保存(&S)"

#: src/scoringdialog.py:867
msgid "&Last Tile:"
msgstr "最後の牌:(&L)"

#: src/scoringdialog.py:876
msgid "L&ast Meld:"
msgstr "最後のメルド:(&a)"

#: src/server.py:122
msgid "Wrong password"
msgstr "パスワードが間違っています"

#: src/server.py:218
msgid "table with id <numid>%1</numid> not found"
msgstr "ID <numid>%1</numid> のテーブルが見つかりません"

#: src/server.py:366
msgid "Player %1 has logged out"
msgstr "プレイヤー %1 はログアウトしました"

#: src/server.py:436
msgid "the server will listen on PORT ({int(defaultPort)})"
msgstr "サーバーは PORT ({int(defaultPort)}) でリッスン(接続要求待ち)します"

#: src/server.py:439
msgid "the server will listen on SOCKET"
msgstr "サーバーは SOCKET でリッスン(接続要求待ち)します"

#: src/server.py:443
msgid "name of the database"
msgstr "データベースの名前"

#: src/server.py:447
msgid "do not terminate local game server after last client disconnects"
msgstr "最後のクライアントが切断された後はローカル ゲーム サーバーを終了しないでください"

#: src/servertable.py:181
msgid "You already joined this table"
msgstr "あなたはすでにこのテーブルに参加しています"

#: src/servertable.py:183
msgid "All seats are already taken"
msgstr "もうすべての席が埋まっています"

#: src/servertable.py:188
msgid "takes a seat"
msgstr "席に着きます"

#: src/servertable.py:196
msgid "leaves the table"
msgstr "テーブルを離れます"

#: src/servertable.py:241 src/servertable.py:244 src/servertable.py:246
msgid "kajongg, name of robot player, to be translated"
msgstr "kajongg、ロボットプレイヤーの名前、翻訳予定"

#: src/servertable.py:241 src/servertable.py:244 src/servertable.py:246
msgid "Robot 1"
msgstr "賢者 1"

#: src/servertable.py:302
msgid "Only the initiator %1 can start this game, you are %2"
msgstr "このゲームを開始できるのは開始者 %1 だけです。あなたは %2 です"

#: src/servertable.py:701
msgid "Game <numid>%1</numid> is over!"
msgstr "ゲーム <numid>%1</numid> は終了しました!"

#: src/servertable.py:730
msgid "%1 wrongly said %2 for meld %3"
msgstr "%1 はメルド(3つ または 4つの牌の組合せ)の %3 に対して %2 と間違って宣言しました"

#: src/servertable.py:735
msgid "%1 wrongly said %2: claims to have concealed tiles %3 but only has %4"
msgstr "%1 は %2 と間違っています: 非公開の牌 %3 があると主張していますが、%4 しかありません"

#: src/servertable.py:772
msgid "declareKong:%1 wrongly said Kong for meld %2"
msgstr "declareKong: %1 は カン をメルド(3つ または 4つの牌の組合せ)の %2 と間違えました"

#: src/servertable.py:821
msgid "%1 claiming MahJongg: This is not a winning hand: %2"
msgstr "%1 が MahJongg(上がり)を宣言しています: これは勝ちの役ではありません: %2"

#: src/sound.py:70
msgid "No voices will be heard because the program %1 is missing"
msgstr "プログラム %1 が見つからないため、音声はありません"

#: src/sound.py:375
msgid "cannot write <filename>%1</filename>: %2"
msgstr "<filename>%1</filename>: を書き込めません: %2"

#: src/sound.py:378
msgid "The voice files have changed, their checksum has changed."
msgstr "音声ファイルが変更され、そのチェックサムも変更されました。"

#: src/sound.py:379
msgid "Please reinstall kajongg or do, with sufficient permissions:"
msgstr "kajongg を再インストールするか、十分な権限を持って実行してください:"

#: src/tables.py:65
msgid "Table"
msgstr "テーブル"

#: src/tables.py:70
msgid "Ruleset"
msgstr "ルールセット"

#: src/tables.py:149
msgid "Select a ruleset"
msgstr "ルールセットを選択"

#: src/tables.py:186
msgid "allocate a new table"
msgstr "新しいテーブルを割り当て"

#: src/tables.py:187 src/tables.py:331 src/tables.py:363
msgid "Allocate a new table"
msgstr "新しいテーブルを割り当て"

#: src/tables.py:193 src/tables.py:332 src/tables.py:364
msgid "&Join"
msgstr "参加(&J)"

#: src/tables.py:194 src/tables.py:333 src/tables.py:365
msgid "Join a table"
msgstr "テーブルに参加"

#: src/tables.py:200
msgid "&Leave"
msgstr "テーブルを離れる(&L)"

#: src/tables.py:201
msgid "Leave a table"
msgstr "テーブルを離れます"

#: src/tables.py:207
msgid "Kajongg-Ruleset"
msgstr "Kajongg-ルールセット"

#: src/tables.py:208
msgid "Compare the rules of this table with my own rulesets"
msgstr "このテーブルのルールを私自身のルールセットと比較してください"

#: src/tables.py:214
msgid "&Chat"
msgstr "チャット(&C)"

#: src/tables.py:221
msgid "&Start"
msgstr "開始(&S)"

#: src/tables.py:222
msgid "Start playing on a table. Empty seats will be taken by robot players."
msgstr "テーブルの上でプレイします。空いた席にはロボットプレイヤーが座ります。"

#: src/tables.py:281
msgid "opens a chat window"
msgstr "チャット ウィンドウ を開きます"

#: src/tables.py:300
msgid "Local Games with Ruleset %1"
msgstr "ルールセット %1 のローカル ゲーム"

#: src/tables.py:304
msgid "Tables at %1"
msgstr "%1 のテーブル"

#: src/tables.py:357
msgid "Start a new game"
msgstr "新しいゲームを開始"

#: src/tables.py:359
msgid "resuming a local suspended game"
msgstr "ローカルで中断された試合を再開します"

#: src/tables.py:359
msgid "&Resume"
msgstr "再開(&R)"

#: src/tables.py:361
msgid "Resume the selected suspended game"
msgstr "選択した中断されたゲームを再開します"

#: src/tables.py:379
msgid "Chat with others on this table"
msgstr "このテーブルで他の人とチャットします"

#: src/tables.py:382
msgid "For chatting with others on this table, please first take a seat"
msgstr "このテーブルでチャットする場合は、まず着席してください"

#: src/tile.py:306
msgid "East Wind"
msgstr "東の風"

#: src/tile.py:307
msgid "South Wind"
msgstr "南の風"

#: src/tile.py:308
msgid "West Wind"
msgstr "西の風"

#: src/tile.py:309
msgid "North Wind"
msgstr "北の風"

#: src/tile.py:311
#, python-brace-format
msgid "kajongg tile name"
msgstr "kajongg 牌の名前"

#: src/tile.py:311
#, python-brace-format
msgid "{group} {value}"
msgstr ""

#: src/tile.py:880, 882, 884, 886, 888, 890, 892, 893
msgid "kajongg meld type"
msgstr "kajongg メルドのタイプ"

#: src/tile.py:880, 882, 884, 886, 888, 890, 892, 893
msgid "Bonus"
msgstr "ボーナス"

#: src/tile.py:900,901
msgid "kajongg meld state"
msgstr "kajongg メルドの状態"

#: src/tile.py:900,901
msgid "Exposed"
msgstr "公開"

#: src/tile.py:906
#, python-brace-format
msgid "kajongg meld name, do not translate parameter names"
msgstr "kajongg メルド名、パラメータ名は変換しないでください"

#: src/tile.py:906
msgid "{state} {meldType} {name}"
msgstr ""

#: src/tilesetselector.py:141, 142, 143, 144, 145
msgid "TilesetSelector"
msgstr ""

#: src/user.py:94
msgid ""
"Your client has a version older than 4.9.0 but you need %1 for this server"
msgstr ""
"クライアントのバージョンは 4.9.0 より古いですが、このサーバーには %1 が必要です"

#: src/user.py:98
msgid "Your client has version %1 but you need %2 for this server"
msgstr "クライアントのバージョンは %1 ですが、このサーバーには %2 が必要です"


#: ==== 翻訳の漏れを以降に追加しました ====

#: src/servertable.py:245
msgctxt "kajongg, name of robot player, to be translated"
msgid "Robot 2"
msgstr "賢者 2"

#: src/servertable.py:246
msgctxt "kajongg, name of robot player, to be translated"
msgid "Robot 3"
msgstr "賢者 3"

#: src/message.py:280
msgctxt "kajongg"
msgid "Pung"
msgstr "ポン"

#: src/message.py:299
msgctxt "kajongg"
msgid "Kong"
msgstr "カン"

#: src/message.py:344
msgctxt "kajongg"
msgid "Chow"
msgstr "チー"

#: src/message.py:447
msgctxt "kajongg"
msgid "Discard"
msgstr "捨てる"

#: src/message.py:909
msgctxt "kajongg"
msgid "No Claim"
msgstr "宣言なし"

#: src/tile.py:277
msgctxt "kajongg"
msgid "hidden"
msgstr "未公開の"

#: src/tile.py:278
msgctxt "kajongg"
msgid "stone"
msgstr "石"

#: src/tile.py:279
msgctxt "kajongg"
msgid "bamboo"
msgstr "竹"

#: src/tile.py:280
msgctxt "kajongg"
msgid "character"
msgstr "文字"

#: src/tile.py:281
msgctxt "kajongg"
msgid "wind"
msgstr "風"

#: src/tile.py:282
msgctxt "kajongg"
msgid "dragon"
msgstr "龍"

#: src/tile.py:283
msgctxt "kajongg"
msgid "flower"
msgstr "花"

#: src/tile.py:284
msgctxt "kajongg"
msgid "season"
msgstr "季節"

#: src/tile.py:290
msgctxt "kajongg"
msgid "tile"
msgstr "牌"

#: src/tile.py:291
msgctxt "kajongg"
msgid "white"
msgstr "白"

#: src/tile.py:292
msgctxt "kajongg"
msgid "red"
msgstr "赤"

#: src/tile.py:293
msgctxt "kajongg"
msgid "green"
msgstr "緑"

#: src/tile.py:294
msgctxt "kajongg"
msgid "East"
msgstr "東"

#: src/tile.py:295
msgctxt "kajongg"
msgid "South"
msgstr "南"

#: src/tile.py:296
msgctxt "kajongg"
msgid "West"
msgstr "西"

#: src/tile.py:297
msgctxt "kajongg"
msgid "North"
msgstr "北"

#: src/scoringdialog.py:841
msgctxt "kajongg"
msgid "Draw"
msgstr "引き分け"

お尻に 2つの空行を追加

→Ctrl+S で保存:

-


問題点:

-

(1). 「msgctxt」文になるべきところが、翻訳対象になったところがあるので修正:

「msgctxt」文は、その文字列がどこで使われているかを伝え、正確な翻訳を助ける文で、 msgid はファイル内で一意(ユニーク)ですが、msgctxt を付けると、同じ msgid を異なるコンテキストとして登録できます:

修正した部分:

326 行目:

#: src/kdestub.py:352, 358, 477, 484
#: src/mainwindow.py:486, 498, 504, 518, 526, 536, 541
msgid "@action:inmenu"
msgstr ""

#: src/kdestub.py:352, 358, 477, 484
#: src/mainwindow.py:486, 498, 504, 518, 526, 536, 541
msgctxt "kajongg @action:inmenu"

-

519 行目:

#: src/mainwindow.py:488, 493, 507, 512, 520, 537
msgid "@action:intoolbar"
msgstr ""

#: src/mainwindow.py:488, 493, 507, 512, 520, 537
msgctxt "kajongg @action:intoolbar"

-

534 行目:

#: src/mainwindow.py:530
msgid "kajongg @action:inmenu"
msgstr ""

#: src/mainwindow.py:530
msgctxt "kajongg @action:inmenu"

-

541 行目:

#: src/mainwindow.py:532
msgid "kajongg @action:intoolbar"
msgstr ""

#: src/mainwindow.py:532
msgctxt "kajongg @action:intoolbar"

-

(2). 「ロボット 2」、「ロボット 3」、「その他」の翻訳が漏れていました:

主な文字列を後ろ(1526 行以降)に追加しました:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- -----

64. 「POT ファイル」の作り直し: POT の作成(新)

-

項番 60-2.」の中の「POT ファイル」の作成にて、

抽出漏れや、「msgctxt」文が使われない、問題がありました:

→「キーワード」の指定のやり方は奥が深くて、もっと勉強が必要です。

-

戻るときは、

 「項番 4.」へ:

 「項番 60.」へ:

-


1). 「@kajongg」の、ひとつのプログラムからの抜粋:

239 行目:(ロボット名の変更)の部分

robotNames = [
    i18ncE(
        'kajongg, name of robot player, to be translated',
        'Robot 1'),                              ←★
    i18ncE(
        'kajongg, name of robot player, to be translated',
        'Robot 2'),                              ←★
    i18ncE('kajongg, name of robot player, to be translated', 'Robot 3')] ←★
while len(names) < 4:

→国際化の「関数」が 3つ使われており、この関数には 引数が 2つあります:

最初は 2つの翻訳対象の文字列が 2つ、と思っていましたが、

最初の引数はステートメント(ガイド表示)として抽出する対象であることを知りました:
つまり、翻訳対象ではないけど、抽出は必要です。

-

最初は、下記を 1行と考え、ひとつの「キーワード」だけを指定しました:

    i18ncE(
        'kajongg, name of robot player, to be translated',
        'Robot 1'),                              ←★

→下記の 3つのうちの、最初の「i18ncE」だけの、2つの文字列、が抽出されました:

-

つまり、下記を 1行として考えないといけなかったみたい:

robotNames = [
    i18ncE(
        'kajongg, name of robot player, to be translated',
        'Robot 1'),                              ←★
    i18ncE(
        'kajongg, name of robot player, to be translated',
        'Robot 2'),                              ←★
    i18ncE('kajongg, name of robot player, to be translated', 'Robot 3')] ←★
while len(names) < 4:

→つまり、1行に付き、3つの「キーワード」の指定が必要でした:

-

なので、

キーワードの指定は、(1行に使われる「関数」の数、最大公約数の 4つを指定)
-k"i18ncE:1c,2" -k"i18ncE:1c,2" -k"i18ncE:1c,2" -k"i18ncE:1c,2" 

i18ncE: 関数名
1c: 1番目の引数をコンテキスト(context)として扱います。
2: 2番目の引数をメッセージID(msgid)として扱います。

1行に別の「関数」も使われる可能性もあるので、それは、別のコマンドで対応:

-


2). 「翻訳」対象の文字列を抽出するには、

-

(1). 今回、使われている関数が 4つあるので、各関数ごとに「キーワード」を指定します:

i18n  (引数 1つ)
i18nc  (引数 2つで、1つめはステートメント用の指定が必要)
i18nE  (引数 1つ)
i18ncE (引数 2つで、1つめはステートメント用の指定が必要)

-

(2). ソースプログラムの書き方として、1つの行に、複数(たぶん、3つ以下)の関数が使われていました:

なので、1つの行に、複数の「キーワード」が(確認すると、最小値は、たぶん、3つ)必要です:

-

(3). 引数は、使われる関数により、必要な引数が 1つのものと 2つのものがあります:

1つの場合は、最初の引数が「翻訳」対象でした:

2つの場合は、最初の引数を(翻訳対象にしないためと、翻訳しやすいように)「msgctxt」を使う指定にして「抽出」、2つ目の引数が「翻訳」対象でした:

-

(4). アプリの「翻訳」漏れが出ないように、うまく抽出するには、

4つの関数ごとに引数の位置を指定して、複数の「キーワード」を指定、「POT ファイル」を作成:

今回の場合は、その後できた、4つの「POT ファイル」を合体させて、ひとつのファイルにします:

-

(5). 以上のように、どのように「POT ファイル」を作成するかは、

特に今回のような、「Python」プログラムの場合は、

国際化に使われている関数、それ以外にも使われている関数があるか、使われている各関数の引数の数と使われ方、1行に使われている関数の数の最大値、関数ごとの引数の最大値、などを知る必要がありました。そのため、多くのソースファイルを眺める必要があります:

「アプリ」ごとに使われている関数や作られ方は変わるので、コマンドのパラメータを変える必要があり、簡単ではない印象です。

パラメータの「最大値」を指定すれば、コマンドは共通化に使えるかも:

ただし、人によって、プログラムの書き方や、使う「関数」は変わるので、プログラムを眺めて、修正する必要はあります。

-


3). 参考: 「xgettext」にて、python で「msgctxt」を使う指定を追加する場合の説明:

説明の例:

$ xgettext -k"pgettext:1c,2" -k"dpgettext:2c,3" -o messages.pot source.c

-k"pgettext:1c,2" の意味:

pgettext という関数名を探します。
1c: 1番目の引数をコンテキスト(context)として扱います。
2: 2番目の引数をメッセージID(msgid)として扱います。 

関数名により、引数がどのように使われるかは変わるので注意:
指定のしかたも変わるので、どのような使われ方をしているかの確認が必要です:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- -

64-1. 新しいやり方で、「POT ファイル」を作成:

-


1). 既存の「POT ファイル」を削除:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ rm new-kajongg.pot

-


2). i18n(引数は、1つ)の場合:

抽出漏れを防ぐため、一行で、必要と思われる 3つよりも多い 4つの「キーワード」を指定:

$ xgettext -L Python -k"i18n" -k"i18n" -k"i18n" -k"i18n" -o new-kajongg.pot src/*.py

-


3). i18nc(引数は、2つ)の場合:

抽出漏れを防ぐため、一行で、必要と思われる 3つよりも多い 4つの「キーワード」を指定:

$ xgettext -L Python -k"i18nc:1c,2" -k"i18nc:1c,2" -k"i18nc:1c,2" -k"i18nc:1c,2" -o new-kajongg-2.pot src/*.py
→追加に使うため、作成後、ヘッダー部(の 1〜18 行目)を削除:
$ featherpad new-kajongg-2.pot

↓ 下記の 1〜18 行目を削除:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-02-14 12:35+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

-

new-kajongg.pot に追加:
$ cat new-kajongg-2.pot >> new-kajongg.pot

-


4). i18nE(引数は、1つ)の場合:

抽出漏れを防ぐため、一行で、必要と思われる 3つよりも多い 4つの「キーワード」を指定:

$ xgettext -L Python -k"i18nE" -k"i18nE" -k"i18nE" -k"i18nE" -o new-kajongg-3.pot src/*.py
→追加に使うため、作成後、ヘッダー部(の 1〜18 行目)を削除:
$ featherpad new-kajongg-3.pot

-

new-kajongg.pot に追加:
$ cat new-kajongg-3.pot >> new-kajongg.pot

-


5). i18ncE(引数は、2つ)の場合:

抽出漏れを防ぐため、一行で、必要と思われる 3つよりも多い 4つの「キーワード」を指定:

$ xgettext -L Python -k"i18ncE:1c,2" -k"i18ncE:1c,2" -k"i18ncE:1c,2" -k"i18ncE:1c,2" -o new-kajongg-4.pot src/*.py
→追加に使うため、作成後、ヘッダー部(の 1〜18 行目)を削除:
$ featherpad new-kajongg-4.pot

-

new-kajongg.pot に追加:
$ cat new-kajongg-4.pot >> new-kajongg.pot

-


6). new-kajongg.pot を確認:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ featherpad new-kajongg.pot

→全行数 1848 です:

だいぶ、増えました。「翻訳」で漏れていた文字列もありました。

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- --

64-2. 新しい「POT ファイル」から「PO ファイル」を作成:

-


1). 新しい「POT ファイル」から「PO ファイル」を作成:

以前の「PO ファイル」を削除:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ rm jp-kajongg.po

-

新しい「PO ファイル」を作成:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ msginit --no-translator -i new-kajongg.pot -l ja -o jp-kajongg.po
:
new-kajongg.pot:1651: メッセージが二重に定義されています...
new-kajongg.pot:912: ...これは最初の定義の場所です
msginit: found 1 fatal error

-


2). 確認して、修正:

$ featherpad new-kajongg.pot

検索→指定行に移動:

-

912 行目 辺りを確認:

#: src/scoringdialog.py:703 src/scoringdialog.py:782
msgid "points"
msgstr ""

-

1651 行目 辺りを( 3行を削除)

#: src/rule.py:49
msgid "points"
msgstr ""

→削除:

-

912 行目 のコメント行を修正:

#: src/scoringdialog.py:703 src/scoringdialog.py:782 src/rule.py:49
msgid "points"
msgstr ""

→Ctrl+S で保存:

-


3). 「PO ファイル」の作成のやり直し:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ msginit --no-translator -i new-kajongg.pot -l ja -o jp-kajongg.po
:
jp-kajongg.po を生成.

→成功:

-

確認:

$ ls -p | grep po
:
jp-kajongg.po
new-kajongg-2.pot
new-kajongg-3.pot
new-kajongg-4.pot
new-kajongg.pot
po/

-


4). 「PO ファイル」の修正:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ featherpad jp-kajongg.po
# Japanese translations for @kajongg package.
# Copyright (C) 2026 THE @kajongg'S COPYRIGHT HOLDER
# This file is distributed under the same license as the @kajongg package.
# Automatically generated, 2026.
#
msgid ""
msgstr ""
"Project-Id-Version: @kajongg 25.12.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-02-14 12:35+0900\n"
"PO-Revision-Date: 2026-02-14 12:35+0900\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ASCII\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: src/background.py:71 src/tileset.py:48
msgid "file <filename>%1</filename> contains no valid SVG"
msgstr ""

#: src/board.py:385
msgid "Choose from"
msgstr ""

: 省略

-

PO ファイルのヘッダー部を修正:

使用コードの設定誤りを修正:

16 行目:

"Content-Type: text/plain; charset=ASCII\n"

↓ 修正:

"Content-Type: text/plain; charset=UTF-8\n"

→Ctrl+S で保存:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ---

64-3. 新しい「PO ファイル」を翻訳:

-


1). 差分を作成するためのフォルダを確認:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/

-

フォルダの作成:
$ mkdir -p a/po/ja/
$ mkdir -p b/po/ja/

-

既存のフィルを削除:
$ sudo rm a/po/ja/kajongg.po

-

$ sudo rm b/po/ja/kajongg.po

-

確認:
$ ls a/po/ja/
$

→OK

-

$ ls b/po/ja/
$

→OK

-


2). b フォルダに、新規の「PO ファイル」をコピー:

確認:

$ ls po/ja/
:
kajongg.po

-

コピー:

$ cp jp-kajongg.po b/po/ja/kajongg.po

-

確認:

$ ls b/po/ja/
:
kajongg.po

-


3). 新規の「PO ファイル」を翻訳:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ sudo featherpad b/po/ja/kajongg.po

↓ すべて貼付け:

# Japanese translations for @kajongg package.
# Copyright (C) 2026 THE @kajongg'S COPYRIGHT HOLDER
# This file is distributed under the same license as the @kajongg package.
# Automatically generated, 2026.
#
msgid ""
msgstr ""
"Project-Id-Version: @kajongg 25.12.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-02-14 12:35+0900\n"
"PO-Revision-Date: 2026-02-14 12:35+0900\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: src/background.py:71 src/tileset.py:48
msgid "file <filename>%1</filename> contains no valid SVG"
msgstr "<filename>%1</filename> ファイル には有効な SVG が含まれていません"

#: src/board.py:385
msgid "Choose from"
msgstr "選択"

#: src/chat.py:51
msgid "Time"
msgstr "時間"

#: src/chat.py:51 src/playerlist.py:90
msgid "Player"
msgstr "プレイヤー"

#: src/chat.py:51
msgid "Message"
msgstr "メッセージ"

#: src/chat.py:125
msgid "Chat on table %1 at %2"
msgstr "テーブル %1、%2 でチャット"

#: src/configdialog.py:47
msgid "Show tile shadows"
msgstr "牌の影を表示"

#: src/configdialog.py:50
msgid "Rearrange undisclosed tiles to melds"
msgstr "未公開の牌をメルドに再配置"

#: src/configdialog.py:53
msgid "Show only possible actions"
msgstr "可能なアクションのみを表示"

#: src/configdialog.py:56
msgid "Propose what to do"
msgstr "何をすべきかを提案"

#: src/configdialog.py:62
msgid "Animation speed:"
msgstr "アニメーション速度:"

#: src/configdialog.py:66
msgid "Use sounds if available"
msgstr "利用可能な場合はサウンドを使用"

#: src/configdialog.py:69
msgid "Let others hear my voice"
msgstr "他の人に私の声を聞いてもらいます"

#: src/configdialog.py:106
msgid "Tiles"
msgstr "牌"

#: src/configdialog.py:109
msgid "Backgrounds"
msgstr "背景"

#: src/game.py:404
msgid "Score computed manually"
msgstr "スコアは手動で計算されます"

#: src/game.py:502
msgid "Player %1 not known"
msgstr "プレイヤー %1 は不明です"

#: src/game.py:925
msgid "Short living wall: Tile is invisible, hence dangerous"
msgstr "寿命が短い壁: 牌は目に見えないため危険です"

#: src/games.py:95 src/playerlist.py:67 src/tables.py:67
msgid "Players"
msgstr "プレイヤー"

#: src/games.py:95
msgid "Started"
msgstr "開始"

#: src/games.py:129
msgid "&Load"
msgstr "ロード(&L)"

#: src/games.py:134 src/playerlist.py:56
msgid "&Delete"
msgstr "削除(&D)"

#: src/games.py:139
msgid "Show only pending games"
msgstr "保留中のゲームのみを表示"

#: src/games.py:247
msgid ""
"Do you really want to delete <numid>%1</numid> games?<br>This will be final, "
"you cannot cancel it with the cancel button"
msgstr ""
"本当に <numid>%1</numid> 個のゲームを削除しますか?<br>"
"これは最終的な削除であり、キャンセルボタンでキャンセルすることはできません"

#: src/guiutil.py:134 src/kdestub.py:120 src/kdestub.py:123
msgid "Kajongg"
msgstr ""

#: src/humanclient.py:66
msgid "Which chow do you want to expose?"
msgstr "どのレシピを公開したいですか?"

#: src/humanclient.py:104
msgid "Which kong do you want to declare?"
msgstr "どのカンを宣言しますか?"

#: src/humanclient.py:172
msgid "Choose"
msgstr "選択"

#: src/humanclient.py:383
msgid "You cannot say %1"
msgstr "%1 とは宣言できません"

#: src/humanclient.py:608
msgid "Player %1 has left the table"
msgstr "プレイヤー %1 がテーブルから退席しました"

#: src/humanclient.py:671
msgid ""
"The game on table <numid>%1</numid> can begin. Are you ready to play now?"
msgstr ""
"テーブル <numid>%1</numid> でゲームを開始できます。今すぐプレイする準備はできていますか?"

#: src/humanclient.py:691
msgid "Ready for next hand?"
msgstr "次の役の準備はできていますか?"

#: src/humanclient.py:967
msgid "The connection to the server %1 broke, please try again later."
msgstr "サーバー %1 への接続が切断されました。後でもう一度試してください。"

#: src/kajongg.py:81 src/kdestub.py:1092
msgid "Mah Jongg - the ancient Chinese board game for 4 players"
msgstr "Mah Jongg - 古代中国の 4 人用ボード ゲーム"

#: src/kajongg.py:85
msgid "all robots play with visible concealed tiles"
msgstr "すべてのロボットは目に見える未公開の牌でプレイします"

#: src/kajongg.py:86
msgid "start with demo mode"
msgstr "デモモードから開始"

#: src/kajongg.py:87
msgid "login to HOST"
msgstr "ホストにログイン"

#: src/kajongg.py:88
msgid "start new TABLE"
msgstr "新しいテーブルを開始"

#: src/kajongg.py:89
msgid "join TABLE"
msgstr "テーブルに参加"

#: src/kajongg.py:90
msgid "use RULESET without asking"
msgstr "何も尋ねずにルールセットを使用"

#: src/kajongg.py:91
msgid "prefer PLAYER for next login"
msgstr "次回のログインでは プレーヤー を優先します"

#: src/kajongg.py:92
msgid "use AI variant for human player in demo mode"
msgstr "デモモードで人間のプレイヤーに AI バリアントを使用"

#: src/kajongg.py:93
msgid "write statistics to CSV"
msgstr "統計情報を CSV に書き込む"

#: src/kajongg.py:94
msgid "show all available rulesets"
msgstr "利用可能なすべてのルールセットを表示"

#: src/kajongg.py:95
msgid "for testing purposes: Initializes the random generator"
msgstr "テスト目的: ランダムジェネレーターを初期化"

#: src/kajongg.py:97
msgid "show no graphical user interface. Intended only for testing"
msgstr "グラフィカル ユーザー インターフェイスは表示されません。テストのみを目的としています"

#: src/kajongg.py:99
msgid ""
"use a dedicated server already running and listening on SOCKET. Intended "
"only for testing"
msgstr ""
"すでに稼働しSOCKETをリッスン(接続要求の待ち)している専用サーバーを"
"使用します。テストのみを目的としています。"

#: src/kajongg.py:101
msgid ""
"use a dedicated server already running and listening on PORT. Intended only "
"for testing"
msgstr ""
"すでに稼働中でPORTをリッスン(接続要求の待ち)している専用サーバーを使用してください。"
"テスト専用です。"

#: src/kdestub.py:278
msgid "&OK"
msgstr "OK(&O)"

#: src/kdestub.py:279
msgid "&Apply"
msgstr "適用(&A)"

#: src/kdestub.py:280
msgid "&Cancel"
msgstr "キャンセル(&C)"

#: src/kdestub.py:281 src/kdestub.py:469
msgid "&Help"
msgstr "ヘルプ(&H)"

#: src/kdestub.py:282
msgid "&Defaults"
msgstr "デフォルト(&D)"

#: src/kdestub.py:364
msgid "Configure Tool&bars..."
msgstr "ツールバーを設定...(&b)"

#: src/kdestub.py:366
msgid "Configure toolbars"
msgstr "ツールバーの設定"

#: src/kdestub.py:373
msgid "Configure &Kajongg..."
msgstr "Kajongg の設定...(&K)"

#: src/kdestub.py:375 src/kdestub.py:1153
msgid "Configure"
msgstr "設定"

#: src/kdestub.py:465
msgid "&Game"
msgstr "ゲーム(&G)"

#: src/kdestub.py:466
msgid "&View"
msgstr "表示(&V)"

#: src/kdestub.py:467
msgid "&Settings"
msgstr "設定(&S)"

#: src/kdestub.py:480 src/kdestub.py:857
msgid "Switch Application Language"
msgstr "アプリケーション言語を切り替え"

#: src/kdestub.py:862
msgid "Please choose the language which should be used for this application:"
msgstr "このアプリケーションに使用する言語を選択してください:"

#: src/kdestub.py:881
msgid "Add Fallback Language"
msgstr "フォールバック(代替え時に使われる)言語の追加"

#: src/kdestub.py:893
msgid "Primary language:"
msgstr "主な言語:"

#: src/kdestub.py:893
msgid "Fallback language:"
msgstr "フォールバック(代替え時に使われる)言語:"

#: src/kdestub.py:899
msgid "Remove"
msgstr "削除"

#: src/kdestub.py:903
msgid ""
"This is the main application language which will be used first, before any "
"other languages."
msgstr ""
"これは、他の言語よりも先に最初に使用されるメインのアプリケーション言語です。"

#: src/kdestub.py:905
msgid ""
"This is the language which will be used if any previous languages do not "
"contain a proper translation."
msgstr ""
"前の言語に適切な翻訳が含まれていない場合に使用される言語です。"

#: src/kdestub.py:1035
msgid "About Kajongg"
msgstr "Kajongg について"

#: src/kdestub.py:1055
msgid "Version: %1"
msgstr "バージョン: %1"

#: src/kdestub.py:1056
msgid "Protocol version %1"
msgstr "プロトコルバージョン %1"

#: src/kdestub.py:1059
msgid "Original author"
msgstr "原作者"

#: src/kdestub.py:1066
msgid "KDE Frameworks (not installed or not usable)"
msgstr "KDE フレームワーク (インストールされていないか、使用できません)"

#: src/kdestub.py:1093
msgid ""
"This is the classical Mah Jongg for four players. If you are looking for Mah "
"Jongg solitaire please use the application kmahjongg."
msgstr ""
"これは 4人用のクラシックな麻雀です。麻雀ソリティアをお探しの方は、"
"kmahjongg アプリをご利用ください。"

#: src/kdestub.py:1110
msgid ""
"Please use <a href=\"https://bugs.kde.org\">https://bugs.kde.org</a> to "
"report bugs."
msgstr ""
"不具合を報告するには、<a href=\"https://bugs.kde.org\">https://bugs.kde.org</a> "
"を使用してください。"

#: src/kdestub.py:1115
msgid "Authors:"
msgstr "作者:"

#: src/kdestub.py:1356
msgid "Configure Toolbars"
msgstr "ツールバーの設定"

#: src/kdestub.py:1358
msgid "A&vailable actions:"
msgstr "利用可能なアクション(&v):"

#: src/kdestub.py:1369
msgid "Curr&ent actions:"
msgstr "現在のアクション(&e):"

#: src/login.py:177
msgid "trying to start local server %1"
msgstr "ローカルサーバー %1 を起動しようとしています"

#: src/login.py:188 src/login.py:637
msgid "removed stale socket <filename>%1</filename>"
msgstr "古いソケット <filename>%1</filename> を削除しました"

#: src/login.py:208
msgid "started the local kajongg server: pid=<numid>%1</numid> %2"
msgstr "ローカルの kajongg サーバーを開始しました"
": pid=<numid>%1</numid> %2"

#: src/login.py:300 src/login.py:406
msgid "Game server:"
msgstr "ゲームサーバー:"

#: src/login.py:303 src/login.py:408
msgid "Username:"
msgstr "ユーザ名:"

#: src/login.py:306 src/login.py:411
msgid "Password:"
msgstr "パスワード:"

#: src/login.py:414
msgid "Repeat password:"
msgstr "パスワードを再入力:"

#: src/login.py:565
msgid "You are already connected to server %1"
msgstr "すでにサーバー %1 に接続しています"

#: src/login.py:618
msgid "Server %1 did not answer"
msgstr "サーバー %1 が応答しませんでした"

#: src/login.py:620
msgid "Server %1 refused connection"
msgstr "サーバー %1 が接続を拒否しました"

#: src/login.py:622
msgid "Server %1 does not run a kajongg server"
msgstr "サーバー %1 は kajongg サーバーを実行していません"

#: src/login.py:624
msgid "Address for server %1 cannot be found"
msgstr "サーバー %1 のアドレスが見つかりません"

#: src/login.py:627
msgid "Login to server %1 failed: You have no network connection"
msgstr "サーバー %1 へのログインに失敗しました: ネットワーク接続がありません"

#: src/login.py:638
msgid "Please try again"
msgstr "もう一度試してください"

#: src/mainwindow.py:546
msgid "C&hat"
msgstr "チャット(&h)"

#: src/message.py:250
msgid "saying %1 violates Original Call"
msgstr "%1 が「オリジナル コール」(最初の捨て牌でテンパイ)に違反している"
"と言っています"

#: src/message.py:263
msgid ""
"claiming %1 is dangerous because you will have to discard a dangerous tile"
msgstr ""

#: src/message.py:268
msgid ""
"claiming %1 for %2 is dangerous because you will have to discard a dangerous "
"tile"
msgstr ""
"%1 を %2 に請求するのは、リスクがある牌を捨てる必要があるため危険です。"

#: src/message.py:271
msgid "You may say %1"
msgstr "%1 と宣言するかもしれません"

#: src/message.py:326
msgid "saying Kong for %1 violates Original Call"
msgstr "%1 のカンが「オリジナル コール」(最初の捨て牌でテンパイ)に違反"
"していると言っています"

#: src/message.py:330
msgid "You may say Kong for %1"
msgstr "%1 の場合はカンと言ってください"

#: src/message.py:387
msgid "Press here and you win"
msgstr "ここを押せば勝ちです"

#: src/message.py:418
msgid "discarding %1 and declaring Original Call makes this hand unwinnable"
msgstr "%1 を捨てて、「オリジナル コール」(最初の捨て牌でテンパイ)を宣言"
"すると、この役は勝てなくなります"

#: src/message.py:422
msgid ""
"Discard a tile, declaring Original Call meaning you need only one tile to "
"complete the hand and will not alter the hand in any way (except bonus tiles)"
msgstr ""
"牌を 1枚捨てて、「オリジナル コール」(最初の捨て牌でテンパイ)を宣言。"
"これは、手札を完成させるには牌が 1枚だけ必要であり、手札を一切変更しない"
"ことを意味します(ボーナス牌を除く)"

#: src/message.py:465
msgid "discarding %1 violates Original Call"
msgstr "%1 を捨てると元の宣言に違反します"

#: src/message.py:468
msgid "discarding %1 is Dangerous Game"
msgstr "%1 を捨てるのは危険なゲームです"

#: src/message.py:471
msgid "discard the least useful tile"
msgstr "最も役に立たない牌を捨てます"

#: src/message.py:551
msgid "%1 is not ready to start the game"
msgstr "%1 はゲームを開始する準備ができていません"

#: src/message.py:590
msgid "Kajongg <numid>%1</numid>"
msgstr ""

#: src/message.py:901
msgid "Confirm that you saw the message"
msgstr "メッセージが表示されたことを確認"

#: src/message.py:914
msgid "You cannot or do not want to claim this tile"
msgstr "この牌を要求できない、または要求したくない"

#: src/mjresource.py:92
msgid ""
"cannot find any %1 in the following directories, is libkmahjongg installed?"
msgstr ""
"次のディレクトリに %1 が見つかりません。libkmahjongg はインストール"
"されていますか?"

#: src/mjresource.py:116
msgid "cannot find %1, using default"
msgstr "%1 が見つかりません。デフォルトを使用します"

#: src/mjresource.py:131
msgid "unknown name"
msgstr "名前がわかりません"

#: src/mjresource.py:132
msgid "unknown author"
msgstr "作者がわかりません"

#: src/mjresource.py:135
msgid "no description available"
msgstr "説明がありません"

#: src/mjresource.py:138
msgid "no E-Mail address available"
msgstr "利用可能な電子メールアドレスがありません"

#: src/player.py:855
msgid "Player %1 has 3 or 4 exposed melds, all are green"
msgstr ""
"プレイヤー %1 には 3つ または 4つ の公開したメルド(3つ か 4つ の牌の組合せ)"
"があり、すべて緑色です"

#: src/player.py:863
msgid "Player %1 may try a True Color Game"
msgstr "プレイヤー %1 は「九蓮宝燈(チューレンポウトウ)」の役を試せます"

#: src/player.py:866
msgid "Player %1 may try an All Terminals Game"
msgstr "プレイヤー %1 は「清老頭(チンロウトウ)」の役を試せます"

#: src/player.py:879
msgid "Player %1 exposed many winds"
msgstr "プレイヤー %1 は多くの風を公開しました"

#: src/player.py:883
msgid "Player %1 exposed many dragons"
msgstr "プレイヤー %1 は多くの龍を公開しました"

#: src/playerlist.py:110
msgid "Player %1 already exists"
msgstr "プレイヤー %1 はすでに存在します"

#: src/playerlist.py:121
msgid "Error while adding player %1: %2"
msgstr "プレイヤー %1 の追加中にエラーが発生しました: %2"

#: src/playerlist.py:176
msgid ""
"There are %1 finished and %2 unfinished games for %3, delete %3 anyway?  "
"This will also delete all games played by %3!"
msgstr ""
"%3 には完了したゲームが %1 個、未完了のゲームが %2 個あります。"
"それでも %3 を削除しますか? "
"これにより、%3 がプレイしたゲームもすべて削除されます"

#: src/predefined.py:35
msgid "Classical Chinese"
msgstr "古典的な中国式"

#: src/predefined.py:43
msgid ""
"The dead wall is also called kong box: The last 16 tiles of the wall used as "
"source of replacement tiles"
msgstr ""
"デッドウォールは カン ボックス とも呼ばれ、"
"交換用 牌のソースとして使用される壁の最後の16 枚の牌です。"

#: src/predefined.py:48
msgid ""
"Winner said Mah Jong with the last tile taken from the living end of the wall"
msgstr ""
"勝者は壁の生きている端から取った最後の牌で MahJong(上がり)を宣言"
"しました"

#: src/predefined.py:52
msgid ""
"Winner said Mah Jong by claiming the last tile taken from the living end of "
"the wall, discarded by another player"
msgstr ""
"勝者は、他のプレイヤーが捨てた壁の生きている端から取った"
"最後の牌を獲得して MahJong(上がり)を宣言しました"

#: src/predefined.py:56
msgid ""
"Winner said Mah Jong by claiming the 4th tile of a kong another player just "
"declared"
msgstr ""
"勝者は、他のプレイヤーが宣言したカンの 4 番目の牌を獲得して"
"MahJong(上がり)を宣言しました"

#: src/predefined.py:62
msgid ""
"Just before the first discard, a player can declare Original Call meaning "
"she needs only one tile to complete the hand and announces she will not "
"alter the hand in any way (except bonus tiles)"
msgstr ""
"最初の捨て牌の直前に、プレイヤーは「オリジナル コール」(最初の捨て牌でテンパイ) "
"を宣言できます。これは、手牌を完成させるのに 1 枚だけ必要であり、いかなる形でも"
"手牌を変更しないことを宣言することを意味します(ボーナス牌を除く)"

#: src/predefined.py:66
msgid ""
"In some situations discarding a tile that has a high chance to help somebody "
"to win is declared to be dangerous, and if that tile actually makes somebody "
"win, the discarder pays the winner for all"
msgstr ""
"状況によっては、誰かの勝利に繋がる可能性が高い牌を捨てることは危険である"
"と言われ、その牌が実際に誰かの勝利につながる場合、牌を捨てた人は勝者に"
"全額を支払うことになります"

#: src/predefined.py:71
msgid ""
"Kong after Kong: Declare Kong and a second Kong with the replacement tile "
"and Mah Jong with the second replacement tile"
msgstr ""
"カンの後にカン: 交換牌でカンと 2 番目の カン を宣言し、2 番目の 交換牌 で"
"MahJong(上がり)を宣言しました"

#: src/predefined.py:76
msgid "East says Mah Jong with the unmodified dealt tiles"
msgstr ""
"東 は配牌を修正せずに MahJong(上がり)を宣言しました"

#: src/predefined.py:79
msgid ""
"South, West or North says Mah Jong with the first tile discarded by East"
msgstr ""
"南、西、北 のいずれかが、東 が最初に捨てた牌で MahJong(上がり)を宣言しました"

#: src/predefined.py:82
msgid "If that happens, East gets a limit score and the winds rotate"
msgstr ""
"そうなると 東 は 上限のスコア を獲得し、風 が回転します"

#: src/predefined.py:104
msgid "The hand contains too many tiles"
msgstr "役に含まれる牌が多すぎます"

#: src/predefined.py:126
msgid "Play with no upper scoring limit"
msgstr "得点上限なしでプレー"

#: src/predefined.py:133
msgid "The Kong Box is used for replacement tiles when declaring kongs"
msgstr "カン ボックスは、カン を宣言するときに牌を交換するために使用されます。"

#: src/predefined.py:136
msgid "Bonus tiles increase the luck factor"
msgstr "ボーナス牌は運の要素を増やします"

#: src/predefined.py:143
msgid "The number of chows a player may build"
msgstr "プレイヤーが作れるチーの数"

#: src/predefined.py:147
msgid "Mah Jongg is only allowed after having declared to have a calling hand"
msgstr "MahJong(上がり)は役を持っていると宣言した場合にのみ許可されます"

#: src/predefined.py:154
msgid "Discard tiles ordered from top left"
msgstr "左上から順に牌を捨てます"

#: src/predefined.py:159
msgid ""
"Only when discarding tiles ordered: Do not place the next discard where the "
"claimed discard was"
msgstr ""
"牌を捨てる場合のみ: 要求された捨て札があった場所に次の捨て札を置かないでください"

#: src/predefined.py:185
msgid "The hand has 0 basis points excluding bonus tiles"
msgstr ""
"ボーナス 牌を除いて、役の基本のポイントは 0 です"

#: src/predefined.py:193
msgid ""
"Only same-colored tiles (only bamboo/stone/character) plus any number of "
"winds and dragons"
msgstr ""
"同色牌のみ(竹・石・文字のみ)と任意の数の 風 と 龍"

#: src/predefined.py:197
msgid "Only same-colored tiles (only bamboo/stone/character)"
msgstr "同色牌のみ(竹・石・文字のみ)"

#: src/predefined.py:200
msgid "All tiles concealed and of the same suit, no honors"
msgstr "すべての牌が未公開で、同じ組合せの場合、勝ちはありません"

#: src/predefined.py:203
msgid "Only winds, dragons, 1 and 9"
msgstr "風、龍、1 と 9 のみ"

#: src/predefined.py:205
msgid "Only winds and dragons"
msgstr "風と龍 のみ"

#: src/predefined.py:208
msgid "Only hidden Pungs or Kongs, last tile from wall"
msgstr "未公開の ポン または カン のみ、壁の最後の牌"

#: src/predefined.py:211
msgid "Only 1 and 9"
msgstr "1 と 9 のみ"

#: src/predefined.py:214
msgid "4 Kongs"
msgstr "4つの カン"

#: src/predefined.py:217 src/predefined.py:337
msgid "3 Pungs or Kongs of dragons"
msgstr "龍の 3つのポン または カン"

#: src/predefined.py:220 src/predefined.py:342
msgid "4 Pungs or Kongs of winds"
msgstr "風の 4つのポン または カン"

#: src/predefined.py:222
msgid "Only green tiles: Green dragon and Bamboo 2,3,4,6,8"
msgstr "緑 の牌のみ: 緑の龍 と 竹 2、3、4、6、8"

#: src/predefined.py:225
msgid "Mah Jong with stone 5 from the dead wall"
msgstr "デッドウォールから 石 5 を使った MahJong(上がり)"

#: src/predefined.py:228
msgid "Mah Jong with the last tile from the wall being a stone 1"
msgstr "壁の最後の牌が 石 1 である Mah Jong(上がり)"

#: src/predefined.py:231
msgid "Robbing the Kong of bamboo 2"
msgstr "カン から 竹 2 を奪う"

#: src/predefined.py:244
msgid ""
"A concealed hand in one color 1112345678999 plus last tile of this suit "
"(from wall or discarded)"
msgstr ""
"1 色の未公開の手札 1112345678999 プラス この組合せの最後の牌(壁から、または捨て牌)"

#: src/predefined.py:247
msgid ""
"13 single tiles: All dragons, winds, 1, 9 and a 14th tile building a pair "
"with one of them"
msgstr ""
"13 枚のシングル牌:すべての龍、風、1、9、"
"そして 14番目の牌は、そのうちの 1つとペアを構築します"

#: src/predefined.py:322
msgid "Classical Chinese as defined by the Deutsche Mah Jongg Liga (DMJL) e.V."
msgstr "ドイツ麻雀リーグ (DMJL) e.V. で定義されている古典的な中国式"

#: src/predefined.py:330
msgid ""
"All tiles of same color. Pung or Kong of 1 and 9, pair of 2, 5 or 8 and two "
"Chows of the remaining values"
msgstr ""
"すべて同じ色の牌。1 と 9 の ポンまたは カン と、2、5、または 8 のペア と、残りの牌は 2つの チー"

#: src/predefined.py:334
msgid "2 Pungs or Kongs of dragons and 1 pair of dragons"
msgstr "龍の 2つのポン または カン と、龍の 1ペア"

#: src/predefined.py:340
msgid "3 Pungs or Kongs of winds and 1 pair of winds"
msgstr "風の 3つの ポン または カン と、風の 1ペア"

#: src/predefined.py:377
msgid "Classical Chinese as defined by the British Mah-Jong Association"
msgstr "イギリス麻雀協会 が定義する 古典的な中国式"

#: src/predefined.py:397
msgid ""
"All tiles concealed of same color: Values 1112345678999 with one pair from 2 "
"to 8 (last tile from wall or discarded)"
msgstr ""
"未公開のすべての牌が同じ色: 値は 1112345678999 で、"
"2 から 8 までの 1つの ペア (壁の最後の牌 または 捨てられた牌)"

#: src/predefined.py:401
msgid ""
"Pair of 1s and a run from 2 to 9 in the same suit with each of the winds"
msgstr ""
"それぞれの 風 で、同じ組合せで、1 の ペアと、2 から 9 までの並び"

#: src/predefined.py:404
msgid ""
"Four sets of three tiles in the different suits and a pair: No Winds or "
"Dragons"
msgstr ""
"異なる組合せの 3つ の牌を 4 セットと、1つの ペア: 風と龍 はなし"

#: src/predefined.py:406
msgid "7 pairs of tiles in any 2 out of 3 suits; no Winds or Dragons"
msgstr "3つ の組合せのうち任意の 2つ の牌の 7つの ペア: 風と龍 はなし"

#: src/predefined.py:409
msgid "7 pairs of 1s/9s/Winds/Dragons"
msgstr "1 / 9 / 風 / 龍 の 7つの ペア"

#: src/predefined.py:426
msgid "Concealed pungs of one suit with winds/dragons and a pair"
msgstr "風 / 龍 とペアの 1つの組合せの未公開の ポン"

#: src/predefined.py:428 src/predefined.py:549
msgid "Only same-colored tiles (no chows, dragons or winds)"
msgstr "同じ色の牌のみ (チー、龍、風 はなし)"

#: src/predefined.py:431
msgid "3 Pungs or Kongs of dragons plus any pung/kong and a pair"
msgstr "龍のポン または カン 3つ と、任意の ポン/カン および ペア"

#: src/predefined.py:515
msgid ""
"Taiwanese 16-Tiles Mah Jongg, early alpha. See https://bugs.kde.org/show_bug."
"cgi?id=298821"
msgstr ""
"台湾の 16 牌麻雀、初期アルファ版。"
"https://bugs.kde.org/show_bug.cgi?id=298821 を参照してください。"

#: src/query.py:430
msgid "Database %1 updated from schema %2 to %3"
msgstr "データベース %1 がスキーマ %2 から %3 に更新されました"

#: src/rule.py:366
msgid "Meld Rules"
msgstr "メルド(3つか 4つの牌の組合せ)のルール"

#: src/rule.py:367
msgid ""
"Meld rules are applied to single melds independent of the rest of the hand"
msgstr ""
"メルド(3つか 4つの牌の組合せ)のルールは、役の残りの部分とは独立して単一のメルドに適用されます"

#: src/rule.py:368
msgid "Hand Rules"
msgstr "役のルール"

#: src/rule.py:369
msgid "Hand rules are applied to the entire hand, for all players"
msgstr "役のルールはすべてのプレイヤーの役 全体に適用されます"

#: src/rule.py:370
msgid "Winner Rules"
msgstr "勝者のルール"

#: src/rule.py:371
msgid "Winner rules are applied to the entire hand but only for the winner"
msgstr "勝者のルールは役 全体に適用されますが、勝者にのみ適用されます"

#: src/rule.py:372
msgid "Loser Rules"
msgstr "敗者のルール"

#: src/rule.py:373
msgid "Loser rules are applied to the entire hand but only for non-winners"
msgstr "敗者のルールは役 全体に適用されますが、勝者以外にのみ適用されます"

#: src/rule.py:374
msgid "Mah Jongg Rules"
msgstr "MahJongg(上がり)のルール"

#: src/rule.py:375
msgid "Only hands matching a Mah Jongg rule can win"
msgstr "MahJongg(上がり)のルールに一致する役だけが勝つことができます"

#: src/rule.py:377
msgid "Here we have several special game related options"
msgstr "ここには特別なゲーム関連のオプションがいくつかあります"

#: src/rule.py:378
msgid "Penalties"
msgstr "ペナルティ"

#: src/rule.py:379
msgid ""
"Penalties are applied manually by the user. They are only used for scoring "
"games.\n"
"When playing against the computer or over the net, Kajongg will never let "
"you get\n"
"into a situation where you have to pay a penalty"
msgstr ""
"ペナルティはユーザが手動で適用します。ゲームのスコアリングにのみ使用されます。\n"
"コンピュータやネット対戦の場合、\n"
"Kajongg ではペナルティを課されるような状況に陥ることはありません。"

#: src/rulesetselector.py:592
msgid "C&opy"
msgstr "コピー(&o)"

#: src/rulesetselector.py:594
msgid "&Remove"
msgstr "削除(&R)"

#: src/rulesetselector.py:595
msgid "&Close"
msgstr "閉じる(&C)"

#: src/scene.py:389 src/scene.py:517
msgid "Do you really want to abort this game?"
msgstr "本当にこのゲームを中止してもよろしいですか?"

#: src/scoring.py:62
msgid "By the rules, %1 and %2 should now exchange their seats. "
msgstr "ルールにより、%1 と %2 は席を交換する必要があります。"

#: src/scoring.py:64
msgid "&Exchange"
msgstr "席の交換(&E)"

#: src/scoring.py:66
msgid "&Keep seat"
msgstr "席をキープ(&K)"

#: src/scoring.py:360
msgid "Move Exposed Tiles Here"
msgstr "公開した牌をここに移動"

#: src/scoring.py:361
msgid "Move Concealed Tiles Here"
msgstr "未公開の牌をここに移動"

#: src/scoring.py:673
msgid "Please define four players in <interface>Settings|Players</interface>"
msgstr "<interface>設定 | プレイヤー</interface> で 4 人のプレーヤーを定義してください"

#: src/scoringdialog.py:258
msgid "Round/Hand"
msgstr "回転 / 役"

#: src/scoringdialog.py:487
msgid "Final scores for game <numid>%1</numid>"
msgstr "ゲーム <numid>%1</numid> の最終スコア"

#: src/scoringdialog.py:489
msgid "Scores for game <numid>%1</numid>"
msgstr "ゲーム <numid>%1</numid> のスコア"

#: src/scoringdialog.py:585
msgid "There is no active game"
msgstr "アクティブなゲームはありません"

#: src/scoringdialog.py:588
msgid "%1"
msgstr ""

#: src/scoringdialog.py:602
msgid "Manual score for %1: %2 points"
msgstr "%1 の手動スコア: %2 ポイント"

#: src/scoringdialog.py:689
msgid "Penalty"
msgstr "ペナルティ"

#: src/scoringdialog.py:692
msgid "Offense:"
msgstr "罪科:"

#: src/scoringdialog.py:699
msgid "Total Penalty"
msgstr "合計ペナルティ"

#: src/scoringdialog.py:703 src/scoringdialog.py:782 src/rule.py:49
msgid "points"
msgstr "ポイント"

#: src/scoringdialog.py:727
msgid "&Execute"
msgstr "実行(&E)"

#: src/scoringdialog.py:835
msgid "Winner"
msgstr "勝者"

#: src/scoringdialog.py:843
msgid "&Penalties"
msgstr "ペナルティ(&P)"

#: src/scoringdialog.py:845
msgid "&Save Hand"
msgstr "役の保存(&S)"

#: src/scoringdialog.py:867
msgid "&Last Tile:"
msgstr "最後の牌:(&L)"

#: src/scoringdialog.py:876
msgid "L&ast Meld:"
msgstr "最後のメルド:(&a)"

#: src/server.py:436
msgid "the server will listen on PORT ({int(defaultPort)})"
msgstr "サーバーは PORT ({int(defaultPort)}) でリッスン(接続要求待ち)します"

#: src/server.py:439
msgid "the server will listen on SOCKET"
msgstr "サーバーは SOCKET でリッスン(接続要求待ち)します"

#: src/server.py:443
msgid "name of the database"
msgstr "データベースの名前"

#: src/server.py:447
msgid "do not terminate local game server after last client disconnects"
msgstr "最後のクライアントが切断された後はローカル ゲーム サーバーを終了しないでください"

#: src/sound.py:70
msgid "No voices will be heard because the program %1 is missing"
msgstr "プログラム %1 が見つからないため、音声はありません"

#: src/sound.py:375
msgid "cannot write <filename>%1</filename>: %2"
msgstr "<filename>%1</filename>: を書き込めません: %2"

#: src/sound.py:378
msgid "The voice files have changed, their checksum has changed."
msgstr "音声ファイルが変更され、そのチェックサムも変更されました。"

#: src/sound.py:379
msgid "Please reinstall kajongg or do, with sufficient permissions:"
msgstr "kajongg を再インストールするか、十分な権限を持って実行してください:"

#: src/tables.py:65
msgid "Table"
msgstr "テーブル"

#: src/tables.py:70
msgid "Ruleset"
msgstr "ルールセット"

#: src/tables.py:149
msgid "Select a ruleset"
msgstr "ルールセットを選択"

#: src/tables.py:187 src/tables.py:331 src/tables.py:363
msgid "Allocate a new table"
msgstr "新しいテーブルを割り当て"

#: src/tables.py:193 src/tables.py:332 src/tables.py:364
msgid "&Join"
msgstr "参加(&J)"

#: src/tables.py:194 src/tables.py:333 src/tables.py:365
msgid "Join a table"
msgstr "テーブルに参加"

#: src/tables.py:200
msgid "&Leave"
msgstr "離席(&L)"

#: src/tables.py:201
msgid "Leave a table"
msgstr "テーブルを離れます"

#: src/tables.py:208
msgid "Compare the rules of this table with my own rulesets"
msgstr "このテーブルのルールを私自身のルールセットと比較してください"

#: src/tables.py:214
msgid "&Chat"
msgstr "チャット(&C)"

#: src/tables.py:221
msgid "&Start"
msgstr "開始(&S)"

#: src/tables.py:222
msgid "Start playing on a table. Empty seats will be taken by robot players."
msgstr "テーブルの上でプレイします。空いた席にはロボットプレイヤーが座ります。"

#: src/tables.py:300
msgid "Local Games with Ruleset %1"
msgstr "ルールセット %1 のローカル ゲーム"

#: src/tables.py:304
msgid "Tables at %1"
msgstr "%1 のテーブル"

#: src/tables.py:357
msgid "Start a new game"
msgstr "新しいゲームを開始"

#: src/tables.py:361
msgid "Resume the selected suspended game"
msgstr "選択した中断されたゲームを再開します"

#: src/tables.py:379
msgid "Chat with others on this table"
msgstr "このテーブルで他の人とチャットします"

#: src/tables.py:382
msgid "For chatting with others on this table, please first take a seat"
msgstr "このテーブルでチャットする場合は、まず着席してください"

#: src/tile.py:306
msgid "East Wind"
msgstr "東の風"

#: src/tile.py:307
msgid "South Wind"
msgstr "南の風"

#: src/tile.py:308
msgid "West Wind"
msgstr "西の風"

#: src/tile.py:309
msgid "North Wind"
msgstr "北の風"

#: src/backgroundselector.py:107
msgctxt "BackgroundSelector"
msgid "Preview"
msgstr "表示"

#: src/backgroundselector.py:108
msgctxt "BackgroundSelector"
msgid "Properties"
msgstr "プロパティ"

#: src/backgroundselector.py:109
msgctxt "BackgroundSelector"
msgid "Author:"
msgstr " 作者:"

#: src/backgroundselector.py:110
msgctxt "BackgroundSelector"
msgid "Contact:"
msgstr "手がかり:"

#: src/backgroundselector.py:111
msgctxt "BackgroundSelector"
msgid "Description:"
msgstr "説明:"

#: src/board.py:335
msgctxt "kajongg:arrow keys hjkl like in konqueror"
msgid "hjklHJKL"
msgstr ""

#: src/client.py:69
msgctxt "table status"
msgid "Suspended"
msgstr "一時停止中"

#: src/client.py:74
msgctxt "table status"
msgid "Running"
msgstr "実行中"

#: src/client.py:75
msgctxt "table status"
msgid "New"
msgstr "新規"

#: src/configdialog.py:103
msgctxt "kajongg"
msgid "Play"
msgstr "プレイ"

#: src/differ.py:72
msgctxt "Kajongg"
msgid "Rule"
msgstr "ルール"

#: src/differ.py:127
msgctxt "@title:window"
msgid "Compare"
msgstr "比較"

#: src/differ.py:170 src/differ.py:172
msgctxt "Kajongg-Rule"
msgid "not defined"
msgstr "定義されていません"

#: src/games.py:107
msgctxt "@title:window"
msgid "Games"
msgstr "ゲーム"

#: src/games.py:124
msgctxt "start a new game"
msgid "&New"
msgstr "新規(&N)"

#: src/kdestub.py:352
msgctxt "@action:inmenu"
msgid "Show St&atusbar"
msgstr "ステータスバーを表示(&a)"

#: src/kdestub.py:358
msgctxt "@action:inmenu"
msgid "Show &Toolbar"
msgstr "ツールバーを表示(&T)"

#: src/kdestub.py:477
msgctxt "@action:inmenu"
msgid "&Help"
msgstr "ヘルプ(&H)"

#: src/kdestub.py:484
msgctxt "@action:inmenu"
msgid "About &Kajongg"
msgstr "Kajongg について(&K)"

#: src/kdestub.py:1072
msgctxt "kajongg"
msgid "Using versions %1"
msgstr "バージョン %1 を使用しています"

#: src/login.py:251
msgctxt "kajongg"
msgid "Login"
msgstr "ログイン"

#: src/login.py:308
msgctxt "kajongg"
msgid "Ruleset:"
msgstr "ルールセット:"

#: src/login.py:400
msgctxt "@title:window"
msgid "Create User Account"
msgstr "ユーザ アカウントの作成"

#: src/login.py:605
msgctxt "USER is not known on SERVER"
msgid "%1 is not known on %2, do you want to open an account?"
msgstr "%1 は %2 では不明です。アカウントを開設しますか?"

#: src/mainwindow.py:486
msgctxt "@action:inmenu"
msgid "&Score Manual Game"
msgstr "手動ゲームのスコア(&S)"

#: src/mainwindow.py:488
msgctxt "@action:intoolbar"
msgid "Manual Game"
msgstr "手動ゲーム"

#: src/mainwindow.py:491
msgctxt "kajongg @info:tooltip"
msgid "&Score a manual game."
msgstr "手動ゲームでスコアを付けます。(&S)"

#: src/mainwindow.py:493
msgctxt "@action:intoolbar"
msgid "&Play"
msgstr "プレイ(&P)"

#: src/mainwindow.py:496
msgctxt "kajongg @info:tooltip"
msgid "Start a new game."
msgstr "新しいゲームを開始します。"

#: src/mainwindow.py:498
msgctxt "@action:inmenu"
msgid "&Abort Game"
msgstr "ゲームを中止(&A)"

#: src/mainwindow.py:502
msgctxt "kajongg @info:tooltip"
msgid "Abort the current game."
msgstr "現在のゲームを中止します。"

#: src/mainwindow.py:504
msgctxt "@action:inmenu"
msgid "&Quit Kajongg"
msgstr "終了(&Q)"

#: src/mainwindow.py:507
msgctxt "@action:intoolbar"
msgid "&Players"
msgstr "プレイヤー(&P)"

#: src/mainwindow.py:510
msgctxt "kajongg @info:tooltip"
msgid "define your players."
msgstr "プレイヤーを定義します。"

#: src/mainwindow.py:512
msgctxt "@action:intoolbar"
msgid "&Rulesets"
msgstr "ルールセット(&R)"

#: src/mainwindow.py:515
msgctxt "kajongg @info:tooltip"
msgid "customize rulesets."
msgstr "ルールセットをカスタマイズします。"

#: src/mainwindow.py:519
msgctxt "@action:inmenu"
msgid "&Change Visual Angle"
msgstr "視角を変更(&C)"

#: src/mainwindow.py:520
msgctxt "@action:intoolbar"
msgid "Angle"
msgstr "角度"

#: src/mainwindow.py:523
msgctxt "kajongg @info:tooltip"
msgid "Change the visual appearance of the tiles."
msgstr "牌の外観を変更します。"

#: src/mainwindow.py:527
msgctxt "@action:inmenu"
msgid "F&ull Screen Mode"
msgstr "全画面モード(&u)"

#: src/mainwindow.py:530
msgctxt "kajongg @action:inmenu"
msgid "&Score Table"
msgstr "テーブルのスコア(&S)"

#: src/mainwindow.py:532
msgctxt "kajongg @action:intoolbar"
msgid "&Scores"
msgstr "スコア(&S)"

#: src/mainwindow.py:534
msgctxt "kajongg @info:tooltip"
msgid "Show or hide the score table for the current game."
msgstr "現在のゲームのスコア表を表示または非表示にします。"

#: src/mainwindow.py:536
msgctxt "@action:inmenu"
msgid "&Explain Scores"
msgstr "スコアの説明(&E)"

#: src/mainwindow.py:537
msgctxt "@action:intoolbar"
msgid "&Explain"
msgstr "説明(&E)"

#: src/mainwindow.py:539
msgctxt "kajongg @info:tooltip"
msgid "Explain the scoring for all players in the current game."
msgstr "現在の試合の全プレイヤーの得点を説明します。"

#: src/mainwindow.py:541
msgctxt "@action:inmenu"
msgid "&Demo Mode"
msgstr "デモ モード(&D)"

#: src/mainwindow.py:544
msgctxt "kajongg @info:tooltip"
msgid "Let the computer take over for you. Start a new local game if needed."
msgstr "コンピュータに代わってもらい、必要に応じて、"
"新しいローカル ゲームを開始します。"

#: src/mainwindow.py:549
msgctxt "kajongg @info:tooltip"
msgid "Chat with the other players."
msgstr "他のプレイヤーとチャットします。"

#: src/playerlist.py:50
msgctxt "define a new player"
msgid "&New"
msgstr "新規(&N)"

#: src/rule.py:91
msgctxt "Kajongg"
msgid "%1 points"
msgstr "%1 ポイント"

#: src/rule.py:93
msgctxt "Kajongg"
msgid "%1 doubles"
msgstr "%1 ダブルス"

#: src/rule.py:98
msgctxt "Kajongg"
msgid "%1 limits"
msgstr "限界値 %1"

#: src/rule.py:376
msgctxt "kajongg"
msgid "Options"
msgstr "オプション"

#: src/rule.py:579
msgctxt "Ruleset._newKey:%1 is empty or space plus number"
msgid "Copy%1 of %2"
msgstr "コピー %1/%2"

#: src/rule.py:935
msgctxt "%1 can be a sentence"
msgid "%4 have impossible values %2/%3 in rule \"%1\""
msgstr "%4 にはルール \"%1\" に不可能な値 %2/%3 があります"

#: src/rule.py:1023
msgctxt "wrong value for rule"
msgid "%1: %2 is too small, minimal value is %3"
msgstr "%1: %2 は小さすぎます。最小値は %3 です"

#: src/rulesetselector.py:511
msgctxt "@title:window"
msgid "Customize rulesets"
msgstr "ルールセットのカスタマイズ"

#: src/rulesetselector.py:593
msgctxt "Kajongg ruleset comparer"
msgid "Co&mpare"
msgstr "比較(&m)"

#: src/scoring.py:60
msgctxt "@title:window"
msgid "Swap Seats"
msgstr "席を交換"

#: src/scoring.py:85
msgctxt "@title:window"
msgid "Select four players"
msgstr "4人のプレイヤーを選択してください"

#: src/scoringdialog.py:299 src/scoringdialog.py:834
msgctxt "kajongg"
msgid "Score"
msgstr "スコア"

#: src/scoringdialog.py:299
msgctxt "kajongg"
msgid "Payments"
msgstr "支払い"

#: src/scoringdialog.py:300
msgctxt "kajongg"
msgid "Balance"
msgstr "バランス"

#: src/scoringdialog.py:300
msgctxt "kajongg"
msgid "Chart"
msgstr "チャート"

#: src/scoringdialog.py:410
msgctxt "kajongg"
msgid "Scores"
msgstr "スコア"

#: src/scoringdialog.py:452
msgctxt "kajongg"
msgid "Used Rules"
msgstr "使用されたルール"

#: src/scoringdialog.py:569
msgctxt "@title:window"
msgid "Explain Scores"
msgstr "スコアの説明"

#: src/scoringdialog.py:805
msgctxt "penalty dialog, appears behind paying player combobox"
msgid "pays %1 points"
msgstr "%1 ポイントを支払います"

#: src/scoringdialog.py:810
msgctxt "penalty dialog, appears behind profiting player combobox"
msgid "gets %1 points"
msgstr "%1 ポイントを獲得します"

#: src/scoringdialog.py:821
msgctxt "@title:window"
msgid "Scoring for this Hand"
msgstr "この役のスコア"

#: src/scoringdialog.py:832
msgctxt "kajongg"
msgid "Player"
msgstr "プレイヤー"

#: src/scoringdialog.py:833
msgctxt "kajongg"
msgid "Wind"
msgstr "風"

#: src/scoringdialog.py:841
msgctxt "kajongg"
msgid "Draw"
msgstr "引き分け"

#: src/tables.py:69
msgctxt "table status"
msgid "Status"
msgstr "状態"

#: src/tables.py:186
msgctxt "allocate a new table"
msgid "&New"
msgstr "新規(&N)"

#: src/tables.py:207
msgctxt "Kajongg-Ruleset"
msgid "Compare"
msgstr "比較"

#: src/tables.py:359
msgctxt "resuming a local suspended game"
msgid "&Resume"
msgstr "再開(&R)"

#: src/tile.py:277
msgctxt "kajongg"
msgid "hidden"
msgstr "未公開"

#: src/tile.py:278
msgctxt "kajongg"
msgid "stone"
msgstr "石"

#: src/tile.py:279
msgctxt "kajongg"
msgid "bamboo"
msgstr "竹"

#: src/tile.py:280
msgctxt "kajongg"
msgid "character"
msgstr "文字"

#: src/tile.py:281
msgctxt "kajongg"
msgid "wind"
msgstr "風"

#: src/tile.py:282
msgctxt "kajongg"
msgid "dragon"
msgstr "龍"

#: src/tile.py:283
msgctxt "kajongg"
msgid "flower"
msgstr "花"

#: src/tile.py:284
msgctxt "kajongg"
msgid "season"
msgstr "季節"

#: src/tile.py:290
msgctxt "kajongg"
msgid "tile"
msgstr "牌"

#: src/tile.py:291
msgctxt "kajongg"
msgid "white"
msgstr "白"

#: src/tile.py:292
msgctxt "kajongg"
msgid "red"
msgstr "赤"

#: src/tile.py:293
msgctxt "kajongg"
msgid "green"
msgstr "緑"

#: src/tile.py:294
msgctxt "kajongg"
msgid "East"
msgstr "東"

#: src/tile.py:295
msgctxt "kajongg"
msgid "South"
msgstr "南"

#: src/tile.py:296
msgctxt "kajongg"
msgid "West"
msgstr "西"

#: src/tile.py:297
msgctxt "kajongg"
msgid "North"
msgstr "北"

#: src/tile.py:311
#, python-brace-format
msgctxt "kajongg tile name"
msgid "{group} {value}"
msgstr ""

#: src/tile.py:880
msgctxt "kajongg meld type"
msgid "Bonus"
msgstr "ボーナス"

#: src/tile.py:882
msgctxt "kajongg meld type"
msgid "&single"
msgstr "シングル(&s)"

#: src/tile.py:884
msgctxt "kajongg meld type"
msgid "&pair"
msgstr "ペア(&p)"

#: src/tile.py:886
msgctxt "kajongg meld type"
msgid "&chow"
msgstr "チー(&c)"

#: src/tile.py:888
msgctxt "kajongg meld type"
msgid "p&ung"
msgstr "ポン(&u)"

#: src/tile.py:890
msgctxt "kajongg meld type"
msgid "c&laimed kong"
msgstr "カンを宣言(&l)"

#: src/tile.py:892
msgctxt "kajongg meld type"
msgid "k&ong"
msgstr "カン(&o)"

#: src/tile.py:893
msgctxt "kajongg meld type"
msgid "rest of tiles"
msgstr "残りの牌"

#: src/tile.py:900
msgctxt "kajongg meld state"
msgid "Exposed"
msgstr "公開"

#: src/tile.py:901
msgctxt "kajongg meld state"
msgid "Concealed"
msgstr "未公開"

#: src/tile.py:907
#, python-brace-format
msgctxt "kajongg meld name, do not translate parameter names"
msgid "{state} {meldType} {name}"
msgstr ""

#: src/tilesetselector.py:141
msgctxt "TilesetSelector"
msgid "Preview"
msgstr "表示"

#: src/tilesetselector.py:142
msgctxt "TilesetSelector"
msgid "Properties"
msgstr "プロパティ"

#: src/tilesetselector.py:143
msgctxt "TilesetSelector"
msgid "Author:"
msgstr "作者:"

#: src/tilesetselector.py:144
msgctxt "TilesetSelector"
msgid "Contact:"
msgstr "手がかり:"

#: src/tilesetselector.py:145
msgctxt "TilesetSelector"
msgid "Description:"
msgstr 説明:""

#: src/deferredutil.py:272 src/deferredutil.py:436
msgid "The game server lost connection to player %1"
msgstr "ゲームサーバーはプレイヤー %1 への接続を失いました"

#: src/deferredutil.py:275
msgid ""
"Error for player %1: %2\n"
"%3"
msgstr ""
"プレイヤー %1 のエラー: %2\n"
"%3"

#: src/player.py:725
msgid "%1 claiming MahJongg: She does not really have tile %2"
msgstr "%1 が MahJongg(上がり)を宣言しています: 彼女は実際には牌 %2 を持っていません"

#: src/player.py:734
msgid ""
"%1 claiming MahJongg: She did not pass all concealed tiles to the server"
msgstr ""
"%1 が MahJongg(上がり)を宣言しています: 彼女はすべての未公開の牌をサーバーに渡しませんでした"

#: src/predefined.py:29
msgid "Classical Chinese standard"
msgstr "古典的な中国式の標準"

#: src/predefined.py:316
msgid "Classical Chinese DMJL"
msgstr "古典的な中国式 DMJL"

#: src/predefined.py:371
msgid "Classical Chinese BMJA"
msgstr "古典的な中国式 BMJA"

#: src/predefined.py:509
msgid "Taiwanese 16-tile game, FOR DEVELOPERS"
msgstr "台湾の 16 牌 ゲーム、開発者向け"

#: src/server.py:122
msgid "Wrong password"
msgstr "パスワードが間違っています"

#: src/server.py:218
msgid "table with id <numid>%1</numid> not found"
msgstr "ID <numid>%1</numid> のテーブルが見つかりません"

#: src/server.py:366
msgid "Player %1 has logged out"
msgstr "プレイヤー %1 がログアウトしました"

#: src/servertable.py:181
msgid "You already joined this table"
msgstr "あなたはすでにこのテーブルに参加しています"

#: src/servertable.py:183
msgid "All seats are already taken"
msgstr "もうすべての席が埋まっています"

#: src/servertable.py:188
msgid "takes a seat"
msgstr "席に着きます"

#: src/servertable.py:196
msgid "leaves the table"
msgstr "テーブルを離れます"

#: src/servertable.py:302
msgid "Only the initiator %1 can start this game, you are %2"
msgstr "このゲームを開始できるのは開始者 %1 だけです。あなたは %2 です"

#: src/servertable.py:701
msgid "Game <numid>%1</numid> is over!"
msgstr "ゲーム <numid>%1</numid> は終了しました!"

#: src/servertable.py:730
msgid "%1 wrongly said %2 for meld %3"
msgstr "%1 はメルド %3 に対して %2 と間違って宣言しました"

#: src/servertable.py:735
msgid "%1 wrongly said %2: claims to have concealed tiles %3 but only has %4"
msgstr "%1 は %2 と間違っています: 未公開の牌 %3 があると"
"宣言していますが、%4 しかありません"

#: src/servertable.py:772
msgid "declareKong:%1 wrongly said Kong for meld %2"
msgstr "カンの宣言:%1 がカンをメルド %2 と間違えました"

#: src/servertable.py:821
msgid "%1 claiming MahJongg: This is not a winning hand: %2"
msgstr "%1 が MahJongg(上がり)を宣言しています: "
"これは勝ちの役ではありません: %2"

#: src/tables.py:281
msgid "opens a chat window"
msgstr "チャット ウィンドウ を開きます"

#: src/user.py:94
msgid ""
"Your client has a version older than 4.9.0 but you need %1 for this server"
msgstr ""
"クライアントのバージョンは 4.9.0 より古いですが、このサーバーには %1 が必要です"

#: src/user.py:98
msgid "Your client has version %1 but you need %2 for this server"
msgstr "クライアントのバージョンは %1 ですが、このサーバー"
"には %2 が必要です"

#: src/message.py:280
msgctxt "kajongg"
msgid "Pung"
msgstr "ポン"

#: src/message.py:281
msgctxt "kajongg game dialog:Key for Pung"
msgid "P"
msgstr ""

#: src/message.py:299
msgctxt "kajongg"
msgid "Kong"
msgstr "カン"

#: src/message.py:300
msgctxt "kajongg game dialog:Key for Kong"
msgid "K"
msgstr ""

#: src/message.py:344
msgctxt "kajongg"
msgid "Chow"
msgstr "チー"

#: src/message.py:345
msgctxt "kajongg game dialog:Key for Chow"
msgid "C"
msgstr ""

#: src/message.py:378
msgctxt "kajongg"
msgid "Mah Jongg"
msgstr "MahJongg"

#: src/message.py:379
msgctxt "kajongg game dialog:Key for Mah Jongg"
msgid "M"
msgstr ""

#: src/message.py:401
msgctxt "kajongg"
msgid "Original Call"
msgstr "オリジナル コール(最初の捨て牌でテンパイ)"

#: src/message.py:402
msgctxt "kajongg game dialog:Key for Original Call"
msgid "O"
msgstr ""

#: src/message.py:447
msgctxt "kajongg"
msgid "Discard"
msgstr "捨てる"

#: src/message.py:448
msgctxt "kajongg game dialog:Key for Discard"
msgid "D"
msgstr ""

#: src/message.py:676
msgctxt "kajongg"
msgid "Violates Original Call"
msgstr "オリジナル コール(最初の捨て牌でテンパイ)に違反します"

#: src/message.py:819
msgctxt "kajongg"
msgid "Dangerous Game"
msgstr "危険なゲーム"

#: src/message.py:834
msgctxt "kajongg"
msgid "No Choice"
msgstr "選択なし"

#: src/message.py:896
msgctxt "kajongg"
msgid "OK"
msgstr ""

#: src/message.py:897
msgctxt "kajongg game dialog:Key for OK"
msgid "O"
msgstr ""

#: src/message.py:909
msgctxt "kajongg"
msgid "No Claim"
msgstr "宣言なし"

#: src/message.py:910
msgctxt "kajongg game dialog:Key for No claim"
msgid "N"
msgstr ""

#: src/query.py:197
msgctxt "kajongg name for local game server"
msgid "Local Game"
msgstr "ローカルゲーム"

#: src/rule.py:50
msgctxt "kajongg"
msgid "doubles"
msgstr "ダブルス"

#: src/rule.py:51
msgctxt "kajongg"
msgid "limits"
msgstr "限界値"

#: src/rulesetselector.py:530
msgctxt "kajongg"
msgid "Rule"
msgstr "ルール"

#: src/servertable.py:242
msgctxt "kajongg, name of robot player, to be translated"
msgid "Robot 1"
msgstr "賢者 1"

#: src/servertable.py:245
msgctxt "kajongg, name of robot player, to be translated"
msgid "Robot 2"
msgstr "賢者 2"

#: src/servertable.py:246
msgctxt "kajongg, name of robot player, to be translated"
msgid "Robot 3"
msgstr "賢者 3"

→Ctrl+S で保存:

-

注意:

翻訳していて気付いたのですが、以前の投稿の翻訳に比べ、だいぶ「役の説明」の部分が減った気がします:
抽出すべき別の関数がまだあるのかもしれません。

ただし、支障はないので、ここまでにしました:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----

65. 「パッチ3」(新規のPO ファイルを翻訳)の作成:

-


1). 「パッチ3」(差分)の作成:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ diff -Naur a b > 03.kajongg.po-ja.patch

-

修正:

$ sudo featherpad 03.kajongg.po-ja.patch

先頭行を削除、お尻に 2つの空行を追加

→Ctrl+S で保存:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- -----

66. 「パッチ」を配置:

-


1). パッチを確認:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ ls -1 *.patch
:
01.kajongg.desktop.patch
02.kajongg.po-del.patch
03.kajongg.po-ja.patch

-


2). パッチを配置:

既存のパッチを削除:

$ sudo rm ~/git/void-packages/srcpkgs/@kajongg/patches/*.patch

-

配置:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ sudo cp *.patch ~/git/void-packages/srcpkgs/@kajongg/patches/

-

確認:

$ ls -1 ~/git/void-packages/srcpkgs/@kajongg/patches/
:
01.kajongg.desktop.patch
02.kajongg.po-del.patch
03.kajongg.po-ja.patch

-


3). 作業用のフォルダの削除:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ sudo rm -r a
$ sudo rm -r b

-


4). パッチを実行してみる:

$ cd ~/git/void-packages/
$ ./xbps-src patch @kajongg
:
=> @kajongg-25.12.2_1: running do-patch hook: 00-patches ...
=> @kajongg-25.12.2_1: patching: 01.kajongg.desktop.patch.
=> @kajongg-25.12.2_1: patching: 02.kajongg.po-del.patch.
=> @kajongg-25.12.2_1: patching: 03.kajongg.po-ja.patch.
[user@user-pc void-packages]$ 

-


5). 「デスクトップファイル」が変更されたか確認:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ cat org.kde.kajongg.desktop | grep ja]
Name[ja]=Kajongg 中国式四人麻雀

→OK

-


6). 「翻訳ファイル」が変更されたか確認:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ cat po/ja/kajongg.po | grep ロボット
:
msgstr "すべてのロボットは目に見える未公開の牌でプレイします"
msgstr "テーブルの上でプレイします。空いた席にはロボットプレイヤーが座ります。"

-

$ cat po/ja/kajongg.po | grep 賢者
:
msgstr "賢者 1"
msgstr "賢者 2"
msgstr "賢者 3"

→OK

-


7). 「差分ファイル」の作成に使った「フォルダ」と「ファイル」を削除:

パッケージ化完了時に、作業フォルダが削除されますが、残がいがあると失敗します:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ sudo rm -r a/
$ sudo rm -r b/

-


8). クリーン後、「パッケージ化」してみる:

$ cd ~/git/void-packages/
$ ./xbps-src clean @kajongg
$ ./xbps-src pkg @kajongg

-

エラーを抜粋:
:
[63/72] Generating mo...
FAILED: [code=1] CMakeFiles/pofiles-557994960861117c734f47472767d620 /builddir/@kajongg-25.12.2/build/CMakeFiles/pofiles-557994960861117c734f47472767d620 
cd /builddir/@kajongg-25.12.2/build && /usr/libexec/xbps-src/bin/cmake -DGETTEXT_MSGFMT_EXECUTABLE=/usr/bin/msgfmt -DCOPY_TO=/builddir/@kajongg-25.12.2/build/locale -DPO_DIR=/builddir/@kajongg-25.12.2/po -P /usr/lib64/cmake/KF6I18n/build-pofiles.cmake
/builddir/@kajongg-25.12.2/po/ja/kajongg.po:1678:10: syntax error
/usr/bin/msgfmt: found 1 fatal error

→syntax error が1つ:

po/ja/kajongg.po:1678:10: syntax error

-


9). エラーの確認:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ sudo featherpad po/ja/kajongg.po

-

1678 行目のエラー:
#: src/tilesetselector.py:145
msgctxt "TilesetSelector"
msgid "Description:"
msgstr 説明:""

→囲いに、文字列を挿入する時のズレ:

-


10). エラーの修正:

$ cd ~/git/void-packages/
$ sudo featherpad srcpkgs/@kajongg/patches/03.kajongg.po-ja.patch

-

「#: src/tilesetselector.py:145」で検索:

→行末の「"」のひとつを頭に移動:

+msgstr "説明:"

→Ctrl+S で保存:

-


11). 「パッチ」の確認:

$ ./xbps-src clean @kajongg
:
=> @kajongg-25.12.2_1: cleaning build directory...
=> @kajongg: removing files from destdir...

-

実行:

$ ./xbps-src patch @kajongg
:
=> @kajongg-25.12.2_1: running do-patch hook: 00-patches ...
=> @kajongg-25.12.2_1: patching: 01.kajongg.desktop.patch.
=> @kajongg-25.12.2_1: patching: 02.kajongg.po-del.patch.
=> @kajongg-25.12.2_1: patching: 03.kajongg.po-ja.patch.
[user@user-pc void-packages]$ 

→OK

-


12). 「パッケージ化」

$ ./xbps-src clean @kajongg
=> @kajongg-25.12.2_1: cleaning build directory...

-

$ ./xbps-src pkg @kajongg
:
=> Registering new packages to /host/binpkgs
index: added `@kajongg-25.12.2_1' (x86_64).
index: 63 packages registered.
=> @kajongg-25.12.2_1: removing autodeps, please wait...
=> @kajongg-25.12.2_1: cleaning build directory...
=> @kajongg: removing files from destdir...
[user@user-pc void-packages]$ 

-


13). すでにインストールしている「@kajongg」アプリを削除:

$ sudo xbps-remove @kajongg

-

確認:

$ xbps-query -Rs  @kajongg
$

-


14). パッケージ化された「@kajongg」アプリをインストール:

$ xi @kajongg
:
Name     Action    Version           New version            Download size
@kajongg install   -                 25.12.2_1              - 

-

確認:

$ xbps-query -s @kajongg
:
[*] @kajongg-25.12.2_1 The ancient Chinese Mahjong for 4 players

-


15). 「@kajongg」アプリを起動して、動作確認:

「アプリケーション」→「ゲーム」→「Kajongg 中国式四人麻雀」

→起動メニューが日本語化されました:

-

アプリが起動しました:

-

-

項番 4.」に戻る:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ----- ----- ----- -

70. 参考: もうひとつのツール「pygettext.py」を使った、Python の日本語化:

-

もうひとつのツールの「pygettext.py」は、Python 専用の「pot」の生成ツールです:

以前は Python をインストールすると、標準で「/usr/lib/python3.xx/Tools/i18n/」 に置かれていたらしいのですが、現在はそのフォルダは見つかりません:

-

「Void Linux」では見つかりませんが、

「Xubuntu 24.04 LTS」でインストールできました:

-

1). ツールを含むパッケージを検索:

$ apt search python3-examp 
:
python3-examples/noble-updates,noble-security 3.12.3-0ubuntu2.1 all
  examples for the Python language (default version)

-

2). インストール:

$ sudo apt install python3-examples
:
以下のパッケージが新たにインストールされます:
  python3-examples python3.12-examples

3). ツールの位置を確認:

$ sudo find / -name pygettext.py
:
/usr/share/doc/python3.12/examples/i18n/pygettext.py

-

4). ヘルプ表示で、動作を確認:

$ python3 /usr/share/doc/python3.12/examples/i18n/pygettext.py --help

和訳:

pygettext -- Python の xgettext と同等(1)

多くのシステム (Solaris、Linux、Gnu) は、C プログラムの国際化を容易にする
広範なツールを提供します。これらのツールのほとんどはプログラミング言語
から独立しており、Python プログラム内から使用できます。
Martin von Loewis の研究 [1]は、この点でかなり役立ちます。

ただし、問題が 1 つあります。 xgettext はソース コードをスキャンして
メッセージ文字列を探すプログラムですが、C (または C++) のみを調べます。
Python では、二重引用符文字、三重引用符文字列、生の文字列など、
いくつかの問題が発生します。 xgettext はこれを何も理解していません。

pygettext を入力します。これは、Python の標準トークン化モジュールを
使用して Python ソース コードをスキャンし、GNU xgettext [2] が
C および C++ コード用に生成するものと同じ .pot ファイルを生成します。
そこから、標準の GNU ツールを使用できます。

Python 文字列を翻訳候補としてマークする方法について説明します。
GNU xgettext は、gettext、dgettext、dcgettext、および gettext_noop の
キーワードを認識します。ただし、コード全体に含めるには大量の
テキストが必要になる可能性があります。

C と C++ にはトリックがあります。
それは、C プリプロセッサを使用することです。
ほとんどの国際化された C ソースには gettext() から _() までの #define が
含まれているため、ソースに記述する必要がある内容は大幅に少なくなります。
したがって、これらはどちらも翻訳可能な文字列です:

    gettext("Translatable String")
    _("Translatable String")

もちろん Python にはプリプロセッサがないので、これはあまりうまく機能
しません。 したがって、pygettext はデフォルトで _() のみを検索しますが、
これを拡張する方法については、以下の -k/--keyword フラグを参照してください。

 [1] https://www.python.org/workshops/1997-10/proceedings/loewis.html
 [2] https://www.gnu.org/software/gettext/gettext.html

注: pygettext は、可能な限り GNU xgettext とオプションおよび機能の互換性
を持たせるよう努めます。ただし、一部のオプションがまだ不足しているか、
完全に実装されていません。また、xgettext によるオプション引数を伴う
コマンド ライン スイッチの使用は壊れており、このような場合、
pygettext は追加のスイッチを定義するだけです。

使用法: pygettext [options] inputfile ...

オプション:

    -a
    --extract-all
        すべての文字列を抽出します。

    -d name
    --default-domain=name
        デフォルトの出力ファイルの名前をmessages.potからname.potに変更します。

    -E
    --escape
        非 ASCII 文字を 8 進数のエスケープ シーケンスに置き換えます。

    -D
    --docstrings
        モジュール、クラス、メソッド、関数のドキュメント文字列を抽出します。
        これらは _() マーカーで囲む必要はなく、Python がドキュメント文字列と
        して認識するためには囲む必要もありません。(-X オプションも参照してください)

    -h
    --help
        このヘルプ メッセージを表示して終了します。

    -k word
    --keyword=word
        デフォルトのセットに加えて検索するキーワードは次のとおりです:
        _

        コマンドラインでは複数の -k フラグを指定できます。

    -K
    --no-default-keywords
        デフォルトのキーワードセットを無効にします (上記を参照)。
         -k/--keyword オプションを使用して明示的に追加されたキーワードは
        引き続き認識されます。

    --no-location
        ファイル名/行番号の場所に関するコメントは記述しないでください。

    -n
    --add-location
        抽出された各文字列がソース内のどこにあるかを示すファイル名/行番号
        の場所のコメントを記述します。 これらの行は、各 msgid の前に表示
        されます。 コメントのスタイルは、-S/--style オプションによって制御
        されます。 これがデフォルトです。

    -o filename
    --output=filename
        デフォルトの出力ファイルの名前をmessages.potからfilenameに変更します。
        ファイル名が `-' の場合、出力は標準出力に送信されます。

    -p dir
    --output-dir=dir
        出力ファイルはディレクトリ dir に配置されます。

    -S stylename
    --style stylename
        場所のコメントに使用するスタイルを指定します。 次の 2 つのスタイルが
        サポートされています:

        Solaris  # File: filename, line: line-number
        GNU      #: filename:line

        スタイル名では大文字と小文字が区別されません。 GNU スタイルがデフォルトです。

    -v
    --verbose
        処理中のファイルの名前を出力します。

    -V
    --version
        pygettext のバージョンを出力して終了します。

    -w columns
    --width=columns
        出力の幅を列に設定します。

    -x filename
    --exclude-file=filename
        入力ファイルから抽出されない文字列のリストを含むファイルを指定します。
        除外する各文字列は、ファイル内で単独で 1 行に存在する必要があります。

    -X filename
    --no-docstrings=filename
        docstring を抽出しないファイルのリスト (1 行に 1 つ) を含むファイルを指定
        します。 これは、上記の -D オプションと組み合わせた場合にのみ役立ちます。

`inputfile' が - の場合、標準入力が読み込まれます。

-

5). ファイル属性の確認:

$ ls -l /usr/share/doc/python3.12/examples/i18n/
:
-rwxr-xr-x 1 root root  5029  1月 23 05:57 makelocalealias.py
-rwxr-xr-x 1 root root  7591  1月 23 05:57 msgfmt.py
-rwxr-xr-x 1 root root 24224  1月 23 05:57 pygettext.py

-

$ ls -l /usr/share/doc/python3.12/examples/i18n/pygettext.py
:
-rwxr-xr-x 1 root root 24224  1月 23 05:57 /usr/share/doc/python3.12/examples/i18n/pygettext.py

-

6). 「Void Linux」で使えるように、「Gメール」の下書きに添付:

「gettext」を使った「Python」プログラムの日本語化がうまく行かないときに使おうと準備しました:

こちらのツールを使った、「POT ファイル」の作成は未確認です:
Python プログラム専用のツールなので、もっと楽に「POT ファイル」を生成できる可能性があります:

(残念ながら、ヘルプを見る限りでは、ほぼ同等の機能みたい)

-

現在では、「Ubuntu」では(サンプルフォルダにインストールされ)サンプル扱い?ですし、
「Void Linux」のリポジトリにはありません。メインからは外れた印象です。

「gettext」を使いこなした方が(将来的には)無難かも:

-

参考:

Python(標準ライブラリのみ)で国際化対応する方法

-

-


まとめ

前回は、 古い「ミニPC」にて、「Void Linux」の「xbps-src」のビルド環境で、 「中国式四人麻雀」ゲームの「@kajongg」を移植しました:

プレイに支障ないけど、日本語化しても多くの翻訳漏れがあります:
なので、今回は、イチから「.po」ファイルを作り直して、翻訳してみました:

-

「Python」プログラムの場合の「POT ファイル」の作成は、すでに出来上がった「PO ファイル」と「ソースファイル」しか手がかりがありません。 どのように国際化されたのか、トライしながら理解しました。

国際化の関数は(翻訳しやすくするためにジャンル分け?されているらしく)多くて、 使われている関数?によって「POT ファイル」を作成するツールのパラメータの変更が必要で、 手間がかかりました。

-

おかげで、「Python」プログラムの「POT ファイル」を「手動」で作る のは簡単でなく、手間がかかる、 ことを知りました。勉強になりました。

-

-

-


-

-

    目次

-

「投稿の先頭 へ」

-

-


-

「この目次 の先頭へ」

「本編の目次 に戻る」

-

「Void Linux」の「xbps-src」にて、「@kajongg」ゲームを移植〈H179-11〉

登録日: 2026-02-08 / 更新日: 2026-03-28

前回 は、古い「ミニPC」(SSD) に「Void Linux」をインストールして、GUI の「Xfce」デスクトップ環境を追加、そして「xbps-src」のビルド環境を使えるようにしました。

-

今回は、その「xbps-src」のビルド環境で、 「中国式四人麻雀」ゲームの「@kajongg」を移植しました:

-

Python 版の QT アプリで、ビルドして「パッケージ化」できたら完了でなく、
インストール後に Python の「PyQt」(wikipedia) で動くようにする必要があり、少し手間取りました:

-

その備忘録です。

-

-

使用したPC は「ASUS Chromebox CN60」で、F/W を置換して「UEFI 立ち上げ」にしています。
プロセッサは第 4世代の「Intel Celeron 2955U」です。

-

(注)リンクを戻るときはブラウザの左上の「←」をクリック
Android スマホであれば「ホーム」ボタン隣の「<」をタップ

-

-


目次

-

前回の作業:

古い「ミニPC」の「Void Linux」に、「xbps-src」のビルド環境を移行〈H175-10〉

-

今回の作業:

-

  1. 「xbps-src」のビルド環境を更新:

  2. 「仮想マシン」なら「クローン」を作成:

  3. 「@kajongg」ゲームの「テンプレート」を作成:

  4. 「@kajongg」ゲームのパッチを作成:

  5. 「@kajongg」ゲームの「パッケージ化」と「インストール」:

-

参考にできそうな作業:

-

  1. 「@kajongg」ゲームの移植について:

  2. 「@kajongg」ゲームのパッチを作成した履歴:

  3. 「@kajongg」ゲームを「パッケージ化」した時のメッセージ:

-

「まとめ へ」

「目次詳細 へ」

-

-


- --- - --- - --- - --- - --- - --- - --- -

「Void-Linux」(Xfce) を起動:

-

移植した「@kajongg 中国式四人麻雀」を起動:

→プレイには支障ありませんが、

単に「.po」ファイルを翻訳しただけでは、多くの翻訳漏れが出ました:

イチから「.po」ファイルを作り直す必要があるみたい:

-

ちなみに、「ロボット」でなく「知らない人」と翻訳すると温かみが出るかも:

-

-


- --- - --- - --- - --- - --- - --- - --- --

「Void Linux」について:

-

1). 公式サイト:

The Void (Linux) distribution

英語のみのサイトです:

-

2). 「Void Linux」について:

こちら」を参照:

-

3). 「xbps-src」について:

こちら」を参照:

-

-


現在のOS のバージョンを表示:

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

OS : 「Void Linux」

2026-02-05 現在

-

カーネル:
$ uname -r
6.12.68_1

→Ubuntu よりも進んでいます:

-

リリース:
$ cat /etc/os-release
:
NAME="Void"
ID="void"
PRETTY_NAME="Void Linux"
HOME_URL="https://voidlinux.org/"
DOCUMENTATION_URL="https://docs.voidlinux.org/"
LOGO="void-logo"
ANSI_COLOR="0;38;2;71;128;97"

DISTRIB_ID="void"

→ローリングリリースです:

-

「x11」と「Wayland」のどちらで動作してるか確認:
$ echo $XDG_SESSION_TYPE
x11

→「Wayland」ではなく、「x11」で動作しています。

-

-


- --- - --- - --- - --- - --- - --- - --- ---

1. 事前作業:

-

-


- --- - --- - --- - --- - --- - --- - --- ----

1-1. 「xbps-src」のビルド環境を更新:

-

日々、「xbps-src」のビルド環境は更新されています:

アプリの移植時に、意味不明のメッセージが表示されるときは、一度更新してみると良いです:

-


1). システム更新:

$ sudo xbps-install -Su

-


2). 再起動:

$ sudo reboot

-


3). ローカルリポジトリの更新:

$ cd ~/git/void-packages/
$ git pull
:
remote: Enumerating objects: 779, done.
remote: Counting objects: 100% (779/779), done.
remote: Compressing objects: 100% (284/284), done.
remote: Total 556 (delta 330), reused 381 (delta 203), pack-reused 0 (from 0)
Receiving objects: 100% (556/556), 75.55 KiB | 519.00 KiB/s, done.
Resolving deltas: 100% (330/330), completed with 115 local objects.
From https://github.com/void-linux/void-packages
   d8dadc96..e5f3d01c  master     -> origin/master
Updating d8dadc96..e5f3d01c
Fast-forward
 common/scripts/lint-commits                        |  2 +
 common/shlibs                                      |  1 +
 srcpkgs/Gokapi/template                            |  4 +-
 srcpkgs/SDL3/template                              |  4 +-
 srcpkgs/acme.sh/template                           |  4 +-
 srcpkgs/aide/template                              |  4 +-
 srcpkgs/anthy-unicode/patches/fix-depgraph.patch   | 53 ++++++++++++++++++++++
 srcpkgs/anthy-unicode/template                     | 19 ++++----
 srcpkgs/babl/template                              |  4 +-
 srcpkgs/badwolf/template                           |  6 +--
 srcpkgs/borgmatic/template                         |  4 +-
 srcpkgs/choose/template                            |  4 +-
 .../cppcheck/patches/musl-no-feenableexcept.patch  | 14 +++---
 srcpkgs/cppcheck/template                          |  9 +++-
 srcpkgs/crispy-doom/template                       |  4 +-
 srcpkgs/datovka/template                           |  4 +-
 srcpkgs/dnsmasq/template                           |  4 +-
 srcpkgs/dooble/template                            |  3 +-
 srcpkgs/dunst/template                             |  8 ++--
 srcpkgs/electron-tasje/template                    |  4 +-
 srcpkgs/expat/template                             |  4 +-
 srcpkgs/fcitx5-anthy/template                      |  2 +-
 srcpkgs/fcitx5-zhuyin/template                     |  6 ++-
 srcpkgs/fish-shell/template                        |  4 +-
 srcpkgs/fooyin/patches/qt6.10.patch                | 11 +++++
 srcpkgs/gdm/patches/drop-wayland-udev-rules.patch  | 41 +++++++++++++++++
 srcpkgs/gdm/template                               |  2 +-
 srcpkgs/gef/template                               |  4 +-
 srcpkgs/gonic/template                             |  4 +-
 srcpkgs/halloy/template                            |  4 +-
 srcpkgs/hcloud/template                            |  4 +-
 srcpkgs/hosts-update/patches/disable-systemd.patch | 12 -----
 srcpkgs/hosts-update/template                      | 16 -------
 srcpkgs/hwids/template                             |  4 +-
 srcpkgs/ibus-anthy/template                        |  8 +++-
 srcpkgs/ibus-libpinyin/template                    | 17 +++----
 srcpkgs/inetutils/template                         |  6 +--
 srcpkgs/kcm-wacomtablet/template                   |  2 +-
 srcpkgs/kde-cli-tools/template                     |  2 +-
 srcpkgs/kdeconnect/template                        |  2 +-
 srcpkgs/kf6-purpose/template                       |  2 +-
 srcpkgs/kinfocenter/template                       |  2 +
 srcpkgs/konqueror/template                         |  2 +-
 srcpkgs/ktouch/template                            |  1 +
 srcpkgs/kwin-x11/template                          |  1 +
 srcpkgs/kwin/template                              |  2 +-
 srcpkgs/lazydocker/template                        |  4 +-
 srcpkgs/libkdegames/template                       |  1 +
 srcpkgs/libpinyin/patches/cross-qemu.patch         | 15 ++++++
 srcpkgs/libpinyin/template                         | 16 ++++---
 srcpkgs/libplasma/template                         |  2 +-
 srcpkgs/libvirt/template                           |  4 +-
 srcpkgs/limine/template                            |  4 +-
 srcpkgs/litecli/template                           | 10 ++--
 srcpkgs/m17n-lib/template                          |  7 +--
 srcpkgs/maliit-keyboard/template                   |  8 +---
 srcpkgs/mangowc/template                           |  4 +-
 srcpkgs/mergiraf/template                          |  4 +-
 srcpkgs/nasa-wallpaper/template                    |  4 +-
 srcpkgs/networkmanager-dmenu/template              |  4 +-
 srcpkgs/nfs-utils/files/nfs-server/run             |  5 --
 srcpkgs/nfs-utils/template                         |  2 +-
 srcpkgs/noto-fonts-ttf/template                    |  6 +--
 srcpkgs/nvtop/template                             |  4 +-
 srcpkgs/okular/template                            |  2 +-
 srcpkgs/opus/template                              |  4 +-
 srcpkgs/oxygen-qt6/template                        |  2 +-
 srcpkgs/pekwm/template                             | 14 +++---
 srcpkgs/pgcli/template                             |  8 ++--
 srcpkgs/pgmetrics/template                         |  4 +-
 srcpkgs/plasma-pa/template                         |  2 +-
 srcpkgs/plasma-workspace/template                  |  2 +-
 srcpkgs/powerdevil/template                        |  2 +-
 srcpkgs/python3-blessed/template                   |  4 +-
 srcpkgs/python3-cli_helpers/template               |  8 ++--
 srcpkgs/python3-ipython/template                   |  4 +-
 srcpkgs/python3-narwhals/template                  |  4 +-
 srcpkgs/python3-numpy/template                     |  4 +-
 srcpkgs/python3-orjson/template                    |  4 +-
 srcpkgs/python3-pip/template                       |  6 +--
 srcpkgs/python3-pooch/template                     |  6 +--
 srcpkgs/python3-pyqt6-sip/template                 |  6 +--
 srcpkgs/python3-pyqt6/template                     |  6 +--
 srcpkgs/python3-pyside6/patches/config.patch       | 24 +++++-----
 .../python3-pyside6/patches/no-python-suffix.patch |  2 +-
 srcpkgs/python3-pyside6/template                   |  6 +--
 srcpkgs/python3-pyside6/update                     |  5 +-
 srcpkgs/python3-rich/template                      |  6 +--
 srcpkgs/python3-starlette/template                 |  4 +-
 srcpkgs/python3-ytmusicapi/template                |  4 +-
 srcpkgs/qt6-pdf/template                           |  3 +-
 srcpkgs/qtcurve/template                           |  2 +-
 srcpkgs/quickshell/template                        |  6 +--
 srcpkgs/removed-packages/template                  |  5 +-
 srcpkgs/rofi-rbw/template                          |  6 +--
 srcpkgs/rust-bindgen/template                      |  6 +--
 .../patches/fix-python3.12-importlib.patch         | 28 ------------
 srcpkgs/safeeyes/template                          | 12 ++---
 srcpkgs/schismtracker/template                     |  4 +-
 srcpkgs/sqlmap/template                            |  4 +-
 srcpkgs/subtitleeditor/template                    |  4 +-
 srcpkgs/synapse/template                           |  4 +-
 srcpkgs/syncthing/template                         |  4 +-
 srcpkgs/tailscale/template                         |  4 +-
 srcpkgs/texlive-lang/template                      | 11 +----
 srcpkgs/texlive-most/template                      | 29 ++++--------
 srcpkgs/tinymist/template                          |  4 +-
 srcpkgs/topgrade/template                          |  4 +-
 srcpkgs/tqsl/template                              |  4 +-
 srcpkgs/uim/template                               |  2 +-
 srcpkgs/urh/patches/cython-3.1.patch               | 20 --------
 srcpkgs/urh/patches/numpy.patch                    | 22 ---------
 srcpkgs/urh/template                               | 13 +++---
 srcpkgs/uv/template                                |  4 +-
 srcpkgs/vivaldi/template                           |  6 +--
 srcpkgs/warzone2100/template                       |  2 +-
 srcpkgs/wimlib/template                            |  4 +-
 srcpkgs/xcaddy/template                            |  4 +-
 srcpkgs/xpra/template                              |  4 +-
 srcpkgs/yt-dlp/template                            |  4 +-
 120 files changed, 408 insertions(+), 392 deletions(-)
 create mode 100644 srcpkgs/anthy-unicode/patches/fix-depgraph.patch
 create mode 100644 srcpkgs/gdm/patches/drop-wayland-udev-rules.patch
 delete mode 100644 srcpkgs/hosts-update/patches/disable-systemd.patch
 delete mode 100644 srcpkgs/hosts-update/template
 create mode 100644 srcpkgs/libpinyin/patches/cross-qemu.patch
 delete mode 100644 srcpkgs/safeeyes/patches/fix-python3.12-importlib.patch
 delete mode 100644 srcpkgs/urh/patches/cython-3.1.patch
 delete mode 100644 srcpkgs/urh/patches/numpy.patch

→移植作業で、おかしなメッセージが表示されるので、更新してみたら、
やはり、今回の移植で鍵になる「python3-pyqt」関連の更新が含まれていました:

-


4). 「ブートストラップ パッケージ」の更新:

$ cd ~/git/void-packages/
$ ./xbps-src bootstrap-update
:
=> xbps-src: updating repositories for host (x86_64)...
[*] Updating repository `https://repo-default.voidlinux.org/current/bootstrap/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/nonfree/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/debug/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/multilib/bootstrap/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/multilib/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/multilib/nonfree/x86_64-repodata' ...
=> xbps-src: updating software in / masterdir...
=> xbps-src: cleaning up / masterdir...
=> xbps-src: removing autodeps, please wait...

-


5). 再起動:

$ sudo reboot

-

-


- --- - --- - --- - --- - --- - --- - --- -----

1-2. もし、「仮想マシン」で作業しているなら「クローン」を作成:

-

クローンを作成しておけば、思い切ったトライができます:

-

操作例は「こちら」を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- -

2. 中国式四人麻雀「@kajongg」ゲームの移植:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- --

2-1. 「@kajongg」ゲームの移植について:

-

「中国式四人麻雀」 (kajongg) ゲームは、 「Void Linux」のリポジトリからインストールできません:

 動かしたいときは、今のところ「Flatpak」でインストールすることになります。

-

今回は、その「@kajongg」ゲームを「Void Linux」に移植してみました:

-

公式サイト: Kajongg

-

ソース:   Browse source code

リリース:  25.12.02 (2026-02-05)

-

依存パッケージ:

→ソースの「CMakeLists.txt」にて、「find_package」をキーにして検索しました:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ---

2-2. 「@kajongg」の依存パッケージを確認:

-

公式サイト には、「debian.control」などの Ubuntu 向けの情報しか見当たりません:

パッケージ名が「Void Linux」に近い「Arch Linux」系なら使えるので、探してみました:

-


1). アプリの「パッケージ化」(ビルド)時に必要なパッケージ:

参考: PKGBUILD · main · Arch Linux / Packaging / Packages / kajongg

-

「Void Linux」でのパッケージ名:
libkmahjongg-devel
python3
python3-QtPy
python3-Twisted
python3-zope.interface
python3-pyqt6-bindings
extra-cmake-modules
kf6-kdoctools-devel

-


2). アプリの「実行時」に必要なパッケージ:

例. 「Alter Linux Xfce」(Arch 系)にて、 「kajongg」(バイナリ)をインストール:

$ sudo apt install kajongg
自動でインストールされたパッケージ:
パッケージ(12)

python-attrs          → python3-attrs
python-automat         → python3-automat
python-click          → python3-click
python-constantly       → python3-constantly
python-hyperlink        → python3-hyperlink
python-increment        → python3-incremental
python-pyqt5          → python3-pyqt6
python-pyqt5-sip        → python3-pyqt6-sip
python-twisted         → python3-Twisted
python-typing_extensions   → python3-typing_extensions
python-zope-interface     → python3-zope.interface
kajongg             → 「本パッケージ」
→つまり、「kajongg」の「実行時」に必要なパッケージです:

使うのは、この中の数個:

-


3). 「音声」を聞きたい場合にインストール:

vorbis-tools

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----

3. 「@kajongg」ゲームの「テンプレート」を作成:

-


1). 「テンプレート」フォルダを作成:

$ cd ~/git/void-packages/
$ mkdir -p srcpkgs/@kajongg/patches/

→日本語化するので、「patches/」まで作っておくのがミソ:

-


2). 「テンプレート」ファイルを作成:

$ sudo featherpad ~/git/void-packages/srcpkgs/@kajongg/template

↓ すべて貼付け:

# Template file for '@kajongg'
pkgname=@kajongg
version=25.12.2
revision=1
build_style=cmake
_pyqt="python3-QtPy python3-Twisted python3-zope.interface"
hostmakedepends="python3 qt6-tools pkg-config"
makedepends="gettext extra-cmake-modules qt6-svg-devel qt6-widgets 
   python3 ${_pyqt}
   kf6-ki18n-devel kf6-kdoctools-devel libkmahjongg-devel"
depends="python3-pyqt6 ${_pyqt} 
   python3-pyqt6-svg python3-pyqt6-gui python3-pyqt6-widgets vorbis-tools"
short_desc="The ancient Chinese Mahjong for 4 players"
maintainer="Kubuntu Developers <kubuntu-devel@lists.ubuntu.com>"
license="GPL-2.0-or-later"
homepage="https://apps.kde.org/kajongg/"
distfiles="https://invent.kde.org/games/kajongg/-/archive/v${version}/kajongg-v${version}.tar.gz"
checksum=390808d9b8f89f8f52a546ce17c008ef6255f31f3914d5796347a9ba081179a0
python_version=3

→Ctrl+S で保存:

-


3). エラー回避のために、いくつかのパッケージを追加しました:

-

(1). 「パッケージ化」(ビルド)時に必要なパッケージは、

「hostmakedepends=」と「makedepends=」で指定しました:

-

「パッケージ化」後のパッケージのインストール時に、自動でインストールされる、つまり、

(2). 実行時に必要なパッケージは、

(今回の場合は「qtpy」関連を)「depends=」で指定しました:

-

(3). インストール時に「画面表示しない」問題が出たので、

「端末」で「$ kajongg」としてアプリを起動し、

表示された、不足しているパッケージを「depends=」で指定しました:

-

エラー例.  ImportError: cannot import name 'QtWidgets' from 'PyQt6'

-

-


- --- - --- - --- - --- - --- - --- - --- ----- -----

4. 「@kajongg」ゲームのパッチを作成:

-

日本語化のパッチです:

-

パッチを作成した履歴は「項番 40.」を参照:

-


1). 「パッチ1」(起動メニューの日本語化)の作成:

$ cd ~/git/void-packages/srcpkgs/@kajongg/patches/
$ featherpad 01.kajongg.desktop.patch

↓ すべて貼付け:

--- a/org.kde.kajongg.desktop    2026-02-06 21:32:09.838140330 +0900
+++ b/org.kde.kajongg.desktop   2026-02-06 21:38:08.057667441 +0900
@@ -25,6 +25,7 @@
 Name[ia]=Re Kajongg
 Name[is]=Kajongg
 Name[it]=Kajongg
+Name[ja]=Kajongg 中国式四人麻雀
 Name[ka]=Kajongg
 Name[kk]=Kajongg
 Name[km]=​Kajongg

お尻に 2つの空行を追加

→Ctrl+S で保存:

-


2). 「パッチ2」(アプリの日本語化)の作成:

既存の「翻訳ファイル」は、あまり翻訳されていないし、
アプリの更新に伴う翻訳漏れが心配なので、イチから作成し直した方が良かったかも:

-

$ cd ~/git/void-packages/srcpkgs/@kajongg/patches/
$ featherpad 02.kajongg-ja.po.patch

↓ すべて貼付け:

--- a/po/ja/kajongg.po   2026-02-06 21:31:30.255209113 +0900
+++ b/po/ja/kajongg.po  2026-02-08 00:40:26.080718170 +0900
@@ -21,7 +21,7 @@
 msgstr "ゲーム"
 
 msgid "View"
-msgstr ""
+msgstr "表示"
 
 msgid "Toolbar"
 msgstr "ツールバー"
@@ -72,11 +72,11 @@
 
 #: src/board.py:385
 msgid "Choose from"
-msgstr ""
+msgstr "選択"
 
 #: src/chat.py:51
 msgid "Time"
-msgstr ""
+msgstr "時間"
 
 #: src/chat.py:51 src/playerlist.py:90
 #, fuzzy
@@ -87,21 +87,21 @@
 
 #: src/chat.py:51
 msgid "Message"
-msgstr ""
+msgstr "メッセージ"
 
 #: src/chat.py:125
 msgid "Chat on table %1 at %2"
-msgstr ""
+msgstr "テーブル %1、%2 でチャット"
 
 #: src/client.py:69
 msgctxt "table status"
 msgid "Suspended"
-msgstr ""
+msgstr "一時停止"
 
 #: src/client.py:74
 msgctxt "table status"
 msgid "Running"
-msgstr ""
+msgstr "実行"
 
 #: src/client.py:75
 msgctxt "table status"
@@ -110,33 +110,33 @@
 
 #: src/configdialog.py:47
 msgid "Show tile shadows"
-msgstr ""
+msgstr "牌の影を表示"
 
 #: src/configdialog.py:50
 msgid "Rearrange undisclosed tiles to melds"
-msgstr ""
+msgstr "未公開の牌を含めて再配置"
 
 #: src/configdialog.py:53
 #, fuzzy
 #| msgid "Show only pending games"
 msgid "Show only possible actions"
-msgstr "進行中のゲームのみを表示する"
+msgstr "可能なアクションのみを表示"
 
 #: src/configdialog.py:56
 msgid "Propose what to do"
-msgstr ""
+msgstr "何をすべきかを提案"
 
 #: src/configdialog.py:62
 msgid "Animation speed:"
-msgstr ""
+msgstr "アニメーション速度:"
 
 #: src/configdialog.py:66
 msgid "Use sounds if available"
-msgstr ""
+msgstr "利用可能な場合はサウンドを使用"
 
 #: src/configdialog.py:69
 msgid "Let others hear my voice"
-msgstr ""
+msgstr "私の声を聞かせます"
 
 #: src/configdialog.py:103
 msgctxt "kajongg"
@@ -153,40 +153,42 @@
 
 #: src/deferredutil.py:272 src/deferredutil.py:436
 msgid "The game server lost connection to player %1"
-msgstr ""
+msgstr "ゲームサーバーはプレイヤー %1 への接続を失いました"
 
 #: src/deferredutil.py:275
 msgid ""
 "Error for player %1: %2\n"
 "%3"
 msgstr ""
+"プレイヤー %1 のエラー: %2\n"
+"%3"
 
 #: src/differ.py:72
 msgctxt "Kajongg"
 msgid "Rule"
-msgstr ""
+msgstr "ルール"
 
 #: src/differ.py:127
 msgctxt "@title:window"
 msgid "Compare"
-msgstr ""
+msgstr "比較"
 
 #: src/differ.py:170 src/differ.py:172
 msgctxt "Kajongg-Rule"
 msgid "not defined"
-msgstr ""
+msgstr "未定義"
 
 #: src/game.py:404
 msgid "Score computed manually"
-msgstr ""
+msgstr "スコアは手動で計算されます"
 
 #: src/game.py:502
 msgid "Player %1 not known"
-msgstr ""
+msgstr "プレイヤー %1 は不明です"
 
 #: src/game.py:925
 msgid "Short living wall: Tile is invisible, hence dangerous"
-msgstr ""
+msgstr "短いリビングの壁: 牌は目に見えないので危険です"
 
 #: src/games.py:95 src/playerlist.py:67 src/tables.py:67
 msgid "Players"
@@ -194,7 +196,7 @@
 
 #: src/games.py:95
 msgid "Started"
-msgstr ""
+msgstr "開始"
 
 #: src/games.py:107
 #, fuzzy
@@ -221,13 +223,15 @@
 
 #: src/games.py:139
 msgid "Show only pending games"
-msgstr "進行中のゲームのみを表示する"
+msgstr "保留中のゲームのみを表示"
 
 #: src/games.py:247
 msgid ""
 "Do you really want to delete <numid>%1</numid> games?<br>This will be final, "
 "you cannot cancel it with the cancel button"
 msgstr ""
+"本当に <numid>%1</numid> 個のゲームを削除しますか?<br>これは最終的な削除であり、"
+"キャンセルボタンでキャンセルすることはできません。"
 
 #: src/guiutil.py:134 src/kdestub.py:120 src/kdestub.py:123
 msgid "Kajongg"
@@ -235,111 +239,116 @@
 
 #: src/humanclient.py:66
 msgid "Which chow do you want to expose?"
-msgstr ""
+msgstr "どのレシピを公開したいですか?"
 
 #: src/humanclient.py:104
 msgid "Which kong do you want to declare?"
-msgstr ""
+msgstr "どのカンを宣言しますか?"
 
 #: src/humanclient.py:172
 msgid "Choose"
-msgstr ""
+msgstr "選択"
 
 #: src/humanclient.py:383
 msgid "You cannot say %1"
-msgstr ""
+msgstr "%1 とは宣言できません"
 
 #: src/humanclient.py:608
 msgid "Player %1 has left the table"
-msgstr ""
+msgstr "プレイヤー %1 がテーブルから離れました"
 
 #: src/humanclient.py:671
 msgid ""
 "The game on table <numid>%1</numid> can begin. Are you ready to play now?"
 msgstr ""
+"テーブル <numid>%1</numid> でゲームを開始できます。今すぐプレイしますか?"
 
 #: src/humanclient.py:691
 msgid "Ready for next hand?"
-msgstr ""
+msgstr "次の役の準備はできていますか?"
 
 #: src/humanclient.py:967
 msgid "The connection to the server %1 broke, please try again later."
-msgstr ""
+msgstr "サーバー %1 への接続が切断されました。後でもう一度試してください。"
 
 #: src/kajongg.py:81 src/kdestub.py:1092
 msgid "Mah Jongg - the ancient Chinese board game for 4 players"
-msgstr ""
+msgstr "麻雀 - 古代中国の 4 人用ボード ゲーム"
 
 #: src/kajongg.py:85
 msgid "all robots play with visible concealed tiles"
-msgstr ""
+msgstr "すべてのロボットは目に見える未公開の牌でプレイします"
 
 #: src/kajongg.py:86
 msgid "start with demo mode"
-msgstr ""
+msgstr "デモモードを開始"
 
 #: src/kajongg.py:87
 msgid "login to HOST"
-msgstr ""
+msgstr "ホストにログイン"
 
 #: src/kajongg.py:88
 msgid "start new TABLE"
-msgstr ""
+msgstr "新しいテーブルを開始"
 
 #: src/kajongg.py:89
 msgid "join TABLE"
-msgstr ""
+msgstr "テーブルに参加"
 
 #: src/kajongg.py:90
 msgid "use RULESET without asking"
-msgstr ""
+msgstr "何も尋ねずにルールセットを使います"
 
 #: src/kajongg.py:91
 msgid "prefer PLAYER for next login"
-msgstr ""
+msgstr "次回のログインでは プレイヤー を優先します"
 
 #: src/kajongg.py:92
 msgid "use AI variant for human player in demo mode"
-msgstr ""
+msgstr "デモモードで人間のプレイヤーに AI バリアントを使用します"
 
 #: src/kajongg.py:93
 msgid "write statistics to CSV"
-msgstr ""
+msgstr "統計情報を CSV に書き込み"
 
 #: src/kajongg.py:94
 msgid "show all available rulesets"
-msgstr ""
+msgstr "利用可能なすべてのルールセットを表示"
 
 #: src/kajongg.py:95
 msgid "for testing purposes: Initializes the random generator"
-msgstr ""
+msgstr "テスト目的: ランダムジェネレータを初期化"
 
 #: src/kajongg.py:97
 msgid "show no graphical user interface. Intended only for testing"
-msgstr ""
+msgstr "グラフィカル ユーザー インターフェイスは表示されません。テストのみを目的としています"
 
 #: src/kajongg.py:99
 msgid ""
 "use a dedicated server already running and listening on SOCKET. Intended "
 "only for testing"
 msgstr ""
+"すでに稼働しSOCKETをリッスン(接続要求待ち)している専用サーバーを使用します。"
+"テストのみを目的としています。"
 
 #: src/kajongg.py:101
 msgid ""
 "use a dedicated server already running and listening on PORT. Intended only "
 "for testing"
 msgstr ""
+"すでに稼働し、PORTで待機している専用サーバーを使用します。"
+"テストのみを目的としています。"
 
 #: src/kdestub.py:278
 #, fuzzy
 #| msgctxt "kajongg"
 #| msgid "OK"
 msgid "&OK"
-msgstr "OK"
+msgstr "OK(&O)"
 
 #: src/kdestub.py:279
 msgid "&Apply"
-msgstr ""
+msgstr "適用(&A)"
 
 #: src/kdestub.py:280
 msgid "&Cancel"
@@ -347,135 +356,139 @@
 
 #: src/kdestub.py:281 src/kdestub.py:469
 msgid "&Help"
-msgstr ""
+msgstr "ヘルプ(&H)"
 
 #: src/kdestub.py:282
 msgid "&Defaults"
-msgstr ""
+msgstr "デフォルト(&D)"
 
 #: src/kdestub.py:352
 #, fuzzy
 #| msgid "Toolbar"
 msgctxt "@action:inmenu"
 msgid "Show St&atusbar"
-msgstr "ツールバー"
+msgstr "ステータスバーを表示(&a)"
 
 #: src/kdestub.py:358
 #, fuzzy
 #| msgid "Toolbar"
 msgctxt "@action:inmenu"
 msgid "Show &Toolbar"
-msgstr "ツールバー"
+msgstr "ツールバーを表示(&T)"
 
 #: src/kdestub.py:364
 #, fuzzy
 #| msgid "Kajongg"
 msgid "Configure Tool&bars..."
-msgstr "Kajongg"
+msgstr "ツールバーを設定...(&b)"
 
 #: src/kdestub.py:366
 msgid "Configure toolbars"
-msgstr ""
+msgstr "ツールバーの設定"
 
 #: src/kdestub.py:373
 #, fuzzy
 #| msgid "Kajongg"
 msgid "Configure &Kajongg..."
-msgstr "Kajongg"
+msgstr "Kajongg の設定...(&K)"
 
 #: src/kdestub.py:375 src/kdestub.py:1153
 msgid "Configure"
-msgstr ""
+msgstr "設定"
 
 #: src/kdestub.py:465
 #, fuzzy
 #| msgctxt "kajongg"
 #| msgid "Game"
 msgid "&Game"
-msgstr "ゲーム"
+msgstr "ゲーム(&G)"
 
 #: src/kdestub.py:466
 msgid "&View"
-msgstr ""
+msgstr "表示(&V)"
 
 #: src/kdestub.py:467
 msgid "&Settings"
-msgstr ""
+msgstr "設定(&S)"
 
 #: src/kdestub.py:477
 msgctxt "@action:inmenu"
 msgid "&Help"
-msgstr ""
+msgstr "ヘルプ(&H)"
 
 #: src/kdestub.py:480 src/kdestub.py:857
 msgid "Switch Application Language"
-msgstr ""
+msgstr "アプリケーション言語を切り替えます"
 
 #: src/kdestub.py:484
 #, fuzzy
 #| msgid "Kajongg"
 msgctxt "@action:inmenu"
 msgid "About &Kajongg"
-msgstr "Kajongg"
+msgstr "Kajongg について(&K)"
 
 #: src/kdestub.py:862
 msgid "Please choose the language which should be used for this application:"
-msgstr ""
+msgstr "このアプリケーションに使用する言語を選択してください:"
 
 #: src/kdestub.py:881
 msgid "Add Fallback Language"
-msgstr ""
+msgstr "フォールバック(代替え時に使われる)言語の追加"
 
 #: src/kdestub.py:893
 msgid "Primary language:"
-msgstr ""
+msgstr "主な言語:"
 
 #: src/kdestub.py:893
 msgid "Fallback language:"
-msgstr ""
+msgstr "フォールバック(代替え時に使われる)言語"
 
 #: src/kdestub.py:899
 msgid "Remove"
-msgstr ""
+msgstr "削除"
 
 #: src/kdestub.py:903
 msgid ""
 "This is the main application language which will be used first, before any "
 "other languages."
 msgstr ""
+"これは、他の言語よりも先に最初に使用されるメインの"
+"アプリケーション言語です。"
 
 #: src/kdestub.py:905
 msgid ""
 "This is the language which will be used if any previous languages do not "
 "contain a proper translation."
 msgstr ""
+"これは、以前の言語に適切な翻訳が含まれていない場合に使用"
+"される言語です。"
 
 #: src/kdestub.py:1035
 #, fuzzy
 #| msgid "Kajongg"
 msgid "About Kajongg"
-msgstr "Kajongg"
+msgstr "Kajongg について"
 
 #: src/kdestub.py:1055
 msgid "Version: %1"
-msgstr ""
+msgstr "バージョン: %1"
 
 #: src/kdestub.py:1056
 msgid "Protocol version %1"
-msgstr ""
+msgstr "プロトコルバージョン %1"
 
 #: src/kdestub.py:1059
 msgid "Original author"
-msgstr ""
+msgstr "原作者"
 
 #: src/kdestub.py:1066
 msgid "KDE Frameworks (not installed or not usable)"
-msgstr ""
+msgstr "KDE フレームワーク (インストールされていないか、使用できません)"
 
 #: src/kdestub.py:1072
 msgctxt "kajongg"
 msgid "Using versions %1"
-msgstr ""
+msgstr "バージョン %1 を使用しています"
 
 # skip-rule: player2
 #: src/kdestub.py:1093
@@ -484,13 +497,14 @@
 "Jongg solitaire please use the application kmahjongg."
 msgstr ""
 "これは 4 人でプレイする伝統的なマージャンです。マージャン牌を使ったソリティア"
-"ゲームを探しているのであれば、KMahjongg を使ってください。"
+"ゲームを探しているなら、KMahjongg を使ってください。"
 
 #: src/kdestub.py:1110
 msgid ""
 "Please use <a href=\"https://bugs.kde.org\">https://bugs.kde.org</a> to "
 "report bugs."
 msgstr ""
+"不具合の報告は、<a href=\"https://bugs.kde.org\">https://bugs.kde.org</a>"
 
 #: src/kdestub.py:1115
 #, fuzzy
@@ -500,126 +514,126 @@
 
 #: src/kdestub.py:1356
 msgid "Configure Toolbars"
-msgstr ""
+msgstr "ツールバーの設定"
 
 #: src/kdestub.py:1358
 msgid "A&vailable actions:"
-msgstr ""
+msgstr "利用可能なアクション(&v):"
 
 #: src/kdestub.py:1369
 msgid "Curr&ent actions:"
-msgstr ""
+msgstr "現在のアクション(&e):"
 
 #: src/login.py:177
 msgid "trying to start local server %1"
-msgstr ""
+msgstr "ローカルサーバー %1 を起動します"
 
 #: src/login.py:188 src/login.py:637
 msgid "removed stale socket <filename>%1</filename>"
-msgstr ""
+msgstr "古いソケット <filename>%1</filename> を削除しました"
 
 #: src/login.py:208
 msgid "started the local kajongg server: pid=<numid>%1</numid> %2"
-msgstr ""
+msgstr "ローカルの kajongg サーバーを開始しました: pid=<numid>%1</numid> %2"
 
 #: src/login.py:251
 msgctxt "kajongg"
 msgid "Login"
-msgstr ""
+msgstr "ログイン"
 
 #: src/login.py:300 src/login.py:406
 msgid "Game server:"
-msgstr ""
+msgstr "ゲームサーバー:"
 
 #: src/login.py:303 src/login.py:408
 msgid "Username:"
-msgstr ""
+msgstr "ユーザ名:"
 
 #: src/login.py:306 src/login.py:411
 msgid "Password:"
-msgstr ""
+msgstr "パスワード:"
 
 #: src/login.py:308
 msgctxt "kajongg"
 msgid "Ruleset:"
-msgstr ""
+msgstr "ルールセット:"
 
 #: src/login.py:400
 msgctxt "@title:window"
 msgid "Create User Account"
-msgstr ""
+msgstr "ユーザアカウントの作成"
 
 #: src/login.py:414
 msgid "Repeat password:"
-msgstr ""
+msgstr "パスワードを再入力:"
 
 #: src/login.py:565
 msgid "You are already connected to server %1"
-msgstr ""
+msgstr "すでにサーバー %1 に接続中"
 
 #: src/login.py:605
 msgctxt "USER is not known on SERVER"
 msgid "%1 is not known on %2, do you want to open an account?"
-msgstr ""
+msgstr "%1 は %2 では不明です。アカウントを開設しますか?"
 
 #: src/login.py:618
 msgid "Server %1 did not answer"
-msgstr ""
+msgstr "サーバー %1 が応答しませんでした"
 
 #: src/login.py:620
 msgid "Server %1 refused connection"
-msgstr ""
+msgstr "サーバー %1 が接続を拒否しました"
 
 #: src/login.py:622
 msgid "Server %1 does not run a kajongg server"
-msgstr ""
+msgstr "サーバー %1 は kajongg サーバーではありません"
 
 #: src/login.py:624
 msgid "Address for server %1 cannot be found"
-msgstr ""
+msgstr "サーバー %1 のアドレスが見つかりません"
 
 #: src/login.py:627
 msgid "Login to server %1 failed: You have no network connection"
-msgstr ""
+msgstr "サーバー %1 へのログインに失敗しました: ネットワーク接続がありません"
 
 #: src/login.py:638
 msgid "Please try again"
-msgstr ""
+msgstr "もう一度試してください"
 
 #: src/mainwindow.py:486
 #, fuzzy
 #| msgid "&Score Table"
 msgctxt "@action:inmenu"
 msgid "&Score Manual Game"
-msgstr "スコア表(&S)"
+msgstr "手動ゲームのスコアを取得(&S)"
 
 #: src/mainwindow.py:488
 #, fuzzy
 #| msgid "&Score Table"
 msgctxt "@action:intoolbar"
 msgid "Manual Game"
-msgstr "スコア表(&S)"
+msgstr "手動ゲーム"
 
 #: src/mainwindow.py:491
 #, fuzzy
 #| msgid "&Score Table"
 msgctxt "kajongg @info:tooltip"
 msgid "&Score a manual game."
-msgstr "スコア表(&S)"
+msgstr "手動ゲームのスコアを付けます(&S)。"
 
 #: src/mainwindow.py:493
 #, fuzzy
 #| msgid "&Play"
 msgctxt "@action:intoolbar"
 msgid "&Play"
-msgstr "プレイ(&P)"
+msgstr "開始(&P)"
 
 #: src/mainwindow.py:496
 #, fuzzy
 #| msgid "&Score Table"
 msgctxt "kajongg @info:tooltip"
 msgid "Start a new game."
-msgstr "スコア表(&S)"
+msgstr "新しいゲームを開始します。"
 
 #: src/mainwindow.py:498
 #, fuzzy
@@ -631,14 +645,14 @@
 #: src/mainwindow.py:502
 msgctxt "kajongg @info:tooltip"
 msgid "Abort the current game."
-msgstr ""
+msgstr "現在のゲームを中止します。"
 
 #: src/mainwindow.py:504
 #, fuzzy
 #| msgid "Kajongg"
 msgctxt "@action:inmenu"
 msgid "&Quit Kajongg"
-msgstr "Kajongg"
+msgstr "終了(&Q)"
 
 #: src/mainwindow.py:507
 #, fuzzy
@@ -650,37 +664,37 @@
 #: src/mainwindow.py:510
 msgctxt "kajongg @info:tooltip"
 msgid "define your players."
-msgstr ""
+msgstr "プレイヤーを定義します。"
 
 #: src/mainwindow.py:512
 msgctxt "@action:intoolbar"
 msgid "&Rulesets"
-msgstr ""
+msgstr "ルールセット(&R)"
 
 #: src/mainwindow.py:515
 msgctxt "kajongg @info:tooltip"
 msgid "customize rulesets."
-msgstr ""
+msgstr "ルールセットをカスタマイズします。"
 
 #: src/mainwindow.py:519
 msgctxt "@action:inmenu"
 msgid "&Change Visual Angle"
-msgstr ""
+msgstr "視角を変更(&C)"
 
 #: src/mainwindow.py:520
 msgctxt "@action:intoolbar"
 msgid "Angle"
-msgstr ""
+msgstr "角度"
 
 #: src/mainwindow.py:523
 msgctxt "kajongg @info:tooltip"
 msgid "Change the visual appearance of the tiles."
-msgstr ""
+msgstr "牌の外観を変更します。"
 
 #: src/mainwindow.py:527
 msgctxt "@action:inmenu"
 msgid "F&ull Screen Mode"
-msgstr ""
+msgstr "全画面モード(&u)"
 
 #: src/mainwindow.py:530
 #, fuzzy
@@ -696,69 +710,71 @@
 #| msgid "Scores"
 msgctxt "kajongg @action:intoolbar"
 msgid "&Scores"
-msgstr "スコア"
+msgstr "スコア(&S)"
 
 #: src/mainwindow.py:534
 msgctxt "kajongg @info:tooltip"
 msgid "Show or hide the score table for the current game."
-msgstr ""
+msgstr "現在のゲームのスコア表を表示または非表示にします。"
 
 #: src/mainwindow.py:536
 #, fuzzy
 #| msgid "Scores"
 msgctxt "@action:inmenu"
 msgid "&Explain Scores"
-msgstr "スコア"
+msgstr "スコアの説明(&E)"
 
 #: src/mainwindow.py:537
 #, fuzzy
 #| msgid "Scores"
 msgctxt "@action:intoolbar"
 msgid "&Explain"
-msgstr "スコア"
+msgstr "説明(&E)"
 
 #: src/mainwindow.py:539
 msgctxt "kajongg @info:tooltip"
 msgid "Explain the scoring for all players in the current game."
-msgstr ""
+msgstr "現在の試合の全プレイヤーの得点を説明します。"
 
 #: src/mainwindow.py:541
 msgctxt "@action:inmenu"
 msgid "&Demo Mode"
-msgstr ""
+msgstr "デモモード(&D)"
 
 #: src/mainwindow.py:544
 msgctxt "kajongg @info:tooltip"
 msgid "Let the computer take over for you. Start a new local game if needed."
-msgstr ""
+msgstr "コンピュータに代わってもらいます。必要に応じて、新しいローカル ゲームを開始します。"
 
 #: src/mainwindow.py:546
 msgid "C&hat"
-msgstr ""
+msgstr "チャット(&h)"
 
 #: src/mainwindow.py:549
 msgctxt "kajongg @info:tooltip"
 msgid "Chat with the other players."
-msgstr ""
+msgstr "他のプレイヤーとチャットします。"
 
 #: src/message.py:250
 msgid "saying %1 violates Original Call"
-msgstr ""
+msgstr "%1 が元の宣言に違反していると言っています"
 
 #: src/message.py:263
 msgid ""
 "claiming %1 is dangerous because you will have to discard a dangerous tile"
 msgstr ""
+"危険な牌を捨てる必要があるため、%1 の宣言は危険です"
 
 #: src/message.py:268
 msgid ""
 "claiming %1 for %2 is dangerous because you will have to discard a dangerous "
 "tile"
 msgstr ""
+"%1 を %2 と宣言するのは、リスクがある牌を捨てる必要があるので危険です"
 
 #: src/message.py:271
 msgid "You may say %1"
-msgstr ""
+msgstr "%1 と言うかもしれません"
 
 #: src/message.py:280
 msgctxt "kajongg"
@@ -782,11 +798,11 @@
 
 #: src/message.py:326
 msgid "saying Kong for %1 violates Original Call"
-msgstr ""
+msgstr "%1 のカンが元の宣言に違反していると言っています"
 
 #: src/message.py:330
 msgid "You may say Kong for %1"
-msgstr ""
+msgstr "%1 の場合は カン と宣言してください"
 
 #: src/message.py:344
 msgctxt "kajongg"
@@ -803,7 +819,7 @@
 #| msgid "Score"
 msgctxt "kajongg"
 msgid "Mah Jongg"
-msgstr "スコア"
+msgstr "麻雀"
 
 #: src/message.py:379
 msgctxt "kajongg game dialog:Key for Mah Jongg"
@@ -812,12 +828,12 @@
 
 #: src/message.py:387
 msgid "Press here and you win"
-msgstr ""
+msgstr "ここを押せば勝ちです"
 
 #: src/message.py:401
 msgctxt "kajongg"
 msgid "Original Call"
-msgstr ""
+msgstr "元の宣言"
 
 #: src/message.py:402
 msgctxt "kajongg game dialog:Key for Original Call"
@@ -826,18 +842,20 @@
 
 #: src/message.py:418
 msgid "discarding %1 and declaring Original Call makes this hand unwinnable"
-msgstr ""
+msgstr "%1 を捨てて、元の宣言を宣言すると、この役では勝てなくなります"
 
 #: src/message.py:422
 msgid ""
 "Discard a tile, declaring Original Call meaning you need only one tile to "
 "complete the hand and will not alter the hand in any way (except bonus tiles)"
 msgstr ""
+"牌を 1枚捨て、オリジナルコールを宣言します。これは、役の札を完成させるには"
+"牌が 1枚だけ必要であり、役の札を一切変更しないことを意味します(ボーナス牌を除く)"
 
 #: src/message.py:447
 msgctxt "kajongg"
 msgid "Discard"
-msgstr ""
+msgstr "捨てる"
 
 #: src/message.py:448
 msgctxt "kajongg game dialog:Key for Discard"
@@ -846,21 +864,21 @@
 
 #: src/message.py:465
 msgid "discarding %1 violates Original Call"
-msgstr ""
+msgstr "%1 を捨てると元の宣言に違反します"
 
 #: src/message.py:468
 msgid "discarding %1 is Dangerous Game"
-msgstr ""
+msgstr "%1 を捨てるのは危険です"
 
 #: src/message.py:471
 msgid "discard the least useful tile"
-msgstr ""
+msgstr "最も役に立たない牌を捨てます"
 
 #: src/message.py:551
 #, fuzzy
 #| msgid "Do you really want to abort this game?"
 msgid "%1 is not ready to start the game"
-msgstr "本当にこのゲームを中止しますか?"
+msgstr "%1 はゲームを開始する準備ができていません"
 
 #: src/message.py:590
 msgid "Kajongg <numid>%1</numid>"
@@ -869,19 +887,19 @@
 #: src/message.py:676
 msgctxt "kajongg"
 msgid "Violates Original Call"
-msgstr ""
+msgstr "元の宣言に違反します"
 
 #: src/message.py:819
 #, fuzzy
 #| msgid "&Score Table"
 msgctxt "kajongg"
 msgid "Dangerous Game"
-msgstr "スコア表(&S)"
+msgstr "危険なゲーム"
 
 #: src/message.py:834
 msgctxt "kajongg"
 msgid "No Choice"
-msgstr ""
+msgstr "選択の余地はありません"
 
 #: src/message.py:896
 msgctxt "kajongg"
@@ -895,12 +913,12 @@
 
 #: src/message.py:901
 msgid "Confirm that you saw the message"
-msgstr ""
+msgstr "メッセージが表示されたことを確認します"
 
 #: src/message.py:909
 msgctxt "kajongg"
 msgid "No Claim"
-msgstr ""
+msgstr "宣言なし"
 
 #: src/message.py:910
 msgctxt "kajongg game dialog:Key for No claim"
@@ -909,67 +927,69 @@
 
 #: src/message.py:914
 msgid "You cannot or do not want to claim this tile"
-msgstr ""
+msgstr "この牌は宣言できません"
 
 #: src/mjresource.py:92
 #, fuzzy
 #| msgid "cannot find any tileset, is libkmahjongg installed?"
 msgid ""
 "cannot find any %1 in the following directories, is libkmahjongg installed?"
-msgstr "牌セットが見つかりません。libkmahjongg はインストールされていますか?"
+msgstr ""
+"ディレクトリに %1 が見つかりません。libkmahjongg はインストールされていますか?"
 
 #: src/mjresource.py:116
 #, fuzzy
 #| msgid "cannot find tileset %1, using default"
 msgid "cannot find %1, using default"
-msgstr "牌セットが見つかりません。デフォルトを使用します。"
+msgstr "%1 が見つかりません。デフォルトを使用します"
 
 #: src/mjresource.py:131
 #, fuzzy
 #| msgid "Backgrounds"
 msgid "unknown name"
-msgstr "背景"
+msgstr "名前不明"
 
 #: src/mjresource.py:132
 msgid "unknown author"
-msgstr ""
+msgstr "作者不明"
 
 #: src/mjresource.py:135
 msgid "no description available"
-msgstr ""
+msgstr "説明がありません"
 
 #: src/mjresource.py:138
 msgid "no E-Mail address available"
-msgstr ""
+msgstr "利用可能な電子メールアドレスがありません"
 
 #: src/player.py:725
 msgid "%1 claiming MahJongg: She does not really have tile %2"
-msgstr ""
+msgstr "%1 が MahJongg(上がり)を宣言しています: 彼女は実際には %2 の牌を持っていません"
 
 #: src/player.py:734
 msgid ""
 "%1 claiming MahJongg: She did not pass all concealed tiles to the server"
 msgstr ""
+"%1 が MahJongg(上がり)を宣言しています: 彼女はすべての未公開の牌をサーバーに渡しませんでした"
 
 #: src/player.py:855
 msgid "Player %1 has 3 or 4 exposed melds, all are green"
-msgstr ""
+msgstr "プレイヤー %1 には 3つ または 4つの公開した牌があり、すべて緑色です"
 
 #: src/player.py:863
 msgid "Player %1 may try a True Color Game"
-msgstr ""
+msgstr "プレイヤー %1 は True Color ゲームを試すことができます"
 
 #: src/player.py:866
 msgid "Player %1 may try an All Terminals Game"
-msgstr ""
+msgstr "プレイヤー %1 は全端末ゲームを試すことができます"
 
 #: src/player.py:879
 msgid "Player %1 exposed many winds"
-msgstr ""
+msgstr "プレイヤー %1 は多くの風を公開しました"
 
 #: src/player.py:883
 msgid "Player %1 exposed many dragons"
-msgstr ""
+msgstr "プレイヤー %1 が多くの龍を公開しました"
 
 #: src/playerlist.py:50
 #, fuzzy
@@ -980,68 +1000,78 @@
 
 #: src/playerlist.py:110
 msgid "Player %1 already exists"
-msgstr ""
+msgstr "プレイヤー %1 はすでに存在します"
 
 #: src/playerlist.py:121
 msgid "Error while adding player %1: %2"
-msgstr ""
+msgstr "プレイヤー %1 の追加中にエラーが発生しました: %2"
 
 #: src/playerlist.py:176
 msgid ""
 "There are %1 finished and %2 unfinished games for %3, delete %3 anyway?  "
 "This will also delete all games played by %3!"
 msgstr ""
+"%3 には完了したゲームが %1 個、未完了のゲームが %2 個あります。"
+"それでも %3 を削除しますか?"
+"これにより、%3 がプレイしたゲームもすべて削除されます!"
 
 #: src/predefined.py:29
 msgid "Classical Chinese standard"
-msgstr ""
+msgstr "古典的な中国式の標準"
 
 #: src/predefined.py:35
 msgid "Classical Chinese"
-msgstr ""
+msgstr "古典的な中国式"
 
 #: src/predefined.py:41
 msgid "Last Tile Taken from Dead Wall"
-msgstr ""
+msgstr "デッドウォールから取った最後の牌"
 
 #: src/predefined.py:43
 msgid ""
 "The dead wall is also called kong box: The last 16 tiles of the wall used as "
 "source of replacement tiles"
 msgstr ""
+"デッドウォールはカン ボックスとも呼ばれます: 交換牌のソースとして"
+"使用される壁の最後の16枚の牌です。"
 
 #: src/predefined.py:46
 msgid "Last Tile is Last Tile of Wall"
-msgstr ""
+msgstr "最後の牌は、壁の最後の牌です"
 
 #: src/predefined.py:48
 msgid ""
 "Winner said Mah Jong with the last tile taken from the living end of the wall"
 msgstr ""
+"麻雀での勝者は壁の生きている端から最後の牌を取ることです"
 
 #: src/predefined.py:50
 msgid "Last Tile is Last Tile of Wall Discarded"
-msgstr ""
+msgstr "最後の牌は捨てられた壁の最後の牌です"
 
 #: src/predefined.py:52
 msgid ""
 "Winner said Mah Jong by claiming the last tile taken from the living end of "
 "the wall, discarded by another player"
 msgstr ""
+"麻雀を勝ち取るには、他のプレイヤーが捨てた壁の生きている端から取った最後の牌を"
+"獲得することです"
+
 
 #: src/predefined.py:55
 msgid "Robbing the Kong"
-msgstr ""
+msgstr "カンを強奪します"
 
 #: src/predefined.py:56
 msgid ""
 "Winner said Mah Jong by claiming the 4th tile of a kong another player just "
 "declared"
 msgstr ""
+"勝者は、他のプレイヤーが宣言したカンの 4番目の牌を獲得して MahJong(上がり)を宣言します"
 
 #: src/predefined.py:59
 msgid "Mah Jongg with Original Call"
-msgstr ""
+msgstr "オリジナルコール付き麻雀"
 
 #: src/predefined.py:62
 msgid ""
@@ -1049,10 +1079,13 @@
 "she needs only one tile to complete the hand and announces she will not "
 "alter the hand in any way (except bonus tiles)"
 msgstr ""
+"最初の捨て牌の直前に、プレイヤーはオリジナルコールを宣言することができます。"
+"これは、役の牌を完成させるのに1枚だけ必要であり、いかなる形でも役の牌を変更しない"
+"ことを宣言することを意味します(ボーナス牌を除く)"
 
 #: src/predefined.py:65
 msgid "Dangerous Game"
-msgstr ""
+msgstr "危険牌(きけんはい)"
 
 #: src/predefined.py:66
 msgid ""
@@ -1060,451 +1093,463 @@
 "to win is declared to be dangerous, and if that tile actually makes somebody "
 "win, the discarder pays the winner for all"
 msgstr ""
+"状況によっては、誰かの勝利に繋がる可能性が高い牌を捨てて宣言することは危険であり、その牌が実際に誰かの勝利につながった場合、捨てた牌は勝者に全額を支払うことになります"
 
 #: src/predefined.py:70
 msgid "Twofold Fortune"
-msgstr ""
+msgstr "二盃口(リャンペーコー)"
 
 #: src/predefined.py:71
 msgid ""
 "Kong after Kong: Declare Kong and a second Kong with the replacement tile "
 "and Mah Jong with the second replacement tile"
 msgstr ""
+"カンの後にカン:交換牌でカンと 2番目の カンを宣言し、2番目の交換牌で MahJong(上がり)を宣言します"
 
 #: src/predefined.py:75
 msgid "Blessing of Heaven"
-msgstr ""
+msgstr "天和(テンホー)"
 
 #: src/predefined.py:76
 msgid "East says Mah Jong with the unmodified dealt tiles"
-msgstr ""
+msgstr "東は配牌を変更せずに MahJong(上がり)を宣言します"
 
 #: src/predefined.py:78
 msgid "Blessing of Earth"
-msgstr ""
+msgstr "地和(チーホー)"
 
 #: src/predefined.py:79
 msgid ""
 "South, West or North says Mah Jong with the first tile discarded by East"
 msgstr ""
+"南、西、北のいずれかが、東が最初に捨てた牌で MahJong(上がり)を宣言します"
 
 #: src/predefined.py:81
 msgid "East won nine times in a row"
-msgstr ""
+msgstr "親が9回連続で和了った(上がった)"
 
 #: src/predefined.py:82
 msgid "If that happens, East gets a limit score and the winds rotate"
-msgstr ""
+msgstr "そうなると東はリミットスコアを獲得し、風が回転します"
 
 #: src/predefined.py:87
 msgid ""
 "False Naming of Discard, Claimed for Mah Jongg and False Declaration of Mah "
 "Jongg"
 msgstr ""
+"捨て牌の虚偽記載、麻雀の請求、麻雀の虚偽申告"
 
 #: src/predefined.py:93
 msgid "Own Flower and Own Season"
-msgstr ""
+msgstr "持ち風(自分)の花牌・季節牌"
 
 #: src/predefined.py:96
 msgid "All Flowers"
-msgstr ""
+msgstr "花牌四つ"
 
 #: src/predefined.py:97
 msgid "All Seasons"
-msgstr ""
+msgstr "四季牌(しきはい)"
 
 #: src/predefined.py:99
 msgid "Three Concealed Pongs"
-msgstr ""
+msgstr "三暗刻(サンアンコ)"
 
 #: src/predefined.py:103
 msgid "Long Hand"
-msgstr ""
+msgstr "多牌(タハイ)"
 
 #: src/predefined.py:104
 msgid "The hand contains too many tiles"
-msgstr ""
+msgstr "多牌(タハイ)"
 
 #: src/predefined.py:109
 msgid "Tiles in Hand"
-msgstr ""
+msgstr "手牌(てはい)"
 
 #: src/predefined.py:114
 msgid "Points Needed for Mah Jongg"
-msgstr ""
+msgstr "あがり役の最低点数(最低ハン数)"
 
 #: src/predefined.py:118
 msgid "Minimum number of doubles needed for Mah Jongg"
-msgstr ""
+msgstr "あがり(和了)に必要な最低翻数(はんすう)"
 
 #: src/predefined.py:121
 msgid "Points for a Limit Hand"
-msgstr ""
+msgstr "役満(やくまん)の点数"
 
 #: src/predefined.py:125
 msgid "Play with the roof off"
-msgstr ""
+msgstr "青天井(あおてんじょう)"
 
 #: src/predefined.py:126
 msgid "Play with no upper scoring limit"
-msgstr ""
+msgstr "青天井ルール"
 
 #: src/predefined.py:128
 msgid "Claim Timeout"
-msgstr ""
+msgstr "(鳴きの)時間切れ"
 
 #: src/predefined.py:132
 msgid "Size of Kong Box"
-msgstr ""
+msgstr "王牌(ワンパイ)の枚数(サイズ)"
 
 #: src/predefined.py:133
 msgid "The Kong Box is used for replacement tiles when declaring kongs"
-msgstr ""
+msgstr "王牌(ワンパイ)はカンを宣言した際の嶺上牌(リンシャンハイ)として使われます"
 
 #: src/predefined.py:135
 msgid "Play with Bonus Tiles"
-msgstr ""
+msgstr "ドラあり"
 
 #: src/predefined.py:136
 msgid "Bonus tiles increase the luck factor"
-msgstr ""
+msgstr "花牌(ドラ)を入れると運の要素が強くなります"
 
 #: src/predefined.py:138
 msgid "Minimum number of rounds in game"
-msgstr ""
+msgstr "(ゲーム終了までの)最小局数"
 
 #: src/predefined.py:142
 msgid "number of allowed chows"
-msgstr ""
+msgstr "チーができる回数"
 
 #: src/predefined.py:143
 msgid "The number of chows a player may build"
-msgstr ""
+msgstr "チーができる回数"
 
 #: src/predefined.py:145
 msgid "must declare calling hand"
-msgstr ""
+msgstr "テンパイ(聴牌)宣言をしなければなりません"
 
 #: src/predefined.py:147
 msgid "Mah Jongg is only allowed after having declared to have a calling hand"
-msgstr ""
+msgstr "リーチ(立直)をかけていないとあがれません"
 
 #: src/predefined.py:149
 msgid "Standard Rotation"
-msgstr ""
+msgstr "反時計回り(反時計まわり)"
 
 #: src/predefined.py:152
 msgid "Discard tiles ordered"
-msgstr ""
+msgstr "河(ホー)に牌を並べます"
 
 #: src/predefined.py:154
 msgid "Discard tiles ordered from top left"
-msgstr ""
+msgstr "河(ホー)の左上から順に並べて捨てます"
 
 #: src/predefined.py:156
 msgid "Leave holes for claimed discards"
-msgstr ""
+msgstr "(鳴かれた牌の場所を)空けておきます"
 
 #: src/predefined.py:159
 msgid ""
 "Only when discarding tiles ordered: Do not place the next discard where the "
 "claimed discard was"
 msgstr ""
+"牌を捨てる場合のみ:要求された捨て札があった場所に次の捨て札を置きません"
 
 #: src/predefined.py:168
 msgid "Last Tile Completes Pair of 2..8"
-msgstr ""
+msgstr "最後の牌は 2..8 のペアで完成します"
 
 #: src/predefined.py:172
 msgid "Last Tile Completes Pair of Terminals or Honors"
-msgstr ""
+msgstr "最後の牌が端子または面子のペアを完成します"
 
 #: src/predefined.py:175
 msgid "Last Tile is Only Possible Tile"
-msgstr ""
+msgstr "最後の一枚(さいごのいちまい)"
 
 #: src/predefined.py:179
 msgid "Won with Last Tile Taken from Wall"
-msgstr ""
+msgstr "海底摸月(ハイテイモーユエ)"
 
 #: src/predefined.py:184
 msgid "Zero Point Hand"
-msgstr ""
+msgstr "役なし(やくなし)"
 
 #: src/predefined.py:185
 msgid "The hand has 0 basis points excluding bonus tiles"
-msgstr ""
+msgstr "(ボーナス牌を除くと)基本符が0の状態"
 
 #: src/predefined.py:186
 msgid "No Chow"
-msgstr ""
+msgstr "門前(メンゼン)"
 
 #: src/predefined.py:188
 msgid "Only Concealed Melds"
-msgstr ""
+msgstr "門前(メンゼン)の面子(メンツ)"
 
 #: src/predefined.py:192
 msgid "False Color Game"
-msgstr ""
+msgstr "混一色(ホンイツ)"
 
 #: src/predefined.py:193
 msgid ""
 "Only same-colored tiles (only bamboo/stone/character) plus any number of "
 "winds and dragons"
 msgstr ""
+"同じ色の牌のみ(竹/石/文字のみ)と任意の数の風と龍"
 
 #: src/predefined.py:196
 msgid "True Color Game"
-msgstr ""
+msgstr "清一色(チンイツ)"
 
 #: src/predefined.py:197
 msgid "Only same-colored tiles (only bamboo/stone/character)"
-msgstr ""
+msgstr "同色牌のみ(竹・石・文字のみ)"
 
 #: src/predefined.py:199
 msgid "Concealed True Color Game"
-msgstr ""
+msgstr "門前清一色(メンゼンチンイツ)"
 
 #: src/predefined.py:200
 msgid "All tiles concealed and of the same suit, no honors"
-msgstr ""
+msgstr "すべての牌が未公開で、同じ揃いの場合、面子はありません"
 
 #: src/predefined.py:202
 msgid "Only Terminals and Honors"
-msgstr ""
+msgstr "混老頭(ホンロウトウ)"
 
 #: src/predefined.py:203
 msgid "Only winds, dragons, 1 and 9"
-msgstr ""
+msgstr "風、龍、1と 9のみ"
 
 #: src/predefined.py:204
 msgid "Only Honors"
-msgstr ""
+msgstr "字一色(ツーイーソー)"
 
 #: src/predefined.py:205
 msgid "Only winds and dragons"
-msgstr ""
+msgstr "風と龍だけ"
 
 #: src/predefined.py:207
 msgid "Hidden Treasure"
-msgstr ""
+msgstr "四暗刻(スーアンコウ)"
 
 #: src/predefined.py:208
 msgid "Only hidden Pungs or Kongs, last tile from wall"
-msgstr ""
+msgstr "鳴かずに揃えた3枚セット(暗刻)または4枚セット(暗槓)を4つ作り、最後の1枚を山から引いて(ツモって)完成させた状態"
 
 #: src/predefined.py:210
 msgid "Heads and Tails"
-msgstr ""
+msgstr "全帯么九(チャンタ)"
 
 #: src/predefined.py:211
 msgid "Only 1 and 9"
-msgstr ""
+msgstr "1と 9だけ"
 
 #: src/predefined.py:213
 msgid "Fourfold Plenty"
-msgstr ""
+msgstr "四槓子(スーカンツ)"
 
 #: src/predefined.py:214
 #, fuzzy
 #| msgid "Score"
 msgid "4 Kongs"
-msgstr "スコア"
+msgstr "4 カン"
 
 #: src/predefined.py:216 src/predefined.py:430
 msgid "Three Great Scholars"
-msgstr ""
+msgstr "大三元(ダイサンゲン)"
 
 #: src/predefined.py:217 src/predefined.py:337
 msgid "3 Pungs or Kongs of dragons"
-msgstr ""
+msgstr "龍のポンまたはカン 3 個"
 
 #: src/predefined.py:218
 msgid "Four Blessings Hovering over the Door"
-msgstr ""
+msgstr "大四喜(ダイスーシー)"
 
 #: src/predefined.py:220 src/predefined.py:342
 msgid "4 Pungs or Kongs of winds"
-msgstr ""
+msgstr "4 ポンまたはカンの風"
 
 #: src/predefined.py:221
 msgid "Imperial Jade"
-msgstr ""
+msgstr "緑一色(リューイーソウ)"
 
 #: src/predefined.py:222
 msgid "Only green tiles: Green dragon and Bamboo 2,3,4,6,8"
-msgstr ""
+msgstr "緑の牌のみ: 緑の龍と竹 2、3、4、6、8"
 
 #: src/predefined.py:223
 msgid "Gathering the Plum Blossom from the Roof"
-msgstr ""
+msgstr "嶺上開花(リンシャンカイホウ)"
 
 #: src/predefined.py:225
 msgid "Mah Jong with stone 5 from the dead wall"
-msgstr ""
+msgstr "デッドウォールから石5を使った麻雀"
 
 #: src/predefined.py:227
 msgid "Plucking the Moon from the Bottom of the Sea"
-msgstr ""
+msgstr "海底摸月(ハイテイモーユエ)"
 
 #: src/predefined.py:228
 msgid "Mah Jong with the last tile from the wall being a stone 1"
-msgstr ""
+msgstr "壁牌(山)の最後の一枚が「一筒」だった場合"
 
 #: src/predefined.py:230
 msgid "Scratching a Carrying Pole"
-msgstr ""
+msgstr "和首(ワーショウ)"
 
 #: src/predefined.py:231
 msgid "Robbing the Kong of bamboo 2"
-msgstr ""
+msgstr "他人が「二索」をポンしており、そこに4枚目を足して「加槓(カカン)」しようとした瞬間に、その牌を奪ってロンあがり"
 
 #: src/predefined.py:237 src/predefined.py:526
 msgid "Standard Mah Jongg"
-msgstr ""
+msgstr "正和(セイホウ)"
 
 #: src/predefined.py:242
 msgid "Nine Gates"
-msgstr ""
+msgstr "九蓮宝燈(チュウレンポウトウ)"
 
 #: src/predefined.py:244
 msgid ""
 "A concealed hand in one color 1112345678999 plus last tile of this suit "
 "(from wall or discarded)"
 msgstr ""
+"1色の未公開の役の札 1112345678999 プラスこの組合せの最後の牌"
+"(壁からまたは捨て牌)"
 
 #: src/predefined.py:246
 msgid "Thirteen Orphans"
-msgstr ""
+msgstr "国士無双(コクシムソウ)"
 
 #: src/predefined.py:247
 msgid ""
 "13 single tiles: All dragons, winds, 1, 9 and a 14th tile building a pair "
 "with one of them"
 msgstr ""
+"13枚のシングル牌:すべて龍、風、1、9、そして"
+"そのうちの1枚とペアを形成する14枚目の牌"
 
 #: src/predefined.py:251
 msgid "Pung/Kong of Dragons"
-msgstr ""
+msgstr "三元牌(サンゲンパイ)の刻子(コーツ)/槓子(カンツ)"
 
 #: src/predefined.py:253
 msgid "Pung/Kong of Own Wind"
-msgstr ""
+msgstr "自風(じかぜ)の刻子(コーツ)/槓子(カンツ)"
 
 #: src/predefined.py:256
 msgid "Pung/Kong of Round Wind"
-msgstr ""
+msgstr "場風(ばかぜ)の刻子(コーツ)/槓子(カンツ)"
 
 #: src/predefined.py:260
 msgid "Exposed Kong"
-msgstr ""
+msgstr "明槓(ミンカン)"
 
 #: src/predefined.py:263
 msgid "Exposed Kong of Terminals"
-msgstr ""
+msgstr "老頭牌(ロウトウハイ)の明槓"
 
 #: src/predefined.py:266
 msgid "Exposed Kong of Honors"
-msgstr ""
+msgstr "字牌(じはい)の明槓(ミンカン)"
 
 #: src/predefined.py:269
 msgid "Exposed Pung"
-msgstr ""
+msgstr "ポン"
 
 #: src/predefined.py:272
 msgid "Exposed Pung of Terminals"
-msgstr ""
+msgstr "1・9のポン"
 
 #: src/predefined.py:275
 msgid "Exposed Pung of Honors"
-msgstr ""
+msgstr "字牌のポン"
 
 #: src/predefined.py:279
 msgid "Concealed Kong"
-msgstr ""
+msgstr "暗槓(アンカン)"
 
 #: src/predefined.py:282
 msgid "Concealed Kong of Terminals"
-msgstr ""
+msgstr "老頭牌(ロウトウハイ)の暗槓(アンカン)"
 
 #: src/predefined.py:285
 msgid "Concealed Kong of Honors"
-msgstr ""
+msgstr "字牌(じはい)の暗槓(アンカン)"
 
 #: src/predefined.py:288
 msgid "Concealed Pung"
-msgstr ""
+msgstr "暗刻(アンコ)"
 
 #: src/predefined.py:291
 msgid "Concealed Pung of Terminals"
-msgstr ""
+msgstr "老頭牌(ロウトウハイ)の暗刻(アンコ)"
 
 #: src/predefined.py:294
 msgid "Concealed Pung of Honors"
-msgstr ""
+msgstr "字牌(じはい)の暗刻(アンコ)"
 
 #: src/predefined.py:297
 msgid "Pair of Own Wind"
-msgstr ""
+msgstr "自風(じかぜ)の雀頭(じゃんとう)"
 
 #: src/predefined.py:299
 msgid "Pair of Round Wind"
-msgstr ""
+msgstr "場風(ばかぜ)の雀頭(じゃんとう)"
 
 #: src/predefined.py:301
 msgid "Pair of Dragons"
-msgstr ""
+msgstr "三元牌(さんげんぱい)の雀頭(じゃんとう)"
 
 #: src/predefined.py:305
 msgid "Flower"
-msgstr ""
+msgstr "花牌(はなはい)"
 
 #: src/predefined.py:307
 msgid "Season"
-msgstr ""
+msgstr "季節牌(きせつはい)"
 
 #: src/predefined.py:316
 msgid "Classical Chinese DMJL"
-msgstr ""
+msgstr "DMJL(ドイツ麻雀連盟)が定めた中国古典麻雀ルール"
 
 #: src/predefined.py:322
 msgid "Classical Chinese as defined by the Deutsche Mah Jongg Liga (DMJL) e.V."
-msgstr ""
+msgstr "DMJL(ドイツ麻雀連盟)制定の中国古典麻雀ルールの仕様"
 
 #: src/predefined.py:329
 msgid "Squirming Snake"
-msgstr ""
+msgstr "一気通貫(いっきつうかん)"
 
 #: src/predefined.py:330
 msgid ""
 "All tiles of same color. Pung or Kong of 1 and 9, pair of 2, 5 or 8 and two "
 "Chows of the remaining values"
 msgstr ""
+"すべて同じ色の牌。1 と 9 のポンまたはカン、2、5、または 8 のペア、"
+"残りの値の 2つのチー"
 
 #: src/predefined.py:333
 msgid "Little Three Dragons"
-msgstr ""
+msgstr "小三元(ショウサンゲン)"
 
 #: src/predefined.py:334
 msgid "2 Pungs or Kongs of dragons and 1 pair of dragons"
-msgstr ""
+msgstr "龍のポンまたはカン 2つと龍 1 ペア"
 
 #: src/predefined.py:336
 msgid "Big Three Dragons"
-msgstr ""
+msgstr "大三元(ダイサンゲン)"
 
 #: src/predefined.py:339
 msgid "Little Four Joys"
-msgstr ""
+msgstr "小四喜(ショウスーシー)"
 
 #: src/predefined.py:340
 msgid "3 Pungs or Kongs of winds and 1 pair of winds"
-msgstr ""
+msgstr "3 ポンまたはカンの風と 1 ペアの風"
 
 #: src/predefined.py:341
 msgid "Big Four Joys"
-msgstr ""
+msgstr "大四喜(ダイスーシー)"
 
 #: src/predefined.py:347
 msgid "False Naming of Discard, Claimed for Chow"
@@ -1512,235 +1557,242 @@
 
 #: src/predefined.py:350
 msgid "False Naming of Discard, Claimed for Pung/Kong"
-msgstr ""
+msgstr "空ポン(からポン)または 空カン(からカン)"
 
 #: src/predefined.py:353 src/predefined.py:444 src/predefined.py:556
 msgid "False Declaration of Mah Jongg by One Player"
-msgstr ""
+msgstr "空あがり(からあがり)"
 
 #: src/predefined.py:356
 msgid "False Declaration of Mah Jongg by Two Players"
-msgstr ""
+msgstr "二人同時のチョンボ"
 
 #: src/predefined.py:359
 msgid "False Declaration of Mah Jongg by Three Players"
-msgstr ""
+msgstr "三人同時のチョンボ"
 
 #: src/predefined.py:362 src/predefined.py:447 src/predefined.py:559
 msgid "False Naming of Discard, Claimed for Mah Jongg"
-msgstr ""
+msgstr "空(から)ロン"
 
 #: src/predefined.py:371
 msgid "Classical Chinese BMJA"
-msgstr ""
+msgstr "BMJA(イギリス麻雀連盟)制定の中国古典ルール"
 
 #: src/predefined.py:377
 msgid "Classical Chinese as defined by the British Mah-Jong Association"
-msgstr ""
+msgstr "BMJA(イギリス麻雀連盟)制定の中国古典ルールの仕様"
 
 #: src/predefined.py:392 src/predefined.py:532
 msgid "Original Call"
-msgstr ""
+msgstr "地和(チーホー)"
 
 #: src/predefined.py:396
 msgid "Gates of Heaven"
-msgstr ""
+msgstr "九蓮宝燈(チュウレンポウトウ)"
 
 #: src/predefined.py:397
 msgid ""
 "All tiles concealed of same color: Values 1112345678999 with one pair from 2 "
 "to 8 (last tile from wall or discarded)"
 msgstr ""
+"未公開のすべての牌が同じ色: 値は 1112345678999 で、"
+"2 から 8 までの 1つのペア (壁の最後の牌または捨てられた牌)"
 
 #: src/predefined.py:400
 msgid "Wriggling Snake"
-msgstr ""
+msgstr "一気通貫(いっきつうかん)"
 
 #: src/predefined.py:401
 msgid ""
 "Pair of 1s and a run from 2 to 9 in the same suit with each of the winds"
 msgstr ""
+"それぞれの風で同じ組合せで 1 のペアと 2 から 9 まで"
 
 #: src/predefined.py:403
 msgid "Triple Knitting"
-msgstr ""
+msgstr "三色三歩高(サンショクサンポコ)"
 
 #: src/predefined.py:404
 msgid ""
 "Four sets of three tiles in the different suits and a pair: No Winds or "
 "Dragons"
 msgstr ""
+"異なる組合せの3つの牌と1組の牌が4組: 風や龍は無し"
 
 #: src/predefined.py:405
 msgid "Knitting"
-msgstr ""
+msgstr "編み"
 
 #: src/predefined.py:406
 msgid "7 pairs of tiles in any 2 out of 3 suits; no Winds or Dragons"
-msgstr ""
+msgstr "3つの組合せのうち任意の 2 つの牌の 7 ペア。風や龍は無し"
 
 #: src/predefined.py:408
 msgid "All pair honors"
-msgstr ""
+msgstr "字一色の七対子(ツーイーソーのチートイツ)"
 
 #: src/predefined.py:409
 msgid "7 pairs of 1s/9s/Winds/Dragons"
-msgstr ""
+msgstr "1 や 9 や風や龍の 7 ペア"
 
 #: src/predefined.py:412 src/predefined.py:536
 msgid "Own Flower"
-msgstr ""
+msgstr "自風の花牌(じかぜのはなはい)"
 
 #: src/predefined.py:413 src/predefined.py:537
 msgid "Own Season"
-msgstr ""
+msgstr "自風の季節牌(じかぜのきせつはい)"
 
 #: src/predefined.py:425
 msgid "Buried Treasure"
-msgstr ""
+msgstr "四暗刻(スーアンコウ)"
 
 #: src/predefined.py:426
 msgid "Concealed pungs of one suit with winds/dragons and a pair"
-msgstr ""
+msgstr "風/龍とペアの 1 つの組合せの未公開のポン"
 
 #: src/predefined.py:427 src/predefined.py:548
 msgid "Purity"
-msgstr ""
+msgstr "清一色(チンイツ)"
 
 #: src/predefined.py:428 src/predefined.py:549
 msgid "Only same-colored tiles (no chows, dragons or winds)"
-msgstr ""
+msgstr "同じ色の牌のみ (チー、龍、風は不可)"
 
 #: src/predefined.py:431
 msgid "3 Pungs or Kongs of dragons plus any pung/kong and a pair"
-msgstr ""
+msgstr "龍のポンまたはカン 3 個と、任意のポン/カンおよびペア"
 
 #: src/predefined.py:434
 msgid "The 13 Unique Wonders"
-msgstr ""
+msgstr "国士無双(コクシムソウ)"
 
 #: src/predefined.py:441 src/predefined.py:553
 msgid "False Naming of Discard, Claimed for Chow/Pung/Kong"
-msgstr ""
+msgstr "空(から)ポン / 空(から)チー / 空(から)カン"
 
 #: src/predefined.py:451
 msgid "Calling for Only Honors"
-msgstr ""
+msgstr "字一色(ツーイーソー)のテンパイ"
 
 #: src/predefined.py:455
 msgid "Calling for Wriggling Snake"
-msgstr ""
+msgstr "一気通貫(いっきつうかん)のテンパイ"
 
 #: src/predefined.py:459
 msgid "Calling for Triple Knitting"
-msgstr ""
+msgstr "三色三歩高(サンショクサンポコ)のテンパイ"
 
 #: src/predefined.py:463
 msgid "Calling for Gates of Heaven"
-msgstr ""
+msgstr "九蓮宝燈(チュウレンポウトウ)のテンパイ"
 
 #: src/predefined.py:466
 msgid "Calling for Knitting"
-msgstr ""
+msgstr "組合竜(くみあいりゅう)のテンパイ"
 
 #: src/predefined.py:470
 msgid "Calling for Imperial Jade"
-msgstr ""
+msgstr "緑一色(リューイーソウ)のテンパイ"
+
 
 #: src/predefined.py:474
 msgid "Calling for The 13 Unique Wonders"
-msgstr ""
+msgstr "国士無双(コクシムソウ)のテンパイ"
 
 #: src/predefined.py:477
 msgid "Calling for Three Great Scholars"
-msgstr ""
+msgstr "大三元(ダイサンゲン)のテンパイ"
 
 #: src/predefined.py:480
 msgid "Calling for All pair honors"
-msgstr ""
+msgstr "字一色(ツーイーソー)の七対子(チートイツ)テンパイ"
 
 #: src/predefined.py:484
 msgid "Calling for Heads and Tails"
-msgstr ""
+msgstr "全帯么九(チャンタ)のテンパイ"
 
 #: src/predefined.py:488
 msgid "Calling for Four Blessings Hovering over the Door"
-msgstr ""
+msgstr "大四喜(ダイスーシー)のテンパイ"
 
 #: src/predefined.py:491
 msgid "Calling for Buried Treasure"
-msgstr ""
+msgstr "四暗刻(スーアンコウ)のテンパイ"
 
 #: src/predefined.py:495
 msgid "Calling for Fourfold Plenty"
-msgstr ""
+msgstr "四槓子(スーカンツ)のテンパイ"
 
 #: src/predefined.py:499
 msgid "Calling for Purity"
-msgstr ""
+msgstr "清一色(チンイツ)のテンパイ"
 
 #: src/predefined.py:509
 msgid "Taiwanese 16-tile game, FOR DEVELOPERS"
-msgstr ""
+msgstr "台湾麻雀 16枚ルール(開発者向け資料/仕様)"
 
 #: src/predefined.py:515
 msgid ""
 "Taiwanese 16-Tiles Mah Jongg, early alpha. See https://bugs.kde.org/show_bug."
 "cgi?id=298821"
 msgstr ""
+"台湾麻雀 16枚ルール、初期アルファ版。 https://bugs.kde.org/show_bug.cgi?id=298821 を参照。"
 
 #: src/query.py:197
 #, fuzzy
 #| msgid "&Score Table"
 msgctxt "kajongg name for local game server"
 msgid "Local Game"
-msgstr "スコア表(&S)"
+msgstr "ローカルゲーム(Local Game)"
 
 #: src/query.py:430
 msgid "Database %1 updated from schema %2 to %3"
-msgstr ""
+msgstr "データベース %1 がスキーマ %2 から %3 に更新されました"
 
 #: src/rule.py:49 src/scoringdialog.py:703 src/scoringdialog.py:782
 msgid "points"
-msgstr ""
+msgstr "ポイント"
 
 #: src/rule.py:50
 msgctxt "kajongg"
 msgid "doubles"
-msgstr ""
+msgstr "点数を倍々(double)にしていく単位: 翻(ハン)"
 
 #: src/rule.py:51
 #, fuzzy
 #| msgid "Upper limit"
 msgctxt "kajongg"
 msgid "limits"
-msgstr "上限"
+msgstr "制限"
 
 #: src/rule.py:91
 msgctxt "Kajongg"
 msgid "%1 points"
-msgstr "%1 符"
+msgstr "%1 ポイント"
 
 #: src/rule.py:93
 msgctxt "Kajongg"
 msgid "%1 doubles"
-msgstr ""
+msgstr "%1 ダブルス"
 
 #: src/rule.py:98
 #, fuzzy
 #| msgid "Upper limit"
 msgctxt "Kajongg"
 msgid "%1 limits"
-msgstr "上限"
+msgstr "%1 制限"
 
 #: src/rule.py:366
 msgid "Meld Rules"
-msgstr ""
+msgstr "3つの牌の組合せのルール"
 
 #: src/rule.py:367
 msgid ""
 "Meld rules are applied to single melds independent of the rest of the hand"
 msgstr ""
+"3つの牌の組合せのルールは、役の残りの部分とは独立して単一の3つの牌の組合せに適用されます"
 
 #: src/rule.py:368
 msgid "Hand Rules"
@@ -1748,40 +1800,40 @@
 
 #: src/rule.py:369
 msgid "Hand rules are applied to the entire hand, for all players"
-msgstr ""
+msgstr "役のルール"
 
 #: src/rule.py:370
 msgid "Winner Rules"
-msgstr ""
+msgstr "勝者のルール"
 
 #: src/rule.py:371
 msgid "Winner rules are applied to the entire hand but only for the winner"
-msgstr ""
+msgstr "勝者のルールは役の全体に適用されますが、勝者にのみ適用されます"
 
 #: src/rule.py:372
 msgid "Loser Rules"
-msgstr ""
+msgstr "敗者のルール"
 
 #: src/rule.py:373
 msgid "Loser rules are applied to the entire hand but only for non-winners"
-msgstr ""
+msgstr "敗者のルールは役の全体に適用されますが、勝者以外にのみ適用されます"
 
 #: src/rule.py:374
 msgid "Mah Jongg Rules"
-msgstr ""
+msgstr "麻雀のルール"
 
 #: src/rule.py:375
 msgid "Only hands matching a Mah Jongg rule can win"
-msgstr ""
+msgstr "麻雀ルールに一致する役だけが勝つことができます"
 
 #: src/rule.py:376
 msgctxt "kajongg"
 msgid "Options"
-msgstr ""
+msgstr "オプション"
 
 #: src/rule.py:377
 msgid "Here we have several special game related options"
-msgstr ""
+msgstr "ここには特別なゲーム関連のオプションがいくつかあります"
 
 #: src/rule.py:378
 #, fuzzy
@@ -1797,90 +1849,93 @@
 "you get\n"
 "into a situation where you have to pay a penalty"
 msgstr ""
+"ペナルティはユーザが手動で適用します。ゲームのスコアリングにのみ使用されます。\n"
+"コンピュータやネット対戦の場合、Kajongg では\n"
+"ペナルティを課されるような状況に陥ることはありません"
 
 #: src/rule.py:579
 msgctxt "Ruleset._newKey:%1 is empty or space plus number"
 msgid "Copy%1 of %2"
-msgstr ""
+msgstr "コピー %1/%2"
 
 #: src/rule.py:935
 msgctxt "%1 can be a sentence"
 msgid "%4 have impossible values %2/%3 in rule \"%1\""
-msgstr ""
+msgstr "%4 にはルール \"%1\" に不可能な値 %2/%3 があります"
 
 #: src/rule.py:1023
 msgctxt "wrong value for rule"
 msgid "%1: %2 is too small, minimal value is %3"
-msgstr ""
+msgstr "%1: %2 は小さすぎます。最小値は %3 です"
 
 #: src/rulesetselector.py:511
 msgctxt "@title:window"
 msgid "Customize rulesets"
-msgstr ""
+msgstr "ルールセットのカスタマイズ"
 
 #: src/rulesetselector.py:530
 msgctxt "kajongg"
 msgid "Rule"
-msgstr ""
+msgstr "ルール"
 
 #: src/rulesetselector.py:592
 msgid "C&opy"
-msgstr ""
+msgstr "コピー(&o)"
 
 #: src/rulesetselector.py:593
 msgctxt "Kajongg ruleset comparer"
 msgid "Co&mpare"
-msgstr ""
+msgstr "比較(&m)"
 
 #: src/rulesetselector.py:594
 msgid "&Remove"
-msgstr ""
+msgstr "削除(&R)"
 
 #: src/rulesetselector.py:595
 msgid "&Close"
-msgstr ""
+msgstr "閉じる(&C)"
 
 #: src/scene.py:389 src/scene.py:517
 msgid "Do you really want to abort this game?"
-msgstr "本当にこのゲームを中止しますか?"
+msgstr "本当にこのゲームを中止してもよろしいですか?"
 
 #: src/scoring.py:60
 msgctxt "@title:window"
 msgid "Swap Seats"
-msgstr ""
+msgstr "席を交換する"
 
 #: src/scoring.py:62
 msgid "By the rules, %1 and %2 should now exchange their seats. "
-msgstr ""
+msgstr "ルールにより、%1 と %2 は席を交換する必要があります。"
 
 #: src/scoring.py:64
 msgid "&Exchange"
-msgstr ""
+msgstr "席を交換(&E)"
 
 #: src/scoring.py:66
 msgid "&Keep seat"
-msgstr ""
+msgstr "席をキープ(&K)"
 
 #: src/scoring.py:85
 msgctxt "@title:window"
 msgid "Select four players"
-msgstr ""
+msgstr "4人のプレイヤーを選択"
 
 #: src/scoring.py:360
 msgid "Move Exposed Tiles Here"
-msgstr ""
+msgstr "公開した牌をここに移動"
 
 #: src/scoring.py:361
 msgid "Move Concealed Tiles Here"
-msgstr ""
+msgstr "未公開の牌をここに移動"
 
 #: src/scoring.py:673
 msgid "Please define four players in <interface>Settings|Players</interface>"
-msgstr ""
+msgstr "<interface>Settings|Players</interface> で 4 人のプレイヤーを定義してください"
 
 #: src/scoringdialog.py:258
 msgid "Round/Hand"
-msgstr ""
+msgstr "一巡/役"
 
 #: src/scoringdialog.py:299 src/scoringdialog.py:834
 msgctxt "kajongg"
@@ -1892,17 +1947,17 @@
 #| msgid "Players"
 msgctxt "kajongg"
 msgid "Payments"
-msgstr "プレイヤー"
+msgstr "支払い"
 
 #: src/scoringdialog.py:300
 msgctxt "kajongg"
 msgid "Balance"
-msgstr ""
+msgstr "バランス"
 
 #: src/scoringdialog.py:300
 msgctxt "kajongg"
 msgid "Chart"
-msgstr ""
+msgstr "チャート"
 
 #: src/scoringdialog.py:410
 msgctxt "kajongg"
@@ -1912,15 +1967,15 @@
 #: src/scoringdialog.py:452
 msgctxt "kajongg"
 msgid "Used Rules"
-msgstr ""
+msgstr "使うルール"
 
 #: src/scoringdialog.py:487
 msgid "Final scores for game <numid>%1</numid>"
-msgstr ""
+msgstr "ゲーム <numid>%1</numid> の最終スコア"
 
 #: src/scoringdialog.py:489
 msgid "Scores for game <numid>%1</numid>"
-msgstr ""
+msgstr "ゲーム <numid>%1</numid> のスコア"
 
 #: src/scoringdialog.py:569
 #, fuzzy
@@ -1931,7 +1986,7 @@
 
 #: src/scoringdialog.py:585
 msgid "There is no active game"
-msgstr ""
+msgstr "アクティブなゲームはありません"
 
 #: src/scoringdialog.py:588
 msgid "%1"
@@ -1939,27 +1994,27 @@
 
 #: src/scoringdialog.py:602
 msgid "Manual score for %1: %2 points"
-msgstr ""
+msgstr "%1 の手動のスコア: %2 ポイント"
 
 #: src/scoringdialog.py:689
 #, fuzzy
 #| msgid "Properties"
 msgid "Penalty"
-msgstr "プロパティ"
+msgstr "ペナルティ"
 
 #: src/scoringdialog.py:692
 msgid "Offense:"
-msgstr ""
+msgstr "罰則:"
 
 #: src/scoringdialog.py:699
 #, fuzzy
 #| msgid "Properties"
 msgid "Total Penalty"
-msgstr "プロパティ"
+msgstr "合計ペナルティ"
 
 #: src/scoringdialog.py:727
 msgid "&Execute"
-msgstr ""
+msgstr "実行(&E)"
 
 #: src/scoringdialog.py:805
 #, fuzzy
@@ -1967,7 +2022,7 @@
 #| msgid "%1 points"
 msgctxt "penalty dialog, appears behind paying player combobox"
 msgid "pays %1 points"
-msgstr "%1 符"
+msgstr "%1ポイントを支払い"
 
 #: src/scoringdialog.py:810
 #, fuzzy
@@ -1975,12 +2030,12 @@
 #| msgid "%1 points"
 msgctxt "penalty dialog, appears behind profiting player combobox"
 msgid "gets %1 points"
-msgstr "%1 符"
+msgstr "%1 ポイントを獲得"
 
 #: src/scoringdialog.py:821
 msgctxt "@title:window"
 msgid "Scoring for this Hand"
-msgstr ""
+msgstr "この手動のスコア"
 
 #: src/scoringdialog.py:832
 msgctxt "kajongg"
@@ -1990,11 +2045,11 @@
 #: src/scoringdialog.py:833
 msgctxt "kajongg"
 msgid "Wind"
-msgstr ""
+msgstr "風"
 
 #: src/scoringdialog.py:835
 msgid "Winner"
-msgstr ""
+msgstr "勝者"
 
 #: src/scoringdialog.py:841
 msgctxt "kajongg"
@@ -2005,139 +2060,139 @@
 #, fuzzy
 #| msgid "Properties"
 msgid "&Penalties"
-msgstr "プロパティ"
+msgstr "ペナルティ(&P)"
 
 #: src/scoringdialog.py:845
 #, fuzzy
 #| msgid "&New hand"
 msgid "&Save Hand"
-msgstr "新しい手(&N)"
+msgstr "役を保存(&S)"
 
 #: src/scoringdialog.py:867
 msgid "&Last Tile:"
-msgstr ""
+msgstr "最後の牌(&L):"
 
 #: src/scoringdialog.py:876
 msgid "L&ast Meld:"
-msgstr ""
+msgstr "最後の3つの牌の組合せ(&a):"
 
 #: src/server.py:122
 msgid "Wrong password"
-msgstr ""
+msgstr "パスワードが間違っています"
 
 #: src/server.py:218
 msgid "table with id <numid>%1</numid> not found"
-msgstr ""
+msgstr "ID <numid>%1</numid> のテーブルが見つかりません"
 
 #: src/server.py:366
 msgid "Player %1 has logged out"
-msgstr ""
+msgstr "プレイヤー %1 がログアウトしました"
 
 #: src/server.py:436
 msgid "the server will listen on PORT ({int(defaultPort)})"
-msgstr ""
+msgstr "サーバーは PORT ({int(defaultPort)}) で開きます"
 
 #: src/server.py:439
 msgid "the server will listen on SOCKET"
-msgstr ""
+msgstr "サーバーは SOCKET で開きます"
 
 #: src/server.py:443
 msgid "name of the database"
-msgstr ""
+msgstr "データベースの名前"
 
 #: src/server.py:447
 msgid "do not terminate local game server after last client disconnects"
-msgstr ""
+msgstr "最後のクライアントが切断された後はローカル ゲーム サーバーを終了しないでください"
 
 #: src/servertable.py:181
 msgid "You already joined this table"
-msgstr ""
+msgstr "あなたはすでにこのテーブルに参加しています"
 
 #: src/servertable.py:183
 msgid "All seats are already taken"
-msgstr ""
+msgstr "もうすべての席が埋まっています"
 
 #: src/servertable.py:188
 msgid "takes a seat"
-msgstr ""
+msgstr "席に着きます"
 
 #: src/servertable.py:196
 msgid "leaves the table"
-msgstr ""
+msgstr "テーブルを離れます"
 
 #: src/servertable.py:242
 msgctxt "kajongg, name of robot player, to be translated"
 msgid "Robot 1"
-msgstr ""
+msgstr "ロボット 1"
 
 #: src/servertable.py:245
 msgctxt "kajongg, name of robot player, to be translated"
 msgid "Robot 2"
-msgstr ""
+msgstr "ロボット 2"
 
 #: src/servertable.py:246
 msgctxt "kajongg, name of robot player, to be translated"
 msgid "Robot 3"
-msgstr ""
+msgstr "ロボット 3"
 
 #: src/servertable.py:302
 msgid "Only the initiator %1 can start this game, you are %2"
-msgstr ""
+msgstr "このゲームを開始できるのは開始者 %1 だけです。あなたは %2 です"
 
 #: src/servertable.py:701
 msgid "Game <numid>%1</numid> is over!"
-msgstr ""
+msgstr "ゲーム <numid>%1</numid> は終了しました!"
 
 #: src/servertable.py:730
 msgid "%1 wrongly said %2 for meld %3"
-msgstr ""
+msgstr "%1 は3つの牌の組合せの %3 に対して %2 と間違って言いました"
 
 #: src/servertable.py:735
 msgid "%1 wrongly said %2: claims to have concealed tiles %3 but only has %4"
-msgstr ""
+msgstr "%1 は %2 と間違っています: 未公開の牌 %3 があると宣言していますが、%4 しかありません"
 
 #: src/servertable.py:772
 msgid "declareKong:%1 wrongly said Kong for meld %2"
-msgstr ""
+msgstr "宣言カン:%1 がカンを3つの牌の組合せの %2 と間違えました"
 
 #: src/servertable.py:821
 msgid "%1 claiming MahJongg: This is not a winning hand: %2"
-msgstr ""
+msgstr "%1 が MahJong(上がり)を宣言しています: これは勝ちの役ではありません: %2"
 
 #: src/sound.py:70
 msgid "No voices will be heard because the program %1 is missing"
-msgstr ""
+msgstr "プログラム %1 が見つからないため、音声は聞こえません"
 
 #: src/sound.py:375
 #, fuzzy
 #| msgid "file <filename>%1</filename> contains no valid SVG"
 msgid "cannot write <filename>%1</filename>: %2"
-msgstr "ファイル <filename>%1</filename> には有効な SVG が含まれていません"
+msgstr "<filename>%1</filename> を書き込めません: %2"
 
 #: src/sound.py:378
 msgid "The voice files have changed, their checksum has changed."
-msgstr ""
+msgstr "音声ファイルが変更され、そのチェックサムも変更されました。"
 
 #: src/sound.py:379
 msgid "Please reinstall kajongg or do, with sufficient permissions:"
-msgstr ""
+msgstr "kajongg を再インストールするか、十分な権限を持って実行してください:"
 
 #: src/tables.py:65
 msgid "Table"
-msgstr "雀卓"
+msgstr "テーブル"
 
 #: src/tables.py:69
 msgctxt "table status"
 msgid "Status"
-msgstr ""
+msgstr "状態"
 
 #: src/tables.py:70
 msgid "Ruleset"
-msgstr ""
+msgstr "ルールセット"
 
 #: src/tables.py:149
 msgid "Select a ruleset"
-msgstr ""
+msgstr "ルールセットを選択"
 
 #: src/tables.py:186
 #, fuzzy
@@ -2148,121 +2203,121 @@
 
 #: src/tables.py:187 src/tables.py:331 src/tables.py:363
 msgid "Allocate a new table"
-msgstr ""
+msgstr "新しいテーブルを割り当て"
 
 #: src/tables.py:193 src/tables.py:332 src/tables.py:364
 #, fuzzy
 #| msgid "Score"
 msgid "&Join"
-msgstr "スコア"
+msgstr "参加(&J)"
 
 #: src/tables.py:194 src/tables.py:333 src/tables.py:365
 msgid "Join a table"
-msgstr ""
+msgstr "テーブルに参加"
 
 #: src/tables.py:200
 #, fuzzy
 #| msgid "&Game"
 msgid "&Leave"
-msgstr "ゲーム(&G)"
+msgstr "離れる(&L)"
 
 #: src/tables.py:201
 msgid "Leave a table"
-msgstr ""
+msgstr "テーブルを離れます"
 
 #: src/tables.py:207
 msgctxt "Kajongg-Ruleset"
 msgid "Compare"
-msgstr ""
+msgstr "比較"
 
 #: src/tables.py:208
 msgid "Compare the rules of this table with my own rulesets"
-msgstr ""
+msgstr "このテーブルのルールを私自身のルールセットと比較してください"
 
 #: src/tables.py:214
 msgid "&Chat"
-msgstr ""
+msgstr "チャット(&C)"
 
 #: src/tables.py:221
 msgid "&Start"
-msgstr ""
+msgstr "開始(&S)"
 
 #: src/tables.py:222
 msgid "Start playing on a table. Empty seats will be taken by robot players."
-msgstr ""
+msgstr "テーブルの上で遊び始めます。空いた席にはロボットプレイヤーが座ります。"
 
 #: src/tables.py:281
 msgid "opens a chat window"
-msgstr ""
+msgstr "チャットウィンドウを開きます"
 
 #: src/tables.py:300
 msgid "Local Games with Ruleset %1"
-msgstr ""
+msgstr "ルールセット %1 のローカル ゲーム"
 
 #: src/tables.py:304
 msgid "Tables at %1"
-msgstr ""
+msgstr "%1 のテーブル"
 
 #: src/tables.py:357
 msgid "Start a new game"
-msgstr ""
+msgstr "新しいゲームを開始"
 
 #: src/tables.py:359
 msgctxt "resuming a local suspended game"
 msgid "&Resume"
-msgstr ""
+msgstr "再開(&R)"
 
 #: src/tables.py:361
 msgid "Resume the selected suspended game"
-msgstr ""
+msgstr "選択した中断されたゲームを再開します"
 
 #: src/tables.py:379
 msgid "Chat with others on this table"
-msgstr ""
+msgstr "このテーブルで他の人とおしゃべりします"
 
 #: src/tables.py:382
 msgid "For chatting with others on this table, please first take a seat"
-msgstr ""
+msgstr "このテーブルでおしゃべりをする場合は、まず着席してください"
 
 #: src/tile.py:277
 msgctxt "kajongg"
 msgid "hidden"
-msgstr ""
+msgstr "未公開の"
 
 #: src/tile.py:278
 msgctxt "kajongg"
 msgid "stone"
-msgstr ""
+msgstr "石"
 
 #: src/tile.py:279
 msgctxt "kajongg"
 msgid "bamboo"
-msgstr ""
+msgstr "竹"
 
 #: src/tile.py:280
 msgctxt "kajongg"
 msgid "character"
-msgstr ""
+msgstr "キャラクター"
 
 #: src/tile.py:281
 msgctxt "kajongg"
 msgid "wind"
-msgstr ""
+msgstr "風"
 
 #: src/tile.py:282
 msgctxt "kajongg"
 msgid "dragon"
-msgstr ""
+msgstr "龍"
 
 #: src/tile.py:283
 msgctxt "kajongg"
 msgid "flower"
-msgstr ""
+msgstr "花"
 
 #: src/tile.py:284
 msgctxt "kajongg"
 msgid "season"
-msgstr ""
+msgstr "季節"
 
 #: src/tile.py:290
 msgctxt "kajongg"
@@ -2272,53 +2327,53 @@
 #: src/tile.py:291
 msgctxt "kajongg"
 msgid "white"
-msgstr ""
+msgstr "白"
 
 #: src/tile.py:292
 msgctxt "kajongg"
 msgid "red"
-msgstr ""
+msgstr "赤"
 
 #: src/tile.py:293
 msgctxt "kajongg"
 msgid "green"
-msgstr ""
+msgstr "緑"
 
 #: src/tile.py:294
 msgctxt "kajongg"
 msgid "East"
-msgstr ""
+msgstr "東"
 
 #: src/tile.py:295
 msgctxt "kajongg"
 msgid "South"
-msgstr ""
+msgstr "南"
 
 #: src/tile.py:296
 msgctxt "kajongg"
 msgid "West"
-msgstr ""
+msgstr "西"
 
 #: src/tile.py:297
 msgctxt "kajongg"
 msgid "North"
-msgstr ""
+msgstr "北"
 
 #: src/tile.py:306
 msgid "East Wind"
-msgstr ""
+msgstr "東の風"
 
 #: src/tile.py:307
 msgid "South Wind"
-msgstr ""
+msgstr "南の風"
 
 #: src/tile.py:308
 msgid "West Wind"
-msgstr ""
+msgstr "西の風"
 
 #: src/tile.py:309
 msgid "North Wind"
-msgstr ""
+msgstr "北の風"
 
 #: src/tile.py:311
 #, python-brace-format
@@ -2329,22 +2384,22 @@
 #: src/tile.py:880
 msgctxt "kajongg meld type"
 msgid "Bonus"
-msgstr ""
+msgstr "ボーナス"
 
 #: src/tile.py:882
 msgctxt "kajongg meld type"
 msgid "&single"
-msgstr ""
+msgstr "シングル(&s)"
 
 #: src/tile.py:884
 msgctxt "kajongg meld type"
 msgid "&pair"
-msgstr ""
+msgstr "ペア(&p)"
 
 #: src/tile.py:886
 msgctxt "kajongg meld type"
 msgid "&chow"
-msgstr ""
+msgstr "チー(&c)"
 
 #: src/tile.py:888
 msgctxt "kajongg meld type"
@@ -2354,27 +2409,27 @@
 #: src/tile.py:890
 msgctxt "kajongg meld type"
 msgid "c&laimed kong"
-msgstr ""
+msgstr "カンを要求(&l)"
 
 #: src/tile.py:892
 msgctxt "kajongg meld type"
 msgid "k&ong"
-msgstr "カン(&O)"
+msgstr "カン(&o)"
 
 #: src/tile.py:893
 msgctxt "kajongg meld type"
 msgid "rest of tiles"
-msgstr ""
+msgstr "残りの牌"
 
 #: src/tile.py:900
 msgctxt "kajongg meld state"
 msgid "Exposed"
-msgstr ""
+msgstr "公開した"
 
 #: src/tile.py:901
 msgctxt "kajongg meld state"
 msgid "Concealed"
-msgstr ""
+msgstr "未公開の"
 
 #: src/tile.py:907
 #, python-brace-format
@@ -2421,7 +2476,9 @@
 msgid ""
 "Your client has a version older than 4.9.0 but you need %1 for this server"
 msgstr ""
+"クライアントのバージョンは 4.9.0 より古いですが、このサーバーには %1 が必要です"
 
 #: src/user.py:98
 msgid "Your client has version %1 but you need %2 for this server"
-msgstr ""
+msgstr "クライアントのバージョンは %1 ですが、このサーバーには %2 が必要です"
+

お尻に 2つの空行を追加

→Ctrl+S で保存:

-

注意:

中国式麻雀のルール、専門用語、役の名前など知らないだけでなく英語だったので苦戦しました:
ニュアンスは伝わると思うけど、疑問なところは、各自、訂正してください。

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- -

5. 「@kajongg」ゲームの「パッケージ化」と「インストール」:

-

表示されたメッセージの詳細は「項番 50.」を参照:

-


1). パッケージ化:

$ cd ~/git/void-packages/
$ ./xbps-src clean @kajongg
$ ./xbps-src pkg @kajongg
:
=> @kajongg-25.12.2_1: running pre-pkg hook: 999-collected-rdeps ...
   python3-pyqt6>=0 python3-QtPy>=0 python3-Twisted>=0 python3-zope.interface>=0 python3-pyqt6-svg>=0 python3-pyqt6-gui>=0 python3-pyqt6-widgets>=0 vorbis-tools>=0 
=> @kajongg-25.12.2_1: running do-pkg hook: 00-gen-pkg ...
=> Creating @kajongg-25.12.2_1.x86_64.xbps for repository /host/binpkgs ...
=> @kajongg-25.12.2_1: running post-pkg hook: 00-register-pkg ...
=> Registering new packages to /host/binpkgs
index: added `@kajongg-25.12.2_1' (x86_64).
index: 61 packages registered.
=> @kajongg-25.12.2_1: removing autodeps, please wait...
=> @kajongg-25.12.2_1: cleaning build directory...
=> @kajongg: removing files from destdir...
[user@user-pc void-packages]$ 

→パッケージ化は完了:

-


2). 以前にインストールしたパッケージがあれば削除:

$ sudo xbps-remove @kajongg

-


3). flatpak でインストールされている「@kajongg」があれば削除:

-

「Application ID」を確認:
$ flatpak search kajongg
:
bash: flatpak: command not found

→「flatpak」自体をインストールしていませんでした:

-


4). インストール:

$ xi @kajongg
:
30 packages will be installed:
  python3-parsing-3.3.2_1 python3-packaging-26.0_1 python3-QtPy-2.4.3_3 
  python3-pyqt6-sip-13.10.2_2 python3-pyqt6-6.10.0_3 
  python3-pyqt6-svg-6.10.0_3 python3-pyqt6-gui-6.10.0_3 
  python3-pyqt6-widgets-6.10.0_3 python3-setuptools-80.10.2_1 
  python3-zope.interface-7.2_2 python3-constantly-23.10.4_3 
  python3-incremental-24.7.2_3 python3-attrs-25.4.0_1 
  python3-six-1.17.0_2 python3-automat-24.8.1_3 python3-idna-3.11_1 
  python3-hyperlink-21.0.0_6 python3-typing_extensions-4.15.0_1 
  python3-ply-3.11_10 python3-pycparser-2.21_4 python3-cffi-2.0.0_2 
  python3-cryptography-46.0.3_2 python3-openssl-25.3.0_2 
  python3-pyasn1-0.6.1_2 python3-pyasn1-modules-0.4.1_2 
  python3-service_identity-24.2.0_2 python3-Twisted-24.11.0_3 
  libao-1.2.2_4 vorbis-tools-1.4.3_1 @kajongg-25.12.2_1 

「libao」は「vorbis-tools」の依存で入ります:

-


5). 確認:

-

(1). システムにインストールされている「python」関連:
$ xbps-query -l | grep python3
:
ii python3-3.14.2_2                          Python programming language (3.14 series)
ii python3-QtPy-2.4.3_3                      Abstraction layer on top of various Python Qt bindings
ii python3-Twisted-24.11.0_3                 Asynchronous networking framework written in Python (Python3)
ii python3-attrs-25.4.0_1                    Attributes without boilerplate (Python3)
ii python3-automat-24.8.1_3                  Finite-state machines in Python (Python3)
ii python3-cairo-1.27.0_3                    Python3 bindings for the cairo graphics library
ii python3-cffi-2.0.0_2                      C foreign function interface for Python3
ii python3-constantly-23.10.4_3              Symbolic constants in Python (Python3)
ii python3-cryptography-46.0.3_2             Python3 library that provides cryptographic recipes and primitives
ii python3-gobject-3.54.2_2                  Python3 bindings for GObject
ii python3-hyperlink-21.0.0_6                Pure-Python implementation of immutable URLs (Python3)
ii python3-idna-3.11_1                       Internationalized Domain Names in Applications (IDNA) for Python3
ii python3-incremental-24.7.2_3              Small library that versions your Python projects (Python3)
ii python3-openssl-25.3.0_2                  Python3 interface to the OpenSSL library
ii python3-packaging-26.0_1                  Core utilities for Python packages (Python3)
ii python3-parsing-3.3.2_1                   Python parsing module
ii python3-ply-3.11_10                       Lex and Yacc for Python3
ii python3-pyasn1-0.6.1_2                    ASN.1 library for Python
ii python3-pyasn1-modules-0.4.1_2            Collection of ASN.1-based protocols modules
ii python3-pycparser-2.21_4                  Complete C99 parser in pure Python (Python3)
ii python3-pyqt6-6.10.0_3                    Python 3 bindings for Qt6
ii python3-pyqt6-gui-6.10.0_3                Python 3 bindings for Qt6 - GUI
ii python3-pyqt6-sip-13.10.2_2               PyQt6 SIP bindings with C and C++ for Python 3
ii python3-pyqt6-svg-6.10.0_3                Python 3 bindings for Qt6 - svg
ii python3-pyqt6-widgets-6.10.0_3            Python 3 bindings for Qt6 - Widgets
ii python3-service_identity-24.2.0_2         Service identity verification for Python (Python3)
ii python3-setuptools-80.10.2_1              Easily build and distribute Python3 packages
ii python3-six-1.17.0_2                      Python 2 and 3 compatibility utilities (Python3)
ii python3-typing_extensions-4.15.0_1        Backported and Experimental Type Hints for Python 3.5+
ii python3-zope.interface-7.2_2              Zope interfaces for Python3

-

(2). システムにある、「アプリ」のフォルダを確認:
$ ls -p /usr/share/kajongg/
:
altint.py              hand.py           move.py             servertable.py
animation.py           handboard.py      permutations.py     sound.py
appversion.py          humanclient.py    player.py           statesaver.py
background.py          intelligence.py   playerlist.py       tables.py
backgroundselector.py  kajcsv.py         point.py            tile.py
board.py               kajongg.py        predefined.py       tileset.py
chat.py                kajonggserver.py  qt.py               tilesetselector.py
client.py              kajonggui.rc      qtreactor.py        tilesource.py
common.py              kde.py            query.py            tree.py
config.py              kdepaths.py       rand.py             uitile.py
configdialog.py        kdestub.py        rule.py             uiwall.py
deferredutil.py        log.py            rulecode.py         user.py
dialogs.py             login.py          rulesetselector.py  util.py
differ.py              mainwindow.py     scene.py            visible.py
game.py                message.py        scoring.py          voices/
games.py               mi18n.py          scoringdialog.py    wall.py
genericdelegates.py    mjresource.py     server.py           wind.py
guiutil.py             modeltest.py      servercommon.py

→「voices/」(音声)フォルダがあることに注目:

-


6). アプリを起動して確認:

メニュー→「ゲーム」→「Kajongg 中国式四人麻雀

-

初期画面:

「@kajongg」ゲームの使い方は「こちら」を参照:

-

ヘルプ→「Kajongg について」

-

プレイヤー設定後、プレイにて:

捨て牌時の英語の音声がちゃんと出ます:

-

→せっかく、がんばって日本語に翻訳しましたが、残念ながら、多くの「翻訳漏れ」があります:

よく見かける、アプリのみが更新され「.po」の原本が取り残されたケースかも。

-

やはり、「.po」をイチから作り直して翻訳すべきでした。二度手間です。

-

-

今回は、ここまで:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- --

40. 参考: 「@kajongg」ゲームのパッチを作成した履歴:

-

パッチを作成したときの作業で、こちらの作業は要りません:

-


1). ソースファイルをダウンロードして展開:

$ cd ~/git/void-packages/
$ ./xbps-src clean @kajongg
$ ./xbps-src extract @kajongg

-


2). 「builddir」フォルダ配下のソースファイルに移動:

$ ls -1p ~/git/void-packages/masterdir-x86_64/builddir/
:
@kajongg-25.12.2/

-

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ ls -p
:
CMakeLists.txt             bash_completion.d/           org.kde.kajongg.desktop
CMakePresets.json.license  cmake-modules/               po/
COPYING.DOC                debian.control               setup.cfg
LICENSE                    doc/                         setup.py
MANIFEST.in                git-pre-commit               snapcraft.yaml
Messages.sh                icons/                       src/
README                     logo.png                     voices/
README.packagers           make_debian_package
README.windows             org.kde.kajongg.appdata.xml

-


3). 差分を作成するためのフォルダを作成:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ mkdir -p a/po/
$ mkdir -p b/po/

-


4). ソースをコピー:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ sudo cp -r po/ja a/po/
$ sudo cp -r po/ja b/po/

$ sudo cp  org.kde.kajongg.desktop a/
$ sudo cp  org.kde.kajongg.desktop b/

-


5). 確認:

$ ls -1p a/
:
po/
org.kde.kajongg.desktop

-

$ ls -1p b/
:
po/
org.kde.kajongg.desktop

-


6). 「b/」フォルダのソースを修正:

$ featherpad b/org.kde.kajongg.desktop

↓ 下記を追加:

Name[ja]=Kajongg 中国式四人麻雀

-


7). 「パッチ1」(差分)の作成:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ diff -Naur a b > 01.kajongg.desktop.patch

-

$ featherpad 01.kajongg.desktop.patch

↓ すべて貼付け:

--- a/org.kde.kajongg.desktop    2026-02-06 21:32:09.838140330 +0900
+++ b/org.kde.kajongg.desktop   2026-02-06 21:38:08.057667441 +0900
@@ -25,6 +25,7 @@
 Name[ia]=Re Kajongg
 Name[is]=Kajongg
 Name[it]=Kajongg
+Name[ja]=Kajongg 中国式四人麻雀
 Name[ka]=Kajongg
 Name[kk]=Kajongg
 Name[km]=​Kajongg

先頭行を削除、お尻に 2つの空行を追加

→Ctrl+S で保存:

-


8). フォルダの同期:

$ sudo rm  a/org.kde.kajongg.desktop
$ sudo rm  b/org.kde.kajongg.desktop

-

$ ls a
po

-

$ ls b
po

-

$ ls b/po/ja
kajongg.po

-


9). 「b/」フォルダのソースを修正(日本語の翻訳):

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ sudo featherpad b/po/ja/kajongg.po

↓ すべて貼付け:

# Translation of kmj into Japanese.
# Yukiko Bando <ybando@k6.dion.ne.jp>, 2009.
msgid ""
msgstr ""
"Project-Id-Version: kmj\n"
"Report-Msgid-Bugs-To: wolfgang@rohdewald.de\n"
"POT-Creation-Date: 2025-11-17 14:39+0000\n"
"PO-Revision-Date: 2010-09-26 12:18-0700\n"
"Last-Translator: Fumiaki Okushi <okushi@kde.gr.jp>\n"
"Language-Team: Japanese <kde-jp@kde.org>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Accelerator-Marker: &\n"
"X-Text-Markup: kde4\n"

msgctxt "kajongg"
msgid "Game"
msgstr "ゲーム"

msgid "View"
msgstr "表示"

msgid "Toolbar"
msgstr "ツールバー"

#: src/background.py:71 src/tileset.py:48
msgid "file <filename>%1</filename> contains no valid SVG"
msgstr "ファイル <filename>%1</filename> には有効な SVG が含まれていません"

#: src/backgroundselector.py:107
#, fuzzy
#| msgid "Preview"
msgctxt "BackgroundSelector"
msgid "Preview"
msgstr "プレビュー"

#: src/backgroundselector.py:108
#, fuzzy
#| msgid "Properties"
msgctxt "BackgroundSelector"
msgid "Properties"
msgstr "プロパティ"

#: src/backgroundselector.py:109
#, fuzzy
#| msgid "Author:"
msgctxt "BackgroundSelector"
msgid "Author:"
msgstr "作者:"

#: src/backgroundselector.py:110
#, fuzzy
#| msgid "Contact:"
msgctxt "BackgroundSelector"
msgid "Contact:"
msgstr "連絡先:"

#: src/backgroundselector.py:111
#, fuzzy
#| msgid "Description:"
msgctxt "BackgroundSelector"
msgid "Description:"
msgstr "説明:"

#: src/board.py:335
msgctxt "kajongg:arrow keys hjkl like in konqueror"
msgid "hjklHJKL"
msgstr ""

#: src/board.py:385
msgid "Choose from"
msgstr "選択"

#: src/chat.py:51
msgid "Time"
msgstr "時間"

#: src/chat.py:51 src/playerlist.py:90
#, fuzzy
#| msgctxt "kajongg"
#| msgid "Player"
msgid "Player"
msgstr "プレイヤー"

#: src/chat.py:51
msgid "Message"
msgstr "メッセージ"

#: src/chat.py:125
msgid "Chat on table %1 at %2"
msgstr "テーブル %1、%2 でチャット"

#: src/client.py:69
msgctxt "table status"
msgid "Suspended"
msgstr "一時停止"

#: src/client.py:74
msgctxt "table status"
msgid "Running"
msgstr "実行"

#: src/client.py:75
msgctxt "table status"
msgid "New"
msgstr "新規"

#: src/configdialog.py:47
msgid "Show tile shadows"
msgstr "牌の影を表示"

#: src/configdialog.py:50
msgid "Rearrange undisclosed tiles to melds"
msgstr "未公開の牌を融合して再配置"

#: src/configdialog.py:53
#, fuzzy
#| msgid "Show only pending games"
msgid "Show only possible actions"
msgstr "可能なアクションのみを表示"

#: src/configdialog.py:56
msgid "Propose what to do"
msgstr "何をすべきかを提案"

#: src/configdialog.py:62
msgid "Animation speed:"
msgstr "アニメーション速度:"

#: src/configdialog.py:66
msgid "Use sounds if available"
msgstr "利用可能な場合はサウンドを使用"

#: src/configdialog.py:69
msgid "Let others hear my voice"
msgstr "私の声を聞かせます"

#: src/configdialog.py:103
msgctxt "kajongg"
msgid "Play"
msgstr "プレイ"

#: src/configdialog.py:106
msgid "Tiles"
msgstr "牌"

#: src/configdialog.py:109
msgid "Backgrounds"
msgstr "背景"

#: src/deferredutil.py:272 src/deferredutil.py:436
msgid "The game server lost connection to player %1"
msgstr "ゲームサーバーはプレーヤ %1 への接続を失いました"

#: src/deferredutil.py:275
msgid ""
"Error for player %1: %2\n"
"%3"
msgstr ""
"プレーヤ %1 のエラー: %2\n"
"%3"

#: src/differ.py:72
msgctxt "Kajongg"
msgid "Rule"
msgstr "ルール"

#: src/differ.py:127
msgctxt "@title:window"
msgid "Compare"
msgstr "比較"

#: src/differ.py:170 src/differ.py:172
msgctxt "Kajongg-Rule"
msgid "not defined"
msgstr "未定義"

#: src/game.py:404
msgid "Score computed manually"
msgstr "スコアは手動で計算されます"

#: src/game.py:502
msgid "Player %1 not known"
msgstr "プレーヤ %1 は不明です"

#: src/game.py:925
msgid "Short living wall: Tile is invisible, hence dangerous"
msgstr "短いリビングの壁: 牌は目に見えないので危険です"

#: src/games.py:95 src/playerlist.py:67 src/tables.py:67
msgid "Players"
msgstr "プレイヤー"

#: src/games.py:95
msgid "Started"
msgstr "開始"

#: src/games.py:107
#, fuzzy
#| msgctxt "kajongg"
#| msgid "Games"
msgctxt "@title:window"
msgid "Games"
msgstr "ゲーム"

#: src/games.py:124
#, fuzzy
#| msgid "&New"
msgctxt "start a new game"
msgid "&New"
msgstr "新規(&N)"

#: src/games.py:129
msgid "&Load"
msgstr "読み込み(&L)"

#: src/games.py:134 src/playerlist.py:56
msgid "&Delete"
msgstr "削除(&D)"

#: src/games.py:139
msgid "Show only pending games"
msgstr "保留中のゲームのみを表示"

#: src/games.py:247
msgid ""
"Do you really want to delete <numid>%1</numid> games?<br>This will be final, "
"you cannot cancel it with the cancel button"
msgstr ""
"本当に <numid>%1</numid> 個のゲームを削除しますか?<br>これは最終的な削除であり、"
"キャンセルボタンでキャンセルすることはできません。"

#: src/guiutil.py:134 src/kdestub.py:120 src/kdestub.py:123
msgid "Kajongg"
msgstr "Kajongg"

#: src/humanclient.py:66
msgid "Which chow do you want to expose?"
msgstr "どのレシピを公開したいですか?"

#: src/humanclient.py:104
msgid "Which kong do you want to declare?"
msgstr "どのカンを宣言しますか?"

#: src/humanclient.py:172
msgid "Choose"
msgstr "選択"

#: src/humanclient.py:383
msgid "You cannot say %1"
msgstr "%1とは言えません"

#: src/humanclient.py:608
msgid "Player %1 has left the table"
msgstr "プレイヤ %1 がテーブルから退席しました"

#: src/humanclient.py:671
msgid ""
"The game on table <numid>%1</numid> can begin. Are you ready to play now?"
msgstr ""
"テーブル <numid>%1</numid> でゲームを開始できます。今すぐプレイしますか?"

#: src/humanclient.py:691
msgid "Ready for next hand?"
msgstr "次の役の準備はできていますか?"

#: src/humanclient.py:967
msgid "The connection to the server %1 broke, please try again later."
msgstr "サーバー %1 への接続が切断されました。後でもう一度試してください。"

#: src/kajongg.py:81 src/kdestub.py:1092
msgid "Mah Jongg - the ancient Chinese board game for 4 players"
msgstr "麻雀 - 古代中国の 4 人用ボード ゲーム"

#: src/kajongg.py:85
msgid "all robots play with visible concealed tiles"
msgstr "すべてのロボットは目に見える隠した牌で遊びます"

#: src/kajongg.py:86
msgid "start with demo mode"
msgstr "デモモードを開始"

#: src/kajongg.py:87
msgid "login to HOST"
msgstr "ホストにログイン"

#: src/kajongg.py:88
msgid "start new TABLE"
msgstr "新しいテーブルを開始"

#: src/kajongg.py:89
msgid "join TABLE"
msgstr "テーブルに参加"

#: src/kajongg.py:90
msgid "use RULESET without asking"
msgstr "何も尋ねずにルールセットを使う"

#: src/kajongg.py:91
msgid "prefer PLAYER for next login"
msgstr "次回のログインでは PLAYER を優先します"

#: src/kajongg.py:92
msgid "use AI variant for human player in demo mode"
msgstr "デモモードで人間のプレイヤーに AI バリアントを使う用"

#: src/kajongg.py:93
msgid "write statistics to CSV"
msgstr "統計情報を CSV に書き込む"

#: src/kajongg.py:94
msgid "show all available rulesets"
msgstr "利用可能なすべてのルールセットを表示"

#: src/kajongg.py:95
msgid "for testing purposes: Initializes the random generator"
msgstr "テスト目的: ランダムジェネレータを初期化"

#: src/kajongg.py:97
msgid "show no graphical user interface. Intended only for testing"
msgstr "グラフィカル ユーザー インターフェイスは表示されません。テストのみを目的としています"

#: src/kajongg.py:99
msgid ""
"use a dedicated server already running and listening on SOCKET. Intended "
"only for testing"
msgstr ""
"すでに稼働しSOCKETをリッスンしている専用サーバーを使用します。"
"テストのみを目的としています。"

#: src/kajongg.py:101
msgid ""
"use a dedicated server already running and listening on PORT. Intended only "
"for testing"
msgstr ""
"すでに稼働し、PORTで待機している専用サーバーを使用します。"
"テストのみを目的としています。"

#: src/kdestub.py:278
#, fuzzy
#| msgctxt "kajongg"
#| msgid "OK"
msgid "&OK"
msgstr "OK(&O)"

#: src/kdestub.py:279
msgid "&Apply"
msgstr "適用(&A)"

#: src/kdestub.py:280
msgid "&Cancel"
msgstr "キャンセル(&C)"

#: src/kdestub.py:281 src/kdestub.py:469
msgid "&Help"
msgstr "ヘルプ(&H)"

#: src/kdestub.py:282
msgid "&Defaults"
msgstr "デフォルト(&D)"

#: src/kdestub.py:352
#, fuzzy
#| msgid "Toolbar"
msgctxt "@action:inmenu"
msgid "Show St&atusbar"
msgstr "ステータスバーを表示(&a)"

#: src/kdestub.py:358
#, fuzzy
#| msgid "Toolbar"
msgctxt "@action:inmenu"
msgid "Show &Toolbar"
msgstr "ツールバーを表示(&T)"

#: src/kdestub.py:364
#, fuzzy
#| msgid "Kajongg"
msgid "Configure Tool&bars..."
msgstr "ツールバーを設定...(&b)"

#: src/kdestub.py:366
msgid "Configure toolbars"
msgstr "ツールバーの設定"

#: src/kdestub.py:373
#, fuzzy
#| msgid "Kajongg"
msgid "Configure &Kajongg..."
msgstr "Kajongg の設定...(&K)"

#: src/kdestub.py:375 src/kdestub.py:1153
msgid "Configure"
msgstr "設定"

#: src/kdestub.py:465
#, fuzzy
#| msgctxt "kajongg"
#| msgid "Game"
msgid "&Game"
msgstr "ゲーム(&G)"

#: src/kdestub.py:466
msgid "&View"
msgstr "表示(&V)"

#: src/kdestub.py:467
msgid "&Settings"
msgstr "設定(&S)"

#: src/kdestub.py:477
msgctxt "@action:inmenu"
msgid "&Help"
msgstr "ヘルプ(&H)"

#: src/kdestub.py:480 src/kdestub.py:857
msgid "Switch Application Language"
msgstr "アプリケーション言語を切り替える"

#: src/kdestub.py:484
#, fuzzy
#| msgid "Kajongg"
msgctxt "@action:inmenu"
msgid "About &Kajongg"
msgstr "Kajongg について(&K)"

#: src/kdestub.py:862
msgid "Please choose the language which should be used for this application:"
msgstr "このアプリケーションに使用する言語を選択してください:"

#: src/kdestub.py:881
msgid "Add Fallback Language"
msgstr "フォールバック言語の追加"

#: src/kdestub.py:893
msgid "Primary language:"
msgstr "主な言語:"

#: src/kdestub.py:893
msgid "Fallback language:"
msgstr "フォールバック言語"

#: src/kdestub.py:899
msgid "Remove"
msgstr "削除"

#: src/kdestub.py:903
msgid ""
"This is the main application language which will be used first, before any "
"other languages."
msgstr ""
"これは、他の言語よりも先に最初に使用されるメインの"
"アプリケーション言語です。"

#: src/kdestub.py:905
msgid ""
"This is the language which will be used if any previous languages do not "
"contain a proper translation."
msgstr ""
"これは、以前の言語に適切な翻訳が含まれていない場合に使用"
"される言語です。"

#: src/kdestub.py:1035
#, fuzzy
#| msgid "Kajongg"
msgid "About Kajongg"
msgstr "Kajongg について"

#: src/kdestub.py:1055
msgid "Version: %1"
msgstr "バージョン: %1"

#: src/kdestub.py:1056
msgid "Protocol version %1"
msgstr "プロトコルバージョン %1"

#: src/kdestub.py:1059
msgid "Original author"
msgstr "原作者"

#: src/kdestub.py:1066
msgid "KDE Frameworks (not installed or not usable)"
msgstr "KDE フレームワーク (インストールされていないか、使用できません)"

#: src/kdestub.py:1072
msgctxt "kajongg"
msgid "Using versions %1"
msgstr "バージョン %1 を使用しています"

# skip-rule: player2
#: src/kdestub.py:1093
msgid ""
"This is the classical Mah Jongg for four players. If you are looking for Mah "
"Jongg solitaire please use the application kmahjongg."
msgstr ""
"これは 4 人でプレイする伝統的なマージャンです。マージャン牌を使ったソリティア"
"ゲームを探しているなら、KMahjongg を使ってください。"

#: src/kdestub.py:1110
msgid ""
"Please use <a href=\"https://bugs.kde.org\">https://bugs.kde.org</a> to "
"report bugs."
msgstr ""
"不具合の報告は、<a href=\"https://bugs.kde.org\">https://bugs.kde.org</a>"

#: src/kdestub.py:1115
#, fuzzy
#| msgid "Author:"
msgid "Authors:"
msgstr "作者:"

#: src/kdestub.py:1356
msgid "Configure Toolbars"
msgstr "ツールバーの設定"

#: src/kdestub.py:1358
msgid "A&vailable actions:"
msgstr "利用可能なアクション(&v):"

#: src/kdestub.py:1369
msgid "Curr&ent actions:"
msgstr "現在のアクション(&e):"

#: src/login.py:177
msgid "trying to start local server %1"
msgstr "ローカルサーバー %1 を起動します"

#: src/login.py:188 src/login.py:637
msgid "removed stale socket <filename>%1</filename>"
msgstr "古いソケット <filename>%1</filename> を削除しました"

#: src/login.py:208
msgid "started the local kajongg server: pid=<numid>%1</numid> %2"
msgstr "ローカルの kajongg サーバーを開始しました: pid=<numid>%1</numid> %2"

#: src/login.py:251
msgctxt "kajongg"
msgid "Login"
msgstr "ログイン"

#: src/login.py:300 src/login.py:406
msgid "Game server:"
msgstr "ゲームサーバー:"

#: src/login.py:303 src/login.py:408
msgid "Username:"
msgstr "ユーザ名:"

#: src/login.py:306 src/login.py:411
msgid "Password:"
msgstr "パスワード:"

#: src/login.py:308
msgctxt "kajongg"
msgid "Ruleset:"
msgstr "ルールセット:"

#: src/login.py:400
msgctxt "@title:window"
msgid "Create User Account"
msgstr "ユーザアカウントの作成"

#: src/login.py:414
msgid "Repeat password:"
msgstr "パスワードを再入力:"

#: src/login.py:565
msgid "You are already connected to server %1"
msgstr "すでにサーバー %1 に接続中"

#: src/login.py:605
msgctxt "USER is not known on SERVER"
msgid "%1 is not known on %2, do you want to open an account?"
msgstr "%1 は %2 では不明です。アカウントを開設しますか?"

#: src/login.py:618
msgid "Server %1 did not answer"
msgstr "サーバー %1 が応答しませんでした"

#: src/login.py:620
msgid "Server %1 refused connection"
msgstr "サーバー %1 が接続を拒否しました"

#: src/login.py:622
msgid "Server %1 does not run a kajongg server"
msgstr "サーバー %1 は kajongg サーバーではありません"

#: src/login.py:624
msgid "Address for server %1 cannot be found"
msgstr "サーバー %1 のアドレスが見つかりません"

#: src/login.py:627
msgid "Login to server %1 failed: You have no network connection"
msgstr "サーバー %1 へのログインに失敗しました: ネットワーク接続がありません"

#: src/login.py:638
msgid "Please try again"
msgstr "もう一度試してください"

#: src/mainwindow.py:486
#, fuzzy
#| msgid "&Score Table"
msgctxt "@action:inmenu"
msgid "&Score Manual Game"
msgstr "手動ゲームのスコアを取得(&S)"

#: src/mainwindow.py:488
#, fuzzy
#| msgid "&Score Table"
msgctxt "@action:intoolbar"
msgid "Manual Game"
msgstr "手動ゲーム"

#: src/mainwindow.py:491
#, fuzzy
#| msgid "&Score Table"
msgctxt "kajongg @info:tooltip"
msgid "&Score a manual game."
msgstr "手動ゲームのスコアを付けます(&S)。"

#: src/mainwindow.py:493
#, fuzzy
#| msgid "&Play"
msgctxt "@action:intoolbar"
msgid "&Play"
msgstr "開始(&P)"

#: src/mainwindow.py:496
#, fuzzy
#| msgid "&Score Table"
msgctxt "kajongg @info:tooltip"
msgid "Start a new game."
msgstr "新しいゲームを開始します。"

#: src/mainwindow.py:498
#, fuzzy
#| msgid "&Abort"
msgctxt "@action:inmenu"
msgid "&Abort Game"
msgstr "中止(&A)"

#: src/mainwindow.py:502
msgctxt "kajongg @info:tooltip"
msgid "Abort the current game."
msgstr "現在のゲームを中止します。"

#: src/mainwindow.py:504
#, fuzzy
#| msgid "Kajongg"
msgctxt "@action:inmenu"
msgid "&Quit Kajongg"
msgstr "終了(&Q)"

#: src/mainwindow.py:507
#, fuzzy
#| msgid "&Players"
msgctxt "@action:intoolbar"
msgid "&Players"
msgstr "プレイヤー(&P)"

#: src/mainwindow.py:510
msgctxt "kajongg @info:tooltip"
msgid "define your players."
msgstr "プレイヤーを定義します。"

#: src/mainwindow.py:512
msgctxt "@action:intoolbar"
msgid "&Rulesets"
msgstr "ルールセット(&R)"

#: src/mainwindow.py:515
msgctxt "kajongg @info:tooltip"
msgid "customize rulesets."
msgstr "ルールセットをカスタマイズします。"

#: src/mainwindow.py:519
msgctxt "@action:inmenu"
msgid "&Change Visual Angle"
msgstr "視角を変更(&C)"

#: src/mainwindow.py:520
msgctxt "@action:intoolbar"
msgid "Angle"
msgstr "角度"

#: src/mainwindow.py:523
msgctxt "kajongg @info:tooltip"
msgid "Change the visual appearance of the tiles."
msgstr "牌の外観を変更します。"

#: src/mainwindow.py:527
msgctxt "@action:inmenu"
msgid "F&ull Screen Mode"
msgstr "全画面モード(&u)"

#: src/mainwindow.py:530
#, fuzzy
#| msgctxt "kajongg"
#| msgid "&Score Table"
msgctxt "kajongg @action:inmenu"
msgid "&Score Table"
msgstr "スコア表(&S)"

#: src/mainwindow.py:532
#, fuzzy
#| msgctxt "kajongg"
#| msgid "Scores"
msgctxt "kajongg @action:intoolbar"
msgid "&Scores"
msgstr "スコア(&S)"

#: src/mainwindow.py:534
msgctxt "kajongg @info:tooltip"
msgid "Show or hide the score table for the current game."
msgstr "現在のゲームのスコア表を表示または非表示にします。"

#: src/mainwindow.py:536
#, fuzzy
#| msgid "Scores"
msgctxt "@action:inmenu"
msgid "&Explain Scores"
msgstr "スコアの説明(&E)"

#: src/mainwindow.py:537
#, fuzzy
#| msgid "Scores"
msgctxt "@action:intoolbar"
msgid "&Explain"
msgstr "説明(&E)"

#: src/mainwindow.py:539
msgctxt "kajongg @info:tooltip"
msgid "Explain the scoring for all players in the current game."
msgstr "現在の試合の全プレイヤーの得点を説明します。"

#: src/mainwindow.py:541
msgctxt "@action:inmenu"
msgid "&Demo Mode"
msgstr "デモモード(&D)"

#: src/mainwindow.py:544
msgctxt "kajongg @info:tooltip"
msgid "Let the computer take over for you. Start a new local game if needed."
msgstr "コンピュータに代わってもらいます。必要に応じて、新しいローカル ゲームを開始します。"

#: src/mainwindow.py:546
msgid "C&hat"
msgstr "チャット(&h)"

#: src/mainwindow.py:549
msgctxt "kajongg @info:tooltip"
msgid "Chat with the other players."
msgstr "他のプレイヤーとチャットします。"

#: src/message.py:250
msgid "saying %1 violates Original Call"
msgstr "%1 が元の呼び出しに違反していると言っています"

#: src/message.py:263
msgid ""
"claiming %1 is dangerous because you will have to discard a dangerous tile"
msgstr ""
"危険な牌を捨てる必要があるため、%1 の宣言は危険です"

#: src/message.py:268
msgid ""
"claiming %1 for %2 is dangerous because you will have to discard a dangerous "
"tile"
msgstr ""
"%1 を %2 に宣言するのは、危険な牌を捨てる必要があるので危険です"

#: src/message.py:271
msgid "You may say %1"
msgstr "%1 と言うかもしれません"

#: src/message.py:280
msgctxt "kajongg"
msgid "Pung"
msgstr "ポン"

#: src/message.py:281
msgctxt "kajongg game dialog:Key for Pung"
msgid "P"
msgstr "P"

#: src/message.py:299
msgctxt "kajongg"
msgid "Kong"
msgstr "カン"

#: src/message.py:300
msgctxt "kajongg game dialog:Key for Kong"
msgid "K"
msgstr "K"

#: src/message.py:326
msgid "saying Kong for %1 violates Original Call"
msgstr "%1 のカンが元の宣言に違反していると言っています"

#: src/message.py:330
msgid "You may say Kong for %1"
msgstr "%1 の場合は「カン」と言ってください"

#: src/message.py:344
msgctxt "kajongg"
msgid "Chow"
msgstr "チー"

#: src/message.py:345
msgctxt "kajongg game dialog:Key for Chow"
msgid "C"
msgstr "C"

#: src/message.py:378
#, fuzzy
#| msgid "Score"
msgctxt "kajongg"
msgid "Mah Jongg"
msgstr "麻雀"

#: src/message.py:379
msgctxt "kajongg game dialog:Key for Mah Jongg"
msgid "M"
msgstr "M"

#: src/message.py:387
msgid "Press here and you win"
msgstr "ここを押せば勝ちです"

#: src/message.py:401
msgctxt "kajongg"
msgid "Original Call"
msgstr "元の宣言"

#: src/message.py:402
msgctxt "kajongg game dialog:Key for Original Call"
msgid "O"
msgstr ""

#: src/message.py:418
msgid "discarding %1 and declaring Original Call makes this hand unwinnable"
msgstr "%1 を捨てて、元の宣言を宣言すると、この役では勝てなくなります"

#: src/message.py:422
msgid ""
"Discard a tile, declaring Original Call meaning you need only one tile to "
"complete the hand and will not alter the hand in any way (except bonus tiles)"
msgstr ""
"牌を1枚捨て、オリジナルコールを宣言します。これは、役の札を完成させるには"
"牌が1枚だけ必要であり、役の札を一切変更しないことを意味します(ボーナス牌を除く)"

#: src/message.py:447
msgctxt "kajongg"
msgid "Discard"
msgstr "捨てる"

#: src/message.py:448
msgctxt "kajongg game dialog:Key for Discard"
msgid "D"
msgstr ""

#: src/message.py:465
msgid "discarding %1 violates Original Call"
msgstr "%1 を捨てると元の宣言に違反します"

#: src/message.py:468
msgid "discarding %1 is Dangerous Game"
msgstr "%1 を捨てるのは危険です"

#: src/message.py:471
msgid "discard the least useful tile"
msgstr "最も役に立たない牌を捨てます"

#: src/message.py:551
#, fuzzy
#| msgid "Do you really want to abort this game?"
msgid "%1 is not ready to start the game"
msgstr "%1 はゲームを開始する準備ができていません"

#: src/message.py:590
msgid "Kajongg <numid>%1</numid>"
msgstr ""

#: src/message.py:676
msgctxt "kajongg"
msgid "Violates Original Call"
msgstr "元の宣言に違反します"

#: src/message.py:819
#, fuzzy
#| msgid "&Score Table"
msgctxt "kajongg"
msgid "Dangerous Game"
msgstr "危険なゲーム"

#: src/message.py:834
msgctxt "kajongg"
msgid "No Choice"
msgstr "選択の余地はありません"

#: src/message.py:896
msgctxt "kajongg"
msgid "OK"
msgstr "OK"

#: src/message.py:897
msgctxt "kajongg game dialog:Key for OK"
msgid "O"
msgstr ""

#: src/message.py:901
msgid "Confirm that you saw the message"
msgstr "メッセージが表示されたことを確認します"

#: src/message.py:909
msgctxt "kajongg"
msgid "No Claim"
msgstr "宣言なし"

#: src/message.py:910
msgctxt "kajongg game dialog:Key for No claim"
msgid "N"
msgstr ""

#: src/message.py:914
msgid "You cannot or do not want to claim this tile"
msgstr "この牌は宣言できません"

#: src/mjresource.py:92
#, fuzzy
#| msgid "cannot find any tileset, is libkmahjongg installed?"
msgid ""
"cannot find any %1 in the following directories, is libkmahjongg installed?"
msgstr ""
"ディレクトリに %1 が見つかりません。libkmahjongg はインストールされていますか?"

#: src/mjresource.py:116
#, fuzzy
#| msgid "cannot find tileset %1, using default"
msgid "cannot find %1, using default"
msgstr "%1 が見つかりません。デフォルトを使用します"

#: src/mjresource.py:131
#, fuzzy
#| msgid "Backgrounds"
msgid "unknown name"
msgstr "名前不明"

#: src/mjresource.py:132
msgid "unknown author"
msgstr "作者不明"

#: src/mjresource.py:135
msgid "no description available"
msgstr "説明がありません"

#: src/mjresource.py:138
msgid "no E-Mail address available"
msgstr "利用可能な電子メールアドレスがありません"

#: src/player.py:725
msgid "%1 claiming MahJongg: She does not really have tile %2"
msgstr "%1 が MahJongg を宣言しています: 彼女は実際には %2 の牌を持っていません"

#: src/player.py:734
msgid ""
"%1 claiming MahJongg: She did not pass all concealed tiles to the server"
msgstr ""
"%1 が MahJongg を宣言しています: 彼女はすべての隠した牌をサーバーに渡しませんでした

#: src/player.py:855
msgid "Player %1 has 3 or 4 exposed melds, all are green"
msgstr "プレイヤー %1 には 3 つまたは 4 つの公開した牌があり、すべて緑色です"

#: src/player.py:863
msgid "Player %1 may try a True Color Game"
msgstr "プレイヤー %1 は True Color ゲームを試すことができます"

#: src/player.py:866
msgid "Player %1 may try an All Terminals Game"
msgstr "プレイヤー %1 は全端末ゲームを試すことができます"

#: src/player.py:879
msgid "Player %1 exposed many winds"
msgstr "プレイヤー %1 は多くの風にさらされました"

#: src/player.py:883
msgid "Player %1 exposed many dragons"
msgstr "プレイヤー %1 が多くの龍を公開しました"

#: src/playerlist.py:50
#, fuzzy
#| msgid "&New"
msgctxt "define a new player"
msgid "&New"
msgstr "新規(&N)"

#: src/playerlist.py:110
msgid "Player %1 already exists"
msgstr "プレイヤー %1 はすでに存在します"

#: src/playerlist.py:121
msgid "Error while adding player %1: %2"
msgstr "プレイヤー %1 の追加中にエラーが発生しました: %2"

#: src/playerlist.py:176
msgid ""
"There are %1 finished and %2 unfinished games for %3, delete %3 anyway?  "
"This will also delete all games played by %3!"
msgstr ""
"%3 には完了したゲームが %1 個、未完了のゲームが %2 個あります。"
"それでも %3 を削除しますか?"
"これにより、%3 がプレイしたゲームもすべて削除されます!"

#: src/predefined.py:29
msgid "Classical Chinese standard"
msgstr "古典的な中国式の標準"

#: src/predefined.py:35
msgid "Classical Chinese"
msgstr "古典的な中国式"

#: src/predefined.py:41
msgid "Last Tile Taken from Dead Wall"
msgstr "デッドウォールから取った最後の牌"

#: src/predefined.py:43
msgid ""
"The dead wall is also called kong box: The last 16 tiles of the wall used as "
"source of replacement tiles"
msgstr ""
"デッドウォールはカン ボックスとも呼ばれます: 交換牌のソースとして"
"使用される壁の最後の16枚の牌です。"

#: src/predefined.py:46
msgid "Last Tile is Last Tile of Wall"
msgstr "最後の牌は、壁の最後の牌です"

#: src/predefined.py:48
msgid ""
"Winner said Mah Jong with the last tile taken from the living end of the wall"
msgstr ""
"麻雀での勝者は壁の生きている端から最後の牌を取ることです"

#: src/predefined.py:50
msgid "Last Tile is Last Tile of Wall Discarded"
msgstr "最後の牌は捨てられた壁の最後の牌です"

#: src/predefined.py:52
msgid ""
"Winner said Mah Jong by claiming the last tile taken from the living end of "
"the wall, discarded by another player"
msgstr ""
"麻雀を勝ち取るには、他のプレイヤーが捨てた壁の生きている端から取った最後の牌を"
"獲得することです。"


#: src/predefined.py:55
msgid "Robbing the Kong"
msgstr "カンを強奪する"

#: src/predefined.py:56
msgid ""
"Winner said Mah Jong by claiming the 4th tile of a kong another player just "
"declared"
msgstr ""
"勝者は、他のプレイヤーが宣言したカンの 4番目の牌を獲得して MahJong を宣言します。 "

#: src/predefined.py:59
msgid "Mah Jongg with Original Call"
msgstr "オリジナルコール付き麻雀"

#: src/predefined.py:62
msgid ""
"Just before the first discard, a player can declare Original Call meaning "
"she needs only one tile to complete the hand and announces she will not "
"alter the hand in any way (except bonus tiles)"
msgstr ""
"最初の捨て牌の直前に、プレイヤーはオリジナルコールを宣言することができます。"
"これは、役の牌を完成させるのに1枚だけ必要であり、いかなる形でも役の牌を変更しない"
"ことを宣言することを意味します(ボーナス牌を除く)。"

#: src/predefined.py:65
msgid "Dangerous Game"
msgstr "危険なゲーム"

#: src/predefined.py:66
msgid ""
"In some situations discarding a tile that has a high chance to help somebody "
"to win is declared to be dangerous, and if that tile actually makes somebody "
"win, the discarder pays the winner for all"
msgstr ""
"状況によっては、誰かの勝利に繋がる可能性が高い牌を捨てて宣言することは危険であり、その牌が実際に誰かの勝利につながった場合、捨てた牌は勝者に全額を支払うことになります"

#: src/predefined.py:70
msgid "Twofold Fortune"
msgstr "二重の幸運"

#: src/predefined.py:71
msgid ""
"Kong after Kong: Declare Kong and a second Kong with the replacement tile "
"and Mah Jong with the second replacement tile"
msgstr ""
"カンの後にカン:交換牌でカンと 2番目の カンを宣言し、2番目の交換牌で MahJong(上がり)を宣言します"

#: src/predefined.py:75
msgid "Blessing of Heaven"
msgstr "天の祝福"

#: src/predefined.py:76
msgid "East says Mah Jong with the unmodified dealt tiles"
msgstr "東は配牌を変更せずに MahJong(上がり)と宣言します"

#: src/predefined.py:78
msgid "Blessing of Earth"
msgstr "大地の祝福"

#: src/predefined.py:79
msgid ""
"South, West or North says Mah Jong with the first tile discarded by East"
msgstr ""
"南、西、北のいずれかが、東が最初に捨てた牌で MahJong(上がり)を宣言します。"

#: src/predefined.py:81
msgid "East won nine times in a row"
msgstr "東が 9連勝"

#: src/predefined.py:82
msgid "If that happens, East gets a limit score and the winds rotate"
msgstr "そうなると東はリミットスコアを獲得し、風が回転します"

#: src/predefined.py:87
msgid ""
"False Naming of Discard, Claimed for Mah Jongg and False Declaration of Mah "
"Jongg"
msgstr ""
"捨て牌の虚偽記載、麻雀の請求、麻雀の虚偽申告"

#: src/predefined.py:93
msgid "Own Flower and Own Season"
msgstr "自分の花、自分の季節"

#: src/predefined.py:96
msgid "All Flowers"
msgstr "すべての花"

#: src/predefined.py:97
msgid "All Seasons"
msgstr "すべての季節"

#: src/predefined.py:99
msgid "Three Concealed Pongs"
msgstr "3 つの隠し ポン"

#: src/predefined.py:103
msgid "Long Hand"
msgstr "長い役の"

#: src/predefined.py:104
msgid "The hand contains too many tiles"
msgstr "役に含まれる牌が多すぎます"

#: src/predefined.py:109
msgid "Tiles in Hand"
msgstr "役の持ちの牌"

#: src/predefined.py:114
msgid "Points Needed for Mah Jongg"
msgstr "麻雀に必要なポイント"

#: src/predefined.py:118
msgid "Minimum number of doubles needed for Mah Jongg"
msgstr "麻雀に必要なダブルスの最小数"

#: src/predefined.py:121
msgid "Points for a Limit Hand"
msgstr "限定の役のポイント"

#: src/predefined.py:125
msgid "Play with the roof off"
msgstr "屋根を外して遊ぶ"

#: src/predefined.py:126
msgid "Play with no upper scoring limit"
msgstr "得点上限なしでプレーする"

#: src/predefined.py:128
msgid "Claim Timeout"
msgstr "宣言のタイムアウト"

#: src/predefined.py:132
msgid "Size of Kong Box"
msgstr "カン ボックスのサイズ"

#: src/predefined.py:133
msgid "The Kong Box is used for replacement tiles when declaring kongs"
msgstr "カン ボックスは、カンを宣言するときに牌を交換するために使用されます"

#: src/predefined.py:135
msgid "Play with Bonus Tiles"
msgstr "ボーナス牌で遊ぶ"

#: src/predefined.py:136
msgid "Bonus tiles increase the luck factor"
msgstr "ボーナス牌は運要素を増加させます"

#: src/predefined.py:138
msgid "Minimum number of rounds in game"
msgstr "ゲームの最小ラウンド数"

#: src/predefined.py:142
msgid "number of allowed chows"
msgstr "許可された食事の数"

#: src/predefined.py:143
msgid "The number of chows a player may build"
msgstr "プレイヤーが構築できる チー の数"

#: src/predefined.py:145
msgid "must declare calling hand"
msgstr "役を宣言しなければならない"

#: src/predefined.py:147
msgid "Mah Jongg is only allowed after having declared to have a calling hand"
msgstr "麻雀は役を持っていると宣言した場合にのみ許可されます"

#: src/predefined.py:149
msgid "Standard Rotation"
msgstr "標準回転"

#: src/predefined.py:152
msgid "Discard tiles ordered"
msgstr "宣言した牌を捨てる"

#: src/predefined.py:154
msgid "Discard tiles ordered from top left"
msgstr "左上から順に牌を捨てます"

#: src/predefined.py:156
msgid "Leave holes for claimed discards"
msgstr "要求された捨てるための穴を残す"

#: src/predefined.py:159
msgid ""
"Only when discarding tiles ordered: Do not place the next discard where the "
"claimed discard was"
msgstr ""
"牌を捨てる場合のみ:要求された捨て札があった場所に次の捨て札を置きません"

#: src/predefined.py:168
msgid "Last Tile Completes Pair of 2..8"
msgstr "最後の牌は 2..8 のペアで完成します"

#: src/predefined.py:172
msgid "Last Tile Completes Pair of Terminals or Honors"
msgstr "最後の牌が端子または面子のペアで完成します"

#: src/predefined.py:175
msgid "Last Tile is Only Possible Tile"
msgstr "最後の牌は可能な牌のみです"

#: src/predefined.py:179
msgid "Won with Last Tile Taken from Wall"
msgstr "壁から最後の牌を取って勝ちました"

#: src/predefined.py:184
msgid "Zero Point Hand"
msgstr "ゼロポイントの役"

#: src/predefined.py:185
msgid "The hand has 0 basis points excluding bonus tiles"
msgstr "ボーナス 牌を除いて、役の基本のポイントは 0 です"

#: src/predefined.py:186
msgid "No Chow"
msgstr "チーでない"

#: src/predefined.py:188
msgid "Only Concealed Melds"
msgstr "未公開の3つの牌の組合せのみ"

#: src/predefined.py:192
msgid "False Color Game"
msgstr "Color Game でない"

#: src/predefined.py:193
msgid ""
"Only same-colored tiles (only bamboo/stone/character) plus any number of "
"winds and dragons"
msgstr ""
"同じ色の牌のみ(竹/石/文字のみ)と任意の数の風と龍"

#: src/predefined.py:196
msgid "True Color Game"
msgstr "True Color ゲーム"

#: src/predefined.py:197
msgid "Only same-colored tiles (only bamboo/stone/character)"
msgstr "同色牌のみ(竹・石・文字のみ)"

#: src/predefined.py:199
msgid "Concealed True Color Game"
msgstr "未公開の True Color ゲーム"

#: src/predefined.py:200
msgid "All tiles concealed and of the same suit, no honors"
msgstr "すべての牌が隠されており、同じ揃いの場合、栄誉はありません"

#: src/predefined.py:202
msgid "Only Terminals and Honors"
msgstr "端子と面子のみ"

#: src/predefined.py:203
msgid "Only winds, dragons, 1 and 9"
msgstr "風、龍、1と9のみ"

#: src/predefined.py:204
msgid "Only Honors"
msgstr "優等生のみ"

#: src/predefined.py:205
msgid "Only winds and dragons"
msgstr "風と龍だけ"

#: src/predefined.py:207
msgid "Hidden Treasure"
msgstr "未公開の宝物"

#: src/predefined.py:208
msgid "Only hidden Pungs or Kongs, last tile from wall"
msgstr ""表示のポンまたはカンのみ、壁の最後の牌

#: src/predefined.py:210
msgid "Heads and Tails"
msgstr "表と裏"

#: src/predefined.py:211
msgid "Only 1 and 9"
msgstr "1と9だけ"

#: src/predefined.py:213
msgid "Fourfold Plenty"
msgstr "たっぷり4倍"

#: src/predefined.py:214
#, fuzzy
#| msgid "Score"
msgid "4 Kongs"
msgstr "4 カン"

#: src/predefined.py:216 src/predefined.py:430
msgid "Three Great Scholars"
msgstr "三人の偉大な学者"

#: src/predefined.py:217 src/predefined.py:337
msgid "3 Pungs or Kongs of dragons"
msgstr "龍のポンまたはカン 3 個"

#: src/predefined.py:218
msgid "Four Blessings Hovering over the Door"
msgstr "扉の上に浮かぶ 4 つの祝福"

#: src/predefined.py:220 src/predefined.py:342
msgid "4 Pungs or Kongs of winds"
msgstr "4 ポンまたはカンの風"

#: src/predefined.py:221
msgid "Imperial Jade"
msgstr "天の出口"

#: src/predefined.py:222
msgid "Only green tiles: Green dragon and Bamboo 2,3,4,6,8"
msgstr "緑の牌のみ: 緑の龍と竹 2、3、4、6、8"

#: src/predefined.py:223
msgid "Gathering the Plum Blossom from the Roof"
msgstr "屋上から梅の花を摘む"

#: src/predefined.py:225
msgid "Mah Jong with stone 5 from the dead wall"
msgstr "デッドウォールから石5を使った麻雀"

#: src/predefined.py:227
msgid "Plucking the Moon from the Bottom of the Sea"
msgstr "海の底から月を摘み取る"

#: src/predefined.py:228
msgid "Mah Jong with the last tile from the wall being a stone 1"
msgstr "壁の最後の牌が石である麻雀 1"

#: src/predefined.py:230
msgid "Scratching a Carrying Pole"
msgstr "携帯したポールに傷を付ける"

#: src/predefined.py:231
msgid "Robbing the Kong of bamboo 2"
msgstr "カンから竹を奪う 2"

#: src/predefined.py:237 src/predefined.py:526
msgid "Standard Mah Jongg"
msgstr "スタンダード麻雀"

#: src/predefined.py:242
msgid "Nine Gates"
msgstr "九つの門"

#: src/predefined.py:244
msgid ""
"A concealed hand in one color 1112345678999 plus last tile of this suit "
"(from wall or discarded)"
msgstr ""
"1色の未公開の役の札 1112345678999 プラスこの組合せの最後の牌"
"(壁からまたは捨て牌)"

#: src/predefined.py:246
msgid "Thirteen Orphans"
msgstr "十三人の孤児"

#: src/predefined.py:247
msgid ""
"13 single tiles: All dragons, winds, 1, 9 and a 14th tile building a pair "
"with one of them"
msgstr ""
"13枚のシングル牌:すべて龍、風、1、9、そして"
"そのうちの1枚とペアを形成する14枚目の牌"

#: src/predefined.py:251
msgid "Pung/Kong of Dragons"
msgstr "龍 のポン/カン"

#: src/predefined.py:253
msgid "Pung/Kong of Own Wind"
msgstr "自分の風のポン/カン"

#: src/predefined.py:256
msgid "Pung/Kong of Round Wind"
msgstr "一巡りの風のポン/カン"

#: src/predefined.py:260
msgid "Exposed Kong"
msgstr "公開したカン"

#: src/predefined.py:263
msgid "Exposed Kong of Terminals"
msgstr "公開した端子のカン"

#: src/predefined.py:266
msgid "Exposed Kong of Honors"
msgstr "自分の公開したカン"

#: src/predefined.py:269
msgid "Exposed Pung"
msgstr "公開したポン"

#: src/predefined.py:272
msgid "Exposed Pung of Terminals"
msgstr "公開した端子のポン"

#: src/predefined.py:275
msgid "Exposed Pung of Honors"
msgstr "公開した面子のポン"

#: src/predefined.py:279
msgid "Concealed Kong"
msgstr "未公開のカン"

#: src/predefined.py:282
msgid "Concealed Kong of Terminals"
msgstr "未公開の端子のカン"

#: src/predefined.py:285
msgid "Concealed Kong of Honors"
msgstr "未公開の面子のカン"

#: src/predefined.py:288
msgid "Concealed Pung"
msgstr "未公開のポン"

#: src/predefined.py:291
msgid "Concealed Pung of Terminals"
msgstr "未公開の端子のポン"

#: src/predefined.py:294
msgid "Concealed Pung of Honors"
msgstr "未公開の面子のポン"

#: src/predefined.py:297
msgid "Pair of Own Wind"
msgstr "自分の風のペア"

#: src/predefined.py:299
msgid "Pair of Round Wind"
msgstr "一巡の風のペア"

#: src/predefined.py:301
msgid "Pair of Dragons"
msgstr "龍のペア"

#: src/predefined.py:305
msgid "Flower"
msgstr "花"

#: src/predefined.py:307
msgid "Season"
msgstr "季節"

#: src/predefined.py:316
msgid "Classical Chinese DMJL"
msgstr "古典的な中国式の DMJL"

#: src/predefined.py:322
msgid "Classical Chinese as defined by the Deutsche Mah Jongg Liga (DMJL) e.V."
msgstr "The Deutsche Mah Jongg Liga (DMJL) e.V.で定義された古典的な中国式"

#: src/predefined.py:329
msgid "Squirming Snake"
msgstr "うごめくヘビ"

#: src/predefined.py:330
msgid ""
"All tiles of same color. Pung or Kong of 1 and 9, pair of 2, 5 or 8 and two "
"Chows of the remaining values"
msgstr ""
"すべて同じ色の牌。1と9のポンまたはカン、2、5、または8のペア、"
"残りの値の2つのチー"

#: src/predefined.py:333
msgid "Little Three Dragons"
msgstr "小さな 3つの龍"

#: src/predefined.py:334
msgid "2 Pungs or Kongs of dragons and 1 pair of dragons"
msgstr "龍のポンまたはカン 2 つと龍 1 ペア"

#: src/predefined.py:336
msgid "Big Three Dragons"
msgstr "大きな 3つの龍"

#: src/predefined.py:339
msgid "Little Four Joys"
msgstr "小さな 4つの喜び"

#: src/predefined.py:340
msgid "3 Pungs or Kongs of winds and 1 pair of winds"
msgstr "3 ポンまたはカンの風と 1 ペアの風"

#: src/predefined.py:341
msgid "Big Four Joys"
msgstr "大きな 4つの喜び"

#: src/predefined.py:347
msgid "False Naming of Discard, Claimed for Chow"
msgstr ""

#: src/predefined.py:350
msgid "False Naming of Discard, Claimed for Pung/Kong"
msgstr "捨て牌の虚偽の命名、チーの主張"

#: src/predefined.py:353 src/predefined.py:444 src/predefined.py:556
msgid "False Declaration of Mah Jongg by One Player"
msgstr "一人のプレイヤーによる麻雀の虚偽申告"

#: src/predefined.py:356
msgid "False Declaration of Mah Jongg by Two Players"
msgstr "二人のプレイヤーによる麻雀の虚偽申告"

#: src/predefined.py:359
msgid "False Declaration of Mah Jongg by Three Players"
msgstr "三人のプレイヤーによる麻雀の虚偽申告"

#: src/predefined.py:362 src/predefined.py:447 src/predefined.py:559
msgid "False Naming of Discard, Claimed for Mah Jongg"
msgstr "捨て札の虚偽の命名、麻雀用と主張"

#: src/predefined.py:371
msgid "Classical Chinese BMJA"
msgstr "古典的な中国式の BMJA"

#: src/predefined.py:377
msgid "Classical Chinese as defined by the British Mah-Jong Association"
msgstr "英国麻雀協会が定義する古典的な中国式"

#: src/predefined.py:392 src/predefined.py:532
msgid "Original Call"
msgstr "元の宣言"

#: src/predefined.py:396
msgid "Gates of Heaven"
msgstr "天国の門"

#: src/predefined.py:397
msgid ""
"All tiles concealed of same color: Values 1112345678999 with one pair from 2 "
"to 8 (last tile from wall or discarded)"
msgstr ""
"未公開のすべての牌が同じ色: 値は 1112345678999 で、"
"2 から 8 までの 1つのペア (壁の最後の牌または捨てられた牌)"

#: src/predefined.py:400
msgid "Wriggling Snake"
msgstr "うごめく蛇"

#: src/predefined.py:401
msgid ""
"Pair of 1s and a run from 2 to 9 in the same suit with each of the winds"
msgstr ""
"それぞれの風で同じ組合せで 1 のペアと 2 から 9 まで"

#: src/predefined.py:403
msgid "Triple Knitting"
msgstr "三重編み"

#: src/predefined.py:404
msgid ""
"Four sets of three tiles in the different suits and a pair: No Winds or "
"Dragons"
msgstr ""
"異なる組合せの3つの牌と1組の牌が4組: 風や龍は無し"

#: src/predefined.py:405
msgid "Knitting"
msgstr "編み"

#: src/predefined.py:406
msgid "7 pairs of tiles in any 2 out of 3 suits; no Winds or Dragons"
msgstr "3つの組合せのうち任意の 2 つの牌の 7 ペア。風や龍は無し"

#: src/predefined.py:408
msgid "All pair honors"
msgstr "全ペア面子"

#: src/predefined.py:409
msgid "7 pairs of 1s/9s/Winds/Dragons"
msgstr "1 や 9 や風や龍の 7 ペア"

#: src/predefined.py:412 src/predefined.py:536
msgid "Own Flower"
msgstr "自分の花"

#: src/predefined.py:413 src/predefined.py:537
msgid "Own Season"
msgstr "自分の季節"

#: src/predefined.py:425
msgid "Buried Treasure"
msgstr "埋もれた財宝"

#: src/predefined.py:426
msgid "Concealed pungs of one suit with winds/dragons and a pair"
msgstr "風/龍とペアの 1 つの組合せの未公開のポン"

#: src/predefined.py:427 src/predefined.py:548
msgid "Purity"
msgstr "純粋さ"

#: src/predefined.py:428 src/predefined.py:549
msgid "Only same-colored tiles (no chows, dragons or winds)"
msgstr "同じ色の牌のみ (チー、龍、風は不可)"

#: src/predefined.py:431
msgid "3 Pungs or Kongs of dragons plus any pung/kong and a pair"
msgstr "龍のポンまたはカン 3 個と、任意のポン/カンおよびペア"

#: src/predefined.py:434
msgid "The 13 Unique Wonders"
msgstr "13 のユニークな驚異"

#: src/predefined.py:441 src/predefined.py:553
msgid "False Naming of Discard, Claimed for Chow/Pung/Kong"
msgstr "捨て牌の虚偽の命名、チー/ポン/カン と宣言"

#: src/predefined.py:451
msgid "Calling for Only Honors"
msgstr "面子のみを宣言"

#: src/predefined.py:455
msgid "Calling for Wriggling Snake"
msgstr "うごめく蛇を宣言"

#: src/predefined.py:459
msgid "Calling for Triple Knitting"
msgstr "三重の編み物を宣言"

#: src/predefined.py:463
msgid "Calling for Gates of Heaven"
msgstr "天国の門を宣言"

#: src/predefined.py:466
msgid "Calling for Knitting"
msgstr "編み物を宣言"

#: src/predefined.py:470
msgid "Calling for Imperial Jade"
msgstr "天の出口を宣言"


#: src/predefined.py:474
msgid "Calling for The 13 Unique Wonders"
msgstr "13のユニークな驚異を宣言"

#: src/predefined.py:477
msgid "Calling for Three Great Scholars"
msgstr "三人の偉大な学者を宣言"

#: src/predefined.py:480
msgid "Calling for All pair honors"
msgstr "全てのペアの面子を宣言"

#: src/predefined.py:484
msgid "Calling for Heads and Tails"
msgstr "表と裏を宣言"

#: src/predefined.py:488
msgid "Calling for Four Blessings Hovering over the Door"
msgstr "ドアの上に浮かぶ 4 つの祝福を宣言"

#: src/predefined.py:491
msgid "Calling for Buried Treasure"
msgstr "埋蔵金を宣言"

#: src/predefined.py:495
msgid "Calling for Fourfold Plenty"
msgstr "4 倍の豊富さを宣言"

#: src/predefined.py:499
msgid "Calling for Purity"
msgstr "純粋さを宣言"

#: src/predefined.py:509
msgid "Taiwanese 16-tile game, FOR DEVELOPERS"
msgstr "台湾の 16 牌麻雀、開発者向け"

#: src/predefined.py:515
msgid ""
"Taiwanese 16-Tiles Mah Jongg, early alpha. See https://bugs.kde.org/show_bug."
"cgi?id=298821"
msgstr ""
"台湾の 16 牌麻雀、初期アルファ版。 https://bugs.kde.org/show_bug.cgi?id=298821 を参照してください。"

#: src/query.py:197
#, fuzzy
#| msgid "&Score Table"
msgctxt "kajongg name for local game server"
msgid "Local Game"
msgstr "ローカルゲーム"

#: src/query.py:430
msgid "Database %1 updated from schema %2 to %3"
msgstr "データベース %1 がスキーマ %2 から %3 に更新されました"

#: src/rule.py:49 src/scoringdialog.py:703 src/scoringdialog.py:782
msgid "points"
msgstr "ポイント"

#: src/rule.py:50
msgctxt "kajongg"
msgid "doubles"
msgstr "ダブルス"

#: src/rule.py:51
#, fuzzy
#| msgid "Upper limit"
msgctxt "kajongg"
msgid "limits"
msgstr "制限"

#: src/rule.py:91
msgctxt "Kajongg"
msgid "%1 points"
msgstr "%1 ポイント"

#: src/rule.py:93
msgctxt "Kajongg"
msgid "%1 doubles"
msgstr "%1 ダブルス"

#: src/rule.py:98
#, fuzzy
#| msgid "Upper limit"
msgctxt "Kajongg"
msgid "%1 limits"
msgstr "%1 制限"

#: src/rule.py:366
msgid "Meld Rules"
msgstr "3つの牌の組合せのルール"

#: src/rule.py:367
msgid ""
"Meld rules are applied to single melds independent of the rest of the hand"
msgstr ""
"3つの牌の組合せのルールは、役の残りの部分とは独立して単一の3つの牌の組合せに適用されます"

#: src/rule.py:368
msgid "Hand Rules"
msgstr ""

#: src/rule.py:369
msgid "Hand rules are applied to the entire hand, for all players"
msgstr "役のルール"

#: src/rule.py:370
msgid "Winner Rules"
msgstr "勝者のルール"

#: src/rule.py:371
msgid "Winner rules are applied to the entire hand but only for the winner"
msgstr "勝者のルールは役の全体に適用されますが、勝者にのみ適用されます"

#: src/rule.py:372
msgid "Loser Rules"
msgstr "敗者のルール"

#: src/rule.py:373
msgid "Loser rules are applied to the entire hand but only for non-winners"
msgstr "敗者のルールは役の全体に適用されますが、勝者以外にのみ適用されます"

#: src/rule.py:374
msgid "Mah Jongg Rules"
msgstr "麻雀のルール"

#: src/rule.py:375
msgid "Only hands matching a Mah Jongg rule can win"
msgstr "麻雀ルールに一致する役だけが勝つことができます"

#: src/rule.py:376
msgctxt "kajongg"
msgid "Options"
msgstr "オプション"

#: src/rule.py:377
msgid "Here we have several special game related options"
msgstr "ここには特別なゲーム関連のオプションがいくつかあります"

#: src/rule.py:378
#, fuzzy
#| msgid "Properties"
msgid "Penalties"
msgstr "プロパティ"

#: src/rule.py:379
msgid ""
"Penalties are applied manually by the user. They are only used for scoring "
"games.\n"
"When playing against the computer or over the net, Kajongg will never let "
"you get\n"
"into a situation where you have to pay a penalty"
msgstr ""
"ペナルティはユーザが手動で適用します。ゲームのスコアリングにのみ使用されます。\n"
"コンピュータやネット対戦の場合、Kajongg では\n"
"ペナルティを課されるような状況に陥ることはありません"

#: src/rule.py:579
msgctxt "Ruleset._newKey:%1 is empty or space plus number"
msgid "Copy%1 of %2"
msgstr "コピー %1/%2"

#: src/rule.py:935
msgctxt "%1 can be a sentence"
msgid "%4 have impossible values %2/%3 in rule \"%1\""
msgstr "%4 にはルール \"%1\" に不可能な値 %2/%3 があります"

#: src/rule.py:1023
msgctxt "wrong value for rule"
msgid "%1: %2 is too small, minimal value is %3"
msgstr "%1: %2 は小さすぎます。最小値は %3 です"

#: src/rulesetselector.py:511
msgctxt "@title:window"
msgid "Customize rulesets"
msgstr "ルールセットのカスタマイズ"

#: src/rulesetselector.py:530
msgctxt "kajongg"
msgid "Rule"
msgstr "ルール"

#: src/rulesetselector.py:592
msgid "C&opy"
msgstr "コピー(&o)"

#: src/rulesetselector.py:593
msgctxt "Kajongg ruleset comparer"
msgid "Co&mpare"
msgstr "比較(&m)"

#: src/rulesetselector.py:594
msgid "&Remove"
msgstr "削除(&R)"

#: src/rulesetselector.py:595
msgid "&Close"
msgstr "閉じる(&C)"

#: src/scene.py:389 src/scene.py:517
msgid "Do you really want to abort this game?"
msgstr "本当にこのゲームを中止してもよろしいですか?"

#: src/scoring.py:60
msgctxt "@title:window"
msgid "Swap Seats"
msgstr "席を交換する"

#: src/scoring.py:62
msgid "By the rules, %1 and %2 should now exchange their seats. "
msgstr "ルールにより、%1 と %2 は席を交換する必要があります。"

#: src/scoring.py:64
msgid "&Exchange"
msgstr "席を交換(&E)"

#: src/scoring.py:66
msgid "&Keep seat"
msgstr "席をキープ(&K)"

#: src/scoring.py:85
msgctxt "@title:window"
msgid "Select four players"
msgstr "4人のプレイヤーを選択"

#: src/scoring.py:360
msgid "Move Exposed Tiles Here"
msgstr "公開した牌をここに移動"

#: src/scoring.py:361
msgid "Move Concealed Tiles Here"
msgstr "未公開の牌をここに移動"

#: src/scoring.py:673
msgid "Please define four players in <interface>Settings|Players</interface>"
msgstr "<interface>Settings|Players</interface> で 4 人のプレイヤーを定義してください"

#: src/scoringdialog.py:258
msgid "Round/Hand"
msgstr "一巡/役"

#: src/scoringdialog.py:299 src/scoringdialog.py:834
msgctxt "kajongg"
msgid "Score"
msgstr "スコア"

#: src/scoringdialog.py:299
#, fuzzy
#| msgid "Players"
msgctxt "kajongg"
msgid "Payments"
msgstr "支払い"

#: src/scoringdialog.py:300
msgctxt "kajongg"
msgid "Balance"
msgstr "バランス"

#: src/scoringdialog.py:300
msgctxt "kajongg"
msgid "Chart"
msgstr "チャート"

#: src/scoringdialog.py:410
msgctxt "kajongg"
msgid "Scores"
msgstr "スコア"

#: src/scoringdialog.py:452
msgctxt "kajongg"
msgid "Used Rules"
msgstr "使うルール"

#: src/scoringdialog.py:487
msgid "Final scores for game <numid>%1</numid>"
msgstr "ゲーム <numid>%1</numid> の最終スコア"

#: src/scoringdialog.py:489
msgid "Scores for game <numid>%1</numid>"
msgstr "ゲーム <numid>%1</numid> のスコア"

#: src/scoringdialog.py:569
#, fuzzy
#| msgid "Explain Scores"
msgctxt "@title:window"
msgid "Explain Scores"
msgstr "スコアの説明"

#: src/scoringdialog.py:585
msgid "There is no active game"
msgstr "アクティブなゲームはありません"

#: src/scoringdialog.py:588
msgid "%1"
msgstr ""

#: src/scoringdialog.py:602
msgid "Manual score for %1: %2 points"
msgstr "%1 の手動のスコア: %2 ポイント"

#: src/scoringdialog.py:689
#, fuzzy
#| msgid "Properties"
msgid "Penalty"
msgstr "ペナルティ"

#: src/scoringdialog.py:692
msgid "Offense:"
msgstr "罰則"

#: src/scoringdialog.py:699
#, fuzzy
#| msgid "Properties"
msgid "Total Penalty"
msgstr "合計ペナルティ"

#: src/scoringdialog.py:727
msgid "&Execute"
msgstr "実行(&E)"

#: src/scoringdialog.py:805
#, fuzzy
#| msgctxt "Kajongg"
#| msgid "%1 points"
msgctxt "penalty dialog, appears behind paying player combobox"
msgid "pays %1 points"
msgstr "%1ポイントを支払い"

#: src/scoringdialog.py:810
#, fuzzy
#| msgctxt "Kajongg"
#| msgid "%1 points"
msgctxt "penalty dialog, appears behind profiting player combobox"
msgid "gets %1 points"
msgstr "%1 ポイントを獲得"

#: src/scoringdialog.py:821
msgctxt "@title:window"
msgid "Scoring for this Hand"
msgstr "この手動のスコア"

#: src/scoringdialog.py:832
msgctxt "kajongg"
msgid "Player"
msgstr "プレイヤー"

#: src/scoringdialog.py:833
msgctxt "kajongg"
msgid "Wind"
msgstr "風"

#: src/scoringdialog.py:835
msgid "Winner"
msgstr "勝者"

#: src/scoringdialog.py:841
msgctxt "kajongg"
msgid "Draw"
msgstr "引き分け"

#: src/scoringdialog.py:843
#, fuzzy
#| msgid "Properties"
msgid "&Penalties"
msgstr "ペナルティ(&P)"

#: src/scoringdialog.py:845
#, fuzzy
#| msgid "&New hand"
msgid "&Save Hand"
msgstr "役を保存(&S)"

#: src/scoringdialog.py:867
msgid "&Last Tile:"
msgstr "最後の牌(&L):"

#: src/scoringdialog.py:876
msgid "L&ast Meld:"
msgstr "最後の3つの牌の組合せ(&a):"

#: src/server.py:122
msgid "Wrong password"
msgstr "パスワードが間違っています"

#: src/server.py:218
msgid "table with id <numid>%1</numid> not found"
msgstr "ID <numid>%1</numid> のテーブルが見つかりません"

#: src/server.py:366
msgid "Player %1 has logged out"
msgstr "プレイヤー %1 がログアウトしました"

#: src/server.py:436
msgid "the server will listen on PORT ({int(defaultPort)})"
msgstr "サーバーは PORT ({int(defaultPort)}) で開きます"

#: src/server.py:439
msgid "the server will listen on SOCKET"
msgstr "サーバーは SOCKET で開きます"

#: src/server.py:443
msgid "name of the database"
msgstr "データベースの名前"

#: src/server.py:447
msgid "do not terminate local game server after last client disconnects"
msgstr "最後のクライアントが切断された後はローカル ゲーム サーバーを終了しないでください"

#: src/servertable.py:181
msgid "You already joined this table"
msgstr "あなたはすでにこのテーブルに参加しています"

#: src/servertable.py:183
msgid "All seats are already taken"
msgstr "もうすべての席が埋まっています"

#: src/servertable.py:188
msgid "takes a seat"
msgstr "席に着きます"

#: src/servertable.py:196
msgid "leaves the table"
msgstr "テーブルを離れます"

#: src/servertable.py:242
msgctxt "kajongg, name of robot player, to be translated"
msgid "Robot 1"
msgstr "ロボット 1"

#: src/servertable.py:245
msgctxt "kajongg, name of robot player, to be translated"
msgid "Robot 2"
msgstr "ロボット 2"

#: src/servertable.py:246
msgctxt "kajongg, name of robot player, to be translated"
msgid "Robot 3"
msgstr "ロボット 3"

#: src/servertable.py:302
msgid "Only the initiator %1 can start this game, you are %2"
msgstr "このゲームを開始できるのは開始者 %1 だけです。あなたは %2 です"

#: src/servertable.py:701
msgid "Game <numid>%1</numid> is over!"
msgstr "ゲーム <numid>%1</numid> は終了しました!"

#: src/servertable.py:730
msgid "%1 wrongly said %2 for meld %3"
msgstr "%1 は3つの牌の組合せの %3 に対して %2 と間違って言いました"

#: src/servertable.py:735
msgid "%1 wrongly said %2: claims to have concealed tiles %3 but only has %4"
msgstr "%1 は %2 と間違っています: 未公開の牌 %3 があると宣言していますが、%4 しかありません"

#: src/servertable.py:772
msgid "declareKong:%1 wrongly said Kong for meld %2"
msgstr "宣言カン:%1 がカンを3つの牌の組合せの %2 と間違えました"

#: src/servertable.py:821
msgid "%1 claiming MahJongg: This is not a winning hand: %2"
msgstr "%1 が MahJong(上がり)を宣言しています: これは勝ちの役ではありません: %2"

#: src/sound.py:70
msgid "No voices will be heard because the program %1 is missing"
msgstr "プログラム %1 が見つからないため、音声は聞こえません"

#: src/sound.py:375
#, fuzzy
#| msgid "file <filename>%1</filename> contains no valid SVG"
msgid "cannot write <filename>%1</filename>: %2"
msgstr "<filename>%1</filename> を書き込めません: %2"

#: src/sound.py:378
msgid "The voice files have changed, their checksum has changed."
msgstr "音声ファイルが変更され、そのチェックサムも変更されました。"

#: src/sound.py:379
msgid "Please reinstall kajongg or do, with sufficient permissions:"
msgstr "kajongg を再インストールするか、十分な権限を持って実行してください:"

#: src/tables.py:65
msgid "Table"
msgstr "テーブル"

#: src/tables.py:69
msgctxt "table status"
msgid "Status"
msgstr "状態"

#: src/tables.py:70
msgid "Ruleset"
msgstr "ルールセット"

#: src/tables.py:149
msgid "Select a ruleset"
msgstr "ルールセットを選択"

#: src/tables.py:186
#, fuzzy
#| msgid "&New"
msgctxt "allocate a new table"
msgid "&New"
msgstr "新規(&N)"

#: src/tables.py:187 src/tables.py:331 src/tables.py:363
msgid "Allocate a new table"
msgstr "新しいテーブルを割り当て"

#: src/tables.py:193 src/tables.py:332 src/tables.py:364
#, fuzzy
#| msgid "Score"
msgid "&Join"
msgstr "参加(&J)"

#: src/tables.py:194 src/tables.py:333 src/tables.py:365
msgid "Join a table"
msgstr "テーブルに参加"

#: src/tables.py:200
#, fuzzy
#| msgid "&Game"
msgid "&Leave"
msgstr "離れる(&L)"

#: src/tables.py:201
msgid "Leave a table"
msgstr "テーブルを離れます"

#: src/tables.py:207
msgctxt "Kajongg-Ruleset"
msgid "Compare"
msgstr "比較"

#: src/tables.py:208
msgid "Compare the rules of this table with my own rulesets"
msgstr "このテーブルのルールを私自身のルールセットと比較してください"

#: src/tables.py:214
msgid "&Chat"
msgstr "チャット(&C)"

#: src/tables.py:221
msgid "&Start"
msgstr "開始(&S)"

#: src/tables.py:222
msgid "Start playing on a table. Empty seats will be taken by robot players."
msgstr "テーブルの上で遊び始めます。空いた席にはロボットプレイヤーが座ります。"

#: src/tables.py:281
msgid "opens a chat window"
msgstr "チャットウィンドウを開きます"

#: src/tables.py:300
msgid "Local Games with Ruleset %1"
msgstr "ルールセット %1 のローカル ゲーム"

#: src/tables.py:304
msgid "Tables at %1"
msgstr "%1 のテーブル"

#: src/tables.py:357
msgid "Start a new game"
msgstr "新しいゲームを開始"

#: src/tables.py:359
msgctxt "resuming a local suspended game"
msgid "&Resume"
msgstr "再開(&R)"

#: src/tables.py:361
msgid "Resume the selected suspended game"
msgstr "選択した中断されたゲームを再開します"

#: src/tables.py:379
msgid "Chat with others on this table"
msgstr "このテーブルで他の人とおしゃべりします"

#: src/tables.py:382
msgid "For chatting with others on this table, please first take a seat"
msgstr "このテーブルでおしゃべりをする場合は、まず着席してください"

#: src/tile.py:277
msgctxt "kajongg"
msgid "hidden"
msgstr "未公開の"

#: src/tile.py:278
msgctxt "kajongg"
msgid "stone"
msgstr "石"

#: src/tile.py:279
msgctxt "kajongg"
msgid "bamboo"
msgstr "竹"

#: src/tile.py:280
msgctxt "kajongg"
msgid "character"
msgstr "キャラクター"

#: src/tile.py:281
msgctxt "kajongg"
msgid "wind"
msgstr "風"

#: src/tile.py:282
msgctxt "kajongg"
msgid "dragon"
msgstr "龍"

#: src/tile.py:283
msgctxt "kajongg"
msgid "flower"
msgstr "花"

#: src/tile.py:284
msgctxt "kajongg"
msgid "season"
msgstr "季節"

#: src/tile.py:290
msgctxt "kajongg"
msgid "tile"
msgstr "牌"

#: src/tile.py:291
msgctxt "kajongg"
msgid "white"
msgstr "白"

#: src/tile.py:292
msgctxt "kajongg"
msgid "red"
msgstr "赤"

#: src/tile.py:293
msgctxt "kajongg"
msgid "green"
msgstr "緑"

#: src/tile.py:294
msgctxt "kajongg"
msgid "East"
msgstr "東"

#: src/tile.py:295
msgctxt "kajongg"
msgid "South"
msgstr "南"

#: src/tile.py:296
msgctxt "kajongg"
msgid "West"
msgstr "西"

#: src/tile.py:297
msgctxt "kajongg"
msgid "North"
msgstr "北"

#: src/tile.py:306
msgid "East Wind"
msgstr "東の風"

#: src/tile.py:307
msgid "South Wind"
msgstr "南の風"

#: src/tile.py:308
msgid "West Wind"
msgstr "西の風"

#: src/tile.py:309
msgid "North Wind"
msgstr "北の風"

#: src/tile.py:311
#, python-brace-format
msgctxt "kajongg tile name"
msgid "{group} {value}"
msgstr ""

#: src/tile.py:880
msgctxt "kajongg meld type"
msgid "Bonus"
msgstr "ボーナス"

#: src/tile.py:882
msgctxt "kajongg meld type"
msgid "&single"
msgstr "シングル(&s)"

#: src/tile.py:884
msgctxt "kajongg meld type"
msgid "&pair"
msgstr "ペア(&p)"

#: src/tile.py:886
msgctxt "kajongg meld type"
msgid "&chow"
msgstr "チー(&c)"

#: src/tile.py:888
msgctxt "kajongg meld type"
msgid "p&ung"
msgstr "ポン(&U)"

#: src/tile.py:890
msgctxt "kajongg meld type"
msgid "c&laimed kong"
msgstr "カンを要求(&l)"

#: src/tile.py:892
msgctxt "kajongg meld type"
msgid "k&ong"
msgstr "カン(&o)"

#: src/tile.py:893
msgctxt "kajongg meld type"
msgid "rest of tiles"
msgstr "残りの牌"

#: src/tile.py:900
msgctxt "kajongg meld state"
msgid "Exposed"
msgstr "公開した牌"

#: src/tile.py:901
msgctxt "kajongg meld state"
msgid "Concealed"
msgstr "未公開の"

#: src/tile.py:907
#, python-brace-format
msgctxt "kajongg meld name, do not translate parameter names"
msgid "{state} {meldType} {name}"
msgstr ""

#: src/tilesetselector.py:141
#, fuzzy
#| msgid "Preview"
msgctxt "TilesetSelector"
msgid "Preview"
msgstr "プレビュー"

#: src/tilesetselector.py:142
#, fuzzy
#| msgid "Properties"
msgctxt "TilesetSelector"
msgid "Properties"
msgstr "プロパティ"

#: src/tilesetselector.py:143
#, fuzzy
#| msgid "Author:"
msgctxt "TilesetSelector"
msgid "Author:"
msgstr "作者:"

#: src/tilesetselector.py:144
#, fuzzy
#| msgid "Contact:"
msgctxt "TilesetSelector"
msgid "Contact:"
msgstr "連絡先:"

#: src/tilesetselector.py:145
#, fuzzy
#| msgid "Description:"
msgctxt "TilesetSelector"
msgid "Description:"
msgstr "説明:"

#: src/user.py:94
msgid ""
"Your client has a version older than 4.9.0 but you need %1 for this server"
msgstr ""
"クライアントのバージョンは 4.9.0 より古いですが、このサーバーには %1 が必要です"

#: src/user.py:98
msgid "Your client has version %1 but you need %2 for this server"
msgstr "クライアントのバージョンは %1 ですが、このサーバーには %2 が必要です"

→Ctrl+S で保存:

-


10). 「パッチ2」(差分)の作成:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ diff -Naur a b > 02.kajongg-ja.po.patch

-

$ featherpad 02.kajongg-ja.po.patch

先頭行を削除、お尻に 2つの空行を追加

→Ctrl+S で保存:

-


11). パッチのフォルダを作成:

$ sudo mkdir -p ~/git/void-packages/srcpkgs/@kajongg/patches/

-


12). 作成したパッチを、パッチのフォルダに移動:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ sudo mv 01.kajongg.desktop.patch ~/git/void-packages/srcpkgs/@kajongg/patches/
$ sudo mv 02.kajongg-ja.po.patch ~/git/void-packages/srcpkgs/@kajongg/patches/

-

確認:

$ ls -1p ~/git/void-packages/srcpkgs/@kajongg/patches/
:
01.kajongg.desktop.patch
02.kajongg-ja.po.patch

-


13). パッチを実行してみる:

$ cd ~/git/void-packages/
$ ./xbps-src patch @kajongg
:
=> @kajongg-25.12.2_1: patching: 01.kajongg.desktop.patch.
=> @kajongg-25.12.2_1: patching: 02.kajongg-ja.po.patch.
[user@user-pc void-packages]$ 

-


14). 「デスクトップファイル」が変更されたか確認:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ cat org.kde.kajongg.desktop | grep ja]
Name[ja]=Kajongg 中国式四人麻雀

→OK

-


15). 「翻訳ファイル」が変更されたか確認:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ cat po/ja/kajongg.po | grep ロボット
:
msgstr "すべてのロボットは目に見える未公開の牌で遊びます"
msgstr "ロボット 1"
msgstr "ロボット 2"
msgstr "ロボット 3"
msgstr "テーブルの上で遊び始めます。空いた席にはロボットプレイヤーが座ります。"

→OK

-


16). 「差分ファイル」の作成に使った「フォルダ」と「ファイル」を削除:

パッケージ化完了時に、作業フォルダが削除されますが、残がいがあると失敗します:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/kshisen-25.08.1/
$ sudo rm -r a/
$ sudo rm -r b/

-


17). クリーン後、「パッケージ化」してみる:

$ cd ~/git/void-packages/
$ ./xbps-src clean @kajongg
$ ./xbps-src pkg @kajongg

-

エラーを抜粋:
:
[62/72] Generating mo...
FAILED: [code=1] CMakeFiles/pofiles-557994960861117c734f47472767d620 /builddir/@kajongg-25.12.2/build/CMakeFiles/pofiles-557994960861117c734f47472767d620 
cd /builddir/@kajongg-25.12.2/build && /usr/libexec/xbps-src/bin/cmake -DGETTEXT_MSGFMT_EXECUTABLE=/usr/bin/msgfmt -DCOPY_TO=/builddir/@kajongg-25.12.2/build/locale -DPO_DIR=/builddir/@kajongg-25.12.2/po -P /usr/lib64/cmake/KF6I18n/build-pofiles.cmake
/builddir/@kajongg-25.12.2/po/ja/kajongg.po:973: end-of-line within string
/builddir/@kajongg-25.12.2/po/ja/kajongg.po:1334:12: syntax error
/usr/bin/msgfmt: found 2 fatal errors

→記入漏れが 2つ:

-


18). エラーの確認:

$ cd ~/git/void-packages/masterdir-x86_64/builddir/@kajongg-25.12.2/
$ sudo featherpad po/ja/kajongg.po

-

(1). 973 行目のエラー:
msgstr ""
"%1 が MahJongg を宣言しています: 彼女はすべての未公開の牌をサーバーに渡しませんでした

#: src/player.py:855

→行末の「"」の忘れ

-

(2). 1334 行目のエラー:
#: src/predefined.py:208
msgid "Only hidden Pungs or Kongs, last tile from wall"
msgstr ""表示のポンまたはカンのみ、壁の最後の牌

→囲いに、文字列を挿入する時のズレ:

-


19). エラーの修正:

$ cd ~/git/void-packages/
$ sudo featherpad srcpkgs/@kajongg/patches/02.kajongg-ja.po.patch

-

(1). 「#: src/player.py:855」で検索:

→行末に「"」を追加:

-

(2). 「#: src/predefined.py:208」で検索:

→行頭の「"」のひとつを行末に移動:

-


20). インストールして確認するため、すでにインストールしている「@kajongg」アプリを削除:

$ sudo xbps-remove @kajongg                     - 

-

確認:

$ xbps-query -Rs  @kajongg
$

-


21). パッケージ化された「@kajongg」アプリをインストール:

$ xi @kajongg
:
Name     Action    Version           New version            Download size
@kajongg install   -                 25.12.2_1              - 

-

確認:

$ xbps-query -s @kajongg
:
[*] @kajongg-25.12.2_1 The ancient Chinese Mahjong for 4 players

-


22). 「@kajongg」アプリを起動して、動作確認:

「アプリケーション」→「ゲーム」→「Kajongg 中国式四人麻雀」

→起動メニューが日本語化されました:

-

アプリが起動しました:

-

-

項番 4.」に戻る:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----- ---

50. 参考: 「@kajongg」ゲームを「パッケージ化」した時のメッセージ:

-

こちらの作業は要りません:

項番 5.」で、「パッケージ化」した時に表示されたメッセージです:

-


パッケージ化:

$ cd ~/git/void-packages/
$ ./xbps-src clean @kajongg
$ ./xbps-src pkg @kajongg
=> xbps-src: updating repositories for host (x86_64)...
[*] Updating repository `https://repo-default.voidlinux.org/current/bootstrap/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/nonfree/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/debug/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/multilib/bootstrap/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/multilib/x86_64-repodata' ...
[*] Updating repository `https://repo-default.voidlinux.org/current/multilib/nonfree/x86_64-repodata' ...
=> xbps-src: updating software in / masterdir...
=> xbps-src: cleaning up / masterdir...
=> @kajongg-25.12.2_1: removing autodeps, please wait...
=> @kajongg-25.12.2_1: building with [cmake] for x86_64...

   [host] python3-3.14.2_2: found (https://repo-default.voidlinux.org/current) ←★「hostmakedepends=」で指定
   [host] qt6-tools-6.10.2_1: found (https://repo-default.voidlinux.org/current)
   [host] pkg-config-0.29.2_3: found (https://repo-default.voidlinux.org/current)
   [host] cmake-bootstrap-4.1.2_1: found (https://repo-default.voidlinux.org/current/bootstrap)
   [host] ninja-1.13.2_2: found (https://repo-default.voidlinux.org/current)
   [target] gettext-0.22.5_1: found (https://repo-default.voidlinux.org/current) ←★「makedepends=」で指定
   [target] extra-cmake-modules-6.21.0_1: found (https://repo-default.voidlinux.org/current)
   [target] qt6-svg-devel-6.10.2_1: not found
   [target] qt6-widgets-6.10.2_1: not found
   [target] python3-3.14.2_2: found (https://repo-default.voidlinux.org/current)
   [target] python3-QtPy-2.4.3_3: found (https://repo-default.voidlinux.org/current)
   [target] python3-Twisted-24.11.0_3: found (https://repo-default.voidlinux.org/current)
   [target] python3-zope.interface-7.2_2: found (https://repo-default.voidlinux.org/current)
   [target] kf6-ki18n-devel-6.21.0_1: found (https://repo-default.voidlinux.org/current)
   [target] kf6-kdoctools-devel-6.21.0_1: found (https://repo-default.voidlinux.org/current)
   [target] libkmahjongg-devel-25.08.3_1: found (https://repo-default.voidlinux.org/current)
   [runtime] python3-pyqt6-6.10.2_1: not found        ←★「depends=」で指定
   [runtime] python3-QtPy-2.4.3_3: found (https://repo-default.voidlinux.org/current)
   [runtime] python3-Twisted-24.11.0_3: found (https://repo-default.voidlinux.org/current)
   [runtime] python3-zope.interface-7.2_2: found (https://repo-default.voidlinux.org/current)
   [runtime] python3-pyqt6-svg-6.10.2_1: not found
   [runtime] python3-pyqt6-gui-6.10.2_1: not found
   [runtime] python3-pyqt6-widgets-6.10.2_1: not found
   [runtime] vorbis-tools-1.4.3_1: found (https://repo-default.voidlinux.org/current)

画面をクリック後、「←」「→」キーで横に、「↑」「↓」キーで上下に、スクロールできます:

=> @kajongg-25.12.2_1: installing host dependencies: python3-3.14.2_2 qt6-tools-6.10.2_1 pkg-config-0.29.2_3 cmake-bootstrap-4.1.2_1 ninja-1.13.2_2 ...
=> @kajongg-25.12.2_1: installing target dependencies: gettext-0.22.5_1 extra-cmake-modules-6.21.0_1 python3-3.14.2_2 python3-QtPy-2.4.3_3 python3-Twisted-24.11.0_3 python3-zope.interface-7.2_2 kf6-ki18n-devel-6.21.0_1 kf6-kdoctools-devel-6.21.0_1 libkmahjongg-devel-25.08.3_1 qt6-svg-devel-6.10.2_1 qt6-widgets-6.10.2_1 ...
ERROR: Package `python3-3.14.2_2' already installed.
ERROR: Package `qt6-widgets-6.10.2_1' already installed.
=> @kajongg-25.12.2_1: running do-fetch hook: 00-distfiles ...
=> @kajongg-25.12.2_1: running do-extract hook: 00-distfiles ...
=> @kajongg-25.12.2_1: extracting distfile(s), please wait...

=> @kajongg-25.12.2_1: running do-patch hook: 00-patches ...  ←(パッチの実行)
=> @kajongg-25.12.2_1: patching: 01.kajongg.desktop.patch.
=> @kajongg-25.12.2_1: patching: 02.kajongg-ja.po.patch.

=> @kajongg-25.12.2_1: running pre-configure hook: 00-gnu-configure-asneeded ...
=> @kajongg-25.12.2_1: running pre-configure hook: 01-override-config ...
=> @kajongg-25.12.2_1: running pre-configure hook: 02-script-wrapper ...
=> @kajongg-25.12.2_1: running do_configure ...
-- The C compiler identification is GNU 14.2.1
-- The CXX compiler identification is GNU 14.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Warning at /usr/share/ECM/kde-modules/KDEInstallDirsCommon.cmake:169 (message):
  KDE_INSTALL_SBINDIR got its value from CMAKE_INSTALL_SBINDIR.  In most
  cases this is unintended, check if you included GNUInstallDirs before
  KDEInstallDirs.  Some third party modules include GNUInstallDirs too so eg.
  find_package(Qt6 ...) is equivalent to include(GNUInstallDirs).  If you set
  CMAKE_INSTALL_SBINDIR deliberately before including KDEInstallDirs its
  recommended to use KDE_INSTALL_SBINDIR instead to suppress this message.
Call Stack (most recent call first):
  /usr/share/ECM/kde-modules/KDEInstallDirsCommon.cmake:258 (_define_relative)
  /usr/share/ECM/kde-modules/KDEInstallDirs6.cmake:201 (include)
  /usr/share/ECM/kde-modules/KDEInstallDirs.cmake:17 (include)
  CMakeLists.txt:22 (include)
: 省略

CMake Warning at /usr/share/ECM/kde-modules/KDEInstallDirsCommon.cmake:169 (message):
  KDE_INSTALL_SYSCONFDIR got its value from CMAKE_INSTALL_SYSCONFDIR.  In
  most cases this is unintended, check if you included GNUInstallDirs before
  KDEInstallDirs.  Some third party modules include GNUInstallDirs too so eg.
  find_package(Qt6 ...) is equivalent to include(GNUInstallDirs).  If you set
  CMAKE_INSTALL_SYSCONFDIR deliberately before including KDEInstallDirs its
  recommended to use KDE_INSTALL_SYSCONFDIR instead to suppress this message.
Call Stack (most recent call first):
  /usr/share/ECM/kde-modules/KDEInstallDirsCommon.cmake:220 (_define_relative)
  /usr/share/ECM/kde-modules/KDEInstallDirsCommon.cmake:387 (_define_absolute)
  /usr/share/ECM/kde-modules/KDEInstallDirs6.cmake:201 (include)
  /usr/share/ECM/kde-modules/KDEInstallDirs.cmake:17 (include)
  CMakeLists.txt:22 (include)

-- Performing Test HAVE_STDATOMIC
-- Performing Test HAVE_STDATOMIC - Success
-- Installing in the same prefix as Qt, adopting their path scheme.
-- Could not set up the appstream test. appstreamcli is missing.
-- Found Python3: /usr/bin/python3.14 (found suitable version "3.14.2", minimum required is "3.8.0") found components: Interpreter
-- Found python3-twisted
-- Found OpenGL: /usr/lib/libOpenGL.so
-- Found WrapOpenGL: TRUE
-- Found WrapVulkanHeaders: /usr/include
-- Found KF6DocTools: /usr/lib64/cmake/KF6DocTools/KF6DocToolsConfig.cmake (found version "6.21.0")
-- Found Gettext: /usr/bin/msgmerge (found version "0.22.5")
-- Found KF6I18n: /usr/lib64/cmake/KF6I18n/KF6I18nConfig.cmake (found version "6.21.0")
-- Found KF6: success (found suitable version "6.21.0", minimum required is "6.0.0") found components: DocTools I18n

CMake Warning (dev) at cmake-modules/KDEPython.cmake:64 (add_custom_command):
  The following keywords are not supported when using
  add_custom_command(TARGET): DEPENDS.

  Policy CMP0175 is not set: add_custom_command() rejects invalid arguments.
  Run "cmake --help-policy CMP0175" for policy details.  Use the cmake_policy
  command to set the policy and suppress this warning.
Call Stack (most recent call first):
  cmake-modules/KDEPython.cmake:91 (python_install)
  CMakeLists.txt:131 (KDE_INSTALL_PYTHON_FILES)
This warning is for project developers.  Use -Wno-dev to suppress it.
: 省略

  Policy CMP0175 is not set: add_custom_command() rejects invalid arguments.
  Run "cmake --help-policy CMP0175" for policy details.  Use the cmake_policy
  command to set the policy and suppress this warning.
Call Stack (most recent call first):
  cmake-modules/KDEPython.cmake:91 (python_install)
  CMakeLists.txt:133 (KDE_INSTALL_PYTHON_FILES)
This warning is for project developers.  Use -Wno-dev to suppress it.

-- The following OPTIONAL packages have been found:  ←★

 * OpenGL
 * Qt6Svg (required version >= 6.5.0)
 * Qt6SvgWidgets (required version >= 6.5.0)
 * WrapVulkanHeaders
 * Qt6DBusTools (required version >= 6.10.2)
 * Qt6QmlTools (required version >= 6.10.2)
 * Qt6CoreTools (required version >= 6.10.2)
 * Qt6GuiTools (required version >= 6.10.2)
 * Qt6WidgetsTools (required version >= 6.10.2)

-- The following REQUIRED packages have been found:  ←★

 * ECM (required version >= 6.0.0)
 * Python3 (required version >= 3.8.0)
 * Twisted (required version >= 16.6.0)
 * Qt6 (required version >= 6.5.0)
 * KF6DocTools (required version >= 6.0.0)
 * Gettext
 * KF6I18n (required version >= 6.0.0)
 * KF6 (required version >= 6.0.0)
 * Qt6Gui (required version >= 6.5.0)
 * Qt6Core (required version >= 6.8.0)
 * KMahjongglib6 (required version >= 6.0.0)

-- Configuring done (1.1s)
-- Generating done (0.0s)
-- Build files have been written to: /builddir/@kajongg-25.12.2/build
=> @kajongg-25.12.2_1: running pre-build hook: 02-script-wrapper ...
=> @kajongg-25.12.2_1: running do_build ...
[1/84] Running utility command for src_background.py_rule
Byte-compiling /builddir/@kajongg-25.12.2/build/src/background.py to /builddir/@kajongg-25.12.2/build/src/__pycache__/background.cpython-314.pyc
: 省略

[70/84] Running utility command for src_kajcsv.py_rule
Byte-compiling /builddir/@kajongg-25.12.2/build/src/kajcsv.py to /builddir/@kajongg-25.12.2/build/src/__pycache__/kajcsv.cpython-314.pyc
[71/84] Generating mo...
[72/84] Generating po/ca/docs/kajongg/index.cache.bz2
[73/84] Generating po/it/docs/kajongg/index.cache.bz2
[74/84] Generating po/nl/docs/kajongg/index.cache.bz2
[75/84] Generating po/de/docs/kajongg/index.cache.bz2
[76/84] Generating po/es/docs/kajongg/index.cache.bz2
[77/84] Generating po/et/docs/kajongg/index.cache.bz2
[78/84] Generating po/gl/docs/kajongg/index.cache.bz2
[79/84] Generating po/pt/docs/kajongg/index.cache.bz2
[80/84] Generating po/uk/docs/kajongg/index.cache.bz2
[81/84] Generating po/sl/docs/kajongg/index.cache.bz2
[82/84] Generating po/pt_BR/docs/kajongg/index.cache.bz2
I/O warning : failed to load "/usr/share/kf6/kdoctools/customization/xsl/pt-BR.xml": No such file or directory
No "pt_br" localization of "footer-doc-comment" exists; using "en".
: 省略

No "pt_br" localization of "footer-doc-teamname" exists; using "en".
[83/84] Generating po/sv/docs/kajongg/index.cache.bz2
[84/84] Generating index.cache.bz2
=> @kajongg-25.12.2_1: skipping check (XBPS_CHECK_PKGS is disabled) ...
=> @kajongg-25.12.2_1: running pre-install hook: 00-libdir ...
=> @kajongg-25.12.2_1: running pre-install hook: 02-script-wrapper ...
=> @kajongg-25.12.2_1: running pre-install hook: 98-fixup-gir-path ...
=> @kajongg-25.12.2_1: running do_install ...
[1/72] Running utility command for src_mjresource.py_rule
Byte-compiling /builddir/@kajongg-25.12.2/build/src/mjresource.py to /builddir/@kajongg-25.12.2/build/src/__pycache__/mjresource.cpython-314.pyc
: 省略

[71/72] Running utility command for build_src_kdepaths.py_rule
Byte-compiling /builddir/@kajongg-25.12.2/build//builddir/@kajongg-25.12.2/build/src/kdepaths.py to /builddir/@kajongg-25.12.2/build//builddir/@kajongg-25.12.2/build/src/__pycache__/kdepaths.cpython-314.pyc
[71/72] Install the project...
-- Install configuration: "None"
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/voices//male1
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/voices//male1/c2.ogg
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/voices//male1/b5.ogg
: 省略

-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/voices/de/female2/mahjongg.ogg
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/voices/de/female2/s9.ogg
-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/en/kajongg/index.cache.bz2
-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/en/kajongg/index.docb
: 省略

-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/en/kajongg/ruleseteditor.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/en/kajongg/scoretable.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/128x128/apps/kajongg.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/64x64/apps/kajongg.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/48x48/apps/kajongg.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/32x32/apps/kajongg.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/22x22/apps/kajongg.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/16x16/apps/kajongg.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/scalable/apps/kajongg.svgz
-- Installing: /destdir/@kajongg-25.12.2/usr/share/icons/hicolor/scalable/actions/games-kajongg-law.svgz
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/permutations.py
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/__pycache__/
: 省略

-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/appversion.py
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/__pycache__/appversion.cpython-314.pyc
-- Installing: /destdir/@kajongg-25.12.2/usr/share/kajongg/kajonggui.rc
-- Installing: /destdir/@kajongg-25.12.2/usr/share/applications/org.kde.kajongg.desktop
-- Installing: /destdir/@kajongg-25.12.2/usr/share/metainfo/org.kde.kajongg.appdata.xml
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/lt
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/lt/LC_MESSAGES
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/lt/LC_MESSAGES/kajongg.mo
: 省略

-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/ja
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/ja/LC_MESSAGES
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/ja/LC_MESSAGES/kajongg.mo ←(日本語)
: 省略

-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/ar
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/ar/LC_MESSAGES
-- Installing: /destdir/@kajongg-25.12.2/usr/share/locale/ar/LC_MESSAGES/kajongg.mo
-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/ca/kajongg/index.cache.bz2
-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/ca/kajongg/index.docbook
: 省略

-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/uk/kajongg/ruleseteditor.png
-- Installing: /destdir/@kajongg-25.12.2/usr/share/doc/HTML/uk/kajongg/scoretable.png
=> @kajongg-25.12.2_1: running post-install hook: 00-compress-info-files ...
=> @kajongg-25.12.2_1: running post-install hook: 00-fixup-gir-path ...
=> @kajongg-25.12.2_1: running post-install hook: 00-libdir ...
=> @kajongg-25.12.2_1: running post-install hook: 00-uncompress-manpages ...
=> @kajongg-25.12.2_1: running post-install hook: 01-remove-misc ...
=> @kajongg-25.12.2_1: running post-install hook: 02-remove-libtool-archives ...
=> @kajongg-25.12.2_1: running post-install hook: 02-remove-perl-files ...
=> @kajongg-25.12.2_1: running post-install hook: 02-remove-python-bytecode-files ...
=> @kajongg-25.12.2_1: running post-install hook: 03-remove-empty-dirs ...
=> WARNING: @kajongg-25.12.2_1: removed empty dir: /usr/share/kajongg/__pycache__
=> WARNING: @kajongg-25.12.2_1: removed empty dir: /usr/lib
=> @kajongg-25.12.2_1: running post-install hook: 04-create-xbps-metadata-scripts ...
   Added trigger 'gtk-icon-cache' for the 'INSTALL' script.
   Added trigger 'update-desktopdb' for the 'INSTALL' script.
   Added trigger 'gtk-icon-cache' for the 'REMOVE' script.
   Added trigger 'update-desktopdb' for the 'REMOVE' script.
=> @kajongg-25.12.2_1: running post-install hook: 05-generate-gitrevs ...
=> @kajongg-25.12.2_1: running post-install hook: 06-strip-and-debug-pkgs ...
=> @kajongg-25.12.2_1: running post-install hook: 10-pkglint-devel-paths ...
=> @kajongg-25.12.2_1: running post-install hook: 11-pkglint-elf-in-usrshare ...
=> @kajongg-25.12.2_1: running post-install hook: 12-rename-python3-c-bindings ...
=> @kajongg-25.12.2_1: running post-install hook: 13-pkg-config-clean-xbps-cross-base-ref ...
=> @kajongg-25.12.2_1: running post-install hook: 14-fix-permissions ...
=> @kajongg-25.12.2_1: running post-install hook: 15-qt-private-api ...
=> @kajongg-25.12.2_1: running post-install hook: 80-prepare-32bit ...
=> @kajongg-25.12.2_1: running post-install hook: 98-shlib-provides ...
=> @kajongg-25.12.2_1: running post-install hook: 99-pkglint-warn-cross-cruft ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 03-restrict-py3-version ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 03-rewrite-python-shebang ...
   Shebang converted to '#!/usr/bin/python3': /usr/share/kajongg/kajonggserver.py
   Shebang converted to '#!/usr/bin/python3': /usr/share/kajongg/kajongg.py
=> @kajongg-25.12.2_1: running pre-pkg hook: 04-generate-provides ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 04-generate-runtime-deps ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 05-generate-32bit-runtime-deps ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 06-verify-python-deps ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 90-set-timestamps ...
=> @kajongg-25.12.2_1: setting mtimes to Fri Feb  6 06:55:59 AM UTC 2026
=> @kajongg-25.12.2_1: running pre-pkg hook: 99-pkglint-subpkgs ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 99-pkglint ...
=> @kajongg-25.12.2_1: running pre-pkg hook: 999-collected-rdeps ...
   python3-pyqt6>=0 python3-QtPy>=0 python3-Twisted>=0   
   python3-zope.interface>=0 python3-pyqt6-svg>=0 python3-pyqt6-gui>=0  
   python3-pyqt6-widgets>=0 vorbis-tools>=0 
=> @kajongg-25.12.2_1: running do-pkg hook: 00-gen-pkg ...

=> Creating @kajongg-25.12.2_1.x86_64.xbps for repository /host/binpkgs ...
=> @kajongg-25.12.2_1: running post-pkg hook: 00-register-pkg ...
=> Registering new packages to /host/binpkgs
index: added `@kajongg-25.12.2_1' (x86_64).
index: 61 packages registered.
=> @kajongg-25.12.2_1: removing autodeps, please wait...
=> @kajongg-25.12.2_1: cleaning build directory...
=> @kajongg: removing files from destdir...
[user@user-pc void-packages]$ 

→パッケージ化が成功:

(インストールして起動できるかは別)

-

-

項番 5.」に戻る:

-

-


まとめ

前回は、 古い「ミニPC」(SSD) に、「Void Linux」をコマンド ラインである base イメージの「iso」からインストールして、「Xfce」デスクトップ環境を追加、それに、「xbps-src」のビルド環境を作成してから、以前の投稿で作成した「@アプリ」を使えるように環境を整えました:

-

今回は、その「xbps-src」のビルド環境で、 「中国式四人麻雀」ゲームの「@kajongg」を移植しました:

プレイに支障ないけど、日本語化しても多くの翻訳漏れが出ました:

-

(勉強になるので)、次回は、イチから「.po」ファイルを作り直して、翻訳してみるつもり:

-

-

-


-

-

    目次

-

「投稿の先頭 へ」

-

-


-

「この目次 の先頭へ」

「本編の目次 に戻る」

-

古い「ミニPC」の「Void Linux」に、「xbps-src」のビルド環境を移行〈H175-10〉

登録日: 2026-01-30 / 更新日: 2026-04-07

前回 は、古い「ミニPC」(SSD) に「Void Linux」をインストールして、
ssh 接続してスクリプトの実行で、GUI の「Xfce」デスクトップ環境を追加しました:

-

今回は、古い「ミニPC」の「Void Linux」に「xbps-src」のビルド環境を作成後、投稿の都度「仮想マシン」に作成していた「@アプリ」フォルダを持ってきて、同じように使えるようにしました:

-

その備忘録です。

-

-

もし、「ノートPC」で作業する場合は、「マウス」でなく「トラックパッド」になるので、
「範囲選択後、中央ボタンで貼り付け」の操作は、「範囲選択後、右クリック→s(選択範囲を貼り付け)」に置換えて下さい。

-

-

使用したPC は「ASUS Chromebox CN60」で、F/W を置換して「UEFI 立ち上げ」にしています。
プロセッサは第 4世代の「Intel Celeron 2955U 」です。

-

(注)リンクを戻るときはブラウザの左上の「←」をクリック
Android スマホであれば「ホーム」ボタン隣の「<」をタップ

-

-


目次

-

前回の作業:

古い「ミニPC」(SSD) に、「Void Linux」をインストール〈H175-9

-

今回の作業:

-

1.「xbps-src」の「ビルド環境」に移行するデータを準備:

 a.  個人的な「@アプリ」フォルダを作っている場合:

 b.  個人的な「@アプリ」フォルダを作っていない場合:

   b-1.  パッチとスクリプトの作成:

   b-2.  パッチとスクリプト、リンクの実行:

2. 新規に「xbps-src」の「ビルド環境」を作成:

3.「ビルド環境」に「@アプリ」のフォルダを追加:

4. 移行した「@アプリ」が使えるか確認:

-

「まとめ へ」

「目次詳細 へ」

-

-


- --- - --- - --- - --- - --- - --- - --- -

「Void-Linux」(Xfce) を起動:

〈H175-9〉の「項番 10.」のパネル設定や「項番 11.」のデスクトップ設定で、色々とカスタマイズ:

-

デスクトップ環境が「Xfce」であれば、異なる Linux ディストリビューションでも、
同じカスタマイズで、見た目も(レスポンスが同じなら)GUI での使い勝手も同じです:

-

大きな違いは、アプリのインストールに使う、「パッケージ管理」のしくみやコマンドが異なることと、使いやすい「ビルド環境」(例えば、今回の「xbps-src」)が準備されているか、です:

-

-


- --- - --- - --- - --- - --- - --- - --- --

「Void Linux」について:

-

1). 公式サイト:

The Void (Linux) distribution

英語のみのサイトです:

-

2). 「Void Linux」について:

こちら」を参照:

-

3). 「xbps-src」について:

こちら」を参照:

-

-


現在のOS のバージョンを表示:

-

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

OS : 「Void Linux」

2026-01-24 現在

-

カーネル:
$ uname -r
6.12.57_1

→Ubuntu よりも進んでいます:

-

リリース:
$ cat /etc/os-release
:
NAME="Void"
ID="void"
PRETTY_NAME="Void Linux"
HOME_URL="https://voidlinux.org/"
DOCUMENTATION_URL="https://docs.voidlinux.org/"
LOGO="void-logo"
ANSI_COLOR="0;38;2;71;128;97"

DISTRIB_ID="void"

→ローリングリリースです:

-

「x11」と「Wayland」のどちらで動作してるか確認:
$ echo $XDG_SESSION_TYPE
x11

→「Wayland」ではなく、「x11」で動作しています。

-

-

-


- --- - --- - --- - --- - --- - --- - --- ---

1.「xbps-src」の「ビルド環境」に移行するデータを準備:

-

参考:

「xbps-src-help.md」ブラウザ表示 対応版〈H179-10

-


- --- - --- - --- - --- - --- - --- - --- ----

1-a. 個人的な「@アプリ」フォルダを作っている場合:

-

個人的な「@アプリ」フォルダを作成した「仮想マシン」の「Void Linux」にて操作:

-


1). 「仮想マシン」にて、個人で作成した「@アプリ」フォルダを退避:

アプリの移植や、ソースファイルに手を加えたパッケージは、管理しやすいように、
パッケージ名の先頭に「@」を付けて区別できるようにしました:

-

(1). (ビルド環境の外に)保存先のフォルダを作成:
$ mkdir -p ~/ダウンロード/srcpkgs_save/

-

(2). 保存:
$ cd ~/git/void-packages/
$ sudo cp -r srcpkgs/@* ~/ダウンロード/srcpkgs_save/

→「@」を付けたことで、管理しやすいです:

-

(3). 「@アプリ」の一覧を表示:

 2026-01-28 現在:

$ date
2026年  1月 28日 水曜日 10:58:29 JST

-

$ cd ~/git/void-packages/srcpkgs/
$ ls -1p @* | grep @
:
@featherpad:
@geany:
@geany-devel:
@kshisen:
@notepadqq:
@qpdfview:

-

リンクの確認:

$ ls -l @* | grep @
:
lrwxrwxrwx 1 user user    6 12月  2 16:43 @geany-devel -> @geany
@featherpad:
@geany:
@kshisen:
@notepadqq:
@qpdfview:

→「@geany-devel」(開発版)は実体でなく、「@geany」のリンクです:

時々、このように自身をリンクして「開発版」としても使えるようにしたアプリがあります:

-

(4). 退避した「@アプリ」をツリー表示:

 2026-01-28 現在:

$ tree ~/ダウンロード/srcpkgs_save/
:
/home/user/ダウンロード/srcpkgs_save/
├── @featherpad
│   ├── patches
│   │   ├── 01.help-del.patch
│   │   ├── 02.help-translation-jp-ver4.patch  ←(備忘録 txt)
│   │   └── 03.featherpad-desktop.patch
│   └── template
├── @geany
│   ├── patches
│   │   ├── 01.geany-po-ja.patch
│   │   ├── 02.geany-src-templates.h.patch
│   │   └── 03.geany-src-ui-utils.c.patch    ←(Tab を含み制限あり)
│   └── template
├── @geany-devel -> @geany         ←(リンク)
├── @kshisen
│   ├── patches
│   │   └── 01.kshisen-desktop.patch
│   └── template
├── @notepadqq
│   ├── files
│   │   └── notepadqq
│   ├── patches
│   │   ├── 00.disable-stats.patch
│   │   ├── 01.notepadqq_ja.ts-del.patch
│   │   └── 02.notepadqq_ja.ts.patch
│   └── template
├── @qpdfview               ←(現在はビルドで失敗します)
│   ├── patches
│   │   ├── 01.qpdfview_ja.ts.patch
│   │   └── 02.help_ja.html.patch
│   └── template
│
│          ↓ ビルド環境で使う「作業フォルダ」(手動で各々を退避)
└── work
    ├── @geany
    │   ├── 03.geany-src-ui-utils.c.patch   ←(スクリプトで作成されたパッチ3)
    │   └── 03.geany-src-ui-utils.c.sh    ←(パッチ3 を作成するスクリプト)
    └── @qpdfview
        ├── 02.help_ja.html           ←(備忘録 html)
        ├── 02.help_ja.html.md
        ├── help_ja.html
        └── qpdfview_ja.qm          ←(ビルドして翻訳されたバイナリを退避)

16 directories, 25 files

→「work」フォルダは、投稿の該当作業の都度、手動で退避してきたものです:
 移行のときに、一部を利用します:

-


2). 「ファイルマネージャ」を起動:

「~/ダウンロード」の「srcpkgs_save」フォルダを右クリック

-

→「アーカイブを作成…」→「srcpkgs_save.zip

もしくは、

→「フォルダから tar.gz を作成…」→「srcpkgs_save.tar.gz

-

これらの項目は、「ファイルマネージャ」の設定のやり方で変わります:

-


3). 自分宛の「Gメール」の「下書き」に添付:

-

「作成」→自分宛てで、「クリップ」アイコンで「ファイル」を添付:

→送信せずに待つと、自動で「下書き」に保存されます:  保存されたら、そのまま、右上の「x」で閉じます:

-


4). 新しくインストールした、古い「ミニPC」の「Void Linux」にて、「Gメール」を起動:

-


5). 自分宛の「Gメール」の「下書き」に添付した「srcpkgs_save.zip」をクリックして、ダウンロード:

-


6). 「~/ダウンロード」フォルダにて、「srcpkgs_save.zip」を右クリック→「ここで展開」

-


7). 確認:

$ ls ~/ダウンロード/srcpkgs_save/

→そのまま「退避したフォルダ」が再現されました:

-

バージョンの低い「02.help-translation-jp-ver3.patch」が残っていたりとか、 リンクの「@geany-devel」とか、移植するときに邪魔になりそうなファイルは、事前に削除しておくと良いです:

-

-


- --- - --- - --- - --- - --- - --- - --- -----

1-b. 個人的な「@アプリ」フォルダを作っていない場合:

-

今までこちらで投稿した「@アプリ」に興味がない(必要でない)場合は、
項番 2.」のみ実行すれば、「xbps-src」のビルド環境が使えるよになります:

-

もし、必要な場合は、 「項番 1-a.」の作業が済んでいれば、こちらの作業は要りません:

-

今まで投稿した「@アプリ」のフォルダをパッチで再現します:

内訳:

01.@featherpad.patch
02.@geany.patch  ←一部、スクリプトで作成:
  @geany-devel  ←リンクで作成:
03.@kshisen.patch
04.@notepadqq.patch
05.@qpdfview.patch

-

続きは、「項番 30.」へ:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- -

2. 新規に「xbps-src」の「ビルド環境」を作成:

-

新しくインストールした、古い「ミニPC」の「Void Linux」にて操作:

-


-

1). システム更新:

$ sudo xbps-install -Su

-

2). 再起動:

$ sudo reboot

-

3). 「xbps-src」に必要なツールを確認:

$ xbps-query -l | grep -e binutils -e curl -e git
:
ii curl-8.18.0_1 Client that groks URLs
ii git-2.52.0_1 Git Tree History Storage Tool
ii libcurl-8.18.0_1 Multiprotocol file transfer library
ii libgphoto2-2.5.32_1 Digital camera access library
ii libgphoto2-udev-rules-2.5.32_1 Digital camera access library - udev rules

→すべてインストールされていました:

-

4). あると便利な「xtools」ツールをインストール:

$ sudo xbps-install -S xtools

-

5). 作業フォルダの作成:

$ mkdir -p ~/git/

→作成する位置は任意です:

-

6). 「void-packages」の git リポジトリをクローン(ローカルにコピー):

$ cd ~/git/
$ git clone https://github.com/void-linux/void-packages.git --depth=10

-

7). 「xbps-src」をセットアップ:

$ cd ~/git/void-packages/
$ ./xbps-src binary-bootstrap

-

8). 配布するときにライセンス制限のあるパッケージもビルドできるように、

「~/git/void-packages/etc/conf」に設定を追加:

$ cd ~/git/void-packages/
$ echo XBPS_ALLOW_RESTRICTED=yes >> etc/conf

確認:

$ cat ~/git/void-packages/etc/conf
:
XBPS_ALLOW_RESTRICTED=yes

-

9). 再起動:

$ sudo reboot

-

10). 「xbps-src」が使えるか確認:

$ cd ~/git/void-packages/
$ ls srcpkgs/パッケージ名

→例えば、「nano」を指定してみると良いです:

-

-

-

-


- --- - --- - --- - --- - --- - --- - --- ----- --

3. 「ビルド環境」に「@アプリ」のフォルダを追加:

-

「@アプリ」を利用しない場合は、こちらの作業は要りません:

-


1). コピー:

$ cd ~/git/void-packages/
$ sudo cp -r ~/ダウンロード/srcpkgs_save/@* srcpkgs/

-


2). 「@アプリ」の一覧を表示:

$ cd ~/git/void-packages/srcpkgs/
$ ls -1p @* | grep @
    :
@featherpad:
@geany:
@kshisen:
@notepadqq:
@qpdfview:

-


3). 「@geany」の補完:

リンクを作成します:

「@geany」フォルダから、「@geany-devel」フォルダのリンクを作成:

$ cd ~/git/void-packages/srcpkgs/
$ ln -s @geany @geany-devel

-

確認:

$ ls -l | grep geany
:
drwxr-xr-x 3 root root 4096  1月 29 20:15 @geany
lrwxrwxrwx 1 user user    6  1月 29 20:20 @geany-devel -> @geany
drwxr-xr-x 2 user user 4096  1月 29 19:53 geany
lrwxrwxrwx 1 user user    5  1月 29 19:53 geany-devel -> geany
drwxr-xr-x 2 user user 4096  1月 29 19:53 geany-plugins
lrwxrwxrwx 1 user user   13  1月 29 19:53 geany-plugins-extra -> geany-plugins

→フォルダごとのコピーに sudo を使ったので、「所有者」と「グループ」が root です:

-

「@アプリ」フォルダを修正するとき失敗しないように、下記を実施:

-


4). 「@アプリ」フォルダと配下のすべての「所有者」と「グループ」を変更:

$ sudo chown -R user:user ~/git/void-packages/srcpkgs/@*

→「user」はPC で変わるので変更します:

-

確認:

$ ls -l ~/git/void-packages/srcpkgs/ | grep @
:
drwxr-xr-x 3 user user 4096  1月 29 20:15 @featherpad
drwxr-xr-x 3 user user 4096  1月 29 20:15 @geany
lrwxrwxrwx 1 user user    6  1月 29 20:20 @geany-devel -> @geany
drwxr-xr-x 3 user user 4096  1月 29 20:15 @kshisen
drwxr-xr-x 4 user user 4096  1月 29 20:15 @notepadqq
drwxr-xr-x 3 user user 4096  1月 29 20:15 @qpdfview

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ---

4. 移行した「@アプリ」が使えるか確認:

-

「アプリ」の赤いリンクをクリックすると、該当する投稿の確認ができます:

-

-


1). 「@featherpad」をパッケージ化:

$ cd ~/git/void-packages/
$ ./xbps-src pkg  @featherpad

→OK

-

以前のパッケージを確認:
$ xbps-query -Rs featherpad
[*] FeatherPad-1.6.2_1 Lightweight Qt6 plain-text editor for Linux

-

以前のパッケージを削除:
$ sudo xbps-remove FeatherPad

-

インストール:
$ xi @featherpad

-

動作確認:

メニュー→「アクセサリー」→「featherpad」

ヘルプを表示:

→「xbps-src」の「備忘録」が表示されました:

-

-


2). 「@geany」をパッケージ化:

$ cd ~/git/void-packages/
$ ./xbps-src pkg  @geany

→OK

-

インストール:
$ xi @geany

-

動作確認:

「メニュー」→「開発」→「Geany」

→余計なウィンドウは消しました:

「表示」→「メッセージウィンドウを表示」のチェック を外しました:
「表示」→「サイドバーを表示」のチェック を外しました:

-

日時の設定メニューで、 (%Y-%m-%d %H:%M) を設定しやすく修正しています:

-

-


3). 「@kshisen」をパッケージ化:

$ cd ~/git/void-packages/
$ ./xbps-src pkg  @kshisen

→OK

-

インストール:
$ xi @kshisen

-

動作確認:

「アプリケーション」→「ゲーム」→「Shisen-Sho 四川省」

→起動メニューを日本語化しています:

-

実行時の画面:

-

-


4). 「@notepadqq」をパッケージ化:

$ cd ~/git/void-packages/
$ ./xbps-src pkg  @notepadqq

→OK

-

インストール:
$ xi @notepadqq

-

動作確認:

「メニュー」→「開発」→「Notepadqq」

テーマ(配色)を変更しています:

「設定」→「外観」タブ

 配色: 「vibrant-ink」に変更:

-

-


5). 「@qpdfview」をパッケージ化:

$ cd ~/git/void-packages/
$ ./xbps-src pkg  @qpdfview

→「ビルド」時に .qm が翻訳され、その後「qmake」でエラーで停止。それが現在の正常?な状態です:

-

-


5-1). 「qpdfview」アプリを使っていて気になる部分を修正:

-

(1). 「翻訳ファイル」をビルド
$ cd ~/git/void-packages/
$ ./xbps-src clean @qpdfview
$ ./xbps-src build @qpdfview

→「翻訳ファイル」が作成された後に、エラーで停止:

-

(2). パッチの実行で修正された「翻訳ファイル」のバイナリを外部にコピー:
$ cd ~/git/void-packages/masterdir-x86_64/builddir/@qpdfview-0.5.0/
$ cp translations/qpdfview_ja.qm ~/ダウンロード/srcpkgs_save/work/@qpdfview/

-

(3). パッチの実行で修正された「ヘルプファイル」を外部にコピー:
$ cd ~/git/void-packages/masterdir-x86_64/builddir/@qpdfview-0.5.0/
$ cp help/help_ja.html ~/ダウンロード/srcpkgs_save/work/@qpdfview/

-

(4). 「qpdfview」アプリがインストールされているか確認:
$ xbps-query -Rs qpdfview
:
[*] qpdfview-0.5.0_1 Tabbed document viewer

-

(5). 「翻訳ファイル」と「ヘルプファイル」を上書き:
$ sudo cp ~/ダウンロード/srcpkgs_save/work/@qpdfview/qpdfview_ja.qm /usr/share/qpdfview/

-

$ sudo cp ~/ダウンロード/srcpkgs_save/work/@qpdfview/help_ja.html /usr/share/qpdfview/

-

(6). 「qpdfview」アプリを起動して確認:

「メニュー」→「オフィス」→「qpdfview」

-

→「ヘルプ」が日本語化されました:

-

→メニューが、「しおり」でなく「ブックマーク」に統一されました:

-

-


5-2). 任意:「qpdfview」アプリのヘルプ表示で、「xbps-src」の備忘録を表示する場合:

項番 5-1).」の作業後:

こちらの作業をするか、しないかは、任意です:

-

(1). 「退避フォルダ」に準備した「ヘルプファイル」で上書き:
$ sudo cp ~/ダウンロード/srcpkgs_save/work/@qpdfview/02.help_ja.html /usr/share/qpdfview/help_ja.html

-

(2). 「qpdfview」アプリを起動して確認:

「メニュー」→「オフィス」→「qpdfview」

ヘルプの表示で、「xbps-src」の備忘録がちゃんと表示されるか確認:

→段落を色分けして見やすくできるのが「qpdfview」のヘルプ(html ファイル)の利点です:

-

-

ちゃんと、持ってきた「@アプリ」が動くようにできました:

今回は、ここまで:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ----

30. 参考: 「xbps-src」のビルド環境を今まで使ったことがない場合のパッチの作成:

-

項番 1b.」の手順のメイン部分です:

データ量が多く投稿が見づらいので、邪魔しないように投稿の後に記述しました:

-

内訳:

01.@featherpad.patch
02.@geany.patch  ←パッチにスクリプトを含みます:
  @geany-devel  ←リンクで作成:
03.@kshisen.patch
04.@notepadqq.patch
05.@qpdfview.patch

-

-


- --- - --- - --- - --- - --- - --- - --- ----- -----

30-1. パッチとスクリプトの作成:

-

データ量が多いので、パッチをファイルに貼付ける場合は、

先頭の「---」(3つの「-」)をダブルクリックして一部を選択後、
Shift キーを押しながら、「↓」キーをずっと押しておくと、すべての選択が楽にできます:

すべて選択後、Ctrl+C して マウスの中央ボタンで貼付け:

-


1). 「01.@featherpad.patch」ファイルの作成:

$ cd ~/ダウンロード/
$ nano 01.@featherpad.patch

↓ すべて貼付け(すべて選択後、Ctrl+C して マウスの中央ボタンで貼付け):

--- a/srcpkgs_save/@featherpad/patches/01.help-del.patch 1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@featherpad/patches/01.help-del.patch    2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,297 @@
+--- a/featherpad/data/help 2025-10-11 15:08:34.023423019 +0900
++++ b/featherpad/data/help 1970-01-01 09:00:00.000000000 +0900
+@@ -1,292 +0,0 @@
+-***************
+-*   General   *
+-***************
+-
+-FeatherPad is a single-instance application by default; all its windows share the same configuration and the same process, which will terminate only if all windows are closed.
+-
+-However, if FeatherPad is started with the command-line option "--standalone" or "-s", it will have a single window with a separate process, independently of other FeatherPad windows.
+-
+-Rarely, the standalone mode may be needed. For example, if you want to use FeatherPad as the "git" editor, you will need "featherpad -s" as the editor command because "git" does not work correctly with single-instance editors.
+-
+-Use the standalone mode with care. If a standalone window is opened alongside other windows, any change in configuration, recent files, etc., which may have been made in those windows, will not be reflected by it, and if it is the last closed window, it will overwrite those changes.
+-
+-The standalone mode is also an exception to the window/tab managing rules explained in this document.
+-
+-Enter "featherpad --help" in a terminal emulator to see all command-line options.
+-
+-NOTE: FeatherPad makes use of D-Bus to have a single process. Therefore, in (non-Linux) systems without D-Bus, it is always in the standalone mode, which means that its windows do not know about each other.
+-
+-*********************
+-*   Drag-and-Drop   *
+-*********************
+-
+-Files can be dragged and dropped into FeatherPad windows.
+-
+-Also, tabs can be dragged from a window and dropped into another window or outside all FeatherPad windows. In the first case, the dropped tab will appear after the previously active tab; in the second case, a new window containing the dropped tab will be created, i.e. the tab will be detached.
+-
+-************
+-*   Tabs   *
+-************
+-
+-Tabs can be reordered or detached by the mouse.
+-
+-If there is more than one tab, each one will have a right-click menu for closing its right or left tabs. With more than one tab, it is also possible to detach the active tab by clicking the related item on the File menu or with Ctrl+T.
+-
+-If a file is opened in a tab, the right-click menu of that tab will also contain two items for copying the name and path of the file as well as an item for opening its containing folder with the default file manager.
+-
+-For users' comfort, double clicking on an empty area of the tab-bar creates a new tab.
+-
+-There are (customizable) shortcuts for switching tabs in various ways (see the File menu), but Ctrl+Tab is not one of them because the Tab key is reserved for text editing (see Keyboard Shortcuts, near the end of this document).
+-
+-***********************
+-*   File Management   *
+-***********************
+-
+-Under X11, if there is a FeatherPad window on the current virtual desktop or viewport, so that more than half of its width as well as its height is visible, files will be opened as new tabs in it; otherwise, a new window will be created. Also, when the window on the current desktop/viewport has a modal dialog, another window is created.
+-
+-In this way, FeatherPad is aware of X11 virtual desktops under most Linux desktop environments, although there are exceptions (like Enlightenment).
+-
+-Files are always opened after the active tab unless it is empty, in which case the first file will be opened in it. If a single file is opened, its tab will be activated, but in the case of multiple files, the active tab will not change.
+-
+-If a file is opened multiple times, its second (third,…) instance will be uneditable by default and will have a light yellow or dark red background, depending on whether the default or the dark color scheme is used. To make it editable, click on the newly created 'Edit' button on the toolbar or the 'Edit' menu. After that, these two buttons will disappear again.
+-
+-If the opened file is a symbolic link (symlink), the context menu of its tab will have two extra items for copying its target path and opening its target inside the current window.
+-
+-Executable script files could be run from inside FeatherPad if the corresponding option is enabled in the Preferences dialog. Then also a Run button will appear on the toolbar and the File menu whenever needed. If no terminal command is used to run them, their output and error messages will be shown by a popup dialog.
+-
+-FeatherPad remembers recently modified or opened files, depending on which option is enabled in the Preferences dialog. It can also open the files of the last window on a session startup. However, it has a more advanced session manager, which provides the user with options for saving a session and restoring or removing saved sessions at any time and without limit.
+-
+-***********************************
+-*   Sessions and Side-Pane Mode   *
+-***********************************
+-
+-Sessions can be saved and opened by using the Session Manager dialog. As mentioned above, there is no limit to the number of stored sessions. Each session can have any name and consist of any number of files. All files of a session are opened in the current FeatherPad window, and their cursor positions are remembered.
+-
+-FeatherPad also has a side-pane mode, which can be enabled either temporarily or with startup. It is most suitable for working with sessions because its file list is alphabetically ordered and can be filtered. Each pane item has a right-click menu, which contains menu-items for various jobs when there is more than one page. Items can also be removed by middle-clicking without being selected.
+-
+-The side-pane mode does not have features provided by tabs — for example, tab drag-and-drop is missing from it — and conversely — for example, tabs are not sorted and cannot be filtered — but the side-pane and tab modes can be used interchangeably by means of the Side-Pane menu-item, its toolbar button or its shortcut (Ctrl+Alt+P by default), and also by middle-clicking an empty space inside the tab-bar or side-pane.
+-
+-To focus the side-pane when another widget has the focus, press Ctrl+Escape. To return the focus to the editor's main view from the side-pane or anywhere else, press the Escape key.
+-
+-*****************
+-*   Encodings   *
+-*****************
+-
+-FeatherPad tries to guess encodings when opening files. Although it often guesses them right, there is no exact way for that. Therefore, there are some encodings in the Options menu. If you choose one, the text could be saved with it by using the item "Save with Encoding" on the File menu. By default, all texts are saved with UTF-8, which covers all alphabets.
+-
+-As Qt6 has removed the support for the legacy encodings, they are also removed from FeatherPad. Usually, you do not need to worry about encodings; nowadays, UTF-8 is the standard and is used everywhere.
+-
+-*****************************
+-*   Programming Languages   *
+-*****************************
+-
+-The programming language of a file is detected based on its mime type or name, and its syntax will be highlighted if the syntax highlighting is enabled and supports the language in question.
+-
+-If a text has no programming language or its syntax is not supported, only its hyperlinks/URLs will be highlighted, and it will be possible to open them by right clicking them and activating the related menu-item or by pressing the Control key, moving the cursor over them, and clicking them while the cursor is like a pointing hand.
+-
+-If the option "Preferences → Text → Support syntax override" is enabled and checked, a language button will be added to the status bar for overriding the original syntax or lack of it. Reloading a document restores its original syntax.
+-
+-There are also options in the Preferences dialog for showing whitespaces (spaces, tabs), line and document ends, and vertical position lines when syntax highlighting is enabled (by default or temporarily).
+-
+-The colors of syntax highlighting can be customized in "Preferences → Syntax Colors". Each syntax color may have different meanings in different programming languages, but only the most important meanings are mentioned. The color value of whitespaces can be changed in the same place.
+-
+-*******************************
+-*   Searching and Replacing   *
+-*******************************
+-
+-In FeatherPad, searching and replacing are done by separate widgets for the user to be able to search one string and replace another. Moreover, a separate replacement widget may prevent an unintentional replacement.
+-
+-To remove the yellow highlights after finishing a search, you could
+-
+-* Click on the 'Clear' icon of the search entry, or
+-* Press Ctrl+K while the search entry has focus, or
+-* Empty the search entry and press Enter or F3 in it, or
+-* Hide the search bar by focusing it (with Ctrl+F) and then, pressing Ctrl+F (again).
+-
+-Each search entry has a search history which can be shown as a popup list by clicking its arrow or by pressing Ctrl+Up/Down when it has focus. The topmost item shows the most recent searched text. When the entry has focus, Up and Down arrow keys as well as PageUp and PageDown keys can be used for selecting history items without showing the popup list: Up and Down change the selection by one item, while PageUp and PageDown select the topmost (most recent) and bottommost (oldest) items respectively.
+-
+-FeatherPad can use a shared history for all search entries, whether they are in the same window or in different windows of the same FeatherPad process. By default, each search entry has a separate history but that can be changed by checking "Preferences → Window → Use a shared search history".
+-
+-The shared search history starts with every session and is forgotten as soon as the session ends (i.e., when all windows are closed — there is no point in remembering the search history indefinitely).
+-
+-The 'Replace' docked window respects the settings for 'Match Case', 'Whole Word' and 'Regular Expression' on the search bar (in the last case, the matching text should be a regular expression, while the replacing text is always an ordinary string, although capturing groups like "\1", "\2",… are supported in it). It can be detached from and reattached to the main window at top or bottom. To remove the green highlights after replacing text, you could either hide/close the 'Replace' docked window or do as in the case of removing yellow search highlights.
+-
+-The 'Replace' docked window is never shown without the search bar because the settings of the latter are needed by the former.
+-
+-Pressing the Escape key is the easiest way of focusing the editor's main view, without changing anything else.
+-
+-NOTE: The Escape key never clears the search/replacement entry because the user might want to resume searching/replacing later. To clear the search/replacement entry when it is focused, press Ctrl+K.
+-
+-******************************
+-*   Selection Highlighting   *
+-******************************
+-
+-If "Preferences → Text → Selection highlighting" is checked, all case-sensitive and whole matches of the selected text will be highlighted by a light blue color (or dark blue when the dark color scheme is used). The selected text does not need to be a whole string but the highlighted matches are always whole strings.
+-
+-The selection highlighting can be used for finding nearby whole strings quickly. It is separate from the (yellow) search highlighting and can be used besides it.
+-
+-***********************
+-*   Going to A Line   *
+-***********************
+-
+-The Jump bar can be shown by clicking its item on the toolbar or the Search menu. Jumping will happen after pressing Enter while the Jump spinbox is active. If the checkbox beside it is checked, all the text between the text cursor and the target line will be selected.
+-
+-******************
+-*   Status Bar   *
+-******************
+-
+-The status bar not only shows information about the opened file but can also contain other widgets when certain properties are enabled in the Preferences dialog. You could also hide it in the Preferences dialog, in which case, the item "Document Properties" will appear on the File menu and could show it temporarily.
+-
+-***********************
+-*   Wheel Scrolling   *
+-***********************
+-
+-If the cursor is inside the text view, the speed of (mouse) wheel scrolling will be normal. If, in addition, the Shift key is pressed, the text will scroll one line per wheel turn.
+-
+-"Inertial" scrolling can be enabled in the Text section of the Preferences dialog. It creates a kind of inertia with wheel scrolling when the cursor is inside the text view.
+-
+-For fast wheel scrolling, put the cursor on the vertical scrollbar. Then, each step of wheel turn moves the view by one page. If the Shift key is also pressed, the view will be moved by half the page.
+-
+-Also, see the section "Keyboard Shortcuts" → "Scrolling", below.
+-
+-********************
+-*   Text Tabbing   *
+-********************
+-
+-A single text line could be tabbed by the Tab key and untabbed by Shift+Tab (which is also called "BackTab") if the cursor is at its start. If multiple lines are (partially) selected, Tab and BackTab will affect all of them, regardless of the cursor position.
+-
+-If Ctrl+Tab is used, the tabulation will be done by 4 spaces instead of a tab (the number of spaces can be changed in the Preferences dialog). This is sometimes called "soft tab".
+-
+-In FeatherPad, "hard" and "soft" tabs are not mutually exclusive because some texts may need one and some the other.
+-
+-With Ctrl+Meta+Tab, the text will be tabbed by 2 spaces, while Shift+Meta+Tab is for 2-space untabbing as far as possible.
+-
+-All text tabs of a document can be converted to spaces (soft tabs) by using the menu item "Text Tabs to Spaces" in the right-click menu or the "Edit" menu. This conversion is done based on the value of Preferences → Text → Text tab size, which is 4 by default. The document needs to be saved after the conversion.
+-
+-************************
+-*   Column Selection   *
+-************************
+-
+-A text column can be selected, starting from the current text cursor, by holding Shift+Ctrl and pressing the left mouse button anywhere inside the text, such that the positions of the current text cursor and the press point become two diagonal corners of the column.
+-
+-If the left mouse button is kept pressed and Shift+Ctrl is still held, moving the mouse will change the column, until the left mouse button is released.
+-
+-A column is deselected when the text cursor is moved in any way (e.g. by arrow keys, or by clicking anywhere without holding Shift+Ctrl) and on some other occasions, but it is kept intact on right clicking. With a selected column, the items "Cut", "Copy", "Paste" and "Delete" in the right-click and Edit menus work on that column. Column pasting may be a little confusing at first, but it can be used for pasting a copied column on another.
+-
+-If a character is typed when a column is selected, that character is inserted before it for all of its rows, without deselecting it. This property can be used, e.g., for commenting out multiple lines of codes together. Also, Backspace moves the whole column backward by removing the characters that immediately precede it, and the Delete key deletes the column.
+-
+-However, the Enter and BackTab keys do not make sense with a column, and so, they simply deselect it and do their normal jobs at the cursor position (to untab multiple lines, select them in the usual way and press the BackTab key, as explained in the section "Text Tabbing", above).
+-
+-NOTE: Column selection is useful only with unwrapped lines, although it is possible with wrapped lines too. Also, it may seem counter-intuitive with non-monospace fonts, with multi-character or double-width graphemes, or where hard tabs are used instead of soft tabs, because it is based on the number of characters, not their widths.
+-
+-********************
+-*   Auto-Bracket   *
+-********************
+-
+-With "auto-bracketing" enabled in Preferences, if a left parenthesis, brace, square bracket or double-quote is typed, a right parenthesis, brace, square bracket or double-quote will respectively be inserted after it and the cursor will be moved between them, provided that the next character is not a letter or number. (Although double-quote is not a bracket and has identical left and right signs, it is included in this.)
+-
+-Also, if any part of the text is selected from end to start, typing of a left parenthesis, brace, etc. will add a right one after the selection end, so that the selection will be put inside parentheses, braces, etc.
+-
+-For user convenience, if Enter/Return is pressed after a text selection is auto-bracketed by parentheses "(...)" or braces "{...}", the bracketed text will be put below the left bracket and above the right one.
+-
+-The same holds for RTL (right-to-left) texts but with right and left reversed.
+-
+-****************************
+-*   Ellipsis and Em Dash   *
+-****************************
+-
+-With the corresponding option enabled in Preferences and under proper circumstances, a triple period is replaced by an ellipsis ("…") and a double hyphen by an em dash (long dash, "—") while the user is typing.
+-
+-The proper circumstances depend on the pressed key and, maybe, what comes before those characters. For example, in the case of a triple period, the Space or Enter/Return key should be pressed and the triple period should not follow a period. Double hyphens are not replaced in programming languages because they may have special meanings.
+-
+-Some other strings may also be replaced appropriately in non-programming languages, e.g., "->", ">=" and "<=" may be changed to "→", "≥" and "≤" respectively. The existence of these characters are guaranteed by all good fonts.
+-
+-**********************
+-*   Spell Checking   *
+-**********************
+-
+-For spell checking, a Hunspell dictionary should be first added to Preferences → Text → Hunspell dictionary path (a Hunspell dictionary has the suffix ".dic" and should be accompanied by an affix file with the suffix ".aff"). Spell checking can be done by F2, but its shortcut can be customized.
+-
+-If "Ignore All" is clicked, all instances of the word will be ignored during the current check. If you know that the word is correct, you could click "Add To Dictionary" and it will be saved for all checks. If "Correct All" is clicked, other instances of the word will be corrected in the same way when reached during the current check.
+-
+-**************************
+-*   Keyboard Shortcuts   *
+-**************************
+-
+-To change a customizable shortcut, double click it and press your chosen shortcut inside the shortcut editor of the Preferences dialog. To clear a shortcut, use a modifier key (like Shift). To cancel, press the Escape key before the shortcut loses focus.
+-
+-All shortcuts, except for the extra ones below, can be found on menus or as tooltips, and many of them can be customized in the Preferences dialog.
+-
+-NOTE: Text editing shortcuts may be different for non-Linux OS's.
+-
+-Useful Extra (Hidden) Shortcuts:
+-=================================
+-
+-Window:
+-*********
+-Escape              Focus the editor's main view without changing anything else
+-Ctrl+Escape         Focus the side-pane if existing
+-F11                 (Un-)Fullscreen
+-
+-Zooming:
+-**********
+-Ctrl+=              Zoom in (also Ctrl++ or Ctrl + mouse wheel)
+-Ctrl+-              Zoom out (also Ctrl + mouse wheel)
+-Ctrl+0              Reset zooming
+-
+-Running a process:
+-********************
+-Ctrl+E              Run the executable file opened in this tab (only if enabled in Preferences)
+-Ctrl+Alt+E          Exit (kill) the above process immediately
+-
+-Scrolling:
+-***********
+-Shift+Mouse Wheel     If cursor is inside view, scroll up/down by one wrapped line;
+-                      if cursor is on vertical scrollbar, scroll up/down by half the page
+-Alt+Mouse Wheel       If cursor is inside view, scroll horizontally when horizontal
+-                      scrollbar is visible (which may happen when wrapping is disabled)
+-Ctrl+Up/Down          Scroll up/down by one wrapped line without moving text cursor
+-Ctrl+PageUp/PageDown  Scroll up/down by one page without moving text cursor
+-
+-Moving text cursor:
+-********************
+-Home                Go to to the line start plus the indentation
+-End                 Go to to the line end
+-Ctrl+Home           Go to to the text start
+-Ctrl+End            Go to to the text end
+-Right/Left          Move the cursor one character to the right/left
+-Ctrl+Right/Left     Move the cursor one word to the right/left
+-Up/Down             Go to the same position in the previous/next wrapped line
+-Shift+Up/Down       Go to the same position in the previous/next wrapped line while selecting text
+-Meta+Up/Down        Go to the same position in the previous/next (real) line
+-Meta+Shift+Up/Down  Go to the same position in the previous/next (real) line while selecting text
+-PageUp/PageDown     Go to the same position in the previous/next page
+-
+-Text tabulation:
+-*****************
+-Tab                 Ordinary text tabulation (its length can be changed in Preferences)
+-Shift+Tab           BackTab (the reverse of Tab)
+-Ctrl+Tab            4-space text tabulation (can be changed in Preferences)
+-Ctrl+Meta+Tab       2-space text tabulation
+-Shift+Meta+Tab      2-space BackTab, as far as possible
+-
+-Text editing:
+-**************
+-Insert              Toggle overwrite mode
+-Backspace           Delete to the left of the text cursor
+-Ctrl+Backspace      Delete to the the start of the word
+-Delete              Delete to the right of the text cursor (the opposite of Backspace)
+-Ctrl+Delete         Delete to the end of the word (the opposite of Ctrl+Backspace)
+-Ctrl+K              Delete to the end of the line (when the editor has focus)
+-Ctrl+Shift+Up/Down  Move the current line or selected lines upward/downward
+-Shift+Enter         Insert newline with the non-letter prefix of the current line
+-                    (to write code comments or lists easily, for example)
+-
+-***********************
+-*   Multiple Clicks   *
+-***********************
+-
+-Double click          Select a whole word
+-Ctrl + Double click   Select between spaces
+-Triple click          Select a line without its leading and trailing whitespaces
+-Ctrl + Triple click   Select a whole line plus its trailing newline if any
+
+


--- a/srcpkgs_save/@featherpad/patches/02.help-translation-jp-ver4.patch    1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@featherpad/patches/02.help-translation-jp-ver4.patch    2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,1101 @@
+--- a/featherpad/data/help 1970-01-01 09:00:00.000000000 +0900
++++ b/featherpad/data/help 2025-12-27 17:26:42.779606421 +0900
+@@ -0,0 +1,1097 @@
++編集:
++
++ sudo featherpad /usr/share/featherpad/help
++
++ 以前の featherpad の場合:
++
++ sudo featherpad /usr/share/featherpad/help_ja
++
++                         2025-12-27 (ver.4)
++
++-
++
++-
++
++---
++### - --- - --- - --- - --- - --- - --- - --- - --- -
++  
++### 1. 「xbps-src」の備忘録:
++
++-
++
++-
++
++---
++### - --- - --- - --- - --- - --- - --- - --- - --- -
++  
++### 1-1. 「xbps-src」にて、ビルド環境を更新する場合:
++
++-
++
++---
++#### 1). システム更新:  
++  
++$ sudo xbps-install -Su
++
++-
++
++---
++#### 2). 再起動:  
++  
++$ sudo reboot
++
++-
++
++---
++#### 3). ローカルリポジトリの更新:  
++  
++$ cd ~/git/void-packages/  
++$ git pull
++
++-
++
++---
++#### 4). 「ブートストラップ パッケージ」の更新:  
++  
++$ cd ~/git/void-packages/  
++$ ./xbps-src bootstrap-update
++
++-
++
++---
++#### 5). 再起動:  
++  
++$ sudo reboot  
++
++-
++
++-
++
++---
++### - --- - --- - --- - --- - --- - --- - --- - --- -
++  
++### 1-2. 「xbps-src」にて、パッケージ化をやり直す場合:
++
++-
++
++---
++#### 1). クリーンアップ:  
++  
++$ cd ~/git/void-packages/  
++$ ./xbps-src clean `<パッケージ名>`
++
++-
++
++---
++#### 2). パッケージ化:  
++  
++$ cd ~/git/void-packages/  
++$ ./xbps-src pkg `<パッケージ名>`  
++
++-
++
++-
++
++---
++### - --- - --- - --- - --- - --- - --- - --- - --- -
++  
++### 1-3.「xbps-src」にて、パッケージ化後にインストールする場合:
++
++-
++
++---
++#### 1). 以前にインストールしたパッケージを削除:  
++  
++$ sudo xbps-remove `<パッケージ名>`
++
++-
++
++---
++#### 2). インストール:  
++  
++$ sudo xbps-install --repository hostdir/binpkgs `<パッケージ名>`  
++  
++もしくは、  
++  
++$ xi `<パッケージ名>`
++
++-
++
++---
++#### 3). インストールされたか確認:  
++
++$ xbps-query -Rs `<パッケージ名>`  
++  
++もしくは、  
++  
++$ xbps-query -s `<パッケージ名>`  
++
++-
++
++-
++
++---
++### - --- - --- - --- - --- - --- - --- - --- - --- -
++  
++### 1-4. ソースファイルを修正する場合:
++
++-
++
++##### 1). ソースファイルをダウンロードして展開:
++
++$ cd ~/git/void-packages/
++$ ./xbps-src clean <パッケージ名>
++$ ./xbps-src extract <パッケージ名>
++
++-
++
++##### 2). 「builddir」フォルダ配下のソースファイルに移動:
++
++$ ls -1p ~/git/void-packages/masterdir-x86_64/builddir/
++:
++@パッケージ名-バージョン番号/
++
++$ cd ~/git/void-packages/masterdir-x86_64/builddir/@パッケージ名-バージョン番号/
++
++-
++
++-
++
++---
++### - --- - --- - --- - --- - --- - --- - --- - --- -
++  
++### 1-5.「パッチ」を作成する場合:
++
++-
++
++#### 1). 上記の「項番 1-4.」の「2).」の続き:
++
++-
++
++#### 2). 差分を作成するためのフォルダを作成:
++
++$ cd ~/git/void-packages/masterdir-x86_64/builddir/@パッケージ名-バージョン番号/
++$ mkdir -p {a,b}
++
++-
++
++#### 3). ソースをコピー:
++
++$ cd ~/git/void-packages/masterdir-x86_64/builddir/@パッケージ名-バージョン番号/
++$ sudo cp -r src/ a/
++$ sudo cp -r src/ b/
++
++-
++
++#### 4). 確認:
++
++$ ls -1p a/
++src/
++
++-
++
++$ ls -1p b/
++src/
++
++-
++
++#### 5). 「b/」フォルダのソースを修正:
++
++$ featherpad b/src/translations/パッケージ名_ja.ts
++
++-
++
++#### 6). 「パッチ1」(差分)の作成:
++
++$ cd ~/git/void-packages/masterdir-x86_64/builddir/@パッケージ名-バージョン番号/
++$ diff -Naur a b > 01.パッケージ名_ja.ts.patch
++
++-
++
++#### 7). 「パッチ1」の修正:
++
++$ featherpad 01.パッケージ名_ja.ts.patch
++
++↓ すべて貼付け:
++
++先頭行を削除、お尻に 2つの空行を追加
++
++→Ctrl+S で保存:
++
++-
++
++#### 8).「パッチ1」の配置:
++
++$ cd ~/git/void-packages/
++$ mkdir -p srcpkgs/@パッケージ名/patches/
++$ cp masterdir-x86_64/builddir/@パッケージ名-バージョン番号/01.パッケージ名_ja.ts.patch srcpkgs/@パッケージ名/patches/
++
++-
++
++#### 9). 複数のパッチを作成する場合:
++
++差分の解消:
++
++$ cd ~/git/void-packages/masterdir-x86_64/builddir/@パッケージ名-バージョン番号/
++$ sudo cp -r b/* a/
++
++-
++
++パッチの先頭番号を変えて、「項番 5).」〜「項番 8).」を繰り返し:
++
++-
++
++#### 10).後始末:
++
++$ sudo rm -r a/
++$ sudo rm -r b/
++
++-
++
++$ cd ~/git/void-packages/
++$ ./xbps-src clean @パッケージ名
++
++-
++
++-
++
++---
++### - --- - --- - --- - --- - --- - --- - --- - --- -
++  
++### 1-6. 個人で作成した「@アプリ」フォルダを退避する場合:
++
++-
++
++#### 1). 保存先のフォルダを作成:
++
++$ mkdir -p ~/ダウンロード/srcpkgs_save/
++
++-
++
++#### 2). 保存:
++
++$ cd ~/git/void-packages/ $ sudo cp -r srcpkgs/@* ~/ダウンロード/srcpkgs_save/
++
++-
++
++#### 3). 「@アプリ」を一覧表示:
++
++2025-12-27 現在:
++
++$ cd ~/git/void-packages/srcpkgs/
++$ ls -1p @* | grep @
++:
++@featherpad:
++@geany:
++@geany-devel:
++@kshisen:
++@notepadqq:
++@qpdfview:
++
++-
++
++#### 4). 「@アプリ」をツリー表示:
++
++2025-12-27 現在:
++
++$ tree ~/ダウンロード/srcpkgs_save/
++:
++/home/user/ダウンロード/srcpkgs_save/
++├── @featherpad  
++│ ├── patches  
++│ │ ├── 01.help-del.patch  
++│ │ ├── 02.help-translation-jp-ver4.patch  ←(備忘録 txt)  
++│ │ └── 03.featherpad-desktop.patch  
++│ └── template  
++├── @geany  
++│ ├── patches  
++│ │ ├── 01.geany-po-ja.patch  
++│ │ ├── 02.geany-src-templates.h.patch  
++│ │ └── 03.geany-src-ui-utils.c.patch    ←(Tab を含み制限あり)  
++│ └── template/  
++├── @geany-devel -> @geany         ←(リンク)  
++├── @kshisen  
++│ ├── patches  
++│ │ └── 01.kshisen-desktop.patch  
++│ └── template  
++├── @notepadqq  
++│ ├── files  
++│ │ └── notepadqq  
++│ ├── patches  
++│ │ ├── 00.disable-stats.patch  
++│ │ ├── 01.notepadqq_ja.ts-del.patch  
++│ │ └── 02.notepadqq_ja.ts.patch  
++│ └── template  
++├── @qpdfview               ←(現在はビルドで失敗します)  
++│ ├── patches  
++│ │ ├── 01.qpdfview_ja.ts.patch  
++│ │ └── 02.help_ja.html.patch  
++│ └── template  
++└── work           ↓ ビルド環境で使う「作業フォルダ」  
++├── @geany  
++│  ├── 03.geany-src-ui-utils.c.patch    ←(スクリプトで作成されたパッチ3)  
++│  └── 03.geany-src-ui-utils.c.sh    ←(パッチ3 を作成するスクリプト)  
++└── @qpdfview  
++  ├── 02.help_ja.html           ←(備忘録 html)  
++  ├── 02.help_ja.html.md  
++  ├── help_ja.html  
++  └── qpdfview_ja.qm          ←(翻訳のバイナリを退避)  
++
++16 directories, 24 files  
++
++-
++
++-
++
++---
++### - --- - --- - --- - --- - --- - --- - --- - --- -
++  
++### 1-7.「xbps-src」の「ビルド環境」を新規に作成する場合:
++
++-
++
++#### 1). システム更新:
++
++$ sudo xbps-install -Su
++
++-
++
++#### 2). 再起動:
++
++$ sudo reboot
++
++-
++
++#### 3). 「xbps-src」に必要なツールを確認:
++
++$ xbps-query -l | grep -e binutils -e curl -e git
++:
++ii binutils-2.44_2 GNU binary utilities
++ii binutils-doc-2.44_2 GNU binary utilities - info files
++ii binutils-libs-2.44_2 GNU binary utilities - shared libraries
++ii curl-8.17.0_1 Client that groks URLs
++ii git-2.51.2_1 Git Tree History Storage Tool
++ii libcurl-8.17.0_1 Multiprotocol file transfer library
++
++→すべてインストールされていました:
++
++-
++
++#### 4). あると便利な「xtools」ツールをインストール:
++
++$ sudo xbps-install -S xtools
++
++-
++
++#### 5). 作業フォルダの作成:
++
++$ mkdir -p ~/git/
++
++-
++
++#### 6). 「void-packages」の git リポジトリをクローン(ローカルにコピー):
++
++$ cd ~/git/
++$ git clone https://github.com/void-linux/void-packages.git --depth=10
++
++-
++
++#### 7). 「xbps-src」をセットアップ:
++
++$ cd ~/git/void-packages/
++$ ./xbps-src binary-bootstrap
++
++-
++
++#### 8). 配布にライセンス制限のあるパッケージもビルドできるように、
++「~/git/void-packages/etc/conf」に設定を追加:
++
++$ cd ~/git/void-packages/
++$ echo XBPS_ALLOW_RESTRICTED=yes >> etc/conf
++
++確認:
++
++$ cat ~/git/void-packages/etc/conf
++:
++XBPS_ALLOW_RESTRICTED=yes
++
++-
++
++#### 9). 再起動:
++
++$ sudo reboot
++
++-
++
++#### 10). 「xbps-src」が使えるか確認:
++
++$ cd ~/git/void-packages/
++$ ls srcpkgs/パッケージ名
++
++-
++
++-
++
++---
++### - --- - --- - --- - --- - --- - --- - --- - --- -
++  
++### 2. 「xbps-src」の「ヘルプ表示」(和訳)  
++
++-
++
++#### ヘルプ表示:  
++  
++$ cd ~/git/void-packages/  
++$ ./xbps-src --help  
++
++-
++
++#### 書式:  
++  
++$ xbps-src [オプション] `<ターゲット>` [引数]  
++
++-
++
++-
++
++---
++### - --- - --- - --- - --- - --- - --- - --- - --- -
++  
++#### 2-1. ターゲットの説明:
++
++(1つだけが指定できます)  
++
++-
++
++---
++#### binary-bootstrap  
++
++  ホストリポジトリから `<masterdir>` にブートストラップパッケージを、インストールします。  
++  オプションの  '-A `<arch>`' フラグが設定されている場合、このアーキテクチャから  
++  ブートストラップパッケージとその必要な XBPS ユーティリティがインストールされます。  
++  `<masterdir>` は、chroot 操作のために初期化されます。  
++
++-
++
++---
++#### bootstrap  
++
++  ソースからブートストラップパッケージを `<masterdir>` にビルドして、インストールします。  
++  オプションの '-A `<arch>`' フラグが設定されている場合、このアーキテクチャから  
++  ブートストラップパッケージとその必要な XBPS ユーティリティをビルドして、インストール  
++  します。  
++  `<masterdir>` は、chroot 操作のために初期化されます。  
++
++-
++
++---
++#### bootstrap-update  
++
++  XBPS 設定ファイルの登録リポジトリから利用可能な、最新のバージョンでブートストラップ  
++  パッケージを更新します。  
++
++-
++
++---
++#### consistency-check  
++
++  すべてのパッケージで一貫性チェックを、実行します  
++
++-
++
++---
++#### chroot  
++
++  `<masterdir>` の chroot に、入ります。  
++
++-
++
++---
++#### clean-repocache  
++
++  `<hostdir>`/repocache から時代遅れのパッケージを、削除します。  
++
++-
++
++---
++#### fetch `<パッケージ名>`  
++
++  パッケージのソースファイルを、ダウンロードします。  
++
++-
++
++---
++#### extract `<パッケージ名>`  
++
++  パッケージのソースファイルを、ビルドディレクトリに展開します。  
++  デフォルトは、`<masterdir>`/builddir に設定されます。  
++  
++  →「hostdir/sources/」ディレクトリにダウンロードはされませんが、  
++  ビルドディレクトリ「masterdir-x86_64/builddir/」に、ソースが展開されます:  
++
++-
++
++---
++#### patch `<パッケージ名>`  
++
++  パッケージソースにパッチを当て、設定とビルドのために  
++  パッケージを準備するために必要な、他の操作を実行します。  
++
++-
++
++---
++#### configure `<パッケージ名>`  
++
++  パッケージを構成します(Fetch + Extract + Patch + Configure)  
++
++-
++
++---
++#### build `<パッケージ名>`  
++
++  パッケージのソースをビルドします(Fetch + Extract + Patch + Configure + Build)  
++
++-
++
++---
++#### check `<パッケージ名>`  
++
++  パッケージのソースをビルドした後に、パッケージのチェックを実行します。  
++
++-
++
++---
++#### install `<パッケージ名>`  
++
++  ターゲットのパッケージを `<destdir>` にインストールしますが、  
++  検査目的なので、バイナリパッケージのビルドをせず、ビルドディレクトリも削除しません。  
++
++-
++
++---
++#### pkg `<パッケージ名>`  
++
++  `<パッケージ名>` のバイナリパッケージ、およびすべての必要な依存関係をビルドして、  
++  パッケージ化します。  
++
++-
++
++---
++#### clean [パッケージ名]  
++
++  自動で依存関係を削除し、`<masterdir>`/builddir および `<masterdir>`/destdir を  
++  クリーンアップします。  
++  もし、`<パッケージ名>` が指定されている場合は、`<masterdir>`/destdir のパッケージ  
++  ファイルと `<masterdir>`/buiddir のビルドディレクトリが削除されます。  
++
++-
++
++---
++#### list  
++
++  chroot される `<masterdir>`  にインストールされたパッケージの一覧を表示します。  
++
++-
++
++---
++#### remove `<パッケージ名>`  
++
++  `<destdir>` からターゲットパッケージを削除します。  
++  ビルドテンプレートと `<パッケージ名>`-`<version>` が一致していない場合は、何も  
++  削除されません。  
++
++-
++
++---
++#### remove-autodeps  
++
++  自動的にインストールされたすべてのパッケージの依存関係を削除します。  
++
++-
++
++---
++#### purge-distfiles  
++
++  `<hostdir>`/sources の、すべての時代遅れの distfiles を削除します。  
++
++-
++
++---
++#### show `<パッケージ名>`  
++
++  指定されたパッケージの情報を表示します。  
++
++-
++
++---
++#### show-avail `<パッケージ名>`  
++
++  特定のアーキテクチャ用にパッケージをビルドできる場合は「0」を返します。  
++
++-
++
++---
++#### show-build-deps `<パッケージ名>`  
++
++  `<パッケージ名>` に必要なビルドの依存関係を表示します。  
++
++-
++
++---
++#### show-check-deps `<パッケージ名>`  
++
++  `<パッケージ名>` に必要なチェックの依存関係を表示します。  
++
++-
++
++---
++#### show-deps `<パッケージ名>`  
++
++  `<パッケージ名>` の必要な ランタイムの依存関係を表示します。  
++  パッケージは DestDir にインストールする必要があります。  
++
++-
++
++---
++#### show-files `<パッケージ名>`  
++
++  `<パッケージ名>` によってインストールされたファイルを表示します。  
++  パッケージは DestDir にインストールする必要があります。  
++
++-
++
++---
++#### show-hostmakedepends `<パッケージ名>`  
++
++  `<パッケージ名>`の必要なホストビルド依存関係を表示します。  
++
++-
++
++---
++#### show-makedepends `<パッケージ名>`  
++
++  `<パッケージ名>` の必要なターゲットビルド依存関係を表示します。  
++
++-
++
++---
++#### show-options `<パッケージ名>`  
++
++  `<パッケージ名>`による利用可能なビルドオプションを表示します。  
++
++-
++
++---
++#### show-shlib-provides `<パッケージ名>`  
++
++  `<パッケージ名>` の提供された shlibs のリストを表示します。  
++  パッケージは DestDir にインストールする必要があります。  
++
++-
++
++---
++#### show-shlib-requires `<パッケージ名>`  
++
++  `<パッケージ名>`に必要なshlibsのリストを表示します。  
++  パッケージは DestDir にインストールする必要があります。  
++
++-
++
++---
++#### show-var `<var>`  
++
++  xbps-src で定義されている場合、`<var>` の値を表示します。  
++
++-
++
++---
++#### show-repo-updates  
++
++  XBPS リポジトリの時代遅れのパッケージのリストを表示します。  
++
++-
++
++---
++#### show-sys-updates  
++
++  システム内の時代遅れのパッケージのリストを表示します。  
++
++-
++
++---
++#### show-local-updates  
++
++  ローカルリポジトリの時代遅れのパッケージのリストを表示します。  
++
++-
++
++---
++#### sort-dependencies `<pkg>` `<pkgN+1>` ...  
++
++  追加の引数として、指定されたパッケージのリストが与えられた場合、  
++  ソートされた依存関係リストが 標準出力 に返されます。  
++
++-
++
++---
++#### update-bulk  
++
++  時代遅れのシステムリポジトリ内のすべてのパッケージを再ビルドします。  
++
++-
++
++---
++#### update-sys  
++
++  時代遅れのシステム内のすべてのパッケージを再ビルドし、それらを更新します。  
++
++-
++
++---
++#### update-local  
++
++  時代遅れのローカルリポジトリのすべてのパッケージを再ビルドします。  
++
++-
++
++---
++#### update-check `<パッケージ名>`  
++
++  新しいリリースについて、`<パッケージ名>` の上流サイトをチェックします。  
++
++-
++
++---
++#### update-hash-cache  
++
++  既存のソース distfiles で、ハッシュキャッシュを更新します。  
++
++-
++
++---
++#### zap  
++
++  ccache、distcc および host ディレクトリが保存された、masterdir を削除します。  
++
++-
++
++-
++
++---
++### - --- - --- - --- - --- - --- - --- - --- - --- -
++  
++#### 2-2. オプションの説明:  
++
++-
++
++---
++#### -1  
++
++  ターゲットパッケージの依存関係が欠けている場合は、それらをビルドせずに、失敗  
++  します。  
++
++-
++
++---
++#### -A `<ホスト>`  
++
++  指定のホストマシンを使用します。  
++  masterdir-`<ホスト>` がまだ存在しない場合は自動的に作成されます。  
++  
++  一部のホストマシンは、プロセッサによってネイティブにサポートされていない場合、  
++   qemu-user と binfmt-support を必要とする場合があります。  
++
++###### サポートされているホスト:  
++
++    aarch64-musl  
++    aarch64  
++    armv5te-musl  
++    armv5te  
++    armv5tel-musl  
++    armv5tel  
++    armv6hf-musl  
++    armv6hf  
++    armv6l-musl  
++    armv6l  
++    armv7hf-musl  
++    armv7hf  
++    armv7l-musl  
++    armv7l  
++    i686-musl  
++    i686  
++    mips-musl  
++    mipsel-musl  
++    mipselhf-musl  
++    mipshf-musl  
++    ppc-musl  
++    ppc  
++    ppc64-musl  
++    ppc64  
++    ppc64le-musl  
++    ppc64le  
++    ppcle-musl  
++    ppcle  
++    riscv64-musl  
++    riscv64  
++    x86_64-musl  
++    x86_64  
++
++-
++
++---
++#### -a  `<ターゲット>`  
++
++指定されたターゲットマシンのパッケージをクロスコンパイルします。  
++  
++###### サポートされているターゲット:  
++
++    aarch64-musl  
++    aarch64  
++    armv5te-musl  
++    armv5te  
++    armv5tel-musl  
++    armv5tel  
++    armv6hf-musl  
++    armv6hf  
++    armv6l-musl  
++    armv6l  
++    armv7hf-musl  
++    armv7hf  
++    armv7l-musl  
++    armv7l  
++    i686-musl  
++    i686  
++    mips-musl  
++    mipsel-musl  
++    mipselhf-musl  
++    mipshf-musl  
++    ppc-musl  
++    ppc  
++    ppc64-musl  
++    ppc64  
++    ppc64le-musl  
++    ppc64le  
++    ppcle-musl  
++    ppcle  
++    riscv64-musl  
++    riscv64  
++    x86_64-musl  
++    x86_64  
++
++-
++
++---
++#### -b  
++
++  壊れているとマークされている、nocross、またはアーチで除外されている場合でも、  
++  パッケージをビルドします。  
++
++-
++
++---
++#### -c  `<configuration>`  
++
++  `<configuration>` が指定されている場合、etc/conf.`<configuration>` は、主要な  
++  構成ファイル名として使用されます。  
++  etc/conf が存在しない場合にのみ試行されます。  
++
++-
++
++---
++#### -C  
++
++  インストールが成功した後、ビルドディレクトリ、自動依存関係、パッケージ用の  
++  destdir を削除しません。  
++
++-
++
++---
++#### -E  
++
++  ターゲットパッケージのリポジトリに、バイナリパッケージが存在する場合は、  
++  それをビルドせず、すぐに終了します。  
++
++-
++
++---
++#### -f  
++
++  正常に実行された場合でも、指定されたステージ(構成/ビルド/インストール/パッケージ化)  
++  を実行します。  
++
++-
++
++---
++#### -G  
++
++  Enable XBPS_USE_GIT_REVS(詳細については、etc/defaults.conf を参照してください)  
++
++-
++
++---
++#### -g  
++
++  デバッグシンボルを備えた -dbg パッケージのビルドを有効にします。  
++
++-
++
++---
++#### -H  `<hostdir>`  
++
++  unset がデフォルトで、「void-packages/hostdir」がある場合に、  
++  `<masterdir>`/host にマウントされる、バインドされるディレクトリへの絶対パスを指定。  
++  host ディレクトリには、リモートリポジトリからダウンロードされたバイナリパッケージ、  
++  ソース、パッケージの依存関係が保存されています。  
++
++-
++
++---
++#### -h  
++
++  使い方を表示。  
++
++-
++
++---
++#### -I  
++
++  ソースを展開/読み込むのに役立つ必要な依存関係を無視します。  
++
++-
++
++---
++#### -i   
++
++  xbps-src の内部エラーを致命的なエラーにしません。  
++
++-
++
++---
++#### -j  
++
++  パッケージをビルドするときに使用する並列ビルドジョブ(プロセッサ)の数を指定。  
++
++-
++
++---
++#### -L  
++
++  ASCII の色を無効にします。  
++
++-
++
++---
++#### -m  `<masterdir>`  
++
++  unset がデフォルトで「void-packages/masterdir-`<host>`」がある場合に、  
++  masterdir として使用するディレクトリへの絶対パスを指定。  
++  masterdir は、パッケージを構築/保存/コンパイルする、メインとなるディレクトリです。  
++
++-
++
++---
++#### -N  
++
++  リモートリポジトリの使用を無効にして、依存関係を解決します。  
++
++-
++
++---
++#### -o  `<opt,~opt2,...>`  
++
++  パッケージビルドオプションを有効または(`~` を付けて)無効にします。  
++  「etc/conf」がすでにいくつかを指定している場合、それはマージされています。  
++  依存関係をビルドする必要がある場合、これらのオプションを継承する場合、  
++  これらのオプションはビルド内のすべてのパッケージに適用されることに注意  
++  してください。  
++  
++  'show-options' target でサポートされているオプションを表示できます。  
++
++-
++
++---
++#### -p  `<variable,variable2,...>`  
++
++  ターゲットを表示するには、デフォルトの変数に加えて指定された変数を表示します。  
++  変数は分割され、各単語はデフォルトで別々の行で表示されます。  
++  値全体を 1行で表示するには、asterisk  を変数名に追加します。  
++
++-
++
++---
++#### -Q  
++
++  ターゲットパッケージのみのチェックステージを実行します。  
++
++-
++
++---
++#### -K  
++
++  長いテストでチェックステージを実行します。  
++  -Q とは異なり、これはビルドされた依存関係のチェックステージも実行されます。  
++
++-
++
++---
++#### -q  
++
++  xbps-src の情報出力をしません。(ビルド出力は引き続き表示されます)  
++
++-
++
++---
++#### -r  `<repo>`  
++
++  代替ローカルリポジトリを使用して、生成されたバイナリパッケージを保存します。  
++  unset がデフォルトで `<hostdir>`/binpkgs になります。  
++  
++  もし、set の場合、binpkgs は `<hostdir>`/binpkgs/`<repo>` に保存されます。  
++  また、この代替リポジトリは、他のリポジトリよりも優先度の高い順序で依存関係を  
++  解決するためにも使用されます。  
++
++-
++
++---
++#### -s  
++
++  いくつかの警告をエラーにします。  
++
++-
++
++---
++#### -t  
++
++  現在のものを汚さないように、一時的な masterdir を作成します。  
++  既存の masterdir には、最初に binary-bootstrap を完全に入力する必要があることに  
++  注意してください。  
++  
++  ターゲットが終了すると、この一時的な masterdir は削除されます。  
++  このフラグには xbps-uchroot(1) が必要であり、 overlayfs をサポートしていない  
++  ファイルシステムでは機能しません。  
++
++-
++
++---
++#### -v  
++
++  詳細なメッセージを表示します(update-check のみに影響します)。  
++
++-
++
++---
++#### -V  
++
++  xbps のバージョンを表示して、終了します。  
++
++-
++
++-
++
++---
++
++
++###### 以上:
++
++-
++
+


--- a/srcpkgs_save/@featherpad/patches/03.featherpad-desktop.patch  1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@featherpad/patches/03.featherpad-desktop.patch  2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,10 @@
+--- a/featherpad/data/featherpad.desktop   2025-10-11 15:08:34.023423019 +0900
++++ b/featherpad/data/featherpad.desktop   2025-10-11 16:17:35.175545023 +0900
+@@ -1,5 +1,5 @@
+ [Desktop Entry]
+-Name=FeatherPad
++Name=featherpad
+ GenericName=Text Editor
+ GenericName[cs]=Textový editor
+ GenericName[da]=Tekstredigering
+


--- a/srcpkgs_save/@featherpad/template 1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@featherpad/template 2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,14 @@
+# Template file for 'featherpad'
+pkgname=@featherpad
+version=1.6.2
+revision=1
+build_style=cmake
+hostmakedepends="qt6-tools qt6-base-devel pkg-config"
+makedepends="libX11-devel libXext-devel qt6-svg-devel hunspell-devel"
+short_desc="Lightweight Qt6 plain-text editor for Linux"
+maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/tsujan/FeatherPad"
+changelog="https://github.com/tsujan/FeatherPad/raw/master/ChangeLog"
+distfiles="https://github.com/tsujan/FeatherPad/archive/V${version}.tar.gz"
+checksum=9753796b2a525a4d6b13696681e9fbb094edcc20e8aadffcd5bb6fe22d0a5fdb

わざと空行 x2 開けています:

→Ctrl+O 後、ファイルを確認して Enter:

→Ctrl+X で終了:

-


2). 「02.@geany.patch」ファイルの作成:

$ cd ~/ダウンロード/
$ nano 02.@geany.patch

↓ すべて貼付け(すべて選択後、Ctrl+C して マウスの中央ボタンで貼付け):

--- a/srcpkgs_save/@geany/patches/01.geany-po-ja.patch   1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@geany/patches/01.geany-po-ja.patch  2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,35 @@
+--- a/po/ja.po 2025-11-20 02:54:46.843233207 +0900
++++ b/po/ja.po 2025-11-20 03:14:24.967506637 +0900
+@@ -5024,11 +5024,11 @@
+ 
+ #: src/ui_utils.c:710 src/ui_utils.c:797
+ msgid "_Use Custom Date Format"
+-msgstr "任意の日付書式を使用する(_U)"
++msgstr "好みの日付の書式で日時を挿入(_U)"
+ 
+ #: src/ui_utils.c:714
+ msgid "Custom Date Format"
+-msgstr "任意の日付書式"
++msgstr "好みの日付の書式"
+ 
+ #: src/ui_utils.c:715
+ #, fuzzy
+@@ -5036,7 +5036,7 @@
+ "Custom date format (see https://docs.gtk.org/glib/method.DateTime.format."
+ "html):"
+ msgstr ""
+-"ここに任意の日付と時刻の書式を入力してください。ANSI C の strftime 関数で用い"
++"ここに好みの日付と時刻の書式を入力してください。ANSI C の strftime 関数で用い"
+ "られる変換指定子が使用できます。"
+ 
+ #: src/ui_utils.c:735
+@@ -5045,7 +5045,7 @@
+ 
+ #: src/ui_utils.c:810
+ msgid "_Set Custom Date Format"
+-msgstr "任意の日付書式を設定(_S)"
++msgstr "好みの日付の書式を設定(_S)"
+ 
+ #: src/ui_utils.c:1973
+ #, fuzzy
+


--- a/srcpkgs_save/@geany/patches/02.geany-src-templates.h.patch    1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@geany/patches/02.geany-src-templates.h.patch    2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,12 @@
+--- a/src/templates.h  2025-11-20 02:56:13.026466304 +0900
++++ b/src/templates.h  2025-11-20 04:04:03.704501349 +0900
+@@ -59,7 +59,7 @@
+ #define GEANY_TEMPLATES_INDENT 3
+ #define GEANY_TEMPLATES_FORMAT_YEAR              C_("DefaultYear", "%Y")
+ #define GEANY_TEMPLATES_FORMAT_DATE              C_("DefaultDate", "%Y-%m-%d")
+-#define GEANY_TEMPLATES_FORMAT_DATETIME          C_("DefaultDateTime", "%d.%m.%Y %H:%M:%S %Z")
++#define GEANY_TEMPLATES_FORMAT_DATETIME          C_("DefaultDateTime", "%Y-%m-%d %H:%M")
+ 
+ enum
+ {
+


--- a/srcpkgs_save/@geany/template  1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@geany/template  2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,36 @@
+# Template file for '@geany'
+pkgname=@geany
+version=2.1
+revision=1
+build_style=gnu-configure
+configure_args="--enable-vte --enable-gtk3"
+hostmakedepends="pkg-config libtool gettext"
+makedepends="gtk+3-devel"
+depends="hicolor-icon-theme desktop-file-utils"
+checkdepends="xvfb-run python3"
+short_desc="Fast and lightweight IDE"
+maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later"
+homepage="https://www.geany.org"
+changelog="https://raw.githubusercontent.com/geany/geany/master/NEWS"
+distfiles="https://download.geany.org/geany-${version}.tar.bz2"
+checksum=6b96a8844463300c10b9692a0a5edad8236eec9e84342f575f83d4fc89331228
+make_check_pre="xvfb-run"
+python_version=3
+
+pre_check() {
+   # Void sets HOME to /tmp by default
+   # Use $PWD to avoid /tmp evaluating to ~
+   export HOME="$PWD"
+}
+
+@geany-devel_package() {
+   depends="libglib-devel gtk+3-devel ${sourcepkg}>=${version}_${revision}"
+   short_desc+=" - Development files"
+   pkg_install() {
+       vmove usr/include
+       vmove usr/lib/pkgconfig
+       vmove "usr/lib/*.so"
+   }
+}
+


--- a/srcpkgs_save/work/@geany/03.geany-src-ui-utils.c.sh   1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/work/@geany/03.geany-src-ui-utils.c.sh   2025-12-27 07:23:02.000000000 +0900
@@ -0,0 +1,29 @@
+#!/bin/bash
+echo ""
+echo -e "--- a/src/ui_utils.c\\t2025-11-20 02:56:13.014465436 +0900"
+echo -e "+++ b/src/ui_utils.c\\t2025-11-20 04:30:33.596793645 +0900"
+echo -e "@@ -692,11 +692,11 @@"
+echo -e " \\tif (utils_str_equal(\"\", ui_prefs.custom_date_format))"
+echo -e " \\t{"
+echo -e " \\t\\tg_free(ui_prefs.custom_date_format);"
+echo -e "-\\t\\tui_prefs.custom_date_format = g_strdup(\"%d.%m.%Y\");"
+echo -e "+\\t\\tui_prefs.custom_date_format = g_strdup(\"%Y-%m-%d %H:%M\");"
+echo -e " \\t}"
+echo -e " "
+echo -e "-\\tif (utils_str_equal(_(\"dd.mm.yyyy\"), date_style))"
+echo -e "-\\t\\tformat = \"%d.%m.%Y\";"
+echo -e "+\\tif (utils_str_equal(_(\"yyyy-mm-dd hh:mm\"), date_style))"
+echo -e "+\\t\\tformat = \"%Y-%m-%d %H:%M\";"
+echo -e " \\telse if (utils_str_equal(_(\"mm.dd.yyyy\"), date_style))"
+echo -e " \\t\\tformat = \"%m.%d.%Y\";"
+echo -e " \\telse if (utils_str_equal(_(\"yyyy/mm/dd\"), date_style))"
+echo -e "@@ -772,7 +772,7 @@"
+echo -e " \\tGtkWidget *item;"
+echo -e " \\tgchar *str;"
+echo -e " "
+echo -e "-\\tinsert_date_items(menu_edit, menu_popup, _(\"dd.mm.yyyy\"));"
+echo -e "+\\tinsert_date_items(menu_edit, menu_popup, _(\"yyyy-mm-dd hh:mm\"));"
+echo -e " \\tinsert_date_items(menu_edit, menu_popup, _(\"mm.dd.yyyy\"));"
+echo -e " \\tinsert_date_items(menu_edit, menu_popup, _(\"yyyy/mm/dd\"));"
+echo ""
+

わざと空行 x2 開けています:

→Ctrl+O 後、ファイルを確認して Enter:

→Ctrl+X で終了:

-


3). 「03.@kshisen.patch」ファイルの作成:

$ cd ~/ダウンロード/
$ nano 03.@kshisen.patch

↓ すべて貼付け(すべて選択後、Ctrl+C して マウスの中央ボタンで貼付け):

--- a/srcpkgs_save/@kshisen/patches/01.kshisen-desktop.patch 1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@kshisen/patches/01.kshisen-desktop.patch    2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,12 @@
+--- a/org.kde.kshisen.desktop  2025-10-15 19:30:58.512373693 +0900
++++ b/org.kde.kshisen.desktop  2025-10-15 19:35:15.331386199 +0900
+@@ -35,7 +35,7 @@
+ Name[id]=Shisen-Sho
+ Name[is]=Shisen-Sho
+ Name[it]=Shisen-Sho
+-Name[ja]=Shisen-Sho
++Name[ja]=Shisen-Sho 四川省
+ Name[ka]=Shisen-Sho
+ Name[kk]=Сисен-сё
+ Name[km]=Shisen-Sho
+


--- a/srcpkgs_save/@kshisen/template    1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@kshisen/template    2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,14 @@
+# Template file for 'kshisen'
+pkgname=@kshisen
+version=25.08.1
+revision=1
+build_style=cmake
+hostmakedepends="qt6-tools qt6-base-devel pkg-config"
+makedepends="gettext extra-cmake-modules ecm-devel qt6-core qt6-gui kf6-kcoreaddons-devel kf6-kconfig-devel kf6-kiconthemes-devel kf6-kconfigwidgets-devel kf6-kcrash-devel kf6-kdbusaddons-devel kf6-kdoctools-devel kf6-ki18n-devel kf6-kwidgetsaddons-devel kf6-kxmlgui-devel libkmahjongg-devel libkdegames-devel"
+short_desc="Shisen-Sho is a solitaire-like game"
+maintainer="Kubuntu Developers <kubuntu-devel@lists.ubuntu.com>"
+license="GPL-2.0-or-later"
+homepage="https://apps.kde.org/kshisen/"
+changelog="https://invent.kde.org/games/kshisen/-/blob/master/ChangeLog"
+distfiles="https://invent.kde.org/games/kshisen/-/archive/v${version}/kshisen-v${version}.tar.gz"
+checksum=3dfc9498c7899cf6f35f42f7fbf0c4f9b53605e6fc95bad040d2b8f9827c359d

わざと空行 x2 開けています:

→Ctrl+O 後、ファイルを確認して Enter:

→Ctrl+X で終了:

-


4). 「04.@notepadqq.patch」ファイルの作成:

$ cd ~/ダウンロード/
$ nano 04.@notepadqq.patch

↓ すべて貼付け(すべて選択後、Ctrl+C して マウスの中央ボタンで貼付け):

--- a/srcpkgs_save/@notepadqq/files/notepadqq    1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@notepadqq/files/notepadqq   2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+exec /usr/lib/notepadqq/notepadqq-bin "$@"


--- a/srcpkgs_save/@notepadqq/patches/00.disable-stats.patch    1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@notepadqq/patches/00.disable-stats.patch    2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,11 @@
+# disable collection of system statics
+--- a/src/ui/stats.cpp
++++ b/src/ui/stats.cpp
+@@ -19,6 +19,7 @@
+ 
+ void Stats::init()
+ {
++    return; // statistics collection disabled by Void Linux
+     NqqSettings &settings = NqqSettings::getInstance();
+ 
+     Stats::askUserPermission();


--- a/srcpkgs_save/@notepadqq/patches/01.notepadqq_ja.ts-del.patch  1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@notepadqq/patches/01.notepadqq_ja.ts-del.patch  2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,1824 @@
+--- a/src/translations/notepadqq_ja.ts 2025-12-06 17:22:46.258691177 +0900
++++ b/src/translations/notepadqq_ja.ts 1970-01-01 09:00:00.000000000 +0900
+@@ -1,1820 +0,0 @@
+-<?xml version="1.0" encoding="utf-8"?>
+-<!DOCTYPE TS>
+-<TS version="2.1" language="ja_JP">
+-<context>
+-    <name>BannerFileChanged</name>
+-    <message>
+-        <location filename="../ui/EditorNS/bannerfilechanged.cpp" line="13"/>
+-        <source>This file has been changed outside of Notepadqq.</source>
+-        <translation>Notepadqq以外でファイルが更新されました。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/EditorNS/bannerfilechanged.cpp" line="15"/>
+-        <source>Reload</source>
+-        <translation>更新</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/EditorNS/bannerfilechanged.cpp" line="18"/>
+-        <source>Ignore</source>
+-        <translation>無視</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BannerFileRemoved</name>
+-    <message>
+-        <location filename="../ui/EditorNS/bannerfileremoved.cpp" line="13"/>
+-        <source>This file has been deleted from the file system.</source>
+-        <translation>このファイルは、ファイルシステムから削除されました。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/EditorNS/bannerfileremoved.cpp" line="15"/>
+-        <source>Save</source>
+-        <translation>保存</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/EditorNS/bannerfileremoved.cpp" line="18"/>
+-        <source>Ignore</source>
+-        <translation>無視</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>BannerIndentationDetected</name>
+-    <message>
+-        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="18"/>
+-        <source>This file is indented with %1, but your current settings specify to use %2.</source>
+-        <translation>このファイルは %1でインデント(字下げ)されていますが、現在の設定では %2を使うように設定されています。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="20"/>
+-        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="25"/>
+-        <source>spaces</source>
+-        <translation>空白</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="20"/>
+-        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="25"/>
+-        <source>tabs</source>
+-        <translation>タブ文字</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="22"/>
+-        <source>Use spaces</source>
+-        <translation>空白を使う</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="27"/>
+-        <source>Use tabs</source>
+-        <translation>タブ文字を使う</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="31"/>
+-        <source>This file is indented with %1 spaces, but your current settings specify to use %2 spaces.</source>
+-        <translation>このファイルは%1でインデント(字下げ)されていますが、現在の設定では%2のインデントをするように設定されています。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="34"/>
+-        <source>Use %1 spaces</source>
+-        <translation>%1の空白を使う。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="38"/>
+-        <source>Ignore</source>
+-        <translation>無視</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>DocEngine</name>
+-    <message>
+-        <location filename="../ui/docengine.cpp" line="33"/>
+-        <source>new %1</source>
+-        <translation>新規 %1</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/docengine.cpp" line="182"/>
+-        <source>Error trying to open &quot;%1&quot;</source>
+-        <translation>&quot;%1&quot;を開く際にエラーが発生しました。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/docengine.cpp" line="257"/>
+-        <location filename="../ui/docengine.cpp" line="452"/>
+-        <source>Protocol not supported for file &quot;%1&quot;.</source>
+-        <translation>ファイル&quot;%1&quot;のプロトコルはサポートされていません。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/docengine.cpp" line="412"/>
+-        <source>Error trying to write to &quot;%1&quot;</source>
+-        <translation>&quot;%1&quot;に書き込む際にエラーが発生しました。</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>Extension</name>
+-    <message>
+-        <location filename="../ui/Extensions/extension.cpp" line="22"/>
+-        <source>name missing or invalid</source>
+-        <translation>名前がないか、無効です。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Extensions/extension.cpp" line="50"/>
+-        <source>unable to read nqq-manifest.json</source>
+-        <translation>nqq-manifest.jsonを読むことができません</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Extensions/extension.cpp" line="97"/>
+-        <source>failed to start. Check your runtime: %1</source>
+-        <translation>起動に失敗しました。ランタイムをご確認ください: %1</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Extensions/extension.cpp" line="106"/>
+-        <source>Failed to load %1: %2</source>
+-        <translation>%1: %2の読み込みに失敗しました。</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>Extensions::InstallExtension</name>
+-    <message>
+-        <location filename="../ui/Extensions/installextension.cpp" line="177"/>
+-        <source>Error</source>
+-        <translation>エラー</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Extensions/installextension.cpp" line="177"/>
+-        <source>Unsupported runtime: %1</source>
+-        <translation>サポートされているランタイムではありません: %1</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>FileSearchResultsWidget</name>
+-    <message>
+-        <location filename="../ui/Search/filesearchresultswidget.cpp" line="29"/>
+-        <source>Clear</source>
+-        <translation>クリア</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>InstallExtension</name>
+-    <message>
+-        <location filename="../ui/Extensions/installextension.ui" line="14"/>
+-        <source>Install Extension</source>
+-        <translation>拡張機能をインストール</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Extensions/installextension.ui" line="102"/>
+-        <source>Cancel</source>
+-        <translation>キャンセル</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Extensions/installextension.ui" line="109"/>
+-        <source>Install</source>
+-        <translation>インストール</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Extensions/installextension.cpp" line="42"/>
+-        <source>Version %1, %2</source>
+-        <translation>バージョン %1, %2</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Extensions/installextension.cpp" line="43"/>
+-        <location filename="../ui/Extensions/installextension.cpp" line="52"/>
+-        <source>unknown version</source>
+-        <translation>未知のバージョン</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Extensions/installextension.cpp" line="44"/>
+-        <source>unknown author</source>
+-        <translation>作者不明</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Extensions/installextension.cpp" line="54"/>
+-        <source>(current version is %1)</source>
+-        <translation>(現在のバージョンは %1 です。)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Extensions/installextension.cpp" line="55"/>
+-        <source>Update</source>
+-        <translation>更新</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Extensions/installextension.cpp" line="104"/>
+-        <location filename="../ui/Extensions/installextension.cpp" line="126"/>
+-        <source>Error installing the extension</source>
+-        <translation>拡張機能のインストール時にエラーが発生しました。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Extensions/installextension.cpp" line="115"/>
+-        <source>Extension installed</source>
+-        <translation>拡張機能がインストールされました。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Extensions/installextension.cpp" line="116"/>
+-        <source>The extension has been successfully installed!</source>
+-        <translation>拡張機能は正常にインストールされました!</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>KeyGrabber</name>
+-    <message>
+-        <location filename="../ui/keygrabber.cpp" line="13"/>
+-        <source>Action</source>
+-        <translation>アクション</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/keygrabber.cpp" line="13"/>
+-        <source>Keyboard Shortcut</source>
+-        <translation>キーボードショートカット</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>MainWindow</name>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="14"/>
+-        <source>Notepadqq</source>
+-        <translation>Notepadqq</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="50"/>
+-        <source>&amp;File</source>
+-        <translation>&amp;ファイル</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="54"/>
+-        <source>Recent Files</source>
+-        <translation>最近使ったファイル</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="81"/>
+-        <source>&amp;Edit</source>
+-        <translation>&amp;編集</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="85"/>
+-        <source>End of line</source>
+-        <translation>行の末尾</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="93"/>
+-        <source>Copy to Clipboard</source>
+-        <translation>クリップボードへコピー</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="101"/>
+-        <source>Convert Case to</source>
+-        <translation>ケースを変換する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="108"/>
+-        <source>Indentation</source>
+-        <translation>インデント(字下げ)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="117"/>
+-        <source>Line Operations</source>
+-        <translation>ライン操作</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="126"/>
+-        <source>Blank Operations</source>
+-        <translation>空白操作</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="155"/>
+-        <source>&amp;Search</source>
+-        <translation>&amp;検索</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="168"/>
+-        <source>&amp;View</source>
+-        <translation>&amp;表示</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="172"/>
+-        <source>Show Symbol</source>
+-        <translation>記号を表示</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="184"/>
+-        <source>Zoom</source>
+-        <translation>ズーム</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="192"/>
+-        <source>Move/Clone Current Document</source>
+-        <translation>現在の文書を移動/複製</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="211"/>
+-        <source>Encoding</source>
+-        <translation>エンコーディング</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="229"/>
+-        <source>&amp;Language</source>
+-        <translation>&amp;言語</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="236"/>
+-        <source>Se&amp;ttings</source>
+-        <translation>&amp;セッティング</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="242"/>
+-        <source>&amp;?</source>
+-        <translation>&amp;?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="249"/>
+-        <source>Run</source>
+-        <translation>実行</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="256"/>
+-        <source>&amp;Window</source>
+-        <translation>&amp;ウィンドウ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="262"/>
+-        <source>Extensions</source>
+-        <translation>拡張機能</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="281"/>
+-        <source>Toolbar</source>
+-        <translation>ツールバー</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="325"/>
+-        <source>Find result</source>
+-        <translation>検索結果</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="349"/>
+-        <source>&amp;Open...</source>
+-        <translation>開く...&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="352"/>
+-        <source>Ctrl+O</source>
+-        <translation>Ctrl+O</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="357"/>
+-        <source>&amp;New</source>
+-        <translation>新規&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="360"/>
+-        <source>Ctrl+N</source>
+-        <translation>Ctrl+N</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="365"/>
+-        <source>Reload from Disk</source>
+-        <translation>ディスクから読み込み</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="370"/>
+-        <source>&amp;Save</source>
+-        <translation>保存&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="373"/>
+-        <source>Ctrl+S</source>
+-        <translation>Ctrl+S</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="378"/>
+-        <source>Save &amp;As...</source>
+-        <translation>名前を付けて保存...&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="381"/>
+-        <source>Save As...</source>
+-        <translation>名前を付けて保存...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="384"/>
+-        <source>Ctrl+Alt+S</source>
+-        <translation>Ctrl+Alt+S</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="389"/>
+-        <source>Save a Copy As...</source>
+-        <translation>複製として保存...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="394"/>
+-        <source>Sav&amp;e All</source>
+-        <translation>すべて保存&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="397"/>
+-        <source>Ctrl+Shift+S</source>
+-        <translation>Ctrl+Shift+S</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="402"/>
+-        <source>Rename...</source>
+-        <translation>名前を変更...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="407"/>
+-        <source>Close</source>
+-        <translation>閉じる</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="410"/>
+-        <source>Ctrl+W</source>
+-        <translation>Ctrl+W</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="415"/>
+-        <source>C&amp;lose All</source>
+-        <translation>すべて閉じる&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="420"/>
+-        <source>Close All BUT Current Document</source>
+-        <translation>すべてのドキュメントを閉じる</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="425"/>
+-        <source>Load Session...</source>
+-        <translation>セッションを読み込む...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="430"/>
+-        <source>Save Session...</source>
+-        <translation>セッションを保存...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="435"/>
+-        <source>Print...</source>
+-        <translation>印刷...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="438"/>
+-        <source>Ctrl+P</source>
+-        <translation>Ctrl+P</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="446"/>
+-        <source>Print Now</source>
+-        <translation>すぐに印刷する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="454"/>
+-        <source>Open All Recent Files</source>
+-        <translation>最近開いたファイルをすべて開く</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="459"/>
+-        <source>Empty Recent Files List</source>
+-        <translation>最近開いたファイルはありません。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="464"/>
+-        <source>E&amp;xit</source>
+-        <translation>終了&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="467"/>
+-        <source>Alt+F4</source>
+-        <translation>Alt+F4</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="472"/>
+-        <source>&amp;Undo</source>
+-        <translation>元に戻す&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="475"/>
+-        <source>Ctrl+Z</source>
+-        <translation>Ctrl+Z</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="480"/>
+-        <source>&amp;Redo</source>
+-        <translation>やり直す&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="483"/>
+-        <source>Ctrl+Y</source>
+-        <translation>Ctrl+Y</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="488"/>
+-        <source>Cu&amp;t</source>
+-        <translation>切り取り&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="491"/>
+-        <source>Ctrl+X</source>
+-        <translation>Ctrl+X</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="496"/>
+-        <source>&amp;Copy</source>
+-        <translation>コピー&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="499"/>
+-        <source>Ctrl+C</source>
+-        <translation>Ctrl+C</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="504"/>
+-        <source>&amp;Paste</source>
+-        <translation>貼り付け&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="507"/>
+-        <source>Ctrl+V</source>
+-        <translation>Ctrl+V</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="512"/>
+-        <source>&amp;Delete</source>
+-        <translation>削除&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="515"/>
+-        <source>Del</source>
+-        <translation>Del</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="520"/>
+-        <source>Select &amp;All</source>
+-        <translation>すべて選択 &amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="523"/>
+-        <source>Ctrl+A</source>
+-        <translation>Ctrl+A</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="528"/>
+-        <source>About Notepadqq...</source>
+-        <translation>Notepadqqについて...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="531"/>
+-        <source>F1</source>
+-        <translation>F1</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="536"/>
+-        <source>About Qt...</source>
+-        <translation>Qtについて...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="544"/>
+-        <source>Windows Format</source>
+-        <translation>Windowsフォーマット</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="555"/>
+-        <source>UNIX / OS X Format</source>
+-        <translation>UNIX / OS Xフォーマット</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="563"/>
+-        <source>Old Mac Format</source>
+-        <translation>Формат 旧MACのフォーマット</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="571"/>
+-        <source>Show End of Line</source>
+-        <translation>行末を表示する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="579"/>
+-        <source>Show Tabs</source>
+-        <translation>タブ文字を表示</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="587"/>
+-        <source>Show All Characters</source>
+-        <translation>すべての文字を表示</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="598"/>
+-        <source>Show Indent Guide</source>
+-        <translation>インデントについてのガイドを表示</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="606"/>
+-        <source>Show Wrap Symbol</source>
+-        <translation>折り返し記号を表示</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="614"/>
+-        <source>Word wrap</source>
+-        <translation>折り返し記号</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="622"/>
+-        <source>Text Direction RTL</source>
+-        <translation>テキスト方向RTL</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="627"/>
+-        <source>Copy Full Path to Clipboard</source>
+-        <translation>フルパスをクリップボードにコピーする</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="632"/>
+-        <source>Copy Filename to Clipboard</source>
+-        <translation>ファイル名をクリップボードにコピーする</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="637"/>
+-        <source>Copy Directory to Clipboard</source>
+-        <translation>ディレクトリをクリップボードにコピーする</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="642"/>
+-        <source>Zoom &amp;In</source>
+-        <translation>拡大&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="645"/>
+-        <source>Ctrl++</source>
+-        <translation>Ctrl++</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="650"/>
+-        <source>&amp;</source>
+-        <translation>縮小&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="653"/>
+-        <source>Ctrl+-</source>
+-        <translation>Ctrl+-</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="658"/>
+-        <source>Restore Default Zoom</source>
+-        <translation>ズームを元に戻す</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="661"/>
+-        <source>Ctrl+0</source>
+-        <translation>Ctrl+0</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="666"/>
+-        <source>Move to Other View</source>
+-        <translation>他のビューに移動</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="671"/>
+-        <source>Clone to Other View</source>
+-        <translation>他のビューに複製</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="676"/>
+-        <source>Move to a New Window</source>
+-        <translation>新しいウィンドウに移動</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="681"/>
+-        <source>Open in a New Window</source>
+-        <translation>新しいウィンドウで開く</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="686"/>
+-        <source>&amp;Start Recording</source>
+-        <translation>録音開始&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="697"/>
+-        <source>&amp;Stop Recording</source>
+-        <translation>録音停止&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="708"/>
+-        <source>&amp;Playback</source>
+-        <translation>再生&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="719"/>
+-        <source>Save Currently Recorded Macro</source>
+-        <translation>現在記録されているマクロを保存する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="727"/>
+-        <source>Run a Macro Multiple Times...</source>
+-        <translation>マクロを複数回実行する...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="735"/>
+-        <source>Trim Trailing and save</source>
+-        <translation>後付けをトリムして保存</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="740"/>
+-        <source>Modify Shortcut/Delete Macro...</source>
+-        <translation>ショートカットを修正 / マクロを削除...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="745"/>
+-        <source>UPPERCASE</source>
+-        <translation>大文字</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="748"/>
+-        <source>Ctrl+Shift+U</source>
+-        <translation>Ctrl+Shift+U</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="753"/>
+-        <source>lowercase</source>
+-        <translation>小文字</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="756"/>
+-        <source>Ctrl+U</source>
+-        <translation>Ctrl+U</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="761"/>
+-        <source>Convert to UTF-8</source>
+-        <translation>UTF-8に変換</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="766"/>
+-        <source>Convert to UTF-16BE (UCS-2 Big Endian)</source>
+-        <translation>UTF-16BE (UCS-2 Big Endian)に変換</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="771"/>
+-        <source>Convert to UTF-16LE (UCS-2 Little Endian)</source>
+-        <translation>UTF-16LE (UCS-2 Little Endian)に変換</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="776"/>
+-        <source>Convert to UTF-8 without BOM</source>
+-        <translation>UTF-8に変換(BOMあり)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="781"/>
+-        <source>&amp;Run...</source>
+-        <translation>実行...&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="786"/>
+-        <source>Launch in Firefox</source>
+-        <translation>Firefoxで実行</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="791"/>
+-        <source>Launch in Chromium</source>
+-        <translation>Chromiumで実行</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="796"/>
+-        <source>Get PHP help</source>
+-        <translation>PHPのヘルプを所得</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="801"/>
+-        <source>Google Search</source>
+-        <translation>Google検索</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="806"/>
+-        <source>Wikipedia Search</source>
+-        <translation>Wikipedia検索</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="811"/>
+-        <source>Open file(s)</source>
+-        <translation>ファイルを開く(s)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="816"/>
+-        <source>Open file(s) in a new window</source>
+-        <translation>新しいウィンドウでファイルを開く(s)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="821"/>
+-        <source>Modify Shortcut / Delete Command...</source>
+-        <translation>ショートカットを修正 / コマンドを削除...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="826"/>
+-        <source>Preferences...</source>
+-        <translation>設定...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="831"/>
+-        <source>&amp;Find...</source>
+-        <translation>検索...&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="834"/>
+-        <source>Ctrl+F</source>
+-        <translation>Ctrl+F</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="839"/>
+-        <source>Find &amp;Next</source>
+-        <translation>次を検索 &amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="842"/>
+-        <source>F3</source>
+-        <translation>F3</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="847"/>
+-        <source>Find &amp;Previous</source>
+-        <translation>前を検索 &amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="850"/>
+-        <source>Shift+F3</source>
+-        <translation>Shift+F3</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="855"/>
+-        <source>Plain text</source>
+-        <translation>平文テキスト</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="860"/>
+-        <source>Replace...</source>
+-        <translation>置換...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="863"/>
+-        <source>Ctrl+H</source>
+-        <translation>Ctrl+H</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="868"/>
+-        <source>更新ファイルは次のように解釈されます...</source>
+-        <translation>...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="873"/>
+-        <source>Convert to...</source>
+-        <translation>変換...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="878"/>
+-        <source>Interpret as UTF-16BE (UCS-2 Big Endian)</source>
+-        <translation>UTF-16BE (UCS-2 Big Endian)として解釈する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="883"/>
+-        <source>Interpret as UTF-8 without BOM</source>
+-        <translation>UTF-8 BOMありとして解釈する</translation>
+-    </message>
+-    <message>
+-        <location filename="../uiBOM/mainwindow.ui" line="888"/>
+-        <source>Interpret as UTF-8</source>
+-        <translation>UTF-8として解釈する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="893"/>
+-        <source>Interpret as UTF-16LE (UCS-2 Little Endian)</source>
+-        <translation>UTF-16LE (UCS-2 Little Endian)として解釈する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="904"/>
+-        <source>Default settings</source>
+-        <translation>デフォルトの設定</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="912"/>
+-        <source>Custom...</source>
+-        <translation>カスタム...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="917"/>
+-        <source>Interpret as...</source>
+-        <translation>解釈...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="922"/>
+-        <source>Launch in Chrome</source>
+-        <translation>Chromeで実行</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="927"/>
+-        <source>Open a New Window</source>
+-        <translation>新しいウィンドウを開く</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="932"/>
+-        <source>Find in Files...</source>
+-        <translation>ファイル内を検索...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="935"/>
+-        <source>Ctrl+Shift+F</source>
+-        <translation>Ctrl+Shift+F</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="940"/>
+-        <source>Delete Current Line</source>
+-        <translation>現在の行を削除</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="943"/>
+-        <source>Delete the current line</source>
+-        <translation>現在の行を削除する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="946"/>
+-        <source>Ctrl+L</source>
+-        <translation>Ctrl+L</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="951"/>
+-        <source>Duplicate Current Line</source>
+-        <translation>現在の行を複製</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="954"/>
+-        <source>Duplicate the current line</source>
+-        <translation>現在の行を複製する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="957"/>
+-        <source>Ctrl+D</source>
+-        <translation>Ctrl+D</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="962"/>
+-        <source>Move Line Up</source>
+-        <translation>上へ行を移動</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="965"/>
+-        <source>Move the current line up</source>
+-        <translation>現在の行を上へ移動する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="968"/>
+-        <source>Ctrl+Shift+Up</source>
+-        <translation>Ctrl+Shift+Up</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="973"/>
+-        <source>Move Line Down</source>
+-        <translation>下へ行を移動</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="976"/>
+-        <source>Move the current line down</source>
+-        <translation>現在の行を下へ移動する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="979"/>
+-        <source>Ctrl+Shift+Down</source>
+-        <translation>Ctrl+Shift+Down</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="984"/>
+-        <location filename="../ui/mainwindow.ui" line="987"/>
+-        <source>Trim Trailing Space</source>
+-        <translation>トレーリングスペースのトリム</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="992"/>
+-        <location filename="../ui/mainwindow.ui" line="995"/>
+-        <source>Trim Leading Space</source>
+-        <translation>トレーリングスペースを取り除く</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="1000"/>
+-        <source>Trim Leading and Trailing Space</source>
+-        <translation>先頭と末尾のスペースを取り除く</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="1005"/>
+-        <source>EOL to Space</source>
+-        <translation>EOLを空白にする</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="1010"/>
+-        <source>TAB to Space</source>
+-        <translation>タブ文字を空白にする</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="1015"/>
+-        <source>Space to TAB (All)</source>
+-        <translation>空白をタブ文字にする (全て)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="1020"/>
+-        <source>Space to TAB (Leading)</source>
+-        <translation>空白をタブ文字にする (選択内容)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="1025"/>
+-        <source>Open Folder...</source>
+-        <translation>フォルダを開く...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="1030"/>
+-        <source>Go to line...</source>
+-        <translation>指定行へ移動...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="1033"/>
+-        <source>Ctrl+G</source>
+-        <translation>Ctrl+G</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="1038"/>
+-        <source>Install Extension...</source>
+-        <translation>拡張機能をインストール...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="1046"/>
+-        <source>Full Screen</source>
+-        <translation>フルスクリーン</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="1049"/>
+-        <source>F11</source>
+-        <translation>F11</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="1057"/>
+-        <location filename="../ui/mainwindow.ui" line="1060"/>
+-        <source>Show Spaces</source>
+-        <translation>空白を表示</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.ui" line="1071"/>
+-        <source>Enable Smart Indent</source>
+-        <translation>スマートインデントを有効にする</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="349"/>
+-        <location filename="../ui/mainwindow.cpp" line="633"/>
+-        <source>INS</source>
+-        <translation>INS</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="377"/>
+-        <source>Error while trying to save this session. Please ensure the following directory is accessible:</source>
+-        <translation>セッション保存の際にエラーが発生しました。次のディレクトリにアクセス可能であることをご確認ください。:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="631"/>
+-        <source>OVR</source>
+-        <translation>OVR</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="755"/>
+-        <source>Your changes to «%1» will be discarded.</source>
+-        <translation>«%1»への変更は破棄されます。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="756"/>
+-        <source>Reload</source>
+-        <translation>更新</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="794"/>
+-        <source>Open</source>
+-        <translation>開く</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="796"/>
+-        <source>All files (*)</source>
+-        <translation>すべてのファイル (*)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="814"/>
+-        <source>Open Folder</source>
+-        <translation>フォルダを開く</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="854"/>
+-        <source>Do you want to save changes to «%1»?</source>
+-        <translation>«%1»への変更を保存しますか?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="855"/>
+-        <source>Don&apos;t Save</source>
+-        <translation>保存しない</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="858"/>
+-        <source>Do you want to save changes to «%1» before closing?</source>
+-        <translation>閉じる前に«%1»への変更を保存しますか??</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="862"/>
+-        <source>If you don&apos;t save the changes you made, you&apos;ll lose them forever.</source>
+-        <translation>変更を保存しない場合、編集内容は失われます。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="962"/>
+-        <source>The file on disk has changed since the last read.
+-Do you want to save it anyway?</source>
+-        <translation>最後に開いてから、ファイルは変更されました。
+-とにかく保存しますか?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="965"/>
+-        <source>Saving the file might cause loss of external data.</source>
+-        <translation>ファイルを保存すると、外部データが失われる可能性があります。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="984"/>
+-        <source>Save as</source>
+-        <translation>名前をつけて保存</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="986"/>
+-        <source>Any file (*)</source>
+-        <translation>すべてのファイル (*)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="1151"/>
+-        <source>%1 chars, %2 lines</source>
+-        <translation>%1 文字, %2 行</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="1162"/>
+-        <source>Ln %1, col %2</source>
+-        <translation>行 %1, 文字 %2</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="1166"/>
+-        <source>Sel %1 (%2)</source>
+-        <translation>セル %1 (%2)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="1230"/>
+-        <source>Windows</source>
+-        <translation>Windows</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="1233"/>
+-        <source>UNIX / OS X</source>
+-        <translation>UNIX / OS X</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="1236"/>
+-        <source>Old Mac</source>
+-        <translation>Old Mac</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="1243"/>
+-        <source>%1 w/o BOM</source>
+-        <translation>%1 w/o BOM</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="1719"/>
+-        <source>No recent files</source>
+-        <translation>最近開いたファイルはありません</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="1883"/>
+-        <source>Convert to:</source>
+-        <translation>変換:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="1897"/>
+-        <source>Reload as:</source>
+-        <translation>更新する:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="1939"/>
+-        <source>Interpret as:</source>
+-        <translation>次のように解釈する:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="1954"/>
+-        <source>Run...</source>
+-        <translation>実行...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="1966"/>
+-        <source>Modify Run Commands</source>
+-        <translation>実行コマンドの変更</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="2246"/>
+-        <source>Extension</source>
+-        <translation>拡張機能</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="2291"/>
+-        <source>Open Session...</source>
+-        <translation>セッションを開く...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="2293"/>
+-        <location filename="../ui/mainwindow.cpp" line="2313"/>
+-        <source>Session file (*.xml);;Any file (*)</source>
+-        <translation>セッションファイル (*.xml);;すべてのファイル (*) </translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="2311"/>
+-        <source>Save Session as...</source>
+-        <translation>すべてのセッションを保存...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/mainwindow.cpp" line="2337"/>
+-        <source>Error while trying to save this session. Please try a different file name.</source>
+-        <translation>このセッションの保存中にエラーが発生しました。別のファイル名を入力してください。</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>NqqRun::RunDelegate</name>
+-    <message>
+-        <location filename="../ui/nqqrun.cpp" line="231"/>
+-        <source>Open File</source>
+-        <translation>ファイルを開く</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>NqqRun::RunDialog</name>
+-    <message>
+-        <location filename="../ui/nqqrun.cpp" line="263"/>
+-        <source>OK</source>
+-        <translation>OK</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/nqqrun.cpp" line="264"/>
+-        <source>Cancel</source>
+-        <translation>キャンセル</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/nqqrun.cpp" line="265"/>
+-        <source>Save...</source>
+-        <translation>保存</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/nqqrun.cpp" line="267"/>
+-        <source>    &lt;h3&gt;Special placeholders&lt;/h3&gt;&lt;ul&gt;    &lt;li&gt;&lt;em&gt;%fullpath%&lt;/em&gt; - Full path of the currently active file.&lt;/li&gt;    &lt;li&gt;&lt;em&gt;%directory%&lt;/em&gt; - Directory of the currently active file.&lt;/li&gt;    &lt;li&gt;&lt;em&gt;%filename%&lt;/em&gt; - Name of the currently active file.&lt;/li&gt;    &lt;li&gt;&lt;em&gt;%selection%&lt;/em&gt; - Currently selected text.&lt;/li&gt;    &lt;/ul&gt;</source>
+-        <translation>    &lt;h3&gt;Special placeholders&lt;/h3&gt;&lt;ul&gt;    &lt;li&gt;&lt;em&gt;%fullpath%&lt;/em&gt; - 現在アクティブなファイルの絶対パス。&lt;/li&gt;    &lt;li&gt;&lt;em&gt;%directory%&lt;/em&gt; - 現在アクティブなファイルのディレクトリ。&lt;/li&gt;    &lt;li&gt;&lt;em&gt;%filename%&lt;/em&gt; - 現在アクティブなファイルの名前。&lt;/li&gt;    &lt;li&gt;&lt;em&gt;%selection%&lt;/em&gt; - 選択中のテキスト。&lt;/li&gt;    &lt;/ul&gt;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/nqqrun.cpp" line="312"/>
+-        <source>Choose the name to be displayed in the run menu.</source>
+-        <translation>実行メニューに表示する名前を選択します。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/nqqrun.cpp" line="313"/>
+-        <source>Command Name:</source>
+-        <translation>コマンド名:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/nqqrun.cpp" line="322"/>
+-        <source>Command saved...</source>
+-        <translation>コマンドを保存...</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>NqqRun::RunPreferences</name>
+-    <message>
+-        <location filename="../ui/nqqrun.cpp" line="26"/>
+-        <source>OK</source>
+-        <translation>OK</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/nqqrun.cpp" line="27"/>
+-        <source>Cancel</source>
+-        <translation>キャンセル</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/nqqrun.cpp" line="31"/>
+-        <source>    &lt;h3&gt;Special placeholders&lt;/h3&gt;&lt;ul&gt;    &lt;li&gt;&lt;em&gt;%fullpath%&lt;/em&gt; - 現在アクティブなファイルの絶対パス。&lt;/li&gt;    &lt;li&gt;&lt;em&gt;%directory%&lt;/em&gt; - Directory of the currently active file.&lt;/li&gt;    &lt;li&gt;&lt;em&gt;%filename%&lt;/em&gt; - 現在アクティブなファイルの名前。&lt;/li&gt;    &lt;li&gt;&lt;em&gt;%selection%&lt;/em&gt; - Currently selected text.&lt;/li&gt;    &lt;/ul&gt;</source>
+-        <translation>    &lt;h3&gt;Special placeholders&lt;/h3&gt;&lt;ul&gt;    &lt;li&gt;&lt;em&gt;%fullpath%&lt;/em&gt; - 現在アクティブなファイルの絶対パス。&lt;/li&gt;    &lt;li&gt;&lt;em&gt;%directory%&lt;/em&gt; - Directory of the currently active file.&lt;/li&gt;    &lt;li&gt;&lt;em&gt;%filename%&lt;/em&gt; - 現在アクティブなファイルの名前。&lt;/li&gt;    &lt;li&gt;&lt;em&gt;%selection%&lt;/em&gt; - 選択中のテキスト。&lt;/li&gt;    &lt;/ul&gt;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/nqqrun.cpp" line="67"/>
+-        <source>Text</source>
+-        <translation>テキスト</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/nqqrun.cpp" line="67"/>
+-        <source>Command</source>
+-        <translation>コマンド</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>QObject</name>
+-    <message>
+-        <location filename="../ui/notepadqq.cpp" line="17"/>
+-        <source>Copyright © 2010-%1, Daniele Di Sarli</source>
+-        <translation>Copyright © 2010-%1, Daniele Di Sarli</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/notepadqq.cpp" line="81"/>
+-        <source>Open a new window in an existing instance of %1.</source>
+-        <translation>%1の既存のインスタンスで新しいウィンドウを開きます。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/notepadqq.cpp" line="86"/>
+-        <source>Files to open.</source>
+-        <translation>開くファイル</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/notepadqq.cpp" line="113"/>
+-        <source>You are using an old version of Qt (%1)</source>
+-        <translation>Qt (%1)の古いバージョンを使用しています。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/notepadqq.cpp" line="115"/>
+-        <source>Notepadqq will try to do its best, but &lt;b&gt;some things will not work properly&lt;/b&gt;.</source>
+-        <translation>Notepadqqは最善を尽くしますが、&lt;b&gt;いくつの動作は正常に機能しません。&lt;/b&gt;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/notepadqq.cpp" line="116"/>
+-        <source>Install a newer Qt version (&amp;ge; %1) from the official repositories of your distribution.&lt;br&gt;&lt;br&gt;If it&apos;s not available, download Qt (&amp;ge; %1) from %2 and install it to &quot;%3&quot; or to &quot;%4&quot;.</source>
+-        <translation>新しいバージョンの Qt (&amp;ge; %1) を、公式リポジストリからあなたのディストリビューションにインストールしてください。&lt;br&gt;&lt;br&gt;もしも利用できない場合は、%2から&apos;Qt (&amp;ge; %1) をダウンロードして新しいバージョンにし、それを&quot;%3&quot; にインストール、または &quot;%4&quot;に変更もできます。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/notepadqq.cpp" line="130"/>
+-        <source>Don&apos;t show me this warning again</source>
+-        <translation>この項目を二度と表示しない</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.cpp" line="381"/>
+-        <source>Restart required</source>
+-        <translation>再起動が必要です</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.cpp" line="382"/>
+-        <source>You need to restart Notepadqq for the localization changes to take effect.</source>
+-        <translation>表示言語の設定を有効にするには、Notepadqqを再起動する必要があります。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Sessions/sessions.cpp" line="126"/>
+-        <source>Error reading session file</source>
+-        <translation>セッションファイルを読み込み時にエラーが発生しました。</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>ReplaceInFilesWorker</name>
+-    <message>
+-        <location filename="../ui/Search/replaceinfilesworker.cpp" line="40"/>
+-        <source>Error reading %1</source>
+-        <translation>%1を読み込み時にエラーが発生しました。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/replaceinfilesworker.cpp" line="84"/>
+-        <source>Error writing %1</source>
+-        <translation>%1を書き込む際にエラーが発生しました。</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>SearchInFilesWorker</name>
+-    <message>
+-        <location filename="../ui/Search/searchinfilesworker.cpp" line="66"/>
+-        <source>Error reading %1</source>
+-        <translation>%1を読み込み時にエラーが発生しました。</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>dlgSearching</name>
+-    <message>
+-        <location filename="../ui/Search/dlgsearching.ui" line="17"/>
+-        <source>Dialog</source>
+-        <translation>ダイアログг</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/dlgsearching.ui" line="77"/>
+-        <source>&amp;Cancel</source>
+-        <translation>キャンセル&amp;</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>frmAbout</name>
+-    <message>
+-        <location filename="../ui/frmabout.ui" line="17"/>
+-        <source>Notepadqq</source>
+-        <translation>Notepadqq</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmabout.ui" line="39"/>
+-        <source>Close</source>
+-        <translation>Закрыть</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmabout.ui" line="108"/>
+-        <source>License</source>
+-        <translation>ライセンス</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmabout.cpp" line="23"/>
+-        <source>Contributors:</source>
+-        <translation>協力者:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmabout.cpp" line="23"/>
+-        <source>GitHub Contributors</source>
+-        <translation>Githubの協力者</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>frmEncodingChooser</name>
+-    <message>
+-        <location filename="../ui/frmencodingchooser.ui" line="17"/>
+-        <source>Encoding</source>
+-        <translation>エンコーディング</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmencodingchooser.ui" line="30"/>
+-        <source>Encoding:</source>
+-        <translation>エンコーディング:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>frmIndentationMode</name>
+-    <message>
+-        <location filename="../ui/frmindentationmode.ui" line="14"/>
+-        <source>Indentation</source>
+-        <translation>インデント</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmindentationmode.ui" line="26"/>
+-        <source>Tabs</source>
+-        <translation>タブ文字</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmindentationmode.ui" line="36"/>
+-        <source>Spaces</source>
+-        <translation>空白</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmindentationmode.ui" line="60"/>
+-        <source>Indentation width:</source>
+-        <translation>インデントの幅:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>frmLineNumberChooser</name>
+-    <message>
+-        <location filename="../ui/frmlinenumberchooser.ui" line="14"/>
+-        <location filename="../ui/frmlinenumberchooser.ui" line="24"/>
+-        <source>Go to line</source>
+-        <translation>指定行へ移動</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmlinenumberchooser.ui" line="53"/>
+-        <source>Line number:</source>
+-        <translation>行番号:</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>frmPreferences</name>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="14"/>
+-        <source>Preferences</source>
+-        <translation>設定</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="51"/>
+-        <source>1</source>
+-        <translation>1</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="56"/>
+-        <source>General</source>
+-        <translation>一般</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="61"/>
+-        <source>Appearance</source>
+-        <translation>外観</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="66"/>
+-        <source>Languages</source>
+-        <translation>言語</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="71"/>
+-        <source>Search</source>
+-        <translation>検索</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="76"/>
+-        <source>Shortcuts</source>
+-        <translation>ショートカット</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="81"/>
+-        <source>Extensions</source>
+-        <translation>拡張機能</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="105"/>
+-        <source>Check Qt version at startup</source>
+-        <translation>Qtのバージョンを起動時に確認する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="112"/>
+-        <source>Warn when the indentation doesn&apos;t match the settings</source>
+-        <translation>インデントと設定が一致しない時に警告する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="119"/>
+-        <source>Remember open tabs when closing Notepadqq</source>
+-        <translation>Notepadqqを閉じる際に、開いているタブを記憶する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="128"/>
+-        <source>Localization:</source>
+-        <translation>表示言語:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="185"/>
+-        <source>Color scheme:</source>
+-        <translation>カラー設定:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="217"/>
+-        <source>Override Font Family</source>
+-        <translation>フォントファミリーを上書きする</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="240"/>
+-        <source>Override Font Size</source>
+-        <translation>フォントサイズを上書きする</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="269"/>
+-        <source>Override Line Height</source>
+-        <translation>行感覚を上書きする</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="285"/>
+-        <source>em</source>
+-        <translation type="unfinished"></translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="306"/>
+-        <source>Preview</source>
+-        <translation>プレビュー</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="389"/>
+-        <source>Tab size:</source>
+-        <translation>タブの大きさ:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="402"/>
+-        <source>Use spaces instead of tabs</source>
+-        <translation>タブの代わりにスペースを使用する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="426"/>
+-        <source>Use default settings</source>
+-        <translation>デフォルト設定を使用する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="462"/>
+-        <source>Search as I type</source>
+-        <translation>入力時に検索</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="517"/>
+-        <source>Node.js runtime</source>
+-        <translation>Node.jsランタイム</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="523"/>
+-        <source>Supported Node versions: 0.10, 0.11, 0.12</source>
+-        <translation>サポートされているNodeのバージョン: 0.10, 0.11, 0.12</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="530"/>
+-        <source>Node.js path:</source>
+-        <translation>Node.jsパス:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="542"/>
+-        <location filename="../ui/frmpreferences.ui" line="563"/>
+-        <source>Browse...</source>
+-        <translation>参照...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="551"/>
+-        <source>NPM path:</source>
+-        <translation>NPMパス:</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.ui" line="572"/>
+-        <source>WARNING: support for extensions is EXPERIMENTAL.</source>
+-        <translation>警告: 拡張機能のサポートは実験的なものです。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.cpp" line="109"/>
+-        <source>Keyboard shortcut conflict</source>
+-        <translation>キーボードショートカットの競合</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.cpp" line="110"/>
+-        <source>Two or more actions share the same shortcut. These conflicts must be resolved before your changes can be saved.</source>
+-        <translation>2つ以上のアクションが同じショートカットに割り当てられています。これらの競合は、変更を保存する前に解決する必要があります。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/frmpreferences.cpp" line="388"/>
+-        <source>Browse</source>
+-        <translation>参照</translation>
+-    </message>
+-</context>
+-<context>
+-    <name>frmSearchReplace</name>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="14"/>
+-        <source>Search</source>
+-        <translation>検索</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="50"/>
+-        <source>Find</source>
+-        <translation>探す</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="63"/>
+-        <source>Replace with</source>
+-        <translation>置換する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="76"/>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="572"/>
+-        <source>Look in</source>
+-        <translation>覗く</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="89"/>
+-        <source>Filter</source>
+-        <translation>フィルター</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="150"/>
+-        <source>...</source>
+-        <translation>...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="195"/>
+-        <source>Include subdirectories</source>
+-        <translation>サブディレクトリを含める</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="202"/>
+-        <source>Show advanced options</source>
+-        <translation>高度なオプションを表示</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="209"/>
+-        <source>Advanced</source>
+-        <translation>高度</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="215"/>
+-        <source>Search plain text</source>
+-        <translation>平文テキストを検索</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="241"/>
+-        <source>Match whole word only</source>
+-        <translation>単語全体にのみマッチ</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="248"/>
+-        <source>Match case</source>
+-        <translation>マッチケース</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="255"/>
+-        <source>Search with special characters (\n, \r, \t, \0, \u..., \x...)</source>
+-        <translation>特殊文字で検索 (\n, \r, \t, \0, \u..., \x...)</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="262"/>
+-        <source>Search with regular expressions</source>
+-        <translation>正規表現で検索する</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="290"/>
+-        <source>Find ⇩</source>
+-        <translation>検索 ⇩</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="300"/>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="432"/>
+-        <source>Select all</source>
+-        <translation>すべて選択</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="310"/>
+-        <source>Replace ⇧</source>
+-        <translation>置換 ⇧</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="320"/>
+-        <source>Replace ⇩</source>
+-        <translation>置換 ⇩</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="330"/>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="383"/>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="420"/>
+-        <source>Replace all</source>
+-        <translation>全て置換</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="347"/>
+-        <source>Find all</source>
+-        <translation>すべて検索</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="357"/>
+-        <source>Find ⇧</source>
+-        <translation>検索 ⇧</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="396"/>
+-        <source>Toolbar</source>
+-        <translation>ツールバー</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="430"/>
+-        <source>&amp;Replace</source>
+-        <translation>置換&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="438"/>
+-        <source>&amp;Find</source>
+-        <translation>検索&amp;</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="446"/>
+-        <location filename="../ui/Search/frmsearchreplace.ui" line="449"/>
+-        <source>Find in files</source>
+-        <translation>ファイル内を検索</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="306"/>
+-        <source>Searching...</source>
+-        <translation>検索中...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="214"/>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="244"/>
+-        <source>Error</source>
+-        <translation>エラー</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="232"/>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="236"/>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="285"/>
+-        <source>Replace in files</source>
+-        <translation>ファイル内を置換</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="286"/>
+-        <source>Are you sure you want to replace all occurrences in %1 for file types %2?</source>
+-        <translation>ファイルタイプ%2に対して、本当に%1の一致した語句を置換しますか?</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="266"/>
+-        <source>Replacing...</source>
+-        <translation>置換中...</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="233"/>
+-        <source>%1 occurrences replaced in %2 files.</source>
+-        <translation>%2ファイルで%1個の一致した語句が置き換えられました。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="237"/>
+-        <source>%1 occurrences replaced in %2 files, but the replacement has been canceled before it could finish.</source>
+-        <translation>ファイル%2で%1件の一致した語句が置き換えられましたが、置換が完了する前にキャンセルされました。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="253"/>
+-        <source>Replacing in </source>
+-        <translation>置換中</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="255"/>
+-        <source>Searching in </source>
+-        <translation>検索中</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="420"/>
+-        <source>%1 occurrences have been replaced.</source>
+-        <translation>%1件の一致した語句が置換されました。</translation>
+-    </message>
+-    <message>
+-        <location filename="../ui/Search/frmsearchreplace.cpp" line="432"/>
+-        <source>No results found</source>
+-        <translation>何も見つかりませんでした。</translation>
+-    </message>
+-</context>
+-</TS>
+


--- a/srcpkgs_save/@notepadqq/patches/02.notepadqq_ja.ts.patch  1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@notepadqq/patches/02.notepadqq_ja.ts.patch  2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,2367 @@
+--- a/src/translations/notepadqq_ja.ts 1970-01-01 09:00:00.000000000 +0900
++++ b/src/translations/notepadqq_ja.ts 2025-12-09 04:37:44.759165255 +0900
+@@ -0,0 +1,2363 @@
++<?xml version="1.0" encoding="utf-8"?>
++<!DOCTYPE TS>
++<TS version="2.1" language="ja_JP">
++<context>
++    <name>AdvancedSearchDock</name>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="162"/>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="649"/>
++        <source>Advanced Search</source>
++        <translation>高度な検索</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="167"/>
++        <source>Clear Search History</source>
++        <translation>検索履歴をクリア</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="176"/>
++        <source>Go To Previous Result (Shift+F4)</source>
++        <translation>前の結果に移動 (Shift+F4)</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="181"/>
++        <source>Go To Next Result (F4)</source>
++        <translation>次の結果に移動 (F4)</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="185"/>
++        <source>Expand/Collapse All</source>
++        <translation>すべて展開/すべて折りたたむ</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="187"/>
++        <source>Redo Search</source>
++        <translation>検索をやり直し</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="188"/>
++        <source>Copy Selected Contents To Clipboard</source>
++        <translation>選択したコンテンツをクリップボードにコピー</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="189"/>
++        <source>Show Full Lines</source>
++        <translation>実線を表示</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="191"/>
++        <source>Remove This Search</source>
++        <translation>この検索を削除</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="196"/>
++        <source>More Options</source>
++        <translation>その他のオプション</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="201"/>
++        <source>Replace Options</source>
++        <translation>置換オプション</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="227"/>
++        <source>Dock/Undock this panel</source>
++        <translation>このパネルをドッキング/ドッキング解除</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="253"/>
++        <source>Replace Text</source>
++        <translation>テキストの置換</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="261"/>
++        <source>Replace Selected</source>
++        <translation>選択したものを置換</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="262"/>
++        <source>Replace all selected search results.</source>
++        <translation>選択したすべての検索結果を置換</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="264"/>
++        <source>Use Special Characters (&apos;\n&apos;, &apos;\t&apos;, ...)</source>
++        <translation>特殊文字(「\n」、「\t」、など)を使う</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="265"/>
++        <source>Replace strings like &apos;\n&apos; with their respective special characters.</source>
++        <translation>「\n」のような文字列をそれぞれの特殊文字に置換</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="301"/>
++        <source>Search String</source>
++        <translation>検索する文字列</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="308"/>
++        <source>Search in Current Document</source>
++        <translation>現在のドキュメント内を検索</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="309"/>
++        <source>Search in All Open Documents</source>
++        <translation>開いているすべてのドキュメントを検索</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="310"/>
++        <source>Search in Files on File System</source>
++        <translation>ファイル システム上のファイルを検索</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="325"/>
++        <source>Directory</source>
++        <translation>ディレクトリ</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="334"/>
++        <source>Select Directory of active Document</source>
++        <translation>アクティブなドキュメントのディレクトリを選択</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="338"/>
++        <source>Select Search Directory</source>
++        <translation>検索するディレクトリを選択</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="345"/>
++        <source>Search</source>
++        <translation>検索</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="348"/>
++        <source>Scope:</source>
++        <translation>範囲:</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="350"/>
++        <source>Search:</source>
++        <translation>検索:</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="352"/>
++        <source>Pattern:</source>
++        <translation>パターン:</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="354"/>
++        <source>Location:</source>
++        <translation>位置:</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="357"/>
++        <source>Match Case</source>
++        <translation>大文字と小文字を区別</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="358"/>
++        <source>Match Whole Words Only</source>
++        <translation>単語全体が一致</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="359"/>
++        <source>Use Regular Expressions</source>
++        <translation>正規表現を使う</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="360"/>
++        <source>Use Special Characters (&apos;\t&apos;, &apos;\n&apos;, ...)</source>
++        <translation>特殊文字(「\t」、「\n」、など) を使う</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="361"/>
++        <source>If set, character sequences like &apos;\t&apos; will be replaced by their respective special characters.</source>
++        <translation>設定すると、「\t」のような文字列はそれぞれの特殊文字に置換されます。</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="362"/>
++        <source>Include Subdirectories</source>
++        <translation>サブディレクトリを含めます</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="423"/>
++        <source>&lt;h3&gt;One or more searches are still in progress&lt;/h3&gt;</source>
++        <translation>&lt;h3&gt;1つ以上の検索がまだ進行中です&lt;/h3&gt;</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="424"/>
++        <source>All searches will be canceled and their results discarded if you continue.</source>
++        <translation>続行するとすべての検索がキャンセルされ、結果は破棄されます。</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="438"/>
++        <source>New Search</source>
++        <translation>新しい検索</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="740"/>
++        <source>Search in progress</source>
++        <translation>検索中</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="741"/>
++        <source>&lt;h3&gt;This search is still in progress.&lt;/h3&gt; The search will be canceled and all results discarded if you continue.</source>
++        <translation>&lt;h3&gt;この検索はまだ進行中です。&lt;/h3&gt; 続行すると検索はキャンセルされ、すべての結果が破棄されます。</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="852"/>
++        <source>Error</source>
++        <translation>エラー</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="853"/>
++        <source>Specified directory does not exist.</source>
++        <translation>指定されたディレクトリは存在しません。</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="883"/>
++        <source>Matches in %1 of %2 files replaced.</source>
++        <translation>%2 ファイルで %1 個の一致が置換されました。</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="891"/>
++        <source>&lt;h3&gt;Replacing selected matches...&lt;/h3&gt;</source>
++        <translation>&lt;h3&gt;選択した一致を置換しています...&lt;/h3&gt;</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="892"/>
++        <source>Replacing in progress</source>
++        <translation>置換中</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="904"/>
++        <source>Replacing was unsuccessful for %1 file(s):
++</source>
++        <translation>%1 ファイルの置換に失敗しました:</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="910"/>
++        <source>And %1 more.</source>
++        <translation>さらに %1 個。</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="913"/>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="916"/>
++        <source>Replacement Results</source>
++        <translation>置換の結果</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="917"/>
++        <source>All selected matches successfully replaced.</source>
++        <translation>選択したすべての一致が正常に置換されました。</translation>
++    </message>
++</context>
++<context>
++    <name>BannerFileChanged</name>
++    <message>
++        <location filename="../ui/EditorNS/bannerfilechanged.cpp" line="13"/>
++        <source>This file has been changed outside of Notepadqq.</source>
++        <translation>このファイルは Notepadqq の外部で変更されました。</translation>
++    </message>
++    <message>
++        <location filename="../ui/EditorNS/bannerfilechanged.cpp" line="15"/>
++        <source>Reload</source>
++        <translation>再ロード</translation>
++    </message>
++    <message>
++        <location filename="../ui/EditorNS/bannerfilechanged.cpp" line="18"/>
++        <source>Ignore</source>
++        <translation>無視</translation>
++    </message>
++</context>
++<context>
++    <name>BannerFileRemoved</name>
++    <message>
++        <location filename="../ui/EditorNS/bannerfileremoved.cpp" line="13"/>
++        <source>This file has been deleted from the file system.</source>
++        <translation>このファイルはファイル システムから削除されました。</translation>
++    </message>
++    <message>
++        <location filename="../ui/EditorNS/bannerfileremoved.cpp" line="15"/>
++        <source>Save</source>
++        <translation>保存</translation>
++    </message>
++    <message>
++        <location filename="../ui/EditorNS/bannerfileremoved.cpp" line="18"/>
++        <source>Ignore</source>
++        <translation>無視</translation>
++    </message>
++</context>
++<context>
++    <name>BannerIndentationDetected</name>
++    <message>
++        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="18"/>
++        <source>This file is indented with %1, but your current settings specify to use %2.</source>
++        <translation>このファイルは %1 でインデントされていますが、現在の設定では %2 を使用するように指定されています。</translation>
++    </message>
++    <message>
++        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="20"/>
++        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="25"/>
++        <source>spaces</source>
++        <translation>スペース</translation>
++    </message>
++    <message>
++        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="20"/>
++        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="25"/>
++        <source>tabs</source>
++        <translation>タブ</translation>
++    </message>
++    <message>
++        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="22"/>
++        <source>Use spaces</source>
++        <translation>スペースを使う</translation>
++    </message>
++    <message>
++        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="27"/>
++        <source>Use tabs</source>
++        <translation>タブを使う</translation>
++    </message>
++    <message>
++        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="31"/>
++        <source>This file is indented with %1 spaces, but your current settings specify to use %2 spaces.</source>
++        <translation>このファイルは %1 個のスペースでインデント(字下げ)されていますが、現在の設定では %2 個のスペースを使用するように指定されています。</translation>
++    </message>
++    <message>
++        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="34"/>
++        <source>Use %1 spaces</source>
++        <translation>%1 個のスペースを使う</translation>
++    </message>
++    <message>
++        <location filename="../ui/EditorNS/bannerindentationdetected.cpp" line="38"/>
++        <source>Ignore</source>
++        <translation>無視</translation>
++    </message>
++</context>
++<context>
++    <name>DocEngine</name>
++    <message>
++        <location filename="../ui/docengine.cpp" line="38"/>
++        <source>new %1</source>
++        <translation>新規 %1</translation>
++    </message>
++    <message>
++        <location filename="../ui/docengine.cpp" line="164"/>
++        <location filename="../ui/docengine.cpp" line="566"/>
++        <source>Protocol not supported for file &quot;%1&quot;.</source>
++        <translation>プロトコルはファイル「%1」ではサポートされていません。</translation>
++    </message>
++    <message>
++        <location filename="../ui/docengine.cpp" line="247"/>
++        <source>Error trying to open &quot;%1&quot;</source>
++        <translation>「%1」を開こうとしたときにエラーが発生しました</translation>
++    </message>
++    <message>
++        <location filename="../ui/docengine.cpp" line="480"/>
++        <source>Notepadqq asks permission to overwrite the following file:
++
++%1</source>
++        <translation>Notepadqq は、次のファイルを上書きする許可を求めます。
++
++%1</translation>
++    </message>
++    <message>
++        <location filename="../ui/docengine.cpp" line="516"/>
++        <source>Error trying to write to &quot;%1&quot;</source>
++        <translation>「%1」への書き込み中にエラーが発生しました</translation>
++    </message>
++    <message>
++        <location filename="../ui/docengine.cpp" line="518"/>
++        <source>Abort</source>
++        <translation>中止</translation>
++    </message>
++    <message>
++        <location filename="../ui/docengine.cpp" line="519"/>
++        <source>Retry</source>
++        <translation>再試行</translation>
++    </message>
++    <message>
++        <location filename="../ui/docengine.cpp" line="521"/>
++        <source>Retry as Root</source>
++        <translation>ルートとして再試行</translation>
++    </message>
++</context>
++<context>
++    <name>Extension</name>
++    <message>
++        <location filename="../ui/Extensions/extension.cpp" line="22"/>
++        <source>name missing or invalid</source>
++        <translation>名前が見つからないか無効です</translation>
++    </message>
++    <message>
++        <location filename="../ui/Extensions/extension.cpp" line="50"/>
++        <source>unable to read nqq-manifest.json</source>
++        <translation>nqq-manifest.json を読み取れません</translation>
++    </message>
++    <message>
++        <location filename="../ui/Extensions/extension.cpp" line="97"/>
++        <source>failed to start. Check your runtime: %1</source>
++        <translation>起動に失敗しました。ランタイムを確認してください: %1</translation>
++    </message>
++    <message>
++        <location filename="../ui/Extensions/extension.cpp" line="106"/>
++        <source>Failed to load %1: %2</source>
++        <translation>%1のロードに失敗しました: %2</translation>
++    </message>
++</context>
++<context>
++    <name>Extensions::InstallExtension</name>
++    <message>
++        <location filename="../ui/Extensions/installextension.cpp" line="178"/>
++        <source>Error</source>
++        <translation>エラー</translation>
++    </message>
++    <message>
++        <location filename="../ui/Extensions/installextension.cpp" line="178"/>
++        <source>Unsupported runtime: %1</source>
++        <translation>サポートされていないランタイム: %1</translation>
++    </message>
++</context>
++<context>
++    <name>InstallExtension</name>
++    <message>
++        <location filename="../ui/Extensions/installextension.ui" line="14"/>
++        <source>Install Extension</source>
++        <translation>拡張機能をインストール</translation>
++    </message>
++    <message>
++        <location filename="../ui/Extensions/installextension.ui" line="102"/>
++        <source>Cancel</source>
++        <translation>キャンセル</translation>
++    </message>
++    <message>
++        <location filename="../ui/Extensions/installextension.ui" line="109"/>
++        <source>Install</source>
++        <translation>インストール</translation>
++    </message>
++    <message>
++        <location filename="../ui/Extensions/installextension.cpp" line="43"/>
++        <source>Version %1, %2</source>
++        <translation>バージョン %1、%2</translation>
++    </message>
++    <message>
++        <location filename="../ui/Extensions/installextension.cpp" line="44"/>
++        <location filename="../ui/Extensions/installextension.cpp" line="53"/>
++        <source>unknown version</source>
++        <translation>不明なバージョン</translation>
++    </message>
++    <message>
++        <location filename="../ui/Extensions/installextension.cpp" line="45"/>
++        <source>unknown author</source>
++        <translation>作者不明</translation>
++    </message>
++    <message>
++        <location filename="../ui/Extensions/installextension.cpp" line="55"/>
++        <source>(current version is %1)</source>
++        <translation>(現在のバージョンは %1)</translation>
++    </message>
++    <message>
++        <location filename="../ui/Extensions/installextension.cpp" line="56"/>
++        <source>Update</source>
++        <translation>アップデート</translation>
++    </message>
++    <message>
++        <location filename="../ui/Extensions/installextension.cpp" line="105"/>
++        <location filename="../ui/Extensions/installextension.cpp" line="127"/>
++        <source>Error installing the extension</source>
++        <translation>拡張機能のインストール中にエラーが発生しました</translation>
++    </message>
++    <message>
++        <location filename="../ui/Extensions/installextension.cpp" line="116"/>
++        <source>Extension installed</source>
++        <translation>拡張機能がインストールされました</translation>
++    </message>
++    <message>
++        <location filename="../ui/Extensions/installextension.cpp" line="117"/>
++        <source>The extension has been successfully installed!</source>
++        <translation>拡張機能は正常にインストールされました!</translation>
++    </message>
++</context>
++<context>
++    <name>KeyGrabber</name>
++    <message>
++        <location filename="../ui/keygrabber.cpp" line="9"/>
++        <source>Action</source>
++        <translation>アクション</translation>
++    </message>
++    <message>
++        <location filename="../ui/keygrabber.cpp" line="9"/>
++        <source>Keyboard Shortcut</source>
++        <translation>キーボードショートカット</translation>
++    </message>
++</context>
++<context>
++    <name>MainWindow</name>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="14"/>
++        <source>Notepadqq</source>
++        <translation>Notepadqq</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="53"/>
++        <source>&amp;File</source>
++        <translation>ファイル(&amp;F)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="57"/>
++        <source>Recent Files</source>
++        <translation>最近使用したファイル</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="84"/>
++        <source>&amp;Edit</source>
++        <translation>編集(&amp;E)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="88"/>
++        <source>&amp;End of line</source>
++        <translation>行末の形式(&amp;E)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="96"/>
++        <source>C&amp;opy to Clipboard</source>
++        <translation>クリップボードにコピー(&amp;o)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="104"/>
++        <source>Co&amp;nvert Case to</source>
++        <translation>大文字と小文字を変換(&amp;n)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="111"/>
++        <source>&amp;Indentation</source>
++        <translation>インデント(&amp;I)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="120"/>
++        <source>&amp;Line Operations</source>
++        <translation>行の操作(&amp;L)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="129"/>
++        <source>&amp;Blank Operations</source>
++        <translation>空白の操作(&amp;B)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="158"/>
++        <source>&amp;Search</source>
++        <translation>検索(&amp;S)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="171"/>
++        <source>&amp;View</source>
++        <translation>ビュー(&amp;V)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="175"/>
++        <source>&amp;Show Symbol</source>
++        <translation>記号を表示(&amp;S)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="187"/>
++        <source>&amp;Zoom</source>
++        <translation>拡大・縮小(&amp;Z)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="195"/>
++        <source>&amp;Move/Clone Current Document</source>
++        <translation>現在のドキュメントの移動/複製(&amp;M)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="214"/>
++        <source>En&amp;coding</source>
++        <translation>エンコード(&amp;c)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="232"/>
++        <source>&amp;Language</source>
++        <translation>言語(&amp;L)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="239"/>
++        <source>Settin&amp;gs</source>
++        <translation>設定(&amp;g)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="248"/>
++        <source>&amp;?</source>
++        <translation>ヘルプ(&amp;?)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="255"/>
++        <source>&amp;Run</source>
++        <translation>実行(&amp;R)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="262"/>
++        <source>&amp;Window</source>
++        <translation>ウィンドウ(&amp;W)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="268"/>
++        <source>E&amp;xtensions</source>
++        <translation>拡張機能(&amp;x)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="288"/>
++        <source>&amp;Open...</source>
++        <translation>開く...(&amp;O)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="291"/>
++        <source>Ctrl+O</source>
++        <translation>Ctrl+O</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="296"/>
++        <source>&amp;New</source>
++        <translation>新規(&amp;N)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="299"/>
++        <source>Ctrl+N</source>
++        <translation>Ctrl+N</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="304"/>
++        <source>&amp;Reload from Disk</source>
++        <translation>ディスクから再ロード(&amp;R)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="309"/>
++        <source>&amp;Save</source>
++        <translation>保存(&amp;S)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="312"/>
++        <source>Ctrl+S</source>
++        <translation>Ctrl+S</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="317"/>
++        <source>Save &amp;As...</source>
++        <translation>名前を付けて保存(&amp;A)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="320"/>
++        <source>Save As...</source>
++        <translation>名前を付けて保存...</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="323"/>
++        <source>Ctrl+Alt+S</source>
++        <translation>Ctrl+Alt+S</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="328"/>
++        <source>Sa&amp;ve a Copy As...</source>
++        <translation>コピーに名前を付けて保存(&amp;v)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="333"/>
++        <source>Sav&amp;e All</source>
++        <translation>すべて保存(&amp;e)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="336"/>
++        <source>Ctrl+Shift+S</source>
++        <translation>Ctrl+Shift+S</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="341"/>
++        <source>Rena&amp;me...</source>
++        <translation>名前を変更...(&amp;m)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="346"/>
++        <source>&amp;Close</source>
++        <translation>閉じる(&amp;C)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="349"/>
++        <source>Ctrl+W</source>
++        <translation>Ctrl+W</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="354"/>
++        <source>C&amp;lose All</source>
++        <translation>すべて閉じる(&amp;l)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="359"/>
++        <source>Close All &amp;BUT Current Document</source>
++        <translation>現在のドキュメントをすべて閉じる(&amp;B)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="364"/>
++        <source>Load Session...</source>
++        <translation>セッションをロード...</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="369"/>
++        <source>Save Session...</source>
++        <translation>セッションを保存...</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="377"/>
++        <source>&amp;Print...</source>
++        <translation>印刷...(&amp;P)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="380"/>
++        <source>Ctrl+P</source>
++        <translation>Ctrl+P</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="391"/>
++        <source>Pr&amp;int Now</source>
++        <translation>今すぐ印刷(&amp;i)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="399"/>
++        <source>Open All Recent Files</source>
++        <translation>最近使用したファイルをすべて開く</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="404"/>
++        <source>Empty Recent Files List</source>
++        <translation>最近使用したファイルの一覧を削除</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="409"/>
++        <source>E&amp;xit</source>
++        <translation>終了(&amp;x)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="412"/>
++        <source>Alt+F4</source>
++        <translation>Alt+F4</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="417"/>
++        <source>&amp;Undo</source>
++        <translation>元に戻す(&amp;U)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="420"/>
++        <source>Ctrl+Z</source>
++        <translation>Ctrl+Z</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="425"/>
++        <source>&amp;Redo</source>
++        <translation>やり直し(&amp;R)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="428"/>
++        <source>Ctrl+Y</source>
++        <translation>Ctrl+Y</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="433"/>
++        <source>Cu&amp;t</source>
++        <translation>切取り(&amp;t)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="436"/>
++        <source>Ctrl+X</source>
++        <translation>Ctrl+X</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="441"/>
++        <source>&amp;Copy</source>
++        <translation>コピー(&amp;C)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="444"/>
++        <source>Ctrl+C</source>
++        <translation>Ctrl+C</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="449"/>
++        <source>&amp;Paste</source>
++        <translation>貼付け(&amp;P)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="452"/>
++        <source>Ctrl+V</source>
++        <translation>Ctrl+V</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="457"/>
++        <source>&amp;Delete</source>
++        <translation>削除(&amp;D)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="460"/>
++        <source>Del</source>
++        <translation>Del</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="465"/>
++        <source>Select &amp;All</source>
++        <translation>すべて選択(&amp;A)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="468"/>
++        <source>Ctrl+A</source>
++        <translation>Ctrl+A</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="473"/>
++        <source>About &amp;Notepadqq...</source>
++        <translation>Notepadqq について...(&amp;N)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="476"/>
++        <source>F1</source>
++        <translation>F1</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="481"/>
++        <source>&amp;About Qt...</source>
++        <translation>Qtについて...(&amp;A)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="489"/>
++        <source>&amp;Windows Format</source>
++        <translation>Windows 形式(&amp;W)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="500"/>
++        <source>&amp;UNIX / OS X Format</source>
++        <translation>UNIX/macOS 形式(&amp;U)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="508"/>
++        <source>&amp;Old Mac Format</source>
++        <translation>旧 Mac 形式(&amp;O)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="516"/>
++        <source>Show &amp;End of Line</source>
++        <translation>行末を表示(&amp;E)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="524"/>
++        <source>&amp;Show Tabs</source>
++        <translation>タブを表示(&amp;S)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="532"/>
++        <source>Show All &amp;Characters</source>
++        <translation>すべての文字を表示(&amp;C)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="543"/>
++        <source>Show &amp;Indent Guide</source>
++        <translation>インデントガイドを表示(&amp;I)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="551"/>
++        <source>Show &amp;Wrap Symbol</source>
++        <translation>行末の折り返し記号を表示(&amp;W)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="559"/>
++        <source>&amp;Word wrap</source>
++        <translation>行末の折り返し(&amp;W)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="567"/>
++        <source>&amp;Math Rendering</source>
++        <translation>数学レンダリング(&amp;M)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="572"/>
++        <source>&amp;Copy Full Path to Clipboard</source>
++        <translation>フルパスをクリップボードにコピー(&amp;C)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="577"/>
++        <source>Copy &amp;Filename to Clipboard</source>
++        <translation>ファイル名をクリップボードにコピー(&amp;F)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="582"/>
++        <source>Copy &amp;Directory to Clipboard</source>
++        <translation>ディレクトリをクリップボードにコピー(&amp;D)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="587"/>
++        <source>Zoom &amp;In</source>
++        <translation>拡大(&amp;I)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="590"/>
++        <source>Ctrl++</source>
++        <translation>Ctrl+「+」</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="595"/>
++        <source>Zoom &amp;Out</source>
++        <translation>縮小(&amp;O)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="598"/>
++        <source>Ctrl+-</source>
++        <translation>Ctrl+「-」</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="603"/>
++        <source>&amp;Restore Default Zoom</source>
++        <translation>デフォルトの拡大・縮小を復元(&amp;R)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="606"/>
++        <source>Ctrl+0</source>
++        <translation>Ctrl+0(ゼロ)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="611"/>
++        <source>&amp;Move to Other View</source>
++        <translation>他のビューに移動(&amp;M)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="616"/>
++        <source>&amp;Clone to Other View</source>
++        <translation>他のビューに複製を作成(&amp;C)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="621"/>
++        <source>Move to a &amp;New Window</source>
++        <translation>新しいウィンドウに移動(&amp;N)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="626"/>
++        <source>&amp;Open in a New Window</source>
++        <translation>新しいウィンドウで開く(&amp;O)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="631"/>
++        <source>&amp;Start Recording</source>
++        <translation>録音を開始(&amp;S)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="642"/>
++        <source>&amp;Stop Recording</source>
++        <translation>録音を停止(&amp;S)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="653"/>
++        <source>&amp;Playback</source>
++        <translation>再生(&amp;P)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="664"/>
++        <source>Save Currently Recorded Macro</source>
++        <translation>現在記録されているマクロを保存</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="672"/>
++        <source>Run a Macro Multiple Times...</source>
++        <translation>マクロを複数回実行...</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="680"/>
++        <source>Trim Trailing and save</source>
++        <translation>行末を削除して保存</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="685"/>
++        <source>Modify Shortcut/Delete Macro...</source>
++        <translation>ショートカットキーの変更/マクロの削除...</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="690"/>
++        <source>&amp;UPPERCASE</source>
++        <translation>大文字(&amp;U)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="693"/>
++        <source>Ctrl+Shift+U</source>
++        <translation>Ctrl+Shift+U</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="698"/>
++        <source>&amp;lowercase</source>
++        <translation>小文字(&amp;l)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="701"/>
++        <source>Ctrl+U</source>
++        <translation>Ctrl+U</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="706"/>
++        <source>&amp;Convert to UTF-8</source>
++        <translation>UTF-8に変換(&amp;C)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="711"/>
++        <source>Convert to UTF-&amp;16BE (UCS-2 Big Endian)</source>
++        <translation>UTF-16BE (UCS-2 ビッグ エンディアン) に変換(&amp;1)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="716"/>
++        <source>Convert to UTF-16LE (UCS-&amp;2 Little Endian)</source>
++        <translation>UTF-16LE (UCS-2 リトル エンディアン) に変換(&amp;2)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="721"/>
++        <source>Convert to &amp;UTF-8 without BOM</source>
++        <translation>BOM なしで UTF-8 に変換(&amp;U)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="726"/>
++        <source>&amp;Run...</source>
++        <translation>実行...(&amp;R)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="731"/>
++        <source>Launch in Firefox</source>
++        <translation>Firefox で起動</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="736"/>
++        <source>Launch in Chromium</source>
++        <translation>Chromium で起動</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="741"/>
++        <source>Get PHP help</source>
++        <translation>PHP のヘルプを入手</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="746"/>
++        <source>Google Search</source>
++        <translation>Google 検索</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="751"/>
++        <source>Wikipedia Search</source>
++        <translation>Wikipedia 検索</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="756"/>
++        <source>Open file(s)</source>
++        <translation>ファイルを開く</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="761"/>
++        <source>Open file(s) in a new window</source>
++        <translation>新しいウィンドウでファイルを開く</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="766"/>
++        <source>Modify Shortcut / Delete Command...</source>
++        <translation>ショートカットの変更/コマンドの削除...</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="771"/>
++        <source>&amp;Preferences...</source>
++        <translation>設定...(&amp;P)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="776"/>
++        <source>&amp;Find...</source>
++        <translation>検索...(&amp;F)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="779"/>
++        <source>Ctrl+F</source>
++        <translation>Ctrl+F</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="784"/>
++        <source>Find &amp;Next</source>
++        <translation>次を検索(&amp;N)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="787"/>
++        <source>F3</source>
++        <translation>F3</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="792"/>
++        <source>Find &amp;Previous</source>
++        <translation>前を検索(&amp;P)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="795"/>
++        <source>Shift+F3</source>
++        <translation>Shift+F3</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="800"/>
++        <source>&amp;Plain text</source>
++        <translation>プレーンテキスト(&amp;P)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="805"/>
++        <source>&amp;Replace...</source>
++        <translation>置換...(&amp;R)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="808"/>
++        <source>Ctrl+H</source>
++        <translation>Ctrl+H</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="813"/>
++        <source>&amp;Reload file interpreted as...</source>
++        <translation>次のように解釈されるファイルを再ロード...(&amp;R)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="818"/>
++        <source>C&amp;onvert to...</source>
++        <translation>変換...(&amp;o)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="823"/>
++        <source>Interpret as UTF-16BE (UCS-2 &amp;Big Endian)</source>
++        <translation>UTF-16BE (UCS-2 ビッグエンディアン) として解釈(&amp;B)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="828"/>
++        <source>Interpret as UTF-&amp;8 without BOM</source>
++        <translation>BOM なしの UTF-8 として解釈(&amp;8)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="833"/>
++        <source>&amp;Interpret as UTF-8</source>
++        <translation>UTF-8として解釈(&amp;I)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="838"/>
++        <source>Interpret as UTF-16LE (UCS-2 &amp;Little Endian)</source>
++        <translation>UTF-16LE (UCS-2 リトルエンディアン) として解釈(&amp;L)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="849"/>
++        <source>&amp;Default settings</source>
++        <translation>デフォルトの設定(&amp;D)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="857"/>
++        <source>&amp;Custom...</source>
++        <translation>カスタム...(&amp;C)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="862"/>
++        <source>I&amp;nterpret as...</source>
++        <translation>次のように解釈...(&amp;n)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="867"/>
++        <source>Launch in Chrome</source>
++        <translation>Chromeで起動</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="872"/>
++        <source>&amp;Open a New Window</source>
++        <translation>新しいウィンドウを開く(&amp;O)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="877"/>
++        <source>&amp;Advanced Search</source>
++        <translation>高度な検索(&amp;A)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="880"/>
++        <source>Ctrl+Shift+F</source>
++        <translation>Ctrl+Shift+F</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="885"/>
++        <source>Delete &amp;Current Line</source>
++        <translation>現在行を削除(&amp;C)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="888"/>
++        <source>Delete the current line</source>
++        <translation>現在行を削除</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="891"/>
++        <source>Ctrl+L</source>
++        <translation>Ctrl+L</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="896"/>
++        <source>&amp;Duplicate Current Line</source>
++        <translation>現在行を複製(&amp;D)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="899"/>
++        <source>Duplicate the current line</source>
++        <translation>現在行を複製</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="902"/>
++        <source>Ctrl+D</source>
++        <translation>Ctrl+D</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="907"/>
++        <source>&amp;Move Line Up</source>
++        <translation>行を上に移動(&amp;M)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="910"/>
++        <source>Move the current line up</source>
++        <translation>現在行を上に移動</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="913"/>
++        <source>Ctrl+Shift+Up</source>
++        <translation>Ctrl+Shift+Up</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="918"/>
++        <source>Move &amp;Line Down</source>
++        <translation>行を下に移動(&amp;L)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="921"/>
++        <source>Move the current line down</source>
++        <translation>現在行を下に移動</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="924"/>
++        <source>Ctrl+Shift+Down</source>
++        <translation>Ctrl+Shift+Down</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="929"/>
++        <source>&amp;Trim Trailing Space</source>
++        <translation>行末のスペースを削除(&amp;T)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="932"/>
++        <source>Trim Trailing Space</source>
++        <translation>行末のスペースを削除</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="937"/>
++        <source>Trim &amp;Leading Space</source>
++        <translation>行頭のスペースを削除(&amp;L)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="940"/>
++        <source>Trim Leading Space</source>
++        <translation>行頭のスペースを削除</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="945"/>
++        <source>T&amp;rim Leading and Trailing Space</source>
++        <translation>行頭と行末のスペースを削除(&amp;r)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="950"/>
++        <source>&amp;EOL to Space</source>
++        <translation>EOL をスペースに変換(&amp;E)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="955"/>
++        <source>TA&amp;B to Space</source>
++        <translation>タブをスペースに変換(&amp;B)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="960"/>
++        <source>&amp;Space to TAB (All)</source>
++        <translation>すべてのスペースをタブに変換(&amp;S)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="965"/>
++        <source>S&amp;pace to TAB (Leading)</source>
++        <translation>行頭のスペースをタブに変換(&amp;p)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="970"/>
++        <source>Open &amp;Folder...</source>
++        <translation>フォルダを開く...(&amp;F)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="975"/>
++        <source>&amp;Go to line...</source>
++        <translation>指定行に移動(&amp;G)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="978"/>
++        <source>Ctrl+G</source>
++        <translation>Ctrl+G</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="983"/>
++        <source>&amp;Install Extension...</source>
++        <translation>拡張機能をインストール...(&amp;I)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="991"/>
++        <source>&amp;Full Screen</source>
++        <translation>全画面表示(&amp;F)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="994"/>
++        <source>F11</source>
++        <translation>F11</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="1002"/>
++        <source>S&amp;how Spaces</source>
++        <translation>スペースを表示(&amp;h)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="1005"/>
++        <source>Show Spaces</source>
++        <translation>スペースを表示</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="1016"/>
++        <source>&amp;Enable Smart Indent</source>
++        <translation>スマートインデントを有効にする(&amp;E)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="1024"/>
++        <source>&amp;Show Menubar</source>
++        <translation>メニューバーを表示(&amp;S)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="1027"/>
++        <source>Ctrl+M</source>
++        <translation>Ctrl+M</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.ui" line="1035"/>
++        <source>S&amp;how Toolbar</source>
++        <translation>ツールバーを表示(&amp;h)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="405"/>
++        <location filename="../ui/mainwindow.cpp" line="765"/>
++        <source>INS</source>
++        <translation>INS</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="459"/>
++        <source>Error while trying to save this session. Please ensure the following directory is accessible:
++
++</source>
++        <translation>このセッションを保存しようとしたときにエラーが発生しました。次のディレクトリにアクセスできることを確認してください:
++
++</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="461"/>
++        <source>By choosing &quot;ignore&quot; your session won&apos;t be saved.</source>
++        <translation>「無視」を選択すると、セッションは保存されません。</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="618"/>
++        <source>The &apos;--line&apos; and &apos;--column&apos; arguments will be ignored since more than one file is opened.</source>
++        <translation>複数のファイルが開かれるため、「--line」および「--column」引数は無視されます。</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="628"/>
++        <source>Invalid value for &apos;--line&apos; argument: %1</source>
++        <translation>「--line」引数の値が無効です: %1</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="637"/>
++        <source>Invalid value for &apos;--column&apos; argument: %1</source>
++        <translation>「--column」引数の値が無効です: %1</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="763"/>
++        <source>OVR</source>
++        <translation>OVR</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="912"/>
++        <source>Open</source>
++        <translation>開く</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="914"/>
++        <source>All files (*)</source>
++        <translation>すべてのファイル (*)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="933"/>
++        <source>Open Folder</source>
++        <translation>フォルダを開く</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="971"/>
++        <source>Do you want to save changes to «%1»?</source>
++        <translation>«%1» への変更を保存しますか?</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="972"/>
++        <source>Don&apos;t Save</source>
++        <translation>保存しない</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="975"/>
++        <source>Do you want to save changes to «%1» before closing?</source>
++        <translation>閉じる前に «%1» への変更を保存しますか?</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="979"/>
++        <source>If you don&apos;t save the changes you made, you&apos;ll lose them forever.</source>
++        <translation>加えた変更を保存しないと、変更は永久に失われます。</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="1091"/>
++        <source>The file on disk has changed since the last read.
++Do you want to save it anyway?</source>
++        <translation>ディスク上のファイルは最後の読み取り以降に変更されました。
++とにかく保存しますか?</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="1094"/>
++        <source>Saving the file might cause loss of external data.</source>
++        <translation>ファイルを保存すると、外部データが失われる可能性があります。</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="1113"/>
++        <source>Save as</source>
++        <translation>名前を付けて保存</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="1115"/>
++        <source>Any file (*)</source>
++        <translation>任意のファイル (*)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="1294"/>
++        <source>%1 chars, %2 lines</source>
++        <translation>全数 %1字, %2行</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="1305"/>
++        <source>Ln %1, col %2</source>
++        <translation>現在 %1行, %2字</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="1309"/>
++        <source>Sel %1 (%2)</source>
++        <translation>選択 %1字, %2行</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="1435"/>
++        <source>Windows</source>
++        <translation>Windows</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="1438"/>
++        <source>UNIX / OS X</source>
++        <translation>UNIX/macOS</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="1441"/>
++        <source>Old Mac</source>
++        <translation>旧 Mac</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="1448"/>
++        <source>%1 w/o BOM</source>
++        <translation>%1 w/o BOM</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="1925"/>
++        <source>No recent files</source>
++        <translation>最近使用したファイルはありません</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="2022"/>
++        <source>The following files do not exist anymore. Do you want to open them anyway?
++</source>
++        <translation>以下のファイルはもう存在しません。とにかく開きますか?
++</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="2133"/>
++        <source>Convert to:</source>
++        <translation>変換:</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="2151"/>
++        <source>Reload as:</source>
++        <translation>再ロード:</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="2198"/>
++        <source>Interpret as:</source>
++        <translation>解釈:</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="2213"/>
++        <source>Run...</source>
++        <translation>実行...</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="2225"/>
++        <source>Modify Run Commands</source>
++        <translation>実行コマンドの変更</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="2344"/>
++        <source>The file &quot;%1&quot; does not exist. Do you want to re-create it?</source>
++        <translation>ファイル「%1」は存在しません。再作成しますか?</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="2507"/>
++        <source>Extension</source>
++        <translation>拡張機能</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="2585"/>
++        <source>Open Session...</source>
++        <translation>セッションを開く...</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="2587"/>
++        <location filename="../ui/mainwindow.cpp" line="2607"/>
++        <source>Session file (*.xml);;Any file (*)</source>
++        <translation>セッション ファイル (*.xml);;任意のファイル (*)</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="2605"/>
++        <source>Save Session as...</source>
++        <translation>セッションに名前を付けて保存...</translation>
++    </message>
++    <message>
++        <location filename="../ui/mainwindow.cpp" line="2631"/>
++        <source>Error while trying to save this session. Please try a different file name.</source>
++        <translation>このセッションを保存しようとしたときにエラーが発生しました。別のファイル名を試してください。</translation>
++    </message>
++</context>
++<context>
++    <name>NqqRun::RunDelegate</name>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="232"/>
++        <source>Open File</source>
++        <translation>ファイルを開く</translation>
++    </message>
++</context>
++<context>
++    <name>NqqRun::RunDialog</name>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="264"/>
++        <source>OK</source>
++        <translation>OK</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="265"/>
++        <source>Cancel</source>
++        <translation>キャンセル</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="266"/>
++        <source>Save...</source>
++        <translation>保存...</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="269"/>
++        <source>Special placeholders</source>
++        <translation>特別な「一時保管場所」</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="270"/>
++        <source>Full URL of the currently active file.</source>
++        <translation>現在アクティブなファイルのフルのURLです。</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="271"/>
++        <source>Full path of the currently active file.</source>
++        <translation>現在アクティブなファイルのフルパスです。</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="272"/>
++        <source>Directory of the currently active file.</source>
++        <translation>現在アクティブなファイルのディレクトリです。</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="273"/>
++        <source>Name of the currently active file.</source>
++        <translation>現在アクティブなファイルの名前です。</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="274"/>
++        <source>Currently selected text.</source>
++        <translation>現在選択されているテキストです。</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="314"/>
++        <source>Choose the name to be displayed in the run menu.</source>
++        <translation>実行メニューに表示される名前を選択。</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="315"/>
++        <source>Command Name:</source>
++        <translation>コマンド名:</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="324"/>
++        <source>Command saved...</source>
++        <translation>コマンドが保存されました...</translation>
++    </message>
++</context>
++<context>
++    <name>NqqRun::RunPreferences</name>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="26"/>
++        <source>OK</source>
++        <translation>OK</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="27"/>
++        <source>Cancel</source>
++        <translation>キャンセル</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="32"/>
++        <source>Special placeholders</source>
++        <translation>特別な「一時保管場所」</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="33"/>
++        <source>Full URL of the currently active file.</source>
++        <translation>現在アクティブなファイルのフルのURLです。</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="34"/>
++        <source>Full path of the currently active file.</source>
++        <translation>現在アクティブなファイルのフルパスです。</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="35"/>
++        <source>Directory of the currently active file.</source>
++        <translation>現在アクティブなファイルのディレクトリです。</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="36"/>
++        <source>Name of the currently active file.</source>
++        <translation>現在アクティブなファイルの名前です。</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="37"/>
++        <source>Currently selected text.</source>
++        <translation>現在選択されているテキストです。</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="68"/>
++        <source>Text</source>
++        <translation>テキスト</translation>
++    </message>
++    <message>
++        <location filename="../ui/nqqrun.cpp" line="68"/>
++        <source>Command</source>
++        <translation>コマンド</translation>
++    </message>
++</context>
++<context>
++    <name>QObject</name>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="52"/>
++        <source>Confirm Replacement</source>
++        <translation>置換の確認</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="53"/>
++        <source>This will replace %1 selected matches with &quot;%2&quot;. Continue?</source>
++        <translation>選択された %1 個の一致が「%2」に置き換えられます。続けますか?</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="144"/>
++        <source>Notepadqq supports most of the &lt;a href=&apos;http://perldoc.perl.org/perlre.html&apos;&gt;Perl Regular Expression&lt;/a&gt; syntax when &apos;Use Regular Expressions&apos; is checked.</source>
++        <translation>Notepadqq は、「正規表現を使う」がチェックされている場合、ほとんどの &lt;a href=&apos;http://perldoc.perl.org/perlre.html&apos;&gt;Perl 正規表現&lt;/a&gt; 構文をサポートします。</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="145"/>
++        <source>Here is a quick reference:</source>
++        <translation>クイックリファレンスは次のとおりです:</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="147"/>
++        <source>Matches a word character</source>
++        <translation>単語の文字と一致</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="148"/>
++        <source>Matches a 0-9 digit</source>
++        <translation>0 ~ 9 の数字と一致</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="149"/>
++        <source>Matches any of a, b, or c</source>
++        <translation>a、b、または c のいずれかに一致</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="150"/>
++        <source>Matches anything but a, b, or c</source>
++        <translation>a、b、c 以外のすべてに一致</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="151"/>
++        <source>Matches the beginning of a line</source>
++        <translation>行頭と一致</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="152"/>
++        <source>Matches the end of a line</source>
++        <translation>行末と一致</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="153"/>
++        <source>Matches &apos;abc&apos; and captures it as a group</source>
++        <translation>「abc」と一致し、グループとしてキャプチャ(獲得)します</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="154"/>
++        <source>Use in a replace operation to refer to the n&apos;th capture group</source>
++        <translation>置換操作で使用して、n 番目のキャプチャ グループを参照します</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/advancedsearchdock.cpp" line="704"/>
++        <source>Search in...</source>
++        <translation>検索...</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/searchinstance.cpp" line="27"/>
++        <source>&lt;b&gt;%1&lt;/b&gt; Results for:   &apos;&lt;b&gt;%2&lt;/b&gt;&apos;</source>
++        <translation>&lt;b&gt;%1&lt;/b&gt; の結果:   &apos;&lt;b&gt;%2&lt;/b&gt;&apos;</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/searchobjects.cpp" line="10"/>
++        <source>Current Document</source>
++        <translation>現在のドキュメント</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/searchobjects.cpp" line="11"/>
++        <source>All Documents</source>
++        <translation>すべてのドキュメント</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/searchobjects.cpp" line="12"/>
++        <source>File System</source>
++        <translation>ファイルシステム</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/searchobjects.cpp" line="13"/>
++        <source>Invalid</source>
++        <translation>無効</translation>
++    </message>
++    <message>
++        <location filename="../ui/Sessions/backupservice.cpp" line="105"/>
++        <source>Notepadqq was not closed properly. Do you want to recover unsaved changes?</source>
++        <translation>Notepadqq が正しく閉じられませんでした。保存されていない変更を復元しますか?</translation>
++    </message>
++    <message>
++        <location filename="../ui/Sessions/sessions.cpp" line="130"/>
++        <source>Error reading session file</source>
++        <translation>セッションファイルの読み取りエラー</translation>
++    </message>
++    <message>
++        <location filename="../ui/docengine.cpp" line="110"/>
++        <source>The file &quot;%1&quot; you are trying to open is %2 MiB in size. Do you want to continue?</source>
++        <translation>開こうとしているファイル「%1」のサイズは %2 MiB です。続けますか?</translation>
++    </message>
++    <message>
++        <location filename="../ui/docengine.cpp" line="124"/>
++        <source>Do you want to reload «%1»?</source>
++        <translation>«%1» を再ロードしますか?</translation>
++    </message>
++    <message>
++        <location filename="../ui/docengine.cpp" line="125"/>
++        <source>Any changes made by you to this document will be lost.</source>
++        <translation>このドキュメントに対して行った変更はすべて失われます。</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.cpp" line="501"/>
++        <source>Restart required</source>
++        <translation>再起動が必要です</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.cpp" line="502"/>
++        <source>You need to restart Notepadqq for the localization changes to take effect.</source>
++        <translation>ローカリゼーションの変更を有効にするには、Notepadqq を再起動する必要があります。</translation>
++    </message>
++    <message>
++        <location filename="../ui/main.cpp" line="92"/>
++        <source>Notepadqq will ask for root privileges whenever they are needed if either &apos;kdesu&apos; or &apos;gksu&apos; are installed. Running Notepadqq as root is not recommended. Use --allow-root if you really want to.</source>
++        <translation>「kdesu」または「gksu」のいずれかがインストールされている場合、Notepadqq は必要に応じて root 権限を要求します。 Notepadqq を root として実行することはお勧めできません。本当に必要な場合は --allow-root を使用してください。</translation>
++    </message>
++    <message>
++        <location filename="../ui/notepadqq.cpp" line="17"/>
++        <source>Copyright © 2010-%1, Daniele Di Sarli</source>
++        <translation>Copyright © 2010-%1, Daniele Di Sarli</translation>
++    </message>
++    <message>
++        <location filename="../ui/notepadqq.cpp" line="86"/>
++        <source>Open a new window in an existing instance of %1.</source>
++        <translation>%1 の既存のインスタンスで新しいウィンドウを開きます。</translation>
++    </message>
++    <message>
++        <location filename="../ui/notepadqq.cpp" line="91"/>
++        <source>Open file at specified line.</source>
++        <translation>指定した行でファイルを開きます。</translation>
++    </message>
++    <message>
++        <location filename="../ui/notepadqq.cpp" line="97"/>
++        <source>Open file at specified column.</source>
++        <translation>指定した列のファイルを開きます。</translation>
++    </message>
++    <message>
++        <location filename="../ui/notepadqq.cpp" line="102"/>
++        <source>Allows Notepadqq to be run as root.</source>
++        <translation>Notepadqq を root として実行できるようにします。</translation>
++    </message>
++    <message>
++        <location filename="../ui/notepadqq.cpp" line="106"/>
++        <source>Files to open.</source>
++        <translation>ファイルを開く。</translation>
++    </message>
++    <message>
++        <location filename="../ui/notepadqq.cpp" line="133"/>
++        <source>You are using an old version of Qt (%1)</source>
++        <translation>古いバージョンの Qt (%1) を使用しています</translation>
++    </message>
++    <message>
++        <location filename="../ui/notepadqq.cpp" line="135"/>
++        <source>Notepadqq will try to do its best, but &lt;b&gt;some things will not work properly&lt;/b&gt;.</source>
++        <translation>Notepadqq は最善を尽くしますが、一部の機能は &lt;b&gt;正常に動作しない可能性があります&lt;/b&gt;。</translation>
++    </message>
++    <message>
++        <location filename="../ui/notepadqq.cpp" line="136"/>
++        <source>Install a newer Qt version (&amp;ge; %1) from the official repositories of your distribution.&lt;br&gt;&lt;br&gt;If it&apos;s not available, download Qt (&amp;ge; %1) from %2 and install it to &quot;%3&quot; or to &quot;%4&quot;.</source>
++        <translation>ディストリビューションの公式リポジトリから新しい Qt バージョン (&amp;ge; %1) をインストールします。&lt;br&gt;&lt;br&gt;それが利用できない場合は、%2 から Qt (&amp;ge; %1) をダウンロードし、「%3」または「%4」をインストールします。</translation>
++    </message>
++    <message>
++        <location filename="../ui/notepadqq.cpp" line="150"/>
++        <source>Don&apos;t show me this warning again</source>
++        <translation>この警告を今後表示しません</translation>
++    </message>
++    <message>
++        <location filename="../ui/stats.cpp" line="120"/>
++        <source>Do you want to help?</source>
++        <translation>貢献したいですか?</translation>
++    </message>
++    <message>
++        <location filename="../ui/stats.cpp" line="122"/>
++        <source>You can help to improve Notepadqq by allowing us to collect &lt;b&gt;anonymous statistics&lt;/b&gt;.</source>
++        <translation>私たちが &lt;b&gt;匿名の統計情報&lt;/b&gt;を収集できるようにすることで、Notepadqq の改善に役立てることができます。</translation>
++    </message>
++    <message>
++        <location filename="../ui/stats.cpp" line="123"/>
++        <source>What will we collect?</source>
++        <translation>何を集めますか?</translation>
++    </message>
++    <message>
++        <location filename="../ui/stats.cpp" line="124"/>
++        <source>We will collect information such as the version of Qt, the version of the OS, or the number of extensions.&lt;br&gt;You don&apos;t have to trust us: Notepadqq is open source, so you can %1check by yourself%2 :)</source>
++        <translation>Qt のバージョン、OS のバージョン、拡張機能の数などの情報が収集されます。&lt;br&gt;私たちを信頼する必要はありません。Notepadqq はオープン ソースなので、%1自分で確認できます%2 :)</translation>
++    </message>
++    <message>
++        <location filename="../ui/stats.cpp" line="131"/>
++        <source>Okay, I agree</source>
++        <translation>はい、同意します</translation>
++    </message>
++    <message>
++        <location filename="../ui/stats.cpp" line="132"/>
++        <source>No</source>
++        <translation>いいえ</translation>
++    </message>
++</context>
++<context>
++    <name>SearchInstance</name>
++    <message>
++        <location filename="../ui/Search/searchinstance.cpp" line="115"/>
++        <source>current document</source>
++        <translation>現在のドキュメント</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/searchinstance.cpp" line="117"/>
++        <source>open documents</source>
++        <translation>ドキュメントを開く</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/searchinstance.cpp" line="125"/>
++        <source>Copy Line to Clipboard</source>
++        <translation>行をクリップボードにコピ</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/searchinstance.cpp" line="133"/>
++        <source>Open Document</source>
++        <translation>ドキュメントを開く</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/searchinstance.cpp" line="142"/>
++        <source>Open Folder in File Browser</source>
++        <translation>ファイルブラウザでフォルダを開く</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/searchinstance.cpp" line="155"/>
++        <source>Search Results in: %1</source>
++        <translation>検索の結果: %1</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/searchinstance.cpp" line="231"/>
++        <source>Calculating...</source>
++        <translation>計算中...</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/searchinstance.cpp" line="388"/>
++        <source>Search in progress [%1/%2 finished]</source>
++        <translation>検索中 [%1/%2 終了]</translation>
++    </message>
++</context>
++<context>
++    <name>dlgSearching</name>
++    <message>
++        <location filename="../ui/Search/dlgsearching.ui" line="17"/>
++        <source>Dialog</source>
++        <translation>ダイアログ</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/dlgsearching.ui" line="77"/>
++        <source>&amp;Cancel</source>
++        <translation>キャンセル(&amp;C)</translation>
++    </message>
++</context>
++<context>
++    <name>frmAbout</name>
++    <message>
++        <location filename="../ui/frmabout.ui" line="17"/>
++        <source>Notepadqq</source>
++        <translation>Notepadqq</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmabout.ui" line="39"/>
++        <source>Close</source>
++        <translation>閉じる</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmabout.ui" line="108"/>
++        <source>License</source>
++        <translation>ライセンス</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmabout.cpp" line="23"/>
++        <source>Contributors:</source>
++        <translation>貢献者:</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmabout.cpp" line="23"/>
++        <source>GitHub Contributors</source>
++        <translation>GitHub の貢献者</translation>
++    </message>
++</context>
++<context>
++    <name>frmEncodingChooser</name>
++    <message>
++        <location filename="../ui/frmencodingchooser.ui" line="17"/>
++        <source>Encoding</source>
++        <translation></translation>
++    </message>
++    <message>
++        <location filename="../ui/frmencodingchooser.ui" line="30"/>
++        <source>Encoding:</source>
++        <translation>エンコード:</translation>
++    </message>
++</context>
++<context>
++    <name>frmIndentationMode</name>
++    <message>
++        <location filename="../ui/frmindentationmode.ui" line="14"/>
++        <source>Indentation</source>
++        <translation>インデント</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmindentationmode.ui" line="26"/>
++        <source>Tabs</source>
++        <translation>タブ</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmindentationmode.ui" line="36"/>
++        <source>Spaces</source>
++        <translation>スペース</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmindentationmode.ui" line="60"/>
++        <source>Indentation width:</source>
++        <translation>インデント幅:</translation>
++    </message>
++</context>
++<context>
++    <name>frmLineNumberChooser</name>
++    <message>
++        <location filename="../ui/frmlinenumberchooser.ui" line="14"/>
++        <location filename="../ui/frmlinenumberchooser.ui" line="24"/>
++        <source>Go to line</source>
++        <translation>指定行に移動</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmlinenumberchooser.ui" line="53"/>
++        <source>Line number:</source>
++        <translation>行番号:</translation>
++    </message>
++</context>
++<context>
++    <name>frmPreferences</name>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="14"/>
++        <source>Preferences</source>
++        <translation>設定</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="51"/>
++        <source>1</source>
++        <translation>1</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="56"/>
++        <source>General</source>
++        <translation>一般</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="61"/>
++        <source>Appearance</source>
++        <translation>外観</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="66"/>
++        <source>Languages</source>
++        <translation>言語</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="71"/>
++        <source>Search</source>
++        <translation>検索</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="76"/>
++        <source>Shortcuts</source>
++        <translation>ショートカット</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="81"/>
++        <source>Toolbar</source>
++        <translation>ツールバー</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="86"/>
++        <source>Extensions</source>
++        <translation>拡張機能</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="110"/>
++        <source>Check Qt version at startup</source>
++        <translation>起動時にQtのバージョンを確認</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="117"/>
++        <source>Collect and transmit anonymous statistics to improve Notepadqq</source>
++        <translation>Notepadqq を改善するために匿名の統計を収集して送信</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="124"/>
++        <source>Warn when the indentation doesn&apos;t match the settings</source>
++        <translation>インデントが設定と一致しない場合に警告</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="131"/>
++        <source>Remember open tabs when closing Notepadqq</source>
++        <translation>Notepadqq を閉じるときに開いているタブを記憶</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="140"/>
++        <source>This option allows Notepadqq to recover your documents after a crash even if they were not explicitely saved.</source>
++        <translation>このオプションを使用すると、ドキュメントが明示的に保存されなかった場合でも、クラッシュ後に Notepadqq がドキュメントを回復できるようになります。</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="143"/>
++        <source>Backup open documents every</source>
++        <translation>開いているドキュメントを逐次バックアップ</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="150"/>
++        <source> seconds</source>
++        <translation> 秒</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="178"/>
++        <source>Exit Notepadqq when closing the last Tab</source>
++        <translation>最後のタブを閉じるときに Notepadqq を終了</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="187"/>
++        <source>Localization:</source>
++        <translation>ローカリゼーション:</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="244"/>
++        <source>Color scheme:</source>
++        <translation>配色:</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="276"/>
++        <source>Override Font Family</source>
++        <translation>フォントファミリーを上書き</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="299"/>
++        <source>Override Font Size</source>
++        <translation>フォントサイズを上書き</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="328"/>
++        <source>Override Line Height</source>
++        <translation>行の高さを上書き</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="344"/>
++        <source>em</source>
++        <translation>em</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="365"/>
++        <source>Preview</source>
++        <translation>プレビュー</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="448"/>
++        <source>Tab size:</source>
++        <translation>タブのサイズ:</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="461"/>
++        <source>Use spaces instead of tabs</source>
++        <translation>タブの代わりにスペースを使う</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="485"/>
++        <source>Use default settings</source>
++        <translation>デフォルト設定を使う</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="521"/>
++        <source>Search as I type</source>
++        <translation>入力しながら検索</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="528"/>
++        <source>Save search history</source>
++        <translation>検索履歴を保存</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="576"/>
++        <source>Add</source>
++        <translation>追加</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="587"/>
++        <source>Remove</source>
++        <translation>削除</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="616"/>
++        <source>Move Up</source>
++        <translation>上に移動</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="627"/>
++        <source>Move Down</source>
++        <translation>下に移動</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="657"/>
++        <source>Reset to Default</source>
++        <translation>デフォルトにリセット</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="704"/>
++        <source>Node.js runtime</source>
++        <translation>Node.js のランタイム</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="710"/>
++        <source>Supported Node versions: 0.10, 0.11, 0.12</source>
++        <translation>サポートされている Node のバージョン: 0.10、0.11、0.12</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="717"/>
++        <source>Node.js path:</source>
++        <translation>Node.js のパス:</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="729"/>
++        <location filename="../ui/frmpreferences.ui" line="750"/>
++        <source>Browse...</source>
++        <translation>参照...</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="738"/>
++        <source>NPM path:</source>
++        <translation>NPM のパス:</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.ui" line="759"/>
++        <source>WARNING: support for extensions is EXPERIMENTAL.</source>
++        <translation>警告: 拡張機能のサポートは実験的です。</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.cpp" line="280"/>
++        <source>Reset Selected</source>
++        <translation>選択をリセット</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.cpp" line="281"/>
++        <source>Reset All</source>
++        <translation>すべてリセット</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.cpp" line="378"/>
++        <source>Keyboard shortcut conflict</source>
++        <translation>キーボードショートカットの競合</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.cpp" line="379"/>
++        <source>Two or more actions share the same shortcut. These conflicts must be resolved before your changes can be saved.</source>
++        <translation>2つ以上のアクションが同じショートカットを共有します。変更を保存するには、これらの競合を解決する必要があります。</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.cpp" line="508"/>
++        <source>Browse</source>
++        <translation>参照</translation>
++    </message>
++    <message>
++        <location filename="../ui/frmpreferences.cpp" line="594"/>
++        <source>Would you like to clear the existing history now?</source>
++        <translation>既存の履歴を今すぐ消去しますか?</translation>
++    </message>
++</context>
++<context>
++    <name>frmSearchReplace</name>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="14"/>
++        <source>Search</source>
++        <translation>検索</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="50"/>
++        <source>Find</source>
++        <translation>検索</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="63"/>
++        <source>Replace with</source>
++        <translation>置換</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="110"/>
++        <source>Show advanced options</source>
++        <translation>詳細オプションを表示</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="117"/>
++        <source>Advanced</source>
++        <translation>高度な</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="123"/>
++        <source>Search &amp;plain text</source>
++        <translation>プレーンテキストを検索(&amp;p)</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="149"/>
++        <source>Match whole word only</source>
++        <translation>単語全体のみが一致</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="156"/>
++        <source>Match case</source>
++        <translation>大文字と小文字を区別</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="163"/>
++        <source>Search &amp;with special characters (\n, \r, \t, \0, \u..., \x...)</source>
++        <translation>特殊文字を使用して検索(\n、\r、\t、\0、\u...、\x...)(&amp;w)</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="170"/>
++        <source>Search with &amp;regular expressions</source>
++        <translation>正規表現で検索(&amp;r)</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="198"/>
++        <source>Find ⇩</source>
++        <translation>検索 ⇩</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="208"/>
++        <location filename="../ui/Search/frmsearchreplace.cpp" line="288"/>
++        <source>Select all</source>
++        <translation>すべて選択</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="218"/>
++        <source>Replace ⇧</source>
++        <translation>置換 ⇧</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="228"/>
++        <source>Replace ⇩</source>
++        <translation>置換 ⇩</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="238"/>
++        <location filename="../ui/Search/frmsearchreplace.cpp" line="276"/>
++        <source>Replace all</source>
++        <translation>すべて置換</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="255"/>
++        <source>Find ⇧</source>
++        <translation>検索 ⇧</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="284"/>
++        <source>Toolbar</source>
++        <translation>ツールバー</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="318"/>
++        <source>&amp;Replace</source>
++        <translation>置換(&amp;R)</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="326"/>
++        <source>&amp;Find</source>
++        <translation>検索(&amp;F)</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="334"/>
++        <location filename="../ui/Search/frmsearchreplace.ui" line="337"/>
++        <source>Advanced Search</source>
++        <translation>高度な検索</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.cpp" line="276"/>
++        <source>%1 occurrences have been replaced.</source>
++        <translation>%1 個が置換されました。</translation>
++    </message>
++    <message>
++        <location filename="../ui/Search/frmsearchreplace.cpp" line="288"/>
++        <source>No results found</source>
++        <translation>結果が見つかりませんでした</translation>
++    </message>
++</context>
++</TS>
++
+


--- a/srcpkgs_save/@notepadqq/template  1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@notepadqq/template  2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,22 @@
+# Template file for '@notepadqq'
+pkgname=@notepadqq
+version=1.4.8
+revision=1
+build_style=qmake
+hostmakedepends="pkg-config qt5-tools qt5-qmake qt5-host-tools"
+makedepends="qt5-svg-devel qt5-webkit-devel"
+depends="desktop-file-utils hicolor-icon-theme"
+maintainer="Orphaned <orphan@voidlinux.org>"
+short_desc="Text editor for developers"
+homepage="https://notepadqq.com"
+license="GPL-3.0-or-later"
+distfiles="https://github.com/notepadqq/notepadqq/archive/v${version}.tar.gz"
+checksum=13fba9abd84c59de27fbe92f74e2763b57588fcf9c88af10ec67313b0abbc9d0
+
+post_install() {
+   # no need for upstream's weird magic, leads to segfaults anyway
+   rm "${DESTDIR}/usr/bin/notepadqq"
+   # use our simple start scipt
+   vbin ${FILESDIR}/notepadqq
+}
+

わざと空行 x2 開けています:

→Ctrl+O 後、ファイルを確認して Enter:

→Ctrl+X で終了:

-


5). 「05.@qpdfview.patch」ファイルの作成:

$ cd ~/ダウンロード/
$ nano 05.@qpdfview.patch

↓ すべて貼付け(すべて選択後、Ctrl+C して マウスの中央ボタンで貼付け):

--- a/srcpkgs_save/@qpdfview/patches/01.qpdfview_ja.ts.patch 1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@qpdfview/patches/01.qpdfview_ja.ts.patch    2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,263 @@
+--- a/translations/qpdfview_ja.ts  2025-12-22 10:38:10.201333154 +0900
++++ b/translations/qpdfview_ja.ts  2025-12-22 11:02:46.537152441 +0900
+@@ -311,7 +311,7 @@
+     <message>
+         <location filename="../sources/database.cpp" line="993"/>
+         <source>Jump to page %1</source>
+-        <translation>%1ページヘジャンプ</translation>
++        <translation>%1ページヘ移動</translation>
+     </message>
+ </context>
+ <context>
+@@ -416,8 +416,11 @@
+     <message>
+         <location filename="../sources/helpdialog.cpp" line="48"/>
+         <source>help.html</source>
+-        <extracomment>Please replace by file name of localized help if available, e.g. &quot;help_fr.html&quot;.</extracomment>
+-        <translation>help.html</translation>
++        <extracomment>=================================================
++            Please replace by file name of localized help if available, 
++            e.g. &quot;help_fr.html&quot;.
++            ============================================</extracomment>
++        <translation>help_ja.html</translation>
+     </message>
+     <message>
+         <location filename="../sources/helpdialog.cpp" line="63"/>
+@@ -563,7 +566,7 @@
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="1633"/>
+         <source>Jump to page</source>
+-        <translation>指定ページへジャンプ</translation>
++        <translation>指定するページへ移動</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="1633"/>
+@@ -573,17 +576,17 @@
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="2956"/>
+         <source>Jump to page %1</source>
+-        <translation>%1ページヘジャンプ</translation>
++        <translation>%1ページヘ移動</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="2166"/>
+         <source>About qpdfview</source>
+-        <translation>qpdfviewについて</translation>
++        <translation>qpdfview について</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="2166"/>
+         <source>&lt;p&gt;&lt;b&gt;qpdfview %1&lt;/b&gt;&lt;/p&gt;&lt;p&gt;qpdfview is a tabbed document viewer using Qt.&lt;/p&gt;&lt;p&gt;This version includes:&lt;ul&gt;</source>
+-        <translation>&lt;p&gt;&lt;b&gt;qpdfview %1&lt;/b&gt;&lt;/p&gt;&lt;p&gt;qpdfviewはQtを使用したタブ式文書ビューアです。&lt;/p&gt;&lt;p&gt;この版は下記のサポートを提供しています:&lt;ul&gt;</translation>
++        <translation>&lt;p&gt;&lt;b&gt;qpdfview %1&lt;/b&gt;&lt;/p&gt;&lt;p&gt;qpdfviewはQtを使用したタブ式ドキュメントビュワーです。&lt;/p&gt;&lt;p&gt;この版は下記のサポートを提供しています:&lt;ul&gt;</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="2170"/>
+@@ -653,12 +656,12 @@
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3191"/>
+         <source>Open in new &amp;tab...</source>
+-        <translation>新規タブに開く(&amp;T)...</translation>
++        <translation>新規タブで開く(&amp;T)...</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3319"/>
+         <source>Open &amp;copy in new tab</source>
+-        <translation>新規タブにコピーを開く(&amp;C)</translation>
++        <translation>新規タブでコピーを開く(&amp;C)</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3322"/>
+@@ -713,12 +716,12 @@
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3216"/>
+         <source>&amp;Previous page</source>
+-        <translation>前ページ(&amp;P)</translation>
++        <translation>前のページ(&amp;P)</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3217"/>
+         <source>&amp;Next page</source>
+-        <translation>次ページ(&amp;N)</translation>
++        <translation>次のページ(&amp;N)</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3224"/>
+@@ -738,17 +741,17 @@
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3235"/>
+         <source>&amp;Jump to page...</source>
+-        <translation>指定ページへ跳ぶ(&amp;J)...</translation>
++        <translation>指定のページへ移動(&amp;J)...</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3237"/>
+         <source>Jump &amp;backward</source>
+-        <translation>後ろにジャンプ(&amp;b)</translation>
++        <translation>後ろに移動(&amp;b)</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3238"/>
+         <source>Jump for&amp;ward</source>
+-        <translation>前にジャンプ(&amp;w)</translation>
++        <translation>前に移動(&amp;w)</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3240"/>
+@@ -938,7 +941,7 @@
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3320"/>
+         <source>Open copy in new &amp;window</source>
+-        <translation>新規ウィンドウにコピーを開く(&amp;W)</translation>
++        <translation>新規ウィンドウでコピーを開く(&amp;W)</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3323"/>
+@@ -984,7 +987,7 @@
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3321"/>
+         <source>Open containing &amp;folder</source>
+-        <translation>文書のあるフォルダを開く(&amp;F)</translation>
++        <translation>文書のあるフォルダを開く(&amp;f)</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3193"/>
+@@ -994,17 +997,17 @@
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3309"/>
+         <source>Remove all bookmarks</source>
+-        <translation>しおりを全て外す</translation>
++        <translation>ブックマークを全て削除</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3313"/>
+         <source>&amp;Contents</source>
+-        <translation>ヘルプの目次を表示(&amp;C)</translation>
++        <translation>ヘルプを表示(&amp;C)</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3314"/>
+         <source>&amp;About</source>
+-        <translation>qpdfviewについて(&amp;A)</translation>
++        <translation>qpdfview について(&amp;A)</translation>
+     </message>
+     <message>
+         <location filename="../sources/mainwindow.cpp" line="3353"/>
+@@ -1082,12 +1085,12 @@
+     <message>
+         <location filename="../sources/pageitem.cpp" line="394"/>
+         <source>Go to page %1.</source>
+-        <translation>%1ページにジャンプ。</translation>
++        <translation>%1ページに移動。</translation>
+     </message>
+     <message>
+         <location filename="../sources/pageitem.cpp" line="398"/>
+         <source>Go to page %1 of file &apos;%2&apos;.</source>
+-        <translation>ファイル &apos;%2&apos;の %1 ページにジャンプ。</translation>
++        <translation>ファイル &apos;%2&apos;の %1 ページに移動。</translation>
+     </message>
+     <message>
+         <location filename="../sources/pageitem.cpp" line="406"/>
+@@ -1102,17 +1105,17 @@
+     <message>
+         <location filename="../sources/pageitem.cpp" line="809"/>
+         <source>Copy &amp;text</source>
+-        <translation>文をコピー(&amp;T)</translation>
++        <translation>テキストをコピー(&amp;t)</translation>
+     </message>
+     <message>
+         <location filename="../sources/pageitem.cpp" line="810"/>
+         <source>&amp;Select text</source>
+-        <translation>文を選択(&amp;S)</translation>
++        <translation>テキストを選択(&amp;S)</translation>
+     </message>
+     <message>
+         <location filename="../sources/pageitem.cpp" line="811"/>
+         <source>&amp;Append text to bookmark comment...</source>
+-        <translation>ブックマークのコメントとして文字を追加(&amp;A)...</translation>
++        <translation>ブックマークのコメントとしてテキストを追加(&amp;A)...</translation>
+     </message>
+     <message>
+         <location filename="../sources/pageitem.cpp" line="812"/>
+@@ -1170,12 +1173,12 @@
+     <message>
+         <location filename="../sources/pdfmodel.cpp" line="1217"/>
+         <source>Antialiasing:</source>
+-        <translation>アンチエイリアス:</translation>
++        <translation>滑らかに表示:</translation>
+     </message>
+     <message>
+         <location filename="../sources/pdfmodel.cpp" line="1224"/>
+         <source>Text antialiasing:</source>
+-        <translation>文字のアンチエイリアス:</translation>
++        <translation>テキストを滑らかに表示:</translation>
+     </message>
+     <message>
+         <location filename="../sources/pdfmodel.cpp" line="1231"/>
+@@ -1197,7 +1200,7 @@
+         <location filename="../sources/pdfmodel.cpp" line="1236"/>
+         <location filename="../sources/pdfmodel.cpp" line="1243"/>
+         <source>Text hinting:</source>
+-        <translation>文字のヒンティング:</translation>
++        <translation>テキストをはっきり表示:</translation>
+     </message>
+     <message>
+         <location filename="../sources/pdfmodel.cpp" line="1252"/>
+@@ -1419,7 +1422,7 @@
+     <message>
+         <location filename="../sources/recentlyclosedmenu.cpp" line="34"/>
+         <source>&amp;Recently closed</source>
+-        <translation>最近閉じたもの(&amp;R)</translation>
++        <translation>最近閉じたファイル(&amp;R)</translation>
+     </message>
+     <message>
+         <location filename="../sources/recentlyclosedmenu.cpp" line="41"/>
+@@ -1432,7 +1435,7 @@
+     <message>
+         <location filename="../sources/recentlyusedmenu.cpp" line="33"/>
+         <source>Recently &amp;used</source>
+-        <translation>最近使用したもの(&amp;u)</translation>
++        <translation>最近使用したファイル(&amp;u)</translation>
+     </message>
+     <message>
+         <location filename="../sources/recentlyusedmenu.cpp" line="41"/>
+@@ -1539,12 +1542,12 @@
+     <message>
+         <location filename="../sources/settingsdialog.cpp" line="258"/>
+         <source>Track recently used:</source>
+-        <translation>最近使用したものを追跡:</translation>
++        <translation>最近使用したファイルを追跡:</translation>
+     </message>
+     <message>
+         <location filename="../sources/settingsdialog.cpp" line="261"/>
+         <source>Keep recently closed:</source>
+-        <translation>最近閉じたものを保持:</translation>
++        <translation>最近閉じたファイルを保持:</translation>
+     </message>
+     <message>
+         <location filename="../sources/settingsdialog.cpp" line="265"/>
+@@ -1594,7 +1597,7 @@
+     <message>
+         <location filename="../sources/settingsdialog.cpp" line="311"/>
+         <source>Relative jumps:</source>
+-        <translation>相対ジャンプ:</translation>
++        <translation>相対的に移動:</translation>
+     </message>
+     <message>
+         <location filename="../sources/settingsdialog.cpp" line="317"/>
+@@ -1966,12 +1969,12 @@
+     <message>
+         <location filename="../sources/shortcuthandler.cpp" line="362"/>
+         <source>Skip backward</source>
+-        <translation>後ろに跳ぶ</translation>
++        <translation>後ろに移動</translation>
+     </message>
+     <message>
+         <location filename="../sources/shortcuthandler.cpp" line="366"/>
+         <source>Skip forward</source>
+-        <translation>前に跳ぶ</translation>
++        <translation>前に移動</translation>
+     </message>
+     <message>
+         <location filename="../sources/shortcuthandler.cpp" line="370"/>
+


--- a/srcpkgs_save/@qpdfview/patches/02.help_ja.html.patch  1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@qpdfview/patches/02.help_ja.html.patch  2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,63 @@
+--- a/help/help_ja.html  2023-01-28 19:40:47.229000000 +0900
++++ b/help/help_ja.html  2025-12-12 21:27:41.129366883 +0900
+@@ -44,7 +44,7 @@
+         <li><a href="#edit">編集</a></li>
+         <li><a href="#view">表示</a></li>
+         <li><a href="#tabs">タブ</a></li>
+-        <li><a href="#bookmarks">しおり</a></li>
++        <li><a href="#bookmarks">ブックマーク</a></li>
+         <li><a href="#help">ヘルプ</a></li>
+     </ol>
+     <li><a href="#mainview">メインビュー</a></li>
+@@ -87,13 +87,13 @@
+ 
+ <ul>
+     <li><b>前ページ/次ページ/最初のページ/最後のページ</b> 文書の前のページ、次のページ、最初のページ、最後のページへ移動します。</li>
+-    <li><b>指定ページへ跳ぶ...</b> 現在のタブに表示するページを入力するダイアログを開きます。</li>
+-    <li><b>後ろに跳ぶ/前に跳ぶ</b> 表示されているページの履歴で前後に跳びます。</li>
++    <li><b>指定ページへ移動...</b> 現在のタブに表示するページを入力するダイアログを開きます。</li>
++    <li><b>後ろに移動/前に移動</b> 表示されているページの履歴で前後に移動します。</li>
+     <li><b>検索...</b>
+ メインビューの下に検索ドックを開きます。そこに文字を入力すると、2秒後に自動的に検索が開始されます。また、リターンキーを押して手動で開始することもできます。リターンキーを押下する際に
+ Shift キーも押しておくと、現在のタブだけではなく全てのタブに対して検索を行います
+ (この挙動は、設定で拡張検索ドックが有効になっていると逆になります)。</li>
+-    <li><b>前を検索/次を検索</b> 文書内の検索用語が出現する前の場所、次の場所に跳びます。</li>
++    <li><b>前を検索/次を検索</b> 文書内の検索用語が出現する前の場所、次の場所に移動します。</li>
+     <li><b>検索を取り消す</b> 現在実行中の検索を取り止め、検索ドックを閉じます。</li>
+     <li><b>クリップボードにコピー</b> チェックを入れると、ドラッグで範囲選択できるようになり、選択した部分のテキストや画像をコピーすることができます。</li>
+     <li><b>註釈を追加</b> チェックを入れると、ドラッグで範囲選択できるようになり、選択した部分に註釈を追加することができます。</li>
+@@ -130,7 +130,7 @@
+     <li><b>プレゼンテーション...</b> F12 を押すとプレゼンテーションモードになります。Home キーを押すと最初のページを、End
+ キーを押すと最後のページを表示します。矢印キーの → と ↓、スペースキーと Page Down キーで次のページに移動します。矢印キーの ← と
+ ↑、Back Space キーと Page Up キーで前のページに移動します。Ctrl
+-キーを押しながらリターンキーを押すと、前に表示したページに跳びます。</li>
++キーを押しながらリターンキーを押すと、前に表示したページに移動します。</li>
+ </ul>
+ 
+ <p><b>拡大率</b>は Ctrl + L
+@@ -149,17 +149,17 @@
+ <p>このメニューには、クリックすることで現在のタブとして表示できる全てのタブが、メニュー項目として表示されます。タブは中クリックで閉じることができます。最初の9個までのタブは、Alt
+ キーを押しながら 1 〜 9 の数字キーを押すことで切り替えることもできます。</p>
+ 
+-<h4><a name="bookmarks">しおり</a> <a href="#top">&uarr;</a></h4>
++<h4><a name="bookmarks">ブックマーク</a> <a href="#top">&uarr;</a></h4>
+ 
+ <ul>
+-    <li><b>前のしおり</b> 現在のページより前の直近のしおりに跳びます。</li>
+-    <li><b>次のしおり</b> 現在のページより後の直近のしおりに跳びます。</li>
+-    <li><b>しおりを付ける</b> 現在のファイルとページにしおりを追加します。</li>
+-    <li><b>しおりを外す</b> 現在のファイルとページからしおりを削除します。</li>
+-    <li><b>しおりを全て外す</b> 全てのしおりを削除します。</li>
++    <li><b>前のブックマーク</b> 現在のページより前の直近のブックマークに移動します。</li>
++    <li><b>次のブックマーク</b> 現在のページより後の直近のブックマークに移動します。</li>
++    <li><b>ブックマークを付ける</b> 現在のファイルとページにブックマークを追加します。</li>
++    <li><b>ブックマークを外す</b> 現在のファイルとページからブックマークを削除します。</li>
++    <li><b>ブックマークを全て外す</b> 全てのブックマークを削除します。</li>
+     <li><b>開く</b> 任意のファイルを現在のタブに開きます。タブが無い場合は新しいタブにファイルが開かれます。</li>
+     <li><b>新規タブで開く</b> 新しいタブにファイルを開きます。</li>
+-    <li><b>指定ページへ跳ぶ</b> 対象のファイルを既に開いている場合は、直接そのページに移動します。そうでない場合は新しいタブにファイルを開きます。</li>
++    <li><b>指定ページへ移動</b> 対象のファイルを既に開いている場合は、直接そのページに移動します。そうでない場合は新しいタブにファイルを開きます。</li>
+ </ul>
+ 
+ <h4><a name="help">ヘルプ</a> <a href="#top">&uarr;</a></h4>
+


--- a/srcpkgs_save/@qpdfview/template   1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/@qpdfview/template   2026-01-28 10:52:35.000000000 +0900
@@ -0,0 +1,21 @@
+# Template file for '@qpdfview'
+pkgname=@qpdfview
+version=0.5.0
+revision=1
+build_style=qmake
+configure_args="qpdfview.pro 
+without_ps without_cups without_synctex without_dbus without_signals"
+hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
+makedepends="cups-devel djvulibre-devel file-devel libspectre-devel
+ poppler-qt5-devel qt5-svg-devel qt5-tools-devel"
+depends="desktop-file-utils hicolor-icon-theme qt5-plugin-sqlite qt5-svg"
+short_desc="Tabbed document viewer"
+maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/qpdfview"
+distfiles="https://launchpad.net/qpdfview/trunk/${version}/+download/qpdfview-0.5.tar.gz"
+checksum=44efc440a461cbdd757a9b396f1461ee7a2f4364e81df55bd0221f910219be99
+
+pre_configure() {
+   lrelease qpdfview.pro
+}


--- a/srcpkgs_save/work/@qpdfview/02.help_ja.html   1970-01-01 09:00:00.000000000 +0900
+++ b/srcpkgs_save/work/@qpdfview/02.help_ja.html   2025-12-27 19:51:38.000000000 +0900
@@ -0,0 +1,748 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+  <meta charset="UTF-8">
+  <title>「xbps の備忘録」</title>
+  <style>
+    h1 {color: brown; /* すべての h1タグの色 */
+    }
+    h2 {color: green; /* すべての h2タグの色 */
+    }
+    h3 {color: blue; /* すべての h3タグの色 */
+    }
+    h4 {color: navy; /* すべての h4タグの色 */
+    }
+  </style>
+</head>
+<body>
+
+<hr />
+<p style="color: gray;">編集:</p>
+<p style="color: gray;">$ featherpad ~/ダウンロード/srcpkgs_save/work/@qpdfview/02.help_ja.html</p>
+<p style="color: gray;">$ sudo cp ~/ダウンロード/srcpkgs_save/work/@qpdfview/02.help_ja.html /usr/share/qpdfview/help_ja.html<br/></p>
+
+<p style="color: gray;">(qpdfviw で翻訳の修正をしていない場合:)</p>
+<p style="color: gray;">$ sudo cp ~/ダウンロード/srcpkgs_save/work/@qpdfview/02.help_ja.html /usr/share/qpdfview/help.html</p>
+<p style="text-align: right">2024-12-27 (ver.4)</p>
+
+<hr />
+<h1>    「xbps-src」の備忘録:</h1>
+<p><br/></p>
+
+<hr />
+<h2>1.「xbps-src」にて、ビルド環境を更新する場合:</h2>
+<p><br/></p>
+
+<h3>1). システム更新:</h3>
+<pre><code>$ sudo xbps-install -Su
+</code></pre>
+
+<h3>2). 再起動:</h3>
+<pre><code>$ sudo reboot
+</code></pre>
+
+<h3>3). ローカルリポジトリの更新:</h3>
+<pre><code>$ cd ~/git/void-packages/
+$ git pull
+</code></pre>
+
+<h3>4). 「ブートストラップ パッケージ」の更新:</h3>
+<pre><code>$ cd ~/git/void-packages/
+$ ./xbps-src bootstrap-update
+</code></pre>
+
+<h3>5). 再起動:</h3>
+<pre><code>$ sudo reboot
+</code></pre>
+<p><br/></p>
+
+<hr />
+<h2>2.「xbps-src」にて、パッケージ化をやり直す場合:</h2>
+<p><br/></p>
+
+<h3>1). クリーンアップ:</h3>
+<pre><code>$ cd ~/git/void-packages/
+$ ./xbps-src clean &lt;パッケージ名&gt;
+</code></pre>
+
+<h3>2). パッケージ化:</h3>
+<pre><code>$ cd ~/git/void-packages/
+$ ./xbps-src pkg &lt;パッケージ名&gt;
+</code></pre>
+<p><br/></p>
+
+<hr />
+<h2>3.「xbps-src」にて、パッケージ化後にインストールする場合:</h2>
+<p><br/></p>
+
+<h3>1). 以前にインストールしたパッケージを削除:</h3>
+<pre><code>$ sudo xbps-remove &lt;パッケージ名&gt;
+</code></pre>
+
+<h3>2). インストール:</h3>
+<pre><code>$ sudo xbps-install --repository hostdir/binpkgs &lt;パッケージ名&gt;
+</code></pre>
+<p>もしくは、</p>
+<pre><code>$ xi &lt;パッケージ名&gt;
+</code></pre>
+
+<h3>3). インストールされたか確認:</h3>
+<pre><code>$ xbps-query -Rs &lt;パッケージ名&gt;
+</code></pre>
+<p>もしくは、</p>
+<pre><code>$ xbps-query -s &lt;パッケージ名&gt;
+</code></pre>
+<p><br/></p>
+
+<hr />
+<h2>4. ソースファイルを修正する場合:</h2>
+<p><br/></p>
+
+<h3>1). ソースファイルをダウンロードして展開:</h3>
+<pre><code>$ cd ~/git/void-packages/
+$ ./xbps-src clean &lt;パッケージ名&gt;
+$ ./xbps-src extract &lt;パッケージ名&gt;
+</code></pre>
+
+<h3>2). 「builddir」フォルダ配下のソースファイルに移動:</h3>
+<pre><code>$ ls -1p ~/git/void-packages/masterdir-x86_64/builddir/
+:
+@パッケージ名-バージョン番号/
+
+$ cd ~/git/void-packages/masterdir-x86_64/builddir/@パッケージ名-バージョン番号/
+</code></pre>
+<p><br/></p>
+
+<hr />
+<h2>5. 「パッチ」を作成する場合:</h2>
+<p><br/></p>
+
+<h3>1). 上記の「項番 4.」の「2).」の続き:</h3>
+<pre><code>$ cd ~/git/void-packages/masterdir-x86_64/builddir/@パッケージ名-バージョン番号/
+</code></pre>
+
+<h3>2). 差分を作成するためのフォルダを作成:</h3>
+<pre><code>$ mkdir -p {a,b}
+</code></pre>
+
+<h3>3). ソースをコピー:</h3>
+<pre><code>$ cd ~/git/void-packages/masterdir-x86_64/builddir/@パッケージ名-バージョン番号/
+$ sudo cp -r src/ a/
+$ sudo cp -r src/ b/
+</code></pre>
+
+<h3>4). 確認:</h3>
+<pre><code>$ ls -1p a/
+src/
+
+$ ls -1p b/
+src/
+</code></pre>
+
+<h3>5). 「b/」フォルダのソースを修正:</h3>
+<pre><code>$ featherpad b/src/translations/パッケージ名_ja.ts
+</code></pre>
+
+<h3>6). 「パッチ1」(差分)の作成:</h3>
+<pre><code>$ cd ~/git/void-packages/masterdir-x86_64/builddir/@パッケージ名-バージョン番号/
+$ diff -Naur a b > 01.パッケージ名_ja.ts.patch
+</code></pre>
+
+<h3>7). 「パッチ1」の修正:</h3>
+<pre><code>$ featherpad 01.パッケージ名_ja.ts.patch
+</code></pre>
+<p>↓ すべて貼付け:<br/><br/>
+先頭行を削除して、お尻に 2つの空行を追加<br/><br/>
+→Ctrl+S で保存:<br/><p>
+
+<h3>8). 「パッチ1」の配置:</h3>
+<pre><code>$ cd ~/git/void-packages/
+$ cp masterdir-x86_64/builddir/@パッケージ名-バージョン番号/01.パッケージ名_ja.ts.patch \
+ srcpkgs/@パッケージ名/patches/
+</code></pre>
+
+<h3>9). 複数のパッチを作成する場合:</h3>
+<p>差分の解消:</p>
+<pre><code>$ cd ~/git/void-packages/masterdir-x86_64/builddir/@パッケージ名-バージョン番号/
+$ sudo cp -r b/* a/
+</code></pre>
+<p>パッチの先頭番号を変えて、「項番 5).」〜「項番 8).」を繰り返し:<br/></p>
+
+<h3>10). 後始末:</h3>
+<pre><code>$ sudo rm -r a/
+$ sudo rm -r b/
+
+$ cd ~/git/void-packages/
+$ ./xbps-src clean @パッケージ名
+</code></pre>
+<p><br/></p>
+
+<hr />
+<h2>6. 個人で作成した「@アプリ」フォルダを退避する場合:</h2>
+<p><br/></p>
+
+<h3>1). 保存先のフォルダを作成:</h3>
+<pre><code>$ mkdir -p ~/ダウンロード/srcpkgs_save/
+</code></pre>
+
+<h3>2). 保存:</h3>
+<pre><code>$ cd ~/git/void-packages/
+$ sudo cp -r srcpkgs/@* ~/ダウンロード/srcpkgs_save/
+</code></pre>
+
+<h3>3). 「@アプリ」を一覧表示:</h3>
+<p>2025-12-27 現在:</p>
+<pre><code>$ cd ~/git/void-packages/srcpkgs/
+$ ls -1p @* | grep @
+:
+@featherpad:
+@geany:
+@geany-devel:
+@kshisen:
+@notepadqq:
+@qpdfview:
+</code></pre>
+
+<h3>4). 「@アプリ」をツリー表示:</h3>
+<p>2025-12-27 現在:</p>
+<pre><code>$ tree ~/ダウンロード/srcpkgs_save/
+:
+/home/user/ダウンロード/srcpkgs_save/
+├── @featherpad
+│ ├── patches
+│ │ ├── 01.help-del.patch
+│ │ ├── 02.help-translation-jp-ver4.patch  ←(備忘録 txt)
+│ │ └── 03.featherpad-desktop.patch
+│ └── template
+├── @geany
+│ ├── patches
+│ │ ├── 01.geany-po-ja.patch
+│ │ ├── 02.geany-src-templates.h.patch
+│ │ └── 03.geany-src-ui-utils.c.patch    ←(Tab を含み制限あり)
+│ └── template/
+├── @geany-devel -&gt; @geany         ←(リンク)
+├── @kshisen
+│ ├── patches
+│ │ └── 01.kshisen-desktop.patch
+│ └── template
+├── @notepadqq
+│ ├── files
+│ │ └── notepadqq
+│ ├── patches
+│ │ ├── 00.disable-stats.patch
+│ │ ├── 01.notepadqq<em>ja.ts-del.patch  
+│ │ └── 02.notepadqq</em>ja.ts.patch
+│ └── template
+├── @qpdfview               ←(現在はビルドで失敗します)
+│ ├── patches
+│ │ ├── 01.qpdfview<em>ja.ts.patch  
+│ │ └── 02.help</em>ja.html.patch
+│ └── template
+└── work           ↓ ビルド環境で使う「作業フォルダ」
+├── @geany
+│  ├── 03.geany-src-ui-utils.c.patch    ←(スクリプトで作成されたパッチ3)
+│  └── 03.geany-src-ui-utils.c.sh    ←(パッチ3 を作成するスクリプト)
+└── @qpdfview
+  ├── 02.help<em>ja.html           ←(備忘録 html)  
+  ├── 02.help</em>ja.html.md
+  ├── help<em>ja.html  
+  └── qpdfview</em>ja.qm          ←(翻訳のバイナリを退避)  
+
+16 directories, 24 files  
+</code></pre>
+<p><br/></p>
+
+<hr />
+<h2>7.「xbps-src」の「ビルド環境」を新規に作成する場合:</h2>
+<p><br/></p>
+
+<h3>1). システム更新:</h3>
+<pre><code>$ sudo xbps-install -Su
+</code></pre>
+
+<h3>2). 再起動:</h3>
+<pre><code>$ sudo reboot
+</code></pre>
+
+<h3>3). 「xbps-src」に必要なツールを確認:</h3>
+<pre><code>$ xbps-query -l | grep -e binutils -e curl -e git
+:
+ii binutils-2.44_2       GNU binary utilities
+ii binutils-doc-2.44_2   GNU binary utilities - info files
+ii binutils-libs-2.44_2  GNU binary utilities - shared libraries
+ii curl-8.17.0_1         Client that groks URLs
+ii git-2.51.2_1          Git Tree History Storage Tool
+ii libcurl-8.17.0_1      Multiprotocol file transfer library
+</code></pre>
+<p>→すべてインストールされていました:<br/></p>
+
+<h3>4). あると便利な「xtools」ツールをインストール:</h3>
+<pre><code>$ sudo xbps-install -S xtools
+</code></pre>
+
+<h3>5). 作業フォルダの作成:</h3>
+<pre><code>$ mkdir -p ~/git/
+</code></pre>
+
+<h3>6). 「void-packages」の git リポジトリをクローン(ローカルにコピー):</h3>
+<pre><code>$ cd ~/git/
+$ git clone https://github.com/void-linux/void-packages.git --depth=10
+</code></pre>
+
+<h3>7). 「xbps-src」をセットアップ:</h3>
+<pre><code>$ cd ~/git/void-packages/
+$ ./xbps-src binary-bootstrap
+</code></pre>
+
+<h3>8). 配布にライセンス制限のあるパッケージもビルドできるように、</h3>
+<h4>「~/git/void-packages/etc/conf」に設定を追加:</h4>
+<pre><code>$ cd ~/git/void-packages/
+$ echo XBPS_ALLOW_RESTRICTED=yes >> etc/conf
+</code></pre>
+
+<p>確認:</p>
+<pre><code>$ cat ~/git/void-packages/etc/conf
+:
+XBPS_ALLOW_RESTRICTED=yes
+</code></pre>
+
+<h3>9). 再起動:</h3>
+<pre><code>$ sudo reboot
+</code></pre>
+
+<h3>10). 「xbps-src」が使えるか確認:</h3>
+<pre><code>$ cd ~/git/void-packages/
+$ ls srcpkgs/パッケージ名
+</code></pre>
+<p><br/></p>
+
+<hr />
+<h1>     「xbps-src」の「ヘルプ表示」(和訳)</h1>
+<p><br/></p>
+
+<h3>表示:</h3>
+<pre><code>$ cd ~/git/void-packages/
+$ ./xbps-src --help
+</code></pre>
+
+<h3>書式:</h3>
+<blockquote>
+  <p>   <strong>xbps-src [オプション] <ターゲット> [引数]</strong></p>
+</blockquote>
+<P><br/></p>
+
+<hr />
+<h2>(1). ターゲットの説明:</h2>
+<P><br/> (1つだけが指定できます)<br/></p>
+
+<hr />
+<h3>binary-bootstrap</h3>
+<p> ホストリポジトリから &lt;masterdir&gt; にブートストラップパッケージを、インストールします。<br/>
+ オプションの  '-A &lt;arch&gt;' フラグが設定されている場合、このアーキテクチャから<br/>
+ ブートストラップパッケージとその必要な XBPS ユーティリティがインストールされます。<br/>
+ &lt;masterdir&gt; は、chroot 操作のために初期化されます。<br/></p>
+
+<hr />
+<h3>bootstrap</h3>
+<p> ソースからブートストラップパッケージを &lt;masterdir&gt; にビルドして、インストールします。<br/>
+ オプションの '-A &lt;arch&gt;' フラグが設定されている場合、このアーキテクチャから<br/>
+ ブートストラップパッケージとその必要な XBPS ユーティリティをビルドして、インストール<br/>
+ します。<br/>
+ &lt;masterdir&gt; は、chroot 操作のために初期化されます。<br/></p>
+
+<hr />
+<h3>bootstrap-update</h3>
+<p> XBPS 設定ファイルの登録リポジトリから利用可能な、最新のバージョンでブートストラップ<br/>
+ パッケージを更新します。<br/></p>
+
+<hr />
+<h3>consistency-check</h3>
+<p> すべてのパッケージで一貫性チェックを、実行します<br/></p>
+
+<hr />
+<h3>chroot</h3>
+<p> &lt;masterdir&gt; の chroot に、入ります。<br/></p>
+
+<hr />
+<h3>clean-repocache</h3>
+<p> &lt;hostdir&gt;/repocache から時代遅れのパッケージを、削除します。<br/></p>
+
+<hr />
+<h3>fetch &lt;パッケージ名&gt;</h3>
+<p> パッケージのソースファイルを、ダウンロードします。<br/></p>
+
+<hr />
+<h3>extract &lt;パッケージ名&gt;</h3>
+<p> パッケージのソースファイルを、ビルドディレクトリに展開します。<br/>
+ デフォルトは、&lt;masterdir&gt;/builddir に設定されます。</p>
+<p> →「hostdir/sources/」ディレクトリにダウンロードはされませんが、<br/>
+ ビルドディレクトリ「masterdir-x86_64/builddir/」に、ソースが展開されます:<br/></p>
+
+<hr />
+<h3>patch &lt;パッケージ名&gt;</h3>
+<p> パッケージソースにパッチを当て、設定とビルドのために<br/>
+ パッケージを準備するために必要な、他の操作を実行します。<br/></p>
+
+<hr />
+<h3>configure &lt;パッケージ名&gt;</h3>
+<p> パッケージを構成します(Fetch + Extract + Patch + Configure)<br/></p>
+
+<hr />
+<h3>build &lt;パッケージ名&gt;</h3>
+<p> パッケージのソースをビルドします(Fetch + Extract + Patch + Configure + Build)<br/></p>
+
+<hr />
+<h3>check &lt;パッケージ名&gt;</h3>
+<p> パッケージのソースをビルドした後に、パッケージのチェックを実行します。<br/></p>
+
+<hr />
+<h3>install &lt;パッケージ名&gt;</h3>
+<p> ターゲットのパッケージを &lt;destdir&gt; にインストールしますが、<br/>
+ 検査目的なので、バイナリパッケージのビルドをせず、ビルドディレクトリも削除しません。<br/></p>
+
+<hr />
+<h3>pkg &lt;パッケージ名&gt;</h3>
+<p> &lt;パッケージ名&gt; のバイナリパッケージ、およびすべての必要な依存関係をビルドして、<br/>
+ パッケージ化します。<br/></p>
+
+<hr />
+<h3>clean [パッケージ名]</h3>
+<p> 自動で依存関係を削除し、&lt;masterdir&gt;/builddir および &lt;masterdir&gt;/destdir を<br/>
+ クリーンアップします。
+ もし、&lt;パッケージ名&gt; が指定されている場合は、&lt;masterdir&gt;/destdir のパッケージ<br/>
+ ファイルと &lt;masterdir&gt;/buiddir のビルドディレクトリが削除されます。<br/></p>
+
+<hr />
+<h3>list</h3>
+<p> chroot される &lt;masterdir&gt;  にインストールされたパッケージの一覧を表示します。<br/></p>
+
+<hr />
+<h3>remove &lt;パッケージ名&gt;</h3>
+<p> &lt;destdir&gt; からターゲットパッケージを削除します。<br/>
+ ビルドテンプレートと &lt;パッケージ名&gt;-&lt;version&gt; が一致していない場合は、何も<br/>
+ 削除されません。<br/></p>
+
+<hr />
+<h3>remove-autodeps</h3>
+<p> 自動的にインストールされたすべてのパッケージの依存関係を削除します。<br/></p>
+
+<hr />
+<h3>purge-distfiles</h3>
+<p> &lt;hostdir&gt;/sources の、すべての時代遅れの distfiles を削除します。<br/></p>
+
+<hr />
+<h3>show &lt;パッケージ名&gt;</h3>
+<p> 指定されたパッケージの情報を表示します。<br/></p>
+
+<hr />
+<h3>show-avail &lt;パッケージ名&gt;</h3>
+<p> 特定のアーキテクチャ用にパッケージをビルドできる場合は「0」を返します。<br/></p>
+
+<hr />
+<h3>show-build-deps &lt;パッケージ名&gt;</h3>
+<p> &lt;パッケージ名&gt; に必要なビルドの依存関係を表示します。<br/></p>
+
+<hr />
+<h3>show-check-deps &lt;パッケージ名&gt;</h3>
+<p> &lt;パッケージ名&gt; に必要なチェックの依存関係を表示します。<br/></p>
+
+<hr />
+<h3>show-deps &lt;パッケージ名&gt;</h3>
+<p> &lt;パッケージ名&gt; の必要な ランタイムの依存関係を表示します。<br/>
+ パッケージは DestDir にインストールする必要があります。<br/></p>
+
+<hr />
+<h3>show-files &lt;パッケージ名&gt;</h3>
+<p> &lt;パッケージ名&gt; によってインストールされたファイルを表示します。<br/>
+ パッケージは DestDir にインストールする必要があります。<br/></p>
+
+<hr />
+<h3>show-hostmakedepends &lt;パッケージ名&gt;</h3>
+<p> &lt;パッケージ名&gt;の必要なホストビルド依存関係を表示します。<br/></p>
+
+<hr />
+<h3>show-makedepends &lt;パッケージ名&gt;</h3>
+<p> &lt;パッケージ名&gt; の必要なターゲットビルド依存関係を表示します。<br/></p>
+
+<hr />
+<h3>show-options &lt;パッケージ名&gt;</h3>
+<p> &lt;パッケージ名&gt;による利用可能なビルドオプションを表示します。<br/></p>
+
+<hr />
+<h3>show-shlib-provides &lt;パッケージ名&gt;</h3>
+<p> &lt;パッケージ名&gt; の提供された shlibs のリストを表示します。<br/>
+ パッケージは DestDir にインストールする必要があります。<br/></p>
+
+<hr />
+<h3>show-shlib-requires &lt;パッケージ名&gt;</h3>
+<p> &lt;パッケージ名&gt;に必要な shlibs のリストを表示します。<br/>
+ パッケージは DestDir にインストールする必要があります。<br/></p>
+
+<hr />
+<h3>show-var &lt;var&gt;</h3>
+<p> xbps-src で定義されている場合、&lt;var&gt; の値を表示します。<br/></p>
+
+<hr />
+<h3>show-repo-updates</h3>
+<p> XBPS リポジトリの時代遅れのパッケージのリストを表示します。<br/></p>
+
+<hr />
+<h3>show-sys-updates</h3>
+<p> システム内の時代遅れのパッケージのリストを表示します。<br/></p>
+
+<hr />
+<h3>show-local-updates</h3>
+<p> ローカルリポジトリの時代遅れのパッケージのリストを表示します。<br/></p>
+
+<hr />
+<h3>sort-dependencies <pkg> <pkgN+1> …</h3>
+<p> 追加の引数として、指定されたパッケージのリストが与えられた場合、<br/>
+ ソートされた依存関係リストが 標準出力 に返されます。<br/></p>
+
+<hr />
+<h3>update-bulk</h3>
+<p> 時代遅れのシステムリポジトリ内のすべてのパッケージを再ビルドします。<br/></p>
+
+<hr />
+<h3>update-sys</h3>
+<p> 時代遅れのシステム内のすべてのパッケージを再ビルドし、それらを更新します。<br/></p>
+
+<hr />
+<h3>update-local</h3>
+<p> 時代遅れのローカルリポジトリのすべてのパッケージを再ビルドします。<br/></p>
+
+<hr />
+<h3>update-check &lt;パッケージ名&gt;</h3>
+<p> 新しいリリースについて、&lt;パッケージ名&gt; の上流サイトをチェックします。<br/></p>
+
+<hr />
+<h3>update-hash-cache</h3>
+<p> 既存のソース distfiles で、ハッシュキャッシュを更新します。<br/></p>
+
+<hr />
+<h3>zap</h3>
+<p> ccache、distcc および host ディレクトリが保存された、masterdir を削除します。<br/></p>
+
+<hr />
+<p><br/></p>
+<h2>(2). オプションの説明:</h2>
+<p><br/></p>
+
+<hr />
+<h3>-1</h3>
+<p> ターゲットパッケージの依存関係が欠けている場合は、それらをビルドせずに、失敗します。<br/></p>
+
+<hr />
+<h3>-A &lt;ホスト&gt;</h3>
+<p> 指定のホストマシンを使用します。<br/>
+ masterdir-&lt;ホスト&gt; がまだ存在しない場合は自動的に作成されます。</p>
+<p> 一部のホストマシンは、プロセッサによってネイティブにサポートされていない場合、<br/>
+  qemu-user と binfmt-support を必要とする場合があります。<br/></p>
+
+<h4>サポートされているホスト:</h4>
+<pre><code>   aarch64-musl
+   aarch64
+   armv5te-musl
+   armv5te
+   armv5tel-musl
+   armv5tel
+   armv6hf-musl
+   armv6hf
+   armv6l-musl
+   armv6l
+   armv7hf-musl
+   armv7hf
+   armv7l-musl
+   armv7l
+   i686-musl
+   i686
+   mips-musl
+   mipsel-musl
+   mipselhf-musl
+   mipshf-musl
+   ppc-musl
+   ppc
+   ppc64-musl
+   ppc64
+   ppc64le-musl
+   ppc64le
+   ppcle-musl
+   ppcle
+   riscv64-musl
+   riscv64
+   x86_64-musl
+   x86_64
+</code></pre>
+
+<hr />
+<h3>-a  <ターゲット></h3>
+<p>指定されたターゲットマシンのパッケージをクロスコンパイルします。<br/></p>
+
+<h4>サポートされているターゲット:</h4>
+<pre><code>   aarch64-musl
+   aarch64
+   armv5te-musl
+   armv5te
+   armv5tel-musl
+   armv5tel
+   armv6hf-musl
+   armv6hf
+   armv6l-musl
+   armv6l
+   armv7hf-musl
+   armv7hf
+   armv7l-musl
+   armv7l
+   i686-musl
+   i686
+   mips-musl
+   mipsel-musl
+   mipselhf-musl
+   mipshf-musl
+   ppc-musl
+   ppc
+   ppc64-musl
+   ppc64
+   ppc64le-musl
+   ppc64le
+   ppcle-musl
+   ppcle
+   riscv64-musl
+   riscv64
+   x86_64-musl
+   x86_64
+</code></pre>
+
+<hr />
+<h3>-b</h3>
+<p> 壊れているとマークされている、nocross、またはアーチで除外されている場合でも、<br/>
+ パッケージをビルドします。<br/></p>
+
+<hr />
+<h3>-c  &lt;configuration&gt;</h3>
+<p> &lt;configuration&gt; が指定されている場合、etc/conf.&lt;configuration&gt; は、主要な<br/>
+ 構成ファイル名として使用されます。<br/>
+ etc/conf が存在しない場合にのみ試行されます。<br/></p>
+
+<hr />
+<h3>-C</h3>
+<p> インストールが成功した後、ビルドディレクトリ、自動依存関係、パッケージ用の<br/>
+ destdir を削除しません。<br/></p>
+
+<hr />
+<h3>-E</h3>
+<p> ターゲットパッケージのリポジトリに、バイナリパッケージが存在する場合は、<br/>
+ それをビルドせず、すぐに終了します。<br/></p>
+
+<hr />
+<h3>-f</h3>
+<p> 正常に実行された場合でも、指定されたステージ(構成/ビルド/インストール/パッケージ化)<br/>
+ を実行します。<br/></p>
+
+<hr />
+<h3>-G</h3>
+<p> Enable XBPS<em>USE</em>GIT_REVS(詳細については、etc/defaults.conf を参照してください)<br/></p>
+
+<hr />
+<h3>-g</h3>
+<p> デバッグシンボルを備えた -dbg パッケージのビルドを有効にします。<br/></p>
+
+<hr />
+<h3>-H  &lt;hostdir&gt;</h3>
+<p> unset がデフォルトで、「void-packages/hostdir」がある場合に、<br/>
+ &lt;masterdir&gt;/host にマウントされる、バインドされるディレクトリへの絶対パスを指定。<br/>
+ host ディレクトリには、リモートリポジトリからダウンロードされたバイナリパッケージ、<br/>
+ ソース、パッケージの依存関係が保存されています。<br/></p>
+
+<hr />
+<h3>-h</h3>
+<p> 使い方を表示。<br/></p>
+
+<hr />
+<h3>-I</h3>
+<p> ソースを展開/読み込むのに役立つ必要な依存関係を無視します。<br/></p>
+
+<hr />
+<h3>-i</h3>
+<p> xbps-src の内部エラーを致命的なエラーにしません。<br/></p>
+
+<hr />
+<h3>-j</h3>
+<p> パッケージをビルドするときに使用する並列ビルドジョブ(プロセッサ)の数を指定。<br/></p>
+
+<hr />
+<h3>-L</h3>
+<p> ASCII の色を無効にします。<br/></p>
+
+<hr />
+<h3>-m  &lt;masterdir&gt;</h3>
+<p> unset がデフォルトで「void-packages/masterdir-&lt;host&gt;」がある場合に、<br/>
+ masterdir として使用するディレクトリへの絶対パスを指定。<br/>
+ masterdir は、パッケージを構築/保存/コンパイルする、メインとなるディレクトリです。<br/></p>
+
+<hr />
+<h3>-N</h3>
+<p> リモートリポジトリの使用を無効にして、依存関係を解決します。<br/></p>
+
+<hr />
+<h3>-o  <opt,~opt2,…></h3>
+<p> パッケージビルドオプションを有効または(<code>~</code> を付けて)無効にします。<br/>
+ 「etc/conf」がすでにいくつかを指定している場合、それはマージされています。<br/>
+ 依存関係をビルドする必要がある場合、これらのオプションを継承する場合、<br/>
+ これらのオプションはビルド内のすべてのパッケージに適用されることに注意<br/>
+ してください。</p>
+<p> 'show-options' target でサポートされているオプションを表示できます。<br/></p>
+
+<hr />
+<h3>-p  <variable,variable2,…></h3>
+<p> ターゲットを表示するには、デフォルトの変数に加えて指定された変数を表示します。<br/>
+ 変数は分割され、各単語はデフォルトで別々の行で表示されます。<br/>
+ 値全体を 1行で表示するには、asterisk を変数名に追加します。<br/></p>
+
+<hr />
+<h3>-Q</h3>
+<p> ターゲットパッケージのみのチェックステージを実行します。<br/></p>
+
+<hr />
+<h3>-K</h3>
+<p> 長いテストでチェックステージを実行します。<br/>
+ -Q とは異なり、これはビルドされた依存関係のチェックステージも実行されます。<br/></p>
+
+<hr />
+<h3>-q</h3>
+<p> xbps-src の情報出力をしません。(ビルド出力は引き続き表示されます)<br/></p>
+
+<hr />
+<h3>-r  <repo></h3>
+<p> 代替ローカルリポジトリを使用して、生成されたバイナリパッケージを保存します。<br/>
+ unset がデフォルトで &lt;hostdir&gt;/binpkgs になります。</p>
+<p> もし、set の場合、binpkgs は &lt;hostdir&gt;/binpkgs/<repo> に保存されます。<br/>
+ また、この代替リポジトリは、他のリポジトリよりも優先度の高い順序で依存関係を<br/>
+ 解決するためにも使用されます。<br/></p>
+
+<hr />
+<h3>-s</h3>
+<p> いくつかの警告をエラーにします。<br/></p>
+
+<hr />
+<h3>-t</h3>
+<p> 現在のものを汚さないように、一時的な masterdir を作成します。<br/>
+ 既存の masterdir には、最初に binary-bootstrap を完全に入力する必要があることに<br/>
+ 注意してください。</p>
+<p> ターゲットが終了すると、この一時的な masterdir は削除されます。<br/>
+ このフラグには xbps-uchroot(1) が必要であり、 overlayfs をサポートしていない<br/>
+ ファイルシステムでは機能しません。<br/></p>
+
+<hr />
+<h3>-v</h3>
+<p> 詳細なメッセージを表示します(update-check のみに影響します)。<br/></p>
+
+<hr />
+<h3>-V</h3>
+<p> xbps のバージョンを表示して、終了します。<br/><br/></p>
+
+<hr />
+
+</body>
+</html>
+

わざと空行 x2 開けています:

→Ctrl+O 後、ファイルを確認して Enter:

→Ctrl+X で終了:

-

-


- --- - --- - --- - --- - --- - --- - --- ----- ------

30-2. パッチとスクリプト、リンクの実行:

-

パッチは「差分ファイル」なので、何度も実行できないので注意:
うまくパッチされたかは、表示されるメッセージでわかります:

やり直す場合は、クリア(パッチを実行する前に戻す)処理が必要です:

-


1). パッチの実行:

移動:

$ cd ~/ダウンロード/
$ ls -1
:
01.@featherpad.patch
02.@geany.patch
03.@kshisen.patch
04.@notepadqq.patch
05.@qpdfview.patch

-

パッチ01 の実行:

$ sudo patch -p1 <  01.@featherpad.patch
:
patching file srcpkgs_save/@featherpad/patches/01.help-del.patch
patching file srcpkgs_save/@featherpad/patches/02.help-translation-jp-ver4.patch
patching file srcpkgs_save/@featherpad/patches/03.featherpad-desktop.patch
patching file srcpkgs_save/@featherpad/template

-

パッチ02 の実行:

$ sudo patch -p1 <  02.@geany.patch
:
patching file srcpkgs_save/@geany/patches/01.geany-po-ja.patch
patching file srcpkgs_save/@geany/patches/02.geany-src-templates.h.patch
patching file srcpkgs_save/@geany/template
patching file srcpkgs_save/work/@geany/03.geany-src-ui-utils.c.sh ←(スクリプト)

-

パッチ03 の実行:

$ sudo patch -p1 <  03.@kshisen.patch
:
patching file srcpkgs_save/@kshisen/patches/01.kshisen-desktop.patch
patching file srcpkgs_save/@kshisen/template

-

パッチ04 の実行:

$ sudo patch -p1 <  04.@notepadqq.patch
:
patching file srcpkgs_save/@notepadqq/files/notepadqq
patching file srcpkgs_save/@notepadqq/patches/00.disable-stats.patch
patching file srcpkgs_save/@notepadqq/patches/01.notepadqq_ja.ts-del.patch
patching file srcpkgs_save/@notepadqq/patches/02.notepadqq_ja.ts.patch
patching file srcpkgs_save/@notepadqq/template

-

パッチ05 の実行:

$ sudo patch -p1 <  05.@qpdfview.patch
:
patching file srcpkgs_save/@qpdfview/patches/01.qpdfview_ja.ts.patch
patching file srcpkgs_save/@qpdfview/patches/02.help_ja.html.patch
patching file srcpkgs_save/@qpdfview/template
patching file srcpkgs_save/work/@qpdfview/02.help_ja.html ←(xbps-src版)

-


2). システム更新:

$ sudo xbps-install -Su

-


3).再起動:

$ sudo reboot

-


4).「tree」のインストール:

$ sudo xbps-install -S tree

-


5).「tree」で表示:

$ cd ~/ダウンロード/
$ tree
:
.
├── 01.@featherpad.patch   ←(下記のフォルダの再現に使った パッチ01 )
├── 02.@geany.patch      ←( 〃 パッチ02 )
├── 03.@kshisen.patch     ←( 〃 パッチ03 )
├── 04.@notepadqq.patch    ←( 〃 パッチ04 )
├── 05.@qpdfview.patch     ←( 〃 パッチ05 )
│   
└── srcpkgs_save
    ├── @featherpad
    │   ├── patches
    │   │   ├── 01.help-del.patch
    │   │   ├── 02.help-translation-jp-ver4.patch
    │   │   └── 03.featherpad-desktop.patch
    │   └── template
    ├── @geany          ←(リンク、および、パッチの補完が必要)
    │   ├── patches
    │   │   ├── 01.geany-po-ja.patch
    │   │   └── 02.geany-src-templates.h.patch
    │   └── template
    ├── @kshisen
    │   ├── patches
    │   │   └── 01.kshisen-desktop.patch
    │   └── template
    ├── @notepadqq
    │   ├── files
    │   │   └── notepadqq
    │   ├── patches
    │   │   ├── 00.disable-stats.patch
    │   │   ├── 01.notepadqq_ja.ts-del.patch
    │   │   └── 02.notepadqq_ja.ts.patch
    │   └── template
    ├── @qpdfview
    │   ├── patches
    │   │   ├── 01.qpdfview_ja.ts.patch
    │   │   └── 02.help_ja.html.patch
    │   └── template
    │     
    └── work
        ├── @geany
        │   └── 03.geany-src-ui-utils.c.sh ←(パッチを作成するスクリプト)
        └── @qpdfview
            └── 02.help_ja.html        ←(「xbps-src」の備忘録)

-


6). 「03.geany-src-ui-utils.c.sh」スクリプトを実行してパッチを作成:

-

「work」フォルダの「所有者」と「グループ」を確認:
$ ls -l ~/ダウンロード/srcpkgs_save/ | grep work
:
drwxr-xr-x 3 root root 4096  1月 29 17:23 work

-

親フォルダと配下のすべての「所有者」と「グループ」を変更:
$ sudo chown -R user:user ~/ダウンロード/srcpkgs_save/

→「user」はPC で変わるので変更します:

-

確認:

$ ls -l ~/ダウンロード/srcpkgs_save/
:
drwxr-xr-x 3 user user 4096  1月 29 17:23 @featherpad
drwxr-xr-x 3 user user 4096  1月 29 17:23 @geany
drwxr-xr-x 3 user user 4096  1月 29 17:24 @kshisen
drwxr-xr-x 4 user user 4096  1月 29 17:24 @notepadqq
drwxr-xr-x 3 user user 4096  1月 29 17:24 @qpdfview
drwxr-xr-x 3 user user 4096  1月 29 17:23 work

-

スクリプトの実行:

ソースのインデント文字が「半角スペース」に統一されていない(Tab はブラウザで表示できない)ので、ひと手間かかります:

-

$ cd ~/ダウンロード/srcpkgs_save/work/@geany/
$ bash 03.geany-src-ui-utils.c.sh > 03.geany-src-ui-utils.c.patch
確認:
$ ls -1 ~/ダウンロード/srcpkgs_save/work/@geany/
:
03.geany-src-ui-utils.c.patch
03.geany-src-ui-utils.c.sh

-

配置:
$ cd ~/ダウンロード/srcpkgs_save/
$ cp work/@geany/03.geany-src-ui-utils.c.patch @geany/patches/

-

確認:
$ ls -1 ~/ダウンロード/srcpkgs_save/@geany/patches/
:
01.geany-po-ja.patch
02.geany-src-templates.h.patch
03.geany-src-ui-utils.c.patch  ←(タブ文字 (Tab) を含みます)

-


7). 続きは、「項番 2.」へ:

-

-


まとめ

前回は、 古い「ミニPC」(SSD) に、「Void Linux」をコマンド ラインである base イメージの「iso」からインストールして、「Xfce」デスクトップ環境を追加しました:

-

今回は、「xbps-src」のビルド環境を作成してから、以前の投稿で作成した「@アプリ」を使えるように環境を整えました:

-

これでまた、アプリの移植や、アプリで気になる部分の修正ができます:

-

-

こちらで挙げた「@アプリ」は、個人的に「xbps-src」のビルド環境を活用するときの、ひとつの例です。 使わなくても、「xbps-src」の使い方の例として参考になるかも。

ただし、「Void Linux」に貢献したいアプリとしてアップする場合は、このような名前の付け方はダメです:

-

いろいろな使い方ができるのも「xbps-src」の利点かな:

-

-

-


-

-

    目次

-

「投稿の先頭 へ」

-

-


-

「この目次 の先頭へ」

「本編の目次 に戻る」

-