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

๋ฌธ์ œ ํ•ด๊ฒฐ

์‚ฌ์ „ ๋ชฉ๋ก์— ์žˆ๋Š” ์–ธ์–ด ์ค‘ ์ผ๋ถ€๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ์‹œ๋„ํ•˜๊ฑฐ๋‚˜ ๊ณต์žฅ ์–ธ์–ด๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.