Перевод с Linux `` Gettext
29 gennaio 2008, 15:54 Место , Shell , Советы и хитрости 29 января 2008, 15:54Функция `Gettext` предназначена для обеспечения перевода всей операционной системы GNU / Linux. Именно по этой причине она является 100% совместим с большим количеством языков программирования и языков сценариев: C, C + +, C #, Bash, Python, GNU clsip, Emacs Lisp, GNU Smalltalk, Java, GNU AWK, Pascal, WxWidgets, YCP , Tcl, PHP, щука и другие.
Прежде всего, давайте посмотрим, как использовать `` Gettext в исходном коде. Правила реализации варьироваться в зависимости от используемого языка программирования для вашего проекта, но синтаксис почти всегда то же самое, по крайней мере для популярных языков программирования: функция просто содержит строку сообщения для перевода. Следует отметить, что почти всегда использует краткую форму, которая просто соответствует подчеркивания. Таким образом, следующий код в C:
printf(gettext("My name is %s\n"), mio_nome);
будет выглядеть так:
printf(_("My name is %s\n"), mio_nome);
Позже, команда xgettext будет фильтровать код, чтобы найти функции Gettext только что вставили, чтобы создать файл шаблона. Пот на основе извлеченных строк исходного кода. . Пример файла пот для кода, содержащего эти строки выглядит следующим образом:
#: include/myname.php:36
msgid "My name is %s\n"
msgstr ""
Чтобы начать перевод используется в программе `` msginit. Перемещение файлов. Маленькая `на` msginit можно создать новый файл, содержащий каркас нового. Бит в целевом языке. Например, чтобы преобразовать файл в итальянском en_EN.po просто выполните следующую команду:
язык = ru-msginit ввода = en_EN.po
В рамках программы будет создан файл it_IT.po, содержание которого будет похож на следующий:
#: include/myname.php:36
msgid "My name is %s\n"
msgstr "My name is %s\n"
На данный момент, переводчик не должны сделать перевод строки после msgstr. Перевод можно сделать в любом редакторе прямо из командной строки или с помощью специальных программ, как POedit . Результат будет выглядеть следующим образом:
#: include/myname.php:36
msgid "My name is %s\n"
msgstr "Mi chiamo %s\n"
. После перевода файлы Po должны быть скомпилированы в двоичный файл через Mo `msgfmt`.:
msgfmt it_IT.po















10 октября 2008 в 15:48
Здравствуйте, я сделал некоторое время назад servicemenus для kde3.
Теперь я доведение их до kde4 и я хотел бы добавить поддержку варварских языках
На практике, в меню "призывает Баш скрипт и сначала я вошел все строки уже" переведены на тот же сценарий:
например
-----------------
en_msg_savefile = "Сохранить файл ..."
it_msg_savefile = "Сохранить файл ..."
и т.д. ..
msg_SaveFile Eval = \ $ $ (echo $ {LANG} _msg_SaveFile)
, а затем echo "$ {} msg_SaveFile"
----------------
Теперь мне интересно, как вы думаете, можно "легко принять процедуру, описанные выше, чтобы найти scriptino в Баш?
Спасибо
10 октября 2008 в 21:25
Я нашел то, что я искал, спасибо.
Я хотел бы спросить вас об одном, есть некоторые слова на английском языке scivono определенным образом, но не в Италии или других языках.
например: Выполнено
Я пишу по-итальянски или готовых, по операции, проведенной ранее.
Если, например, повернуть изображение будет "окно с надписью" Поворот изображения casa.jpg "" Завершено "
Написать на английском языке всегда "Готово!"
Вы знаете, как я могу сделать, чтобы исправить это?
Спасибо заранее.
Многие начинают использовать kde4 и я написал несколько писем, которые надеялись на порт сценариев. Кроме того, что до сих пор есть 8 языков, но более "вне может увеличиться.
Приветствую Гуфи
13 октября 2008 в 10:05
Здравствуйте Иосиф,
извините за задержку, они очень заняты. Первый ответ на ваш второй вопрос: если вы решите использовать Gettext соответствие между языком базу и различные переводы обязательно должно быть уникальным для всех слов и, в случае, если язык перевода более сочлененный чем вылета, должен быть биективно, где это возможно. Если вы говорите о biunivocità невозможно, поэтому нужно просто перевести блоки фраз, а не отдельные слова. Или, как каждый хороший переводчик, вы просто взять небольшой хитрости. В вашем случае я бы перевести "Done" с "... Готово" вместо "завершено / к". Но я уверен, что у вас есть более сложные примеры, когда это простое решение недостаточно, girameli здесь, что мы обсуждаем их вместе.
Что касается вашего первого вопроса, а также знаю, что вы нашли решение только, скажу я вам, что с помощью Gettext является наиболее простым и быстрым и позволит сэкономить вызвать Eval и другие "фокусы"
Найти практический пример очень значительные по этому адресу:
http://tldp.org/LDP/abs/html/localization.html~~V
Но ... Я уверен, что вы уже видели, то я приглашаю Вас опубликовать здесь небольшой пример того, как вы реализовали его на благо всех
Bye! Иван
13 октября 2008 в 10:24
Привет, Иван, спасибо за ответ.
Дайте мне время, чтобы дать хорошее имя для переменных и исправить некоторые другие мелочи, а затем после еще как "комплекс.
Во всяком случае, когда я запускаю их на KDE-look.org общественности, как я сделал с теми, для kde3 здесь: http://www.kde-look.org/content/show.php/konq-pdf?content=37321
скоро
13 октября 2008 в 23:55
Говоря о трюков вы упомянули ... поддерживать полный перевод всех dettaggli язык, просто используйте ключ кому хэш-ключ, созданный вами, а не сам перевод. Например:
в исходном файле "GetText (msg_saveFile_title)"
, а затем мы создадим файл en.po и т.д. it.po
Таким образом сообщения и уникальные и более "позволяет мне использовать мужской, женский и нейтральный, и другие возможности.
Что вы думаете?
привет
15 октября 2008 в 12:31
Что касается сценариев, которые публикуются на KDE-look.org, дайте мне знать, когда вы делаете, мне любопытно. Второе сообщение (с использованием хэш-ключ с Gettext) Я уверен, что это будет практически невозможно достичь: языки очень сильно отличаются друг от друга как морфологических и синтаксических точки зрения, единственным решением является создание всех необходимых фраз на языке оригинала и создать соответствующие фразы на языке перевода. Она является источником бесконечных увольнений, но, поверьте, нет никакого альтернативного решения с помощью простого, но очень эффективный, как Gettext. Но он всегда может говорить, может быть, это мне, что я не догнал, в полном смысле ваш пост.
до свидания
Иван
15 октября 2008 в 15:40
Включение мало каналов разработчики осознают, что бы i18nc интернационализации контекстуальное. На практике это позволяет указать сообщение в зависимости от контекста. У меня нет глубины, потому что "я" было сказано, что было бы лучше, что каждая программа имеет в sorgento Су сообщения en_GB на английском языке, а затем, через lacoalizzazione, другие языки. Таким образом, в свете этого, я не могу использовать технику, упомянутых выше.
В любом случае я также сказал, что вы не должны использовать Gettext непосредственно, так что я могу использовать его для удара.
После этого введения, я решил сделать это с помощью технологии "Eval", и "как использовать указатели в Баш
Я только что закончил сегодня servicemenus и на море функций для работы с PDF. Я добавил некоторые, чем предыдущая версия. Я до сих пор скучаю переводов, так что мы должны «жди меня riconsegnino различных источников, переводчики перевод предложений, и я думаю, что это пойдет" немного времени (всего около 8 языков).
Я обещал немного больше, как "комплекс, то займет" одну из servicemenus я писал, будут отрезаны "все функции, кроме одной, и от дальнейших комментариев" рассмотрению только в части, относящейся к интернационализации.
Тема:
Servicemenu, которая извлекает изображения из PDF-документа. (Программа, это называется pdfimages и е ', содержащейся в Poppler-утилиты).
Он будет служить "файл. Рабочего положить в ~ / .kde/share/kde4/services/ServiceMenus или эквивалент системы (все пользователи).
Barbatrucco: Я заметил, вы также можете создавать подпапки, так что у вас есть более "порядке.
Файл, который мы называем pdfimages.desktop (произвольное имя) и содержит:
При нажатии на запись, запустить KDE, что есть в Exec строку [язык], где язык и "язык, установленный для KDE себя.
Как вы видите, называется scriptino sm_pdfimages.sh имени и некоторые параметры передаются: язык, действие, файл, на котором работают.
Пусть scriptino, который будет содержать:
Теперь давайте посмотрим, что происходит, когда вы вызываете сценарий вопрос:
Прежде всего я должен сказать, что я использую содержимое переменной действия, прямо как вызов функции
Таким образом, если экономия на дома и т.д. ... 

При запуске функции (например, все), удар заменяет переменные значения. Analizziamone только одно: "$ {} msg_imagesRootName_title"
Эта переменная содержит название диалоговом окне указать язык, однако, не
Правильное предложение получено с небольшой игры, которая заинтриговала меня сначала готовиться сами! Элементарный указатель (очень простые)
Перво-наперво, сначала определим переменные сообщения на любом языке, что меня интересует, и я призываю сами переменные с именем, который содержит строку используемого языка.
Таким образом, за титул:
Как вы можете видеть разницу имя это только начало.
Затем определите переменную, чье имя и 'То же, что описано выше, но без "язык" таким образом:
msg_imagesRootName_title Eval = \ $ $ (echo $ {LANG} _msg_imagesRootName_title)Если предположить, что язык, на использование его с этой процедурой, оболочка говорит msg_imagesRootName_title принимать значения в $ it_msg_imagesRootName_title и игры, и "сделать.
На практике, переменная будет содержать msg_imagesRootName_title "правильное сообщение на основе языка.
Готово.
После оценки нескольких альтернатив, так что казалось, наиболее "легко интернационализировать сценарий. Конечно, если у кого-то есть другая идея, будет приветствоваться.
Fiuu .. более «легко реализовать, чем объяснить.
Как уже упоминалось выше, это будет еще некоторое время перед публикацией, даже если бы я мог сделать это сейчас и переводы будут добавлены позже.
PS если вы хотите поставить метку для кода, чтобы сделать его более "читабельным, идти вперед.
Доброго времени суток всем
Иосиф
15 октября 2008 в 16:13
Кастрюля блюдо, это не просто комментарий, но сообщение с controfiocchi! Поздравление
Я признаю, у меня не было времени, чтобы проверить свой код, но логика есть, и это объясняется тем, ясно.
Вы первый, чтобы заработать запись в моей Blogroll! 
Иван
15 октября 2008 в 21:42
Привет, Иван, спасибо за ссылки на блоги.
. 
Комментарий кажется, долго, потому что часть кода
Я до сих пор не понимаю, почему "Вы не должны использовать Gettext непосредственно, казалось, очень просто и легко обновляется.
В любом случае, эти услуги меню дело не закончено, с небольшой контроль над потоком команд.
Теперь, когда я положил все в сценарии у меня есть шанс "во времени, чтобы содержать гораздо больше чеков. Если вы посмотрите на меню я сделал, поток является последовательным, так как каждая команда в файлах. Рабочего я не мог воспользоваться, если или переменных. Я действительно помню делать сальто, чтобы не прибегать к внешним файлам
Я надеюсь, что пример стимулы отвечал немного людей, для создания контекстных меню. В конце концов, мы сами, что мы будем улучшать наши kde4 или, по крайней мере, я сделал с моим, и я прекрасно там.
Если я могу я пытаюсь поставить эту работу на kde.org PDF так что каждый может работать на легко, без необходимости устанавливать что-либо.
Для всех:
Советы и предложения по новой функциональности приветствуются.
Я не программист, и вы даже не должны быть в нем участие. Несмотря на это многие люди по всему миру благодарили меня за то, что я даже думал, было возможно.
Желаю всем хорошей работы с kde4 или любой другой. (Всегда на открытых систем).
Иосиф
24 ноября 2008 в 1:03
Хотя и с некоторым опозданием, я опубликовал вчера servicemenu я работал.
Я поместил объявление на KDE-look.org у http://www.egregorion.net
Там в tar.gz и DEB для Intrepid.
Удачи
Иосиф