- 1. 概要
- 2. アイテム名日本語化
- 3. 実行
1. 概要
これは、
/usr/share/applications/
配下を
~/.local/share/applications/
へまるまるコピーして
Name=
の内容へ
Name[ja]=
の中身をまるまる写しちゃうというものです。
以前は、「perl」で記述しておりましたが、不都合なことが多くなりまして、「python」に書き換えました(2020年9月2日)。
2. アイテム名日本語化
「.desktop」のコピー、日本語化、「obmenu-generator」の実行まで一気にやっちゃいます。
vi ~/ObmenuJapanize.pl
以下を記述します。
import configparser
import os
import shutil
import subprocess
import sys
##
# @file obmenu-japanize.py
# @version 0.1
# @author show.kit 更新
# @date 2020年9月1日
# @brief obmenu-generator 日本語化(perl では、Config::Tiny をインストールしないと対応できない)
from_root = '/usr/share/applications/'
to_root = '/.local/share/applications/'
extname = 'desktop'
verbose = False
argc = len(sys.argv)
if (argc > 1):
opt = sys.argv[1]
if (opt == '-v'):
verbose = True
##
# /usr/share/applications/ 配下の .desktop ファイルをフルパスでリストする
def find_all_files(directory):
for root, dirs, files in os.walk(directory):
yield root
for file in files:
yield os.path.join(root, file)
## コピー先ディレクトリ
to_root = os.path.expanduser('~') + to_root
os.makedirs(to_root, exist_ok=True)
## 日本語化しなくていいプログラム
special_case = {
'thunar-bulk-rename.desktop' : 'Bulk Rename',
'termite.desktop' : 'Termite',
'thunderbird.desktop' : 'Thunderbird',
'vivaldi-stable.desktop' : 'Vivaldi',
}
## .desktop ファイルをリストする
for file in find_all_files(from_root):
basename = os.path.basename(file)
root, ext = os.path.splitext(file)
## デスクトップファイルであれば
if (ext == '.' + extname):
## デバック用
#if (basename == "pamac-manager.desktop"):
#import pdb; pdb.set_trace()
## ConfigParser を大文字/小文字を区別する設定に変更
config = configparser.ConfigParser()
config.optionxform = str
config.read(file)
section = 'Desktop Entry'
name = config.get(section, 'Name')
nameline_old = 'Name=' + name
nameline_new = 'Name=' + name
## 例外でなければ Name= を GenericName[ja]= もしくは Name[ja]= の値に変更
if (basename in special_case.keys()):
nameline_new = 'Name=' + special_case[basename]
else:
try:
desktop = dict(config.items(section))
if ('GenericName[ja]' in desktop.keys()):
nameline_new = 'Name=' + desktop['GenericName[ja]']
if ('Name[ja]' in desktop.keys()):
nameline_new = 'Name=' + desktop['Name[ja]']
except:
try:
nameline_new = 'Name=' + config.get(section, 'GenericName[ja]')
except:
pass
try:
nameline_new = 'Name=' + config.get(section, 'Name[ja]')
except:
pass
## デバック用
if (verbose):
print(basename, " ", nameline_old, " → ", nameline_new)
## /usr/share/applications/.desktop 読込オープン
with open(file, 'r') as fhr:
## ~/.local/share/applications/.desltop 書込オープン
with open(to_root+basename, 'w') as fhw:
## 1行ずつ読込
for line in fhr:
## Name= を更新
if (line == nameline_old+"\n"):
line = nameline_new+"\n"
## 1行ずつ書込み
fhw.write(line)
## メニュー更新
subprocess.call(['obmenu-generator', '-i', '-s', '-c'])
コメントをなるべく残しておりますので、解説はしません。
3. 実行
前項のモジュール
は、ユーザホームの直下に置いてください。
グラフィックログインしたユーザで、端末を開いて
python ~/ObmenuJapanize.pl
とすれば、メニューを更新できます。
新規にアプリケーションをインストールした場合は、毎回これを実行します。
ついでに、前ページの内容で、メニューからこれを実行できるようにしました。
|