저는 두 가지 언어가 포함된 bash 스크립트를 작성하고 있습니다. 하지만 그 구조를 구현할 수는 없습니다. "echo" 메시지가 변경되고 나머지는 변경되지 않습니다.
내 스크립트의 예:
영어
echo "Hello word"
sudo blabla
echo "Done"
온천
echo "Hola Mundo"
sudo blabla
echo "Terminado"
이제 내 생각은 다음과 같습니다.
function languaje(){
lan=`echo $LANG | cut -c1-2 | grep es`
if [ "$lan" ]; then
spa1=Hola Mundo
spa2=Terminado
else
eng1=Hello word
eng2=Done
fi
}
languaje
그래서 스크립트에서 변수를 생성해야 합니다.
$eng1
sudo blabla
$eng2
매우 복잡한...
이 예는 매우 간단합니다. 함수일 때는 상황이 더 복잡해집니다.
function dns1(){
read -p "Put your first DNS (Example: 8.8.8.8): " DNS1
DNSNEW1=`echo $DNS1 | egrep '^(([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$'`
if [ "$DNSNEW1" ]; then
find /etc/resolv.conf -type f -print0 | xargs -0 -I "{}" sed -i "s:8.8.8.8:$DNSNEW1:g" "{}"
echo "You entered correctly DNS1 $DNS1"
fi
}
dns1
언어를 "read -p" 및 "echo"로 변경해야 합니다.
PD: 저는 gettext 사용에 익숙하지 않습니다(그리고 작동 방식도 마음에 들지 않습니다).
답변1
이것이 gettext
최선의 해결책인 것 같지만, 정말로 사용하고 싶지 않다면 이 정도만으로도 충분하지 않을까요? 귀하의 bash가 배열을 지원한다고 가정하십시오.
#!/bin/bash
greeting=("Hello World" "Hola Mundo")
goodbye=("Done" "Terminado")
test "${LANG:0:2}" == "en"
eng=$?
echo ${greeting[${eng}]}
sudo blablabla
echo ${goodbye[${eng}]}