Премини към съдържанието
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Bash - Проблем със интернационализиране на шел скриптове


ivoarch

Препоръчан отговор

Така, от вчера се захванах чисто от любопитство със gettext(1), и по точно със това да добавя интернационализиране на един шел скрипт.

 

Та проблема ми е следният:

 

Това работи :)

$(gettext 'DD-ISO: Step 1: Choose a Target')"

или

$(gettext 'string_to_be_translated')"

h_1421590592_1952468_f61f36d2c4.png

 

Да обаче проблема ми идва когато има променливи във скрипта, ето така:

$(gettext '$script_name: Step 1: Choose a Target')"

или

$(gettext '$variable string_to_be_translated')"

h_1421590729_7198989_edba7e27cf.png

Пробвах също така, със поставяне на скоби '':
$(gettext ''$script_name': Step 1: Choose a Target')"

Но така не се извършва превода

 

h_1421590912_2263814_3cb4ed5403.png

 

Във .po файла е следното

#: dd-iso:93
#, sh-format
msgid "$script_name: Step 1: Choose a Target"
msgstr "$script_name: Стъпка 1: Изберете Целева"

Който генерирах ето така:

xgettext --language=Shell --force-po -o - dd-iso > dd-iso.po

и после създадох .mo файл , ето така

sudo msgfmt -o /usr/share/locale/bg/LC_MESSAGES/dd-iso.mo dd-iso.po

ето и как стартирам скрипта.

LANGUAGE=bg_BG ./dd-iso

Някакви идеи къде бъркам?
 

Линк към коментара
Сподели в други сайтове

Разгледай Това

Мерси tux но това не ме устройва :(

Успях да прочета малко повече по въпроса от Тук1, Тук2 Тук3, и тъй като нещо пак не ми се получават нещата, ми хрумна да изпробвам там където има $variable да ползвам eval_gettext 

но случайно ми излиза това ./dd-iso: line 98: eval_gettext: command not found

# yum install gettext*
Package gettext-devel-0.17-18.el6.i686 already installed and latest version
Package gettext-libs-0.17-18.el6.i686 already installed and latest version
Package gettext-0.17-18.el6.i686 already installed and latest version
Nothing to do

Което е странно защото уж имам всички пакети за gettext, погледнах един скрипт за Centos от тук, като във него се вижда ясно че се ползва eval_gettext.

 

Ето ги и пътищата които имам във $PATH

$ echo $PATH
/home/ivo/.rvm/gems/ruby-2.1.0/bin:/home/ivo/.rvm/gems/[email protected]/bin:/home/ivo/.rvm/rubies/ruby-2.1.0/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/home/ivo/.scripts:/home/ivo/.rvm/bin

edit2:

Още един пример който сега намерих.

https://github.com/trapd00r/Yoghurt/blob/master/aur.sh#L23

Линк към коментара
Сподели в други сайтове

Хехе открих топлата вода :D

Как съм го пропуснал, хем го четох 100 пъти това :D

 

Решението го намерих тук, благодарение на форумите във CentOS тук.

 

До колкото разбрах, номера става така:

 

 

За обикновени текстове си работи и със gettext повикване, ето така:

$(gettext 'string_to_be_translated')"

Да обаче когато има променливи, начина горе не работи, затова трябва да се използва eval_gettext, ето така:

 

Най горе във шел скрипта поставяме следното . gettext.sh което си е шел функция/библиотека  която

осигурява eval_gettext и бла бла...
 
ето и доказателството Цък!
 
След това кода става така:
"$(eval_gettext "\$variable string_to_be_translated")"

Забележете че вече има и двойни запетаи "" те са задължителни!

Има още няколко правила които трябва да схвана, но горе долу съм във правилна посока.

 

Като завърша ще шарна резултатът.

 

Поздрави!

 

Линк към коментара
Сподели в други сайтове

Ок, завърших интернационализирането на скрипта :D

 

Aко ви е писнало от unetbooting, може да пробвате  DD-ISO

(Прост GUI интерфейс за dd, който записва ISO дискови изображения на USB устройства.)  скрипта автоматично намира beesu,gtksudo,gtksu или kdesu и ви пита за привилегии и така на татък..

 

Изисква да имате bash, gettext и zentiy.

 

Ако има нещо което не е както трябва преведено може да помогнете за превода, като ми изпратите лично съобщение със вашият .patch или просто пишете тук :D

Линк към коментара
Сподели в други сайтове

Ок, завърших интернационализирането на скрипта :D

 

Aко ви е писнало от unetbooting, може да пробвате  DD-ISO

(Прост GUI интерфейс за dd, който записва ISO дискови изображения на USB устройства.)  скрипта автоматично намира beesu,gtksudo,gtksu или kdesu и ви пита за привилегии и така на татък..

 

Изисква да имате bash, gettext и zentiy.

 

Ако има нещо което не е както трябва преведено може да помогнете за превода, като ми изпратите лично съобщение със вашият .patch или просто пишете тук :D

 

Браво за труда.

 

Вече я тествах на служебния компютър със LinuxMint. Проблеми и грешки нямаше при записа на iso файла.

Линк към коментара
Сподели в други сайтове

Браво за труда.

 

Вече я тествах на служебния компютър със LinuxMint. Проблеми и грешки нямаше при записа на iso файла.

Мерси, въпреки че аз не съм истинският автор на DD-ISO, аз просто създадох мой форк на него, като съм оправил някои дребни проблеми, и съм добавил малко черешки :D

 

Да работи си перфектно, поне при мен е така,радвам се че и ти потвърди  :),

Този скрипт използва командата dd, но със графичен интерфейс за по лесно на потребителите които не са на ти със терминала, пък и със този скрипт не можете да объркате нищо, тъй като ви се показва единствено пътя на монтираното USB устройство, пътища като /dev/sda не се показват, за това няма причини да объркате какво то и да било. Имам още няколко идеи но ще видя до колко са изпълними, за сега е това...

 

Следете за обновления във github, после за да обновите в директорията на DD-ISO.

git pull
sudo make install

Поздрави!

Линк към коментара
Сподели в други сайтове

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване