Készítettem egy scriptet, és szeretném ha több nyelven is elérhető lenne, ha egy lang változó átállításra kerül a config fájlban.
Jelenleg ezt úgy oldottam meg hogy van a lang fájl, és abban String001="valami szöveg" van.
Igen ám, de így egészen átláthatatlan a script, mert nem tudom hogy mi hová tartozik.
Például:
while true; do
echo -n "${Cyan} ${String056} (y/n) "
read answer || break
answer_control_yn
error_level
done
if [ "${answer}" = "n" ]; then
echo -e "${Red} ${String057} ${NC} \n \r"
sound_mute
exit
fi
Miként lehet ezt elegánsabban megoldani? Nem beszélve arról hogy ez a sok változó nincs-e hatással a teljesítményre, illetve van-e valami maximum amivel még elbír a rendszer? A c és társaihoz nem értek.
- 1106 megtekintés
Hozzászólások
lang=hu
IFS=';'
while read lngcode hu en; do
eval "$lngcode='${!lang}'"
done < project.lng
project.lng:
l_kerdes1;Mi a neved?;Whats ur name?
l_kerdes2;Mi a kedvenc szined?;Whats ur fav color?
l_kerdes3;Hány tököt bír el egy fecske?;How many fetchckey can hold a pumpkin?
- A hozzászóláshoz be kell jelentkezni
ami nem teljesen jó, mert a while... subshell-bõl nem maradnak meg a változók...
- A hozzászóláshoz be kell jelentkezni
Beszédesebb nevek a
String001
forma helyett + megjegyzések?
:)
- A hozzászóláshoz be kell jelentkezni
>> Jelenleg ezt úgy oldottam meg hogy van a lang fájl, és abban String001="valami szöveg" van.
>> Igen ám, de így egészen átláthatatlan a script, mert nem tudom hogy mi hová tartozik.
Valahol láttam egy ilyen megoldást:
hu.txt:
valami_szoveg = "valami szöveg"
en.txt:
valami_szoveg = "something text"
és csak az adott file-t töltik be.
Persze érdemes angolul írni a változó neveket és akkor más is le tudja fordítani a saját nyelvere könnyen.
#!/bin/sh
LANG="hu"
. $LANG.txt
echo $green_apple
hu.txt:
green_apple="Zöld alma"
- A hozzászóláshoz be kell jelentkezni
Nagy elonye, hogy gettext kvazi alap, es megiscsak jobban nez ki, mint a ${String057} stuff.
--
|8]
- A hozzászóláshoz be kell jelentkezni
Jaja, illetve, ha az egy fájl látványosabb, körbe lehet járni:
mygettext () {
case $LANG in
hu*|HU*)
sed \
-e 's/@cyan@/türkiz... asszem/g' \
-e 's/@valami kerdes@/kiszeraméra bávatag?/g'
;;
en*|EN*|C)
sed \
-e 's/@cyan@/Cyan/g' \
-e 's/@valami kerdes@/What the heck?/g'
;;
*)
# ez meg milyen nyelv?
;;
esac
}
echo -n "@cyan@ @valami kerdes@ (y/n) " | mygettext
- A hozzászóláshoz be kell jelentkezni
ööö A félreértések végett.
Már van egy lang mappa, és abban jelenleg két fájl hu, és en.
A config fájlban megadom a language=hu -t akkor minden üzenet magyar lesz. Ha a config fájlban a language=en akkor minden üzenet angol lesz. Hogy miként hívom be az adott fájlt, azt már megoldottam. Ez most így működik, de már nem tudom hogy hová mit írtam.
Az IFS-t ismerem de jelen esetben nem játszik, mert megzavarja a működést. Legalábbis nem tudom globálisan alkalmazni. Mivel egy tömb feldolgozása során már használom.
A gettext jó lehet, de valami olyan példát kéne találnom, amelyben látom a két nyelv megvalósítását. Miként lesz az adott szöveg egyszer angol, másszor magyar.
Illetve az alsó vonás alkalmazása a Stringx helyett is jó ötletnek tűnik.
- A hozzászóláshoz be kell jelentkezni