把以下内容保存为 fix_lazarus_chinese.sh:
#!/bin/bash
#
# 参考资料:
# https://www.cnblogs.com/qiufeng2014/p/15722762.html
#
# 一、以下四文件中
# lazarus/components/synedit/lazsyngtk2imm.pas
# lazarus/lcl/interfaces/gtk2/gtk2globals.pp
# lazarus/lcl/interfaces/gtk2/gtk2widgetset.inc
# lazarus/lcl/interfaces/gtk2/gtk2proc.inc
#
# 增加以下内容
# {$ifdef linux}
# {$define WITH_GTK2_IM}
# {$endif}
#
# 二、以下文件
# lazarus/components/synedit/synedit.inc
#
# 增加以下内容
# {$ifdef LCLGTK2}
# {$define Gtk2IME}
# {$endif}
#
# 定义lazarus安装目录
LAZ_HOME=$HOME/dev/lazaru
K_WORD="{\\\$define WITH_GTK2_IM}"
F_WORD="{\\\$mode objfpc}{\\\$H+}"
R_WORD="${F_WORD}\\n\\n{\\\$ifdef linux}\\n{\\\$define WITH_GTK2_IM}\\n{\\\$endif}"
F_FILE=$LAZ_HOME/lazarus/components/synedit/lazsyngtk2imm.pas
if [ `grep -c "$K_WORD" $F_FILE` -eq '0' ];then
# 备份原文件
cp $F_FILE $F_FILE.bak
echo "Patching [ $F_FILE ]"
sed -i "s/$F_WORD/$R_WORD/" $F_FILE
head -50 $F_FILE
echo ""
echo "========================================================"
echo ""
fi
F_FILE=$LAZ_HOME/lazarus/lcl/interfaces/gtk2/gtk2globals.pp
if [ `grep -c "$K_WORD" $F_FILE` -eq '0' ];then
# 备份原文件
cp $F_FILE $F_FILE.bak
echo "Patching [ $F_FILE ] "
sed -i "s/$F_WORD/$R_WORD/" $F_FILE
head -50 $F_FILE
echo ""
echo "========================================================"
echo ""
fi
F_WORD="{\\\$IFNDEF USE_GTK_MAIN_OLD_ITERATION}"
R_WORD="{\\\$ifdef linux}\\n{\\\$define WITH_GTK2_IM}\\n{\\\$endif}\\n\\n${F_WORD}"
F_FILE=$LAZ_HOME/lazarus/lcl/interfaces/gtk2/gtk2widgetset.inc
if [ `grep -c "$K_WORD" $F_FILE` -eq '0' ];then
# 备份原文件
cp $F_FILE $F_FILE.bak
echo "Patching [ $F_FILE ] "
sed -i "s/$F_WORD/$R_WORD/" $F_FILE
head -50 $F_FILE
echo ""
echo "========================================================"
echo ""
fi
F_WORD="{off \\\$DEFINE VerboseUpdateSysColorMap}"
R_WORD="$F_WORD\\n\\n{\\\$ifdef linux}\\n{\\\$define WITH_GTK2_IM}\\n{\\\$endif}"
F_FILE=$LAZ_HOME/lazarus/lcl/interfaces/gtk2/gtk2proc.inc
if [ `grep -c "$K_WORD" $F_FILE` -eq '0' ];then
# 备份原文件
cp $F_FILE $F_FILE.bak
echo "Patching [ $F_FILE ]"
sed -i "s/$F_WORD/$R_WORD/" $F_FILE
head -50 $F_FILE
echo ""
echo "========================================================"
echo ""
fi
K_WORD="{\\\$define Gtk2IME}"
F_WORD="{\\\$DEFINE SYNEDIT_INCLUDE}"
R_WORD="{\\\$ifdef LCLGTK2}\\n{\\\$define Gtk2IME}\\n{\\\$endif}\\n\\n${F_WORD}"
F_FILE=$LAZ_HOME/lazarus/components/synedit/synedit.inc
if [ `grep -c "$K_WORD" $F_FILE` -eq '0' ];then
# 备份原文件
cp $F_FILE $F_FILE.bak
echo "Patching [ $F_FILE ]"
sed -i "s/$F_WORD/$R_WORD/" $F_FILE
head -50 $F_FILE
echo ""
echo "========================================================"
echo ""
fi
echo "Patched! Rebuild lazarus and take effect"
echo ""
然后执行:
sh ./fix_lazarus_chinese.sh
执行完成后,再编译lazarus