Proxmox Mail Gateway のデフォルト言語を日本語等に。

MailGateway

選択可能な言語を一覧表示して、設定したい番号を入力しEnterキー押せばデフォルト言語を設定するShellScriptを書いてみた。
下記ファイルの内容を書き換えるだけの処理ですので vim 等のエディターで書き換えた方が早いかもしれません 🙂
そもそも、この修正で恒久的にデフォルトの言語が適用され続けられるのか、今後の検証が必要かと思ってます。
追加:2024/07/27
/usr/share/perl5/PMG/Service/pmgproxy.pm
上記ファイルの設定も変更するように修正。

追加:2024/08/12
今のところ、ログイン時に設定した言語が維持されているので大丈夫だと思う。

  1. /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

    render_language: function(value) {
        if (!value || value === '__default__') {
            return Proxmox.Utils.defaultText + ' (English)';
        }

    (English) を (Japanese) に変更。
    Proxmox Mail Gateway へのログイン時に表示される言語プルダウンリストの1番目に表示される文字列を変更しています。

  2. /usr/share/javascript/pmg-gui/js/pmgmanagerlib.js

    items: [
        {
    
        ...
    
                        {
                            xtype: 'proxmoxLanguageSelector',
                            fieldLabel: gettext('Language'),
                            value: Ext.util.Cookies.get('PMGLangCookie') || en,
                            name: 'lang',
                            submitValue: false,
                        },

    en を ja に変更。
    PMGLangCookieがブラウザのクッキーに設定されていない場合のデフォルトを変更しています。

  3. /usr/share/perl5/PMG/Service/pmgproxy.pm

    sub get_index {
    my ($nodename, $server, $r, $args) = @_;
    
    my $lang = 'en';

    デフォルトの en を ja に変更。

使用する場合は自己責任でお願いします。
また、Linux のコマンド等を理解している人向けです。

実行例

# sh change_default_language.sh
( ) 1:العربية   Arabic
( ) 2:Català    Catalan
( ) 3:Dansk Danish
( ) 4:Deutsch   German
(*) 5:English   English
( ) 6:Español   Spanish
( ) 7:Euskera(Basque)   Euskera(Basque)
( ) 8:فارسی Persian(Farsi)
( ) 9:Français  French
( )10:Hrvatski  Croatian
( )11:עברית Hebrew
( )12:Italiano  Italian
( )13:日本語   Japanese
( )14:ქართული   Georgian
( )15:한국어   Korean
( )16:Bokmål    Norwegian(Bokmal)
( )17:Nederlands    Dutch
( )18:Nynorsk   Norwegian(Nynorsk)
( )19:Polski    Polish
( )20:PortuguêsBrasileiro   Portuguese(Brazil)
( )21:Русский   Russian
( )22:Slovenščina   Slovenian
( )23:Svenska   Swedish
( )24:Türkçe    Turkish
( )25:Українська    Ukrainian
( )26:中文(简体)    Chinese(Simplified)
( )27:中文(繁體)    Chinese(Traditional)
select language number: 13
[Japanese]: /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
[ja]: /usr/share/javascript/pmg-gui/js/pmgmanagerlib.js
[ja]: /usr/share/perl5/PMG/Service/pmgproxy.pm

ShellScript

change_default_language.sh

#!/bin/sh
# --------------------------------
# change default language
# --------------------------------

ORG_IFS=$IFS
IFS="
"

# --------------------------------
# modify file name
# --------------------------------
base_path="/usr/share/javascript"
proxmoxlib_file_name="${base_path}/proxmox-widget-toolkit/proxmoxlib.js"
pmgmanagerlib_file_name="${base_path}/pmg-gui/js/pmgmanagerlib.js"
pmgproxy_pm_file_name="/usr/share/perl5/PMG/Service/pmgproxy.pm"

# --------------------------------
# template file name
# --------------------------------
proxmoxlib_template=${proxmoxlib_file_name}.template
pmgmanagerlib_template=${pmgmanagerlib_file_name}.template
pmgproxy_pm_template=${pmgproxy_pm_file_name}.template

# --------------------------------
# language list file
# --------------------------------
language_list_file=/tmp/$(basename ${pmgmanagerlib_file_name}).lang.list

# --------------------------------
# create proxmoxlib template
# --------------------------------
create_proxmoxlib_template() {
    if [ ! -f ${proxmoxlib_template} ]; then
        sed -e "/render_language: function/,/renderEnabledIcon: enabled/ s/^\(.*return Proxmox.Utils.defaultText + ' (\)[a-zA-Z()]\{1,\}\()'.*$\)/\1@@LANG3@@\2/" ${proxmoxlib_file_name} > ${proxmoxlib_template}
    fi
}
# --------------------------------
# create pmgmanagerlib template
# --------------------------------
create_pmgmanagerlib_template() {
    if [ ! -f ${pmgmanagerlib_template} ]; then
        sed -e "s/^\(.*value: Ext.util.Cookies.get('PMGLangCookie') || '\)[a-zA-Z]\{2,\}\('.*\)$/\1@@LANG1@@\2/" ${pmgmanagerlib_file_name} > ${pmgmanagerlib_template}
    fi
}
# --------------------------------
# create pmgproxy_pm template
# --------------------------------
create_pmgproxy_pm_template() {
    if [ ! -f ${pmgproxy_pm_template} ]; then
        sed -e "/sub get_index/,/if (my $cookie/ s/^\(.*my \$lang = '\)[a-zA-Z]\{2,\}\('.*\)$/\1@@LANG1@@\2/" ${pmgproxy_pm_file_name} > ${pmgproxy_pm_template}
    fi
}

# --------------------------------
# get selected language
# --------------------------------
get_selected_language() {
    grep "value: Ext.util.Cookies.get('PMGLangCookie') || " ${pmgmanagerlib_file_name} \
        | grep -Eo "'[a-zA-Z]{2,}'," \
        | sed -e "s/[',]//g"
}

# --------------------------------
# create language list
# --------------------------------
create_language_list() {
    cat ${proxmoxlib_file_name} \
        | sed -n -e '/[ \f\n\r\t]language_map:/,/[ \f\n\r\t]},/p' \
        | sed -e 's/-/:/' \
              -e 's/[\t `,]//g' \
              -e 's/\${gettext("//' \
              -e 's/".*$//' \
        | tail -n +2  | head -n -1 > ${language_list_file}
}

# --------------------------------
# select language
# --------------------------------
select_language() {
    selected_language=$1
    no=1
    for language in $(cat ${language_list_file})
    do
        if [ $(echo ${language} | cut -d':' -f1 | grep "${selected_language}$") ]; then
            echo -n "(*)"
        else
            echo -n "( )"
        fi
        if [ ${no} -lt 10 ]; then
            echo -n " "
        fi
        echo -n "${no}:"
        echo $language | cut -d':' -f2- | sed -e 's/:/\t/'
        no=$((no + 1))
    done
}

# --------------------------------
# get language
# --------------------------------
get_language() {
    max=$(wc -l ${language_list_file} | cut -d' ' -f1)
    while [ 1 ];
    do
        read select_no
        if [ ! "x${select_no}" = "x" ]; then
            if [ ${select_no} -ge 1 -a ${select_no} -le ${max} ]; then
                break
            fi
        fi
    done
    sed -sn "${select_no},${select_no}p" ${language_list_file}
}

# --------------------------------
# fix proxmoxlib file
# --------------------------------
fix_proxmoxlib_file() {
    language=$(echo $1 | sed -e 's/:/\t/g')
    lang1=$(echo ${language} | cut -f 1)
    lang2=$(echo ${language} | cut -f 2)
    lang3=$(echo ${language} | cut -f 3)

    if [ "x${lang1}" = "x" ]; then
        echo "no change"
        exit
    fi

    cp -p ${proxmoxlib_file_name} \
        ${proxmoxlib_file_name}.bak.$(date +%Y%m%d_%H%M%S)
    sed -e 's/@@LANG3@@/'${lang3}'/' \
        ${proxmoxlib_template} > ${proxmoxlib_file_name}
    echo "[$lang3]: ${proxmoxlib_file_name}"
}
# --------------------------------
# fix pmgmanagerlib file
# --------------------------------
fix_pmgmanagerlib_file() {
    language=$(echo $1 | sed -e 's/:/\t/g')
    lang1=$(echo ${language} | cut -f 1)
    lang2=$(echo ${language} | cut -f 2)
    lang3=$(echo ${language} | cut -f 3)

    if [ "x${lang1}" = "x" ]; then
        echo "no change"
        exit
    fi

    cp -p ${pmgmanagerlib_file_name} \
        ${pmgmanagerlib_file_name}.bak.$(date +%Y%m%d_%H%M%S)
    sed -e 's/@@LANG1@@/'${lang1}'/' \
        ${pmgmanagerlib_template} > ${pmgmanagerlib_file_name}
    echo "[$lang1]: ${pmgmanagerlib_file_name}"
}
# --------------------------------
# fix pmgproxy_pm file
# --------------------------------
fix_pmgproxy_pm_file() {
    language=$(echo $1 | sed -e 's/:/\t/g')
    lang1=$(echo ${language} | cut -f 1)
    lang2=$(echo ${language} | cut -f 2)
    lang3=$(echo ${language} | cut -f 3)

    if [ "x${lang1}" = "x" ]; then
        echo "no change"
        exit
    fi

    cp -p ${pmgproxy_pm_file_name} \
        ${pmgproxy_pm_file_name}.bak.$(date +%Y%m%d_%H%M%S)
    sed -e 's/@@LANG1@@/'${lang1}'/' \
        ${pmgproxy_pm_template} > ${pmgproxy_pm_file_name}
    echo "[$lang1]: ${pmgproxy_pm_file_name}"
}

create_proxmoxlib_template
create_pmgmanagerlib_template
create_pmgproxy_pm_template

create_language_list
select_language $(get_selected_language)
echo -n "select language number: "
language_name=$(get_language)

fix_proxmoxlib_file ${language_name}
fix_pmgmanagerlib_file ${language_name}
fix_pmgproxy_pm_file ${language_name}

rm ${language_list_file}
IFS=$ORG_IFS

コメント

タイトルとURLをコピーしました