Openbox - 共通事項 - メニュー - obmenu-generator - アイテム名日本語化

 クラウディア
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
 とすれば、メニューを更新できます。  新規にアプリケーションをインストールした場合は、毎回これを実行します。  ついでに、前ページの内容で、メニューからこれを実行できるようにしました。
ハイスピードプラン弁当マイニングベース
 
 
カウンタバックグラウンド