Премини към съдържанието
ivoarch

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

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


Така, от вчера се захванах чисто от любопитство със 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/ruby-2.1.0@global/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

Редактирано от ivoarch (преглед на промените)

Сподели този отговор


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

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

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

 

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

 

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

 

 

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

$(gettext 'string_to_be_translated')"

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

 

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

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

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

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

 

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

 

Поздрави!

 

Редактирано от ivoarch (преглед на промените)

Сподели този отговор


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

Ок, завърших интернационализирането на скрипта :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 файла.

  • Харесва ми 1

Сподели този отговор


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

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

 

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

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

 

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

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

 

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

git pull
sudo make install

Поздрави!

Редактирано от ivoarch (преглед на промените)

Сподели този отговор


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

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

  • Разглеждащи това в момента   0 потребители

    Няма регистрирани потребители разглеждащи тази страница.

  • Горещи теми в момента

  • Подобни теми

    • от bumblebee
      От 2 дена се боря с това нешо и не мога да го направя - пробвах какво ли не. 
      Прецъквам като луд измежду 4 езика и не мога да ги махна. Помощ?
      Не мога да добавя снимките тук, затова ги пускам на линк - сами виждате, че са 4 езика, но не ми дава да махна другите, които не ми трябват.
      https://imgur.com/cHE31bG
      https://imgur.com/MPUtZYd
      https://imgur.com/a/nmgMF
    • от Калоян Данаилов
      Здравейте,
      Имам програма на C++ която искам да преобразувам в C.
      Ако можете да ми помогнете.
      Благодаря ви за отделеното внимание
      C++ to C.cpp
    • от profch0
      Здравейте! Може би има такава тема вече,но не съм попаднал на такава до момента и затова реших да направя една нова. Моля, ако е възможно да не се изтрива,а просто да се премести. Благодаря. 
      Сега към въпроса.. Вчера си инсталирах,сам, Windows 7 32bit на лаптоп ASUS F5RL(тук искам да отбележа,че съм нов въобще в сферата и самоук, и за първи път си инсталирах сам Windows, но съм изтеглил анлийска версия,явно), но както написах в скобите,се оказа,че Windows-а е на аглийски.. Започнах инсталирането и когато стигнах до езиците,първото ми даваше единствено ангийски да избера, останалите си ги направих на български и си викам "Аха,сега те хванах на тясно". Да,ама не. Приключих си инсталацията, но самият Windows си остана на ангийски(Control panel,Start Menu и т.н.). И сега въпросът ми е - Има ли някакъв начин,без да тегля нов Windows инсталатор, да си променя езика на този,който вече съм инсталирал на български? Благодаря за мненията.
    • от vlado39
      Изтрийте темата, оправих се.
    • от ivoarch
      Здравейте нищо особено , просто си дадох малко почивка и реших да се хвана със почистването така, че сглобих едно графично приложение за подреждане на файловете по десктоп ми във различни папки според типа на файла.
       
      Може да ви се стори интересно!
       
      Снимка на мръсотията!
       

       
      След почистване ,  свежо!
       

       
      Свалете:
      git clone https://gist.github.com/9c2160d29138df73ccaf.git cd 9c2160d29138df73ccaf/ chmod a+x CLeanMyDesktop.sh ./CLeanMyDesktop.sh Или копирайте от страница, ако ви е по лесно!
       
      Може да го пъхнете някъде във $PATH, за да го стартирате по лесно.
       
      edit: Мерси на @bvbvan за идеята!
      Забележка аз не ползвам бг на моят компютър за това моят път до десктоп директорията е $HOME/Desktop ако ползвате бг, сменете тази линия във скрипта на $HOME/Работен Плот или нещо такова.
       
      Приятно чистене!
       
      edit:Забравих инсталирайте си zenity, също ще ви трябва и notify-send По късно ще направя скрипта да проверява за тях.
  • Дарение

×

Информация

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