Change the webui language when it's factory locked - XIYO/asuswrt-merlin.ng-kr GitHub Wiki
์ผ๋ถ ๊ตญ๊ฐ(์: ์ผ๋ณธ)์์๋ ASUS ๋ผ์ฐํฐ๊ฐ ์น UI์์ ํ๋์ ์ธ์ด๋ง ํ์ฉํ๋๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ, ์ด๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ SSH๋ฅผ ํตํด ํ์์ ๋ฐ๋ผ ์ธ์ด๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ถํ /์์ ์ ์ธ์ด๋ฅผ ์ค์ ํ๋ ค๋ฉด ์คํฌ๋ฆฝํธ๋ฅผ /jffs/scripts/init-start์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ด ์คํฌ๋ฆฝํธ์ ๋ํ ์ง๋ฌธ๊ณผ ๋๊ธ์ ์ด SNB ํฌ๋ผ ์ค๋ ๋์์ ํ์ธํ ์ ์์ต๋๋ค.
์๊ตฌ ์ฌํญ
๊ด๋ฆฌ > ์์คํ ์์ "Enable JFFS custom scripts and configs"๋ฅผ ์ ํํ์ฌ ์ปค์คํ ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฑํํฉ๋๋ค.
์คํฌ๋ฆฝํธ
/jffs/scripts/set-webui-lang.sh๋ก ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํฉ๋๋ค.
#!/bin/sh
############################################################################
#
## ์ฌ์ฉ๋ฒ: set-webui-lang.sh [์ต์
] ARG1
## ๋ผ์ฐํฐ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์ธ์ด ๋ณ๊ฒฝ
## asuswrt-merlin์ฉ์ผ๋ก ์ค๊ณ๋ ์คํฌ๋ฆฝํธ
## Asus RT-AX3000์์ asuswrt-merlin v384.17๋ก๋ง ํ
์คํธ๋จ
## ์ ์ : joomlafab
##
## ์ต์
:
## -p ์ธ์ด ์ ํ์ ์ํ ํ๋กฌํํธ ์ ๊ณต
## ์ฌ์ฉ ์ ARG1 ๋ฌด์๋จ
##
## -q ์กฐ์ฉํ ๋ชจ๋, ๋ฉ์์ง ์ถ๋ ฅ ์์
##
## -f UI๋ฅผ ์๋ ๊ณต์ฅ ์ธ์ด๋ก ์ฌ์ค์
## ์ฌ์ฉ ์ ARG1 ๋ฐ -p ๋ฌด์๋จ
##
## ์ธ์
## ARG1 ์ธ์ด ์ฝ๋ (2๊ธ์, ๋์๋ฌธ์ ๊ตฌ๋ถ ์์)
## ์ ๊ณต๋์ง ์๊ฑฐ๋ ์ ๊ณต๋ ARG1์ด ์กด์ฌํ๋ ์ฌ์ ๊ณผ ์ผ์นํ์ง ์์ผ๋ฉด
## DEFAULT_DICT ์ ์ฉ๋จ
#
############################################################################
# ์ฌ์ฉํ ๊ธฐ๋ณธ ์ฌ์
DEFAULT_DICT="EN"
# ์๋ ๊ณต์ฅ ์ธ์ด ๊ฐ์ ธ์ค๊ธฐ
FACTORY_DICT=$(nvram get preferred_lang)
# ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์ฌ์ ๋์ด
AVAILABLE_LANGUAGES=$(ls /www/ | grep dict | cut -d'.' -f1 | xargs | tr '\s' ', ')
# ์ต์
๊ฐ์ ธ์ค๊ธฐ
for param in "$@"; do
case $param in
-p)
prompt=true
;;
-q)
quiet=true
;;
-f)
factory=true
;;
*)
if [ -z "$inputDict" ](/XIYO/asuswrt-merlin.ng-kr/wiki/--z-"$inputDict"-); then
inputDict=$(echo $param | tr 'a-z' 'A-Z' | grep -o -w -E '^[A-Z]{2}')
fi
;;
esac
done
############################################################################
#
# log - ์กฐ์ฉํ ๋ชจ๋๊ฐ ์ค์ ๋์ง ์์๋ค๋ฉด ๋ก๊ทธ ๋ฉ์์ง ์ถ๋ ฅ
#
############################################################################
log()
{
if [ -z "$quiet" ](/XIYO/asuswrt-merlin.ng-kr/wiki/--z-"$quiet"-) ; then
echo "$1"
fi
}
# ์ต์
์ ๋ฐ๋ผ ์ ์ ํ ์ฌ์ ์ ํ
if [ "$factory" = true ](/XIYO/asuswrt-merlin.ng-kr/wiki/-"$factory"-=-true-); then
inputDict="$FACTORY_DICT"
elif [ "$prompt" = true ](/XIYO/asuswrt-merlin.ng-kr/wiki/-"$prompt"-=-true-); then
echo "์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ด: $AVAILABLE_LANGUAGES"
while true; do
read -p "์ธ์ด ์ฝ๋๋ฅผ ์
๋ ฅํ ํ Enter๋ฅผ ๋๋ฅด์ธ์: " inputDict
inputDict=$(echo $inputDict | tr 'a-z' 'A-Z' | grep -o -w -E '^[A-Z]{2}')
dictFile="/www/$inputDict.dict"
if [ -n $inputDict ](/XIYO/asuswrt-merlin.ng-kr/wiki/--n-$inputDict-) && [ -f $dictFile ](/XIYO/asuswrt-merlin.ng-kr/wiki/--f-$dictFile-); then
break;
fi
echo -e "์๋ชป๋ ์ธ์ด ์ฝ๋์
๋๋ค.\n์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ด: $AVAILABLE_LANGUAGES";
done
elif [ -z "$inputDict" ](/XIYO/asuswrt-merlin.ng-kr/wiki/--z-"$inputDict"-); then
inputDict="$DEFAULT_DICT"
log "์ ํจํ ์ธ์ด ์ฝ๋
๊ฐ ์ ๊ณต๋์ง ์์์ต๋๋ค."
log "๊ธฐ๋ณธ $DEFAULT_DICT ์ฌ์ ์ ์ฉ ์ค."
fi
# ์ ํํ ์ฌ์ ์ด ์กด์ฌํ๋์ง ํ์ธ
dictFile="/www/$inputDict.dict"
while [ ! -f $dictFile ](/XIYO/asuswrt-merlin.ng-kr/wiki/-!--f-$dictFile-); do
if [ "$inputDict" = "$DEFAULT_DICT" ](/XIYO/asuswrt-merlin.ng-kr/wiki/-"$inputDict"-=-"$DEFAULT_DICT"-); then
log "๊ธฐ๋ณธ ์ฌ์ $DEFAULT_DICT์(๋ฅผ) ์ฐพ์ ์ ์์ต๋๋ค. ๋ณ๊ฒฝ ์ฌํญ ์์."
exit;
fi
log "$inputDict ์ฌ์ ์ ์ฐพ์ ์ ์์ต๋๋ค.";
log "๊ธฐ๋ณธ $DEFAULT_DICT ์ฌ์ ์ ์ฉ ์ค."
inputDict="$DEFAULT_DICT"
dictFile="/www/$DEFAULT_DICT.dict"
done
log "์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ธ์ด๋ฅผ $inputDict๋ก ๋ณ๊ฒฝํฉ๋๋ค."
# ๊ธฐ์กด์ ๋ง์ดํธ๋ ์ฌ์ ํด์
# ์ฌ๋ฌ ๋ฒ ๋ง์ดํธํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฃจํ์์ ์ํ
for mountPoint in $(mount | cut -d' ' -f3 | grep "/www/$FACTORY_DICT.dict"); do
umount "$mountPoint"
done
# ์ ํํ ์ธ์ด ์ฌ์ ๋ง์ดํธ
if [ "$inputDict" != "$FACTORY_DICT" ](/XIYO/asuswrt-merlin.ng-kr/wiki/-"$inputDict"-!=-"$FACTORY_DICT"-); then
mount -o bind $dictFile "/www/$FACTORY_DICT.dict"
fi
# UI ์ฌ์์
service restart_httpd > /dev/null
log "์๋ฃ๋จ."
์ฌ์ฉ ๋ฐฉ๋ฒ
์ธ์ด๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ ์ ํญ์ ์น UI์์ ๋ก๊ทธ์คํํ์ธ์. ๋ก๊ทธ์คํํ์ง ์์ผ๋ฉด ์ธ์ด๋ฅผ ๋ณ๊ฒฝํ ํ "5๋ฒ ์๋ชป๋ ์ฌ์ฉ์ ์ด๋ฆ ๋๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ์ต๋๋ค. 5๋ถ ํ์ ๋ค์ ์๋ํ์ธ์"๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋ ์ ์์ผ๋ฉฐ, ๊ธฐ๋ค๋ ค์ผ ํ ์ ์์ต๋๋ค.
๋ค์ํ ์ต์ ์ผ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ํธ์ถํ์ฌ ์ธ์ด๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
# ์ธ์ด๋ฅผ ์ ํํ ์ ์๋ ํ๋กฌํํธ์ ํจ๊ป ์คํฌ๋ฆฝํธ ํธ์ถ
/jffs/scripts/set-webui-lang.sh -p
# ์น UI๋ฅผ ์ธ์ด XX๋ก ์ค์ ํ๋ ค๋ฉด ์คํฌ๋ฆฝํธ ํธ์ถ
# ์๋ชป๋ ์ฝ๋๋ฅผ ์
๋ ฅํ๋ฉด DEFAULT_DICT๊ฐ ์ ์ฉ๋ฉ๋๋ค
# DEFAULT_DICT๋ ์คํฌ๋ฆฝํธ ์๋จ์์ ์ค์ ๋ฉ๋๋ค
/jffs/scripts/set-webui-lang.sh XX
# ์น UI๋ฅผ ๊ณต์ฅ ์ธ์ด๋ก ์ฌ์ค์ ํ๋ ค๋ฉด ์คํฌ๋ฆฝํธ ํธ์ถ
/jffs/scripts/set-webui-lang.sh -f
์ฌ๋ถํ ํ ์ง์์ฑ
์์ ์ ์ ํธํ๋ ์ธ์ด๋ฅผ ์ค์ ํ๋ ค๋ฉด /jffs/scripts/init-start์ ์คํฌ๋ฆฝํธ ํธ์ถ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. "EN"์ ์ํ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ด๋ก ๋ณ๊ฒฝํ์ธ์.
/jffs/scripts/set-webui-lang.sh -q EN
์ด ํ ์ค ๋ช ๋ น์ ๊ทธ ์์ ์ ์ํํด ์ค๋๋ค(ํ์ํ ๊ฒฝ์ฐ /jffs/scripts/init-start๋ฅผ ์์ฑํ๊ณ ์คํ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค). "EN"์ ์ํ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ด๋ก ๋ณ๊ฒฝํ์ธ์.
[ ! -f /jffs/scripts/init-start ](/XIYO/asuswrt-merlin.ng-kr/wiki/-!--f-/jffs/scripts/init-start-) && echo -e "#!/bin/sh\n" > /jffs/scripts/init-start && chmod +x /jffs/scripts/init-start ; if ! grep -q "set-webui-lang.sh" /jffs/scripts/init-start; then echo -e "/jffs/scripts/set-webui-lang.sh -q EN\n" >> /jffs/scripts/init-start; fi
๋ฌธ์ ํด๊ฒฐ
์ฌ์ ๋ชฉ๋ก์ ์๋ ์ธ์ด ์ค ์ผ๋ถ๋ ์๋ํ์ง ์์ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๋ค๋ฅธ ์ธ์ด๋ฅผ ์๋ํ๊ฑฐ๋ ๊ณต์ฅ ์ธ์ด๋ก ๋๋๋ฆด ์ ์์ต๋๋ค.