選択可能な言語を一覧表示して、設定したい番号を入力しEnterキー押せばデフォルト言語を設定するShellScriptを書いてみた。
下記ファイルの内容を書き換えるだけの処理ですので
等のエディターで書き換えた方が早いかもしれません 🙂vim
そもそも、この修正で恒久的にデフォルトの言語が適用され続けられるのか、今後の検証が必要かと思ってます。
追加:2024/07/27
/usr/share/perl5/PMG/Service/pmgproxy.pm
上記ファイルの設定も変更するように修正。
追加:2024/08/12
今のところ、ログイン時に設定した言語が維持されているので大丈夫だと思う。
-
/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番目に表示される文字列を変更しています。 -
/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
-
/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
# --------------------------------
# file time stamp
# --------------------------------
file_time_stamp=$(date +%Y%m%d_%H%M%S)
# --------------------------------
# language list file
# --------------------------------
language_list_file=/tmp/$(basename ${pmgmanagerlib_file_name}).lang.list
# --------------------------------
# create proxmoxlib template
# --------------------------------
create_proxmoxlib_template() {
if [ ! -f ${proxmoxlib_template} -o $proxmoxlib_file_name -nt $proxmoxlib_template ]; then
cp -p ${proxmoxlib_file_name} ${proxmoxlib_file_name}.org.${ile_time_stamp}
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} -o $pmgmanagerlib_file_name -nt $pmgmanagerlib_template ]; then
cp -p ${pmgmanagerlib_file_name} ${pmgmanagerlib_file_name}.org.${file_time_stamp}
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} -o $pmgproxy_pm_file_name -nt $pmgproxy_pm_template ]; then
cp -p ${pmgproxy_pm_file_name} ${pmgproxy_pm_file_name}.org.${file_time_stamp}
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.${file_time_stamp}
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.${file_time_stamp}
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.${file_time_stamp}
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
コメント