最近測試Zabbix 5.0,去修改語言時發現不能選擇“Chinese(zh_CN)”,這個選項在下拉框中是灰色的(無法選擇)。提示“You are not able to choose some of the languages, because locales for them are not installed on the web server.”, 操作系統為CentOS Linux release 8.1.1911 (Core)
從旁邊的提示信息判斷,可能是Web服務器沒有安裝中文包,但是也有可能Zabbix把對中文的支持給關閉了,所以我們先檢查一下php代碼,找到/usr/share/zabbix/include/下的locales.inc.php文件
如上所示,Zabbix是允許你選擇“Chinese(zh_CN)”選項的,那么可能是沒有安裝中文包,那么接下來,我們來檢查一下這台服務器是否安裝中文包。
# locale -a | grep "zh_CN"
輸出為空,那么可以判斷這台服務器沒有安裝中文包,下面來安裝。
查找有哪些語言安裝包
#yum search langpacks
安裝中文語言包有下面兩種方式
#yum install langpacks-zh_CN.noarch
#dnf install langpacks-zh_CN.noarch
我使用yum安裝成功后,檢查發現下面輸出依然為空,這個是因為這里沒有安裝glibc-common包,需要安裝glibc-common實現對已安裝語言包的識別。
# locale -a | grep "zh_CN"
# dnf install glibc-common
安裝完glibc-common包,驗證測試langpacks-zh_CN.noarch已經安裝成功了。
# locale -a | grep zh_CN
zh_CN
zh_CN.gb18030
zh_CN.gbk
zh_CN.utf8
完成上面步驟后,回到Zabbix界面刷新后,就可以選擇“Chinese(zh_CN)”了。問題解決。
Zabbix圖片文字亂碼
在后續的使用過程中,發現一些界面中文顯示為亂碼.如下截圖所示:
在/usr/share/zabbix/include/下,檢查defines.inc.php,可以發現代碼里面定義了下面字體相關常量
define('ZBX_FONTPATH', realpath('assets/fonts')); // where to search for font (GD > 2.0.18)
define('ZBX_GRAPH_FONT_NAME', 'graphfont'); // font file name
define('ZBX_FONT_NAME', 'graphfont');
define('ZBX_PREG_DEF_FONT_STRING', '/^[0-9\.:% ]+$/')
define('ZBX_STYLE_MONOSPACE_FONT', 'monospace-font');
可以看出zabbix使用了/usr/share/zabbix/assets/fonts下面定義的字體文件,而沒有使用linux的系統字體,從網上搜索的資料來看,可以將Windows下的一些字體文件上傳到這個目錄來解決亂碼問題。
方案1:使用Windows中的字體替換graphfont.ttf
從C:\Windows\Fonts中找到微軟雅黑字體上傳到/usr/share/zabbix/assets/fonts下面后,將雅黑字體MSYH.TTF改名為graphfont.ttf
# mv graphfont.ttf graphfont.ttf.bak
# mv MSYH.TTF graphfont.ttf
完整上面操作后,刷新頁面,發現亂碼確實解決了
方案2:修改代碼中的字體相關常量
sftp> cd /usr/share/zabbix/assets/fonts
sftp> put -r "C:\Windows\Fonts\STFANGSO.TTF"
Uploading STFANGSO.TTF to /usr/share/zabbix/assets/fonts/STFANGSO.TTF
100% 11096KB 11096KB/s 00:00:00
# mv STFANGSO.TTF STFANGSO.ttf #這里必須將文件后綴類型從TTF改為ttf,否則無法識別,或者說必須修改代碼才能識別。
define('ZBX_FONTPATH', realpath('assets/fonts')); // where to search for font (GD > 2.0.18)
#define('ZBX_GRAPH_FONT_NAME', 'graphfont'); // font file name
define('ZBX_GRAPH_FONT_NAME', 'STFANGSO'); // font file name
define('ZBX_GRAPH_LEGEND_HEIGHT', 120); // when graph height is less then this value, some legend will not show up
#define('ZBX_FONT_NAME', 'graphfont');
define('ZBX_FONT_NAME', '華文仿宋');
完成后刷新頁面,問題也可以解決。當然你也可以選擇一個你喜歡的字體。