<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>LXF136:Gettext - История изменений</title>
		<link>http://wiki2.linuxformat.ru/index.php?title=LXF136:Gettext&amp;action=history</link>
		<description>История изменений этой страницы в вики</description>
		<language>ru</language>
		<generator>MediaWiki 1.11.1</generator>
		<lastBuildDate>Wed, 13 May 2026 22:25:07 GMT</lastBuildDate>
		<item>
			<title>Crazy Rebel в 05:29, 11 ноября 2011</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF136:Gettext&amp;diff=12965&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 05:29, 11 ноября 2011&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;: '''Пе­ре­вод''' Сде­ла­ем от­кры­тое ПО дос­туп­ным не­анг­ло­го­во­ря­щим&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;: '''Пе­ре­вод''' Сде­ла­ем от­кры­тое ПО дос­туп­ным не­анг­ло­го­во­ря­щим &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Категория:Учебники]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==''Gettext'': Ска­жи свое сло­во==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==''Gettext'': Ска­жи свое сло­во==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 11 Nov 2011 05:29:12 GMT</pubDate>			<dc:creator>Crazy Rebel</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF136:Gettext</comments>		</item>
		<item>
			<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF136:Gettext&amp;diff=12958&amp;oldid=prev</link>
			<description>&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''Пе­ре­вод''' Сде­ла­ем от­кры­тое ПО дос­туп­ным не­анг­ло­го­во­ря­щим&lt;br /&gt;
&lt;br /&gt;
==''Gettext'': Ска­жи свое сло­во==&lt;br /&gt;
&lt;br /&gt;
: Ес­ли анг­лий­ский для вас – ино­стран­ный язык, по­че­му бы не по­мочь пе­ре­вес­ти про­грам­мы на род­ную речь? '''Коэн Верв­лое­сем''' по­ка­зы­ва­ет, как.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF136_72_1.jpg|300px]] Не уве­рен на­счет высказывания гномьего воина, но ду­маю, что су­мею пе­ре­вес­ти ‘Giant Rat’!|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Хо­ти­те по­мочь лю­би­мой от­кры­той про­грам­ме, но не знае­те как, по­то­му что про­грам­мист вы неопыт­ный? Ес­ли анг­лий­ский для вас – ино­стран­ный язык, пе­ре­ве­ди­те про­грам­му на ваш соб­ствен­ный! Но за­чем этим занимать­ся? Как чи­та­тель Linux Format, вы, на­вер­ное, непло­хо знае­те анг­лий­ский, а то и во­об­ще пред­по­чи­тае­те анг­лий­скую вер­сию про­грам­мы, так как это ори­ги­нал, и, сле­до­ва­тель­но, бли­же к идее. Но есть ведь и дру­гие лю­ди, ко­то­рые го­во­рят на ва­шем род­ном язы­ке, а анг­лий­ский зна­ют ху­же, и от­сут­ствие хо­ро­ше­го пе­ре­во­да за­трудня­ет им ра­бо­ту с про­грам­мой. Так по­че­му бы не по­мочь им, сде­лав этот пе­ре­вод?&lt;br /&gt;
&lt;br /&gt;
Спер­ва на­до бы уз­нать, как про­грам­ма «под­це­п­ля­ет» пе­ре­вод. Мно­гие по­пу­ляр­ные про­грам­мы с от­кры­тым ис­ход­ным ко­дом при­ме­ня­ют под­ход ''GNU Gettext'', оп­ре­де­ляю­щий, как долж­на быть напи­са­на про­грам­ма, что­бы она под­дер­жи­ва­ла пе­ре­ве­ден­ные со­об­щения. Про­ект так­же со­дер­жит биб­лио­те­ку вре­мени вы­полнения, ко­то­рой долж­ны поль­зо­вать­ся про­грам­ми­сты, что­бы их со­об­щения пе­ре­во­ди­лись, и ряд ути­лит в по­мощь пе­ре­во­дчи­ку.&lt;br /&gt;
&lt;br /&gt;
Пе­ре­во­дчи­ки обыч­но не ра­бо­та­ют с ''Gettext'' на­пря­мую, но по­лез­но знать, как он ра­бо­та­ет в це­лом. Ес­ли про­грам­ма на ''C'' вы­во­дит сле­дую­щее со­об­щение:&lt;br /&gt;
&lt;br /&gt;
 printf(“Unknown command: %s.\n”, command);&lt;br /&gt;
&lt;br /&gt;
про­грам­мист мо­жет сде­лать его пе­ре­во­ди­мым, при­ме­нив функ­цию ''gettext'' ко всем стро­кам та­ким об­ра­зом:&lt;br /&gt;
&lt;br /&gt;
 printf(gettext(“Unknown command: %s.\n”), command);&lt;br /&gt;
&lt;br /&gt;
Пра­виль­но на­стро­ен­ная функ­ция ''gettext'' ищет пе­ре­дан­ную ей стро­ку в фай­лах пе­ре­во­да, и ес­ли пе­ре­вод есть, воз­вра­ща­ет стро­ку на язы­ке поль­зо­ва­те­ля. В про­тив­ном слу­чае воз­вра­ща­ет­ся ис­ход­ная стро­ка. Язык поль­зо­ва­те­ля обыч­но задается в ок­ру­жении ра­бо­че­го сто­ла или вруч­ную в скрип­те ''X''-сес­сии в пе­ре­мен­ной ок­ру­жения '''LC_MESSAGES'''.&lt;br /&gt;
&lt;br /&gt;
Так как '''gettext()''' во­круг ка­ж­дой стро­ки за­гро­мо­ж­да­ет код, в боль­шин­стве про­грамм оп­ре­де­ля­ет­ся псев­доним '''_''' (на ''C'': '''#define _(string) gettext (string)'''), де­лаю­щий код на ''C'' по­ко­ро­че:&lt;br /&gt;
&lt;br /&gt;
 printf(_(“Unknown command: %s.\n”), command);&lt;br /&gt;
&lt;br /&gt;
Реа­ли­за­ция ''Gettext'' су­ще­ству­ет не толь­ко для ''C'', но и для мно­же­ства дру­гих язы­ков и про­грамм­ных обо­ло­чек. Она бы­ст­ро ста­ла стан­дар­том для пе­ре­во­да от­кры­тых про­грамм, хо­тя неко­то­рые про­ек­ты, на­при­мер, ''OpenOffice.org'' и Mozilla, име­ют соб­ствен­ный фор­мат.&lt;br /&gt;
&lt;br /&gt;
===Фай­лы и функ­ции===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF136_73_1.jpg|300px]] Пе­ре­вод иг­ры в фан­та­сти­че­ском ми­ре — пре­крас­ный спо­соб вы­учить но­вые сло­ва!|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Но от­ку­да бе­рут­ся фай­лы с пе­ре­во­да­ми? Для это­го в ''Gettext'' есть коман­да ''xgettext''. Ес­ли пе­ре­дать ей файл про­грам­мы на ''C'', в ко­то­рой вы­зы­ва­ет­ся функ­ция '''gettext''', она соз­даст файл '''.pot''' (ма­шин­но-неза­ви­си­мый шаб­лон объ­ек­та) со спи­ском всех пе­ре­во­ди­мых строк фай­ла. В на­шем при­ме­ре файл '''.pot''' бу­дет со­дер­жать сле­дую­щие стро­ки:&lt;br /&gt;
&lt;br /&gt;
 #: src/command.c:14&lt;br /&gt;
 msgid “Unknown command: %s.\n”&lt;br /&gt;
 msgstr “”&lt;br /&gt;
&lt;br /&gt;
Об­ра­ти­те внимание, что файл '''.pot''' ссыла­ет­ся на точ­ную по­зи­цию стро­ки в ис­ход­ном фай­ле про­грам­мы. Бла­го­да­ря это­му пе­ре­во­дчик мо­жет об­ра­тить­ся к кон­тек­сту, ес­ли не уве­рен в пра­виль­но­сти пе­ре­во­да.&lt;br /&gt;
&lt;br /&gt;
Од­на­ко пе­ре­во­дчи­ки никогда не ра­бо­та­ют с фай­ла­ми '''.pot''' на­пря­мую – в кон­це кон­цов, это шаб­ло­ны. На осно­ве фай­ла '''.pot''' дру­гая ути­ли­та ''Gettext, Msginit'', соз­да­ет файл '''.po''' (ма­шин­но-неза­ви­си­мый объ­ект). На­при­мер, ес­ли для про­ек­та нет пе­ре­во­да на русский, а вы ре­ши­ли его соз­дать, за­пусти­те коман­ду:&lt;br /&gt;
&lt;br /&gt;
 msginit --locale=ru --input=command.pot&lt;br /&gt;
&lt;br /&gt;
Соз­да­ст­ся файл '''ru.po''', ко­то­рый вы смо­же­те от­ре­дак­ти­ро­вать.&lt;br /&gt;
&lt;br /&gt;
Пре­ды­ду­щую стро­ку мож­но пе­ре­вес­ти та­ким об­ра­зом:&lt;br /&gt;
&lt;br /&gt;
 #: src/command.c:14&lt;br /&gt;
 msgid “Unknown command: %s.\n”&lt;br /&gt;
 msgstr “Не­из­вест­ная ко­ман­да: %s.\n”&lt;br /&gt;
&lt;br /&gt;
И, на­конец, все фай­лы '''.po''' про­грам­мы ком­пи­ли­ру­ют­ся в дво­ич­ный фор­мат еще од­ной ути­ли­той ''Gettext – Msgfmt''. Ре­зуль­ти­рую­щие фай­лы име­ют рас­ши­рение '''.mo''' (ма­шин­ный объ­ект) и рас­про­стра­ня­ют­ся вме­сте с дво­ич­ны­ми фай­ла­ми про­грам­мы. При уста­нов­ке они ко­пи­ру­ют­ся в '''/usr/local/share/locale/код_язы­ка/LC_MESSAGES/program.mo''', где '''код_язы­ка''' за­ме­ня­ет­ся ко­дом язы­ка для всех су­ще­ствую­щих пе­ре­во­дов.&lt;br /&gt;
&lt;br /&gt;
Все это обыч­но осу­ще­ств­ля­ет­ся ав­то­ма­ти­че­ски в фай­лах '''Makefile''' или дру­гих скрип­тах сбор­ки. Кро­ме то­го, боль­шин­ство ша­гов пре­об­ра­зо­ваний и дру­гих команд об­ра­ба­ты­ва­ют­ся ку­ра­то­ром пе­ре­во­дов или про­грам­ми­ста­ми. По­это­му не бой­тесь на­ших объ­яснений – вам нуж­но лишь от­ре­дак­ти­ро­вать фай­лы '''.po'''! Так как для пе­ре­во­дчи­ка эти фай­лы – то же, что ис­ход­ный код для про­грам­ми­ста, рас­смот­рим неко­то­рые де­та­ли: ком­мен­та­рии и фор­мы мно­же­ствен­но­го чис­ла.&lt;br /&gt;
&lt;br /&gt;
===Ком­мен­та­рии и плю­ра­лиз­мы===&lt;br /&gt;
&lt;br /&gt;
Пе­ред стро­кой '''msgid''' в фай­ле '''.po''' мо­гут быть ком­мен­та­рии раз­лич­ных ти­пов, и боль­шин­ство из них ав­то­ма­ти­че­ски генери­ру­ет­ся ути­ли­та­ми ''Gettext''. Мы уже ви­де­ли стро­ку ком­мен­та­рия, на­чи­наю­щую­ся с сим­во­лов '''#:''' и со­дер­жа­щую ссыл­ку на стро­ку ис­ход­но­го ко­да про­грам­мы. Ком­мен­та­рии дру­го­го ти­па на­чи­на­ют­ся с '''#.''' — их пи­шут про­грам­ми­сты для пе­ре­во­дчи­ка, что­бы пе­ре­дать кон­текст или пре­ду­пре­дить о часто со­вер­шае­мой ошиб­ке.&lt;br /&gt;
&lt;br /&gt;
Ком­мен­та­рии третье­го ти­па на­чи­на­ют­ся с '''#,''' и со­дер­жат флаж­ки. В про­ти­во­по­лож­ность '''#:''' и '''#.''', пред­на­зна­чен­ным толь­ко для ин­фор­ма­ции, ком­мен­та­рии ти­па '''#,''' ин­тер­пре­ти­ру­ют­ся ре­дак­то­ром '''.po'''. Один из са­мых по­пу­ляр­ных фла­гов – '''fuzzy''':&lt;br /&gt;
&lt;br /&gt;
 #, fuzzy&lt;br /&gt;
&lt;br /&gt;
Ути­ли­та ''Gettext Msgmerge'' обыч­но припи­сы­ва­ет этот фла­жок к со­об­щению, ко­то­рое бы­ло из­менено в ис­ход­ном ко­де, но не об­нов­ле­но в пе­ре­во­де. Для пе­ре­во­дчи­ка это знак по­смот­реть на пе­ре­вод и при­нять во внимание со­об­щение ори­ги­на­ла. Пе­ре­во­дчик мо­жет вруч­ную по­ме­тить пе­ре­вод фла­гом '''fuzzy''', ес­ли со­мнева­ет­ся, что он ве­рен, что­бы не за­быть за­нять­ся им еще раз поз­же.&lt;br /&gt;
&lt;br /&gt;
Хо­тя все ком­мен­та­рии соз­да­ют­ся ав­то­ма­ти­че­ски, пе­ре­во­дчик мо­жет до­бав­лять их и вруч­ную – тогда им дол­жен пред­ше­ство­вать сим­вол '''#.'''&lt;br /&gt;
&lt;br /&gt;
Фор­мы мно­же­ствен­но­го чис­ла в анг­лий­ском, воз­мож­но, неслож­ные, но в неко­то­рых язы­ках это не так, и в ''Gettext'' есть слож­ная систе­ма их под­держ­ки. Не все­гда доста­точ­но про­сто до­ба­вить s в кон­це сло­ва. В за­го­лов­ке фай­ла '''.po''' есть стро­ка, опи­сы­ваю­щая фор­мы мно­же­ствен­но­го чис­ла язы­ка. Для гер­ман­ских и ро­ман­ских язы­ков она вы­гля­дит так:&lt;br /&gt;
&lt;br /&gt;
 “Plural-Forms: nplurals=2; plural=(n != 1);\n”&lt;br /&gt;
&lt;br /&gt;
Это оз­на­ча­ет, что в язы­ке есть две фор­мы: един­ст­вен­ная и мно­же­ст­вен­ная, и фор­ма мно­же­ст­вен­но­го чис­ла упот­реб­ля­ет­ся то­гда, ко­гда чис­ло пред­ме­тов, о ко­то­рых мы го­во­рим, не рав­но еди­ни­це. По­смот­рим те­перь на од­ну из строк для мно­же­ст­вен­но­го чис­ла:&lt;br /&gt;
&lt;br /&gt;
 #: src/game.cpp:1566&lt;br /&gt;
 msgid “The following add-on had errors and could not be loaded:”&lt;br /&gt;
 msgid_plural “The following add-ons had errors and could not be loaded:”&lt;br /&gt;
 msgstr[0] “De volgende add-on bevat fouten en kon niet worden geladen:”&lt;br /&gt;
 msgstr[1] “De volgende add-ons bevatten fouten en konden niet worden geladen:”&lt;br /&gt;
&lt;br /&gt;
Это фраг­мент фай­ла '''.po''' с пе­ре­во­дом на гол­ланд­ский для иг­ры ''Battle for Wesnoth'', где мне по­па­лись непол­но или непра­виль­но пе­ре­ве­ден­ные со­об­щения, ко­то­рые я за­хо­тел пе­ре­вести пра­виль­но. Здесь стро­ка '''msgid''' – это фор­ма един­ствен­но­го чис­ла для анг­лий­ско­го язы­ка, а фор­ма мно­же­ствен­но­го чис­ла запи­са­на в фай­ле '''msgid_plural'''. Фор­ма един­ствен­но­го чис­ла пе­ре­ве­де­на в стро­ке '''msgstr[0]''', а мно­же­ствен­но­го – в стро­ке '''msgstr[1]'''.&lt;br /&gt;
&lt;br /&gt;
Для язы­ков с дру­ги­ми фор­ма­ми мно­же­ствен­но­го чис­ла эта схе­ма от­ли­ча­ет­ся. На­при­мер, ес­ли '''nplurals''' для неко­то­ро­го язы­ка рав­на '''3''', так­же по­яв­ля­ет­ся стро­ка '''msgstr[2]'''.&lt;br /&gt;
&lt;br /&gt;
===Принима­ем­ся за де­ло===&lt;br /&gt;
&lt;br /&gt;
Ре­дак­ти­ро­вать фай­лы '''.po''' мож­но в ва­шем лю­би­мом ре­дак­то­ре: ''Gedit, Vim'' или ''Emacs'', при­чем весь­ма эф­фек­тив­но. ''Vim'' рас­по­зна­ет фор­мат '''.po''', и ес­ли под­свет­ка син­так­си­са ак­тив­на, кое-что бу­дет вы­де­ле­но цве­та­ми. Кро­ме то­го, ес­ли вклю­чить про­вер­ку ор­фо­гра­фии в фай­ле '''.po''', ''Vim'' смо­жет под­све­тить ошиб­ки в стро­ках '''msgstr'''. Итак, сде­лай­те про­вер­ку ор­фо­гра­фии, вве­ди­те недостаю­щие стро­ки пе­ре­во­да, ис­правь­те непра­виль­ные и по­шли­те об­нов­лен­ный файл '''.po''' ку­ра­то­ру пе­ре­во­дов в про­ек­те. Но пре­ж­де чем от­прав­лять файл, про­верь­те син­так­сис сле­дую­щей коман­дой:&lt;br /&gt;
&lt;br /&gt;
 $ msgfmt --statistics --check-header &amp;lt;пе­ре­ведн­ный_файл.po&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хо­тя обыч­ные ре­дак­то­ры вполне при­год­ны для пе­ре­во­да неболь­ших фай­лов '''.po''', для боль­ших фай­лов они непрак­тич­ны. Пе­ре­вод – осо­бая за­да­ча, ко­то­рая для эф­фек­тив­ной ра­бо­ты тре­бу­ет спе­ци­аль­ный ин­тер­фейс об­зо­ра кон­тек­ста. К сча­стью, для пе­ре­во­дчи­ков су­ще­ству­ет мас­са ин­ст­ру­мен­тов ''Gettext''. В ка­че­стве бо­ну­са они га­ран­ти­ру­ют вам пра­виль­ный син­так­сис. Мы рас­смот­рим са­мые по­пу­ляр­ные, но ес­ли вы поль­зуе­тесь ''Emacs'', в нем есть ре­жим '''.po'''.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Скорая помощь|Содержание=В боль­шин­ст­ве ре­дак­то­ров '''PO''' мож­но ско­пи­ро­вать ис­ход­ный текст в по­ле пе­ре­во­да, что осо­бен­но удоб­но для тек­стов со слож­ны­ми или длин­ны­ми име­на­ми.|Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Хо­ро­шая про­грам­ма пе­ре­во­да – ''Poedit'' (http://www.poedit.net). При пер­вом за­пуске вам по­тре­бу­ет­ся вве­сти свое имя и ад­рес элек­трон­ной поч­ты, ко­то­рые по­том мож­но бу­дет из­менить в на­строй­ках. Эта ин­фор­ма­ция запи­сы­ва­ет­ся в стро­ке '''Last-Translator''' при со­хранении фай­ла.&lt;br /&gt;
&lt;br /&gt;
При от­кры­тии фай­ла '''.po''' про­грам­ма счи­ты­ва­ет все со­об­щения и вы­во­дит их спи­сок в глав­ном окне. Сна­ча­ла идут непе­ре­ве­ден­ные стро­ки, за­тем – стро­ки, в пе­ре­во­де ко­то­рых пе­ре­во­дчик не был уве­рен (с флаж­ком '''fuzzy'''), и, на­конец, пе­ре­ве­ден­ные стро­ки. Стро­ки ка­ж­до­го ти­па вы­де­ля­ют­ся сво­им цве­том. В ле­вом столб­це на­хо­дят­ся ис­ход­ные стро­ки, в пра­вом – пе­ре­во­ды. При вы­бо­ре стро­ки ис­ход­ная стро­ка и пе­ре­вод по­ка­зы­ва­ют­ся в нижней части ок­на, там, где ре­дак­ти­ру­ет­ся пе­ре­вод.&lt;br /&gt;
&lt;br /&gt;
===Знать кон­текст===&lt;br /&gt;
&lt;br /&gt;
Пер­вым де­лом нуж­но вклю­чить ок­на '''Comments''' [Ком­мен­та­рии] и '''Automatic Comments''' [Ав­то­ма­ти­че­ские ком­мен­та­рии] (в ме­ню '''View''' [Вид]). Это даст вам неко­то­рый кон­текст, ко­то­рый был за­дан про­грам­ми­стом в фай­ле '''.po''' с по­мо­щью ин­ст­ру­мен­тов ''Gettext''. В стро­ке со­стояния в нижней части ок­на вы так­же уви­ди­те неко­то­рую ста­ти­сти­ку: на­при­мер, про­цент пе­ре­ве­ден­ных со­об­щений.&lt;br /&gt;
&lt;br /&gt;
Итак, щелкните по стро­ке в спи­ске и при­сту­пай­те к пе­ре­во­ду. Ес­ли вы не уве­ре­ны в пе­ре­во­де, по­меть­те стро­ку флаж­ком '''fuzzy''', на­жав кноп­ку с об­ла­ком. Щелк­нув по икон­ке блок­но­та, к пе­ре­во­ду мож­но до­ба­вить ком­мен­та­рий. За­кон­чив пе­ре­во­дить, со­храните полученный ре­зуль­тат и от­правь­те его ку­ра­то­ру.&lt;br /&gt;
&lt;br /&gt;
Очень при­ят­ная воз­мож­ность спря­та­на в пунк­те ме­ню '''Catalog &amp;gt; Settings''' [Ка­та­лог &amp;gt; На­строй­ки]. Ес­ли клик­нуть по вклад­ке '''Paths''' [Пу­ти], вы смо­же­те вве­сти основ­ной путь к ка­та­ло­гу про­ек­та. Это удоб­но, ес­ли вы за­гру­жае­те пол­ный ис­ход­ный код про­ек­та, а не толь­ко файл '''.po'''. Когда этот путь за­дан пра­виль­но, мож­но пра­вой кноп­кой щелк­нуть по стро­ке, и в от­дель­ном окне от­кро­ет­ся со­от­вет­ствую­щая стро­ка в ис­ход­ном ко­де.&lt;br /&gt;
&lt;br /&gt;
Офи­ци­аль­ный ре­дак­тор фай­лов '''.po''' для Gnome на­зы­ва­ет­ся ''Gtranslator''. При пер­вом за­пуске по­яв­ля­ет­ся окош­ко масте­ра для соз­дания про­фи­ля. Вве­ди­те на­звание про­ек­та, свое имя, ад­рес элек­трон­ной поч­ты, язык, ад­рес элек­трон­ной поч­ты коман­ды и т. д. Все это мож­но из­менить поз­же в на­строй­ках и да­же до­ба­вить про­фи­ли; та­ким об­ра­зом ''Gtranslator'' по­зво­ля­ет пе­ре­клю­чать­ся ме­ж­ду раз­лич­ны­ми про­фи­ля­ми для раз­лич­ных про­ек­тов пе­ре­во­да.&lt;br /&gt;
&lt;br /&gt;
Ве­се­лье на­чи­на­ет­ся, конеч­но, с от­кры­ти­ем фай­ла '''.po''' в ''Gtranslator''. Рас­по­ло­жение окон на­по­ми­на­ет ''Poedit'', но по умол­чанию в ''Gtranslator'' стро­ки по­ка­зы­ва­ют­ся в том по­ряд­ке, в ко­то­ром они идут в фай­ле '''.po''', а ста­тус непе­ре­ве­ден­ных или от­ме­чен­ных флаж­ком '''fuzzy''' ука­зы­ва­ет­ся со­от­вет­ствую­щим сим­во­лом в от­дель­ном столб­це. Что­бы про­смот­реть непе­ре­ве­ден­ные или по­ме­чен­ные флаж­ком '''fuzzy''' стро­ки, про­сто щелкните на столб­це '''Status''' [Ста­тус] для сор­ти­ров­ки со­об­щений.&lt;br /&gt;
&lt;br /&gt;
В ''Gtranslator'' есть мас­са го­ря­чих кла­виш для пе­ре­хо­да к пре­ды­ду­ще­му или сле­дую­ще­му со­об­щению, со­об­щению с флаж­ком '''fuzzy''', непе­ре­ве­ден­но­му со­об­щению и т. д. Пе­рей­ди­те в ме­ню '''Go''' [Пе­ре­хо­ды] и взгляните на эти ком­би­на­ции кла­виш. Чем луч­ше вы их знае­те, тем бы­ст­рее смо­же­те пе­ре­вести фай­лы '''.po''' в ''Gtranslator''.&lt;br /&gt;
&lt;br /&gt;
Про­грам­ма так­же под­дер­жи­ва­ет систе­му мо­ду­лей рас­ши­рения – доступ­ны мо­ду­ли кар­ты сим­во­лов для встав­ки спе­ци­аль­ных сим­во­лов про­стым щелч­ком на них, сло­ва­ря, где мож­но ис­кать сло­ва, и ок­на для про­смот­ра ис­ход­но­го ко­да.&lt;br /&gt;
&lt;br /&gt;
===Для KDE===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF136_74_1.jpg|300px]] Ин­тер­фейс ''Lokalize'' не­мно­го сби­ва­ет с тол­ку, но в ней есть мно­же­ст­во го­ря­чих кла­виш.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
В KDE4 роль ''Gtranslator'' вы­пол­ня­ет ''Lokalize''. У обо­их ре­дак­то­ров при­мер­но оди­на­ко­вой на­бор воз­мож­но­стей, вклю­чая го­ря­чие кла­ви­ши. Но уч­ти­те, что в ''Lokalize'' стро­ки, в понимании ко­то­рых пе­ре­вод­­чик не уве­рен, обо­зна­ча­ют­ся как него­то­вые (‘Not ready’) в ме­ню и как под­ле­жа­щие пе­ре­смот­ру (‘Needs review’) в спи­ске пе­ре­во­дов, что немно­го нело­гич­но. Оба тер­ми­на бо­лее ин­фор­ма­тив­ны, чем ‘fuzzy’ (неяс­ный), но мо­гут сбить вас с тол­ку, ес­ли вы при­вык­ли к обо­зна­чениям '''Gettext'''.&lt;br /&gt;
&lt;br /&gt;
Рас­по­ло­жение окон в ''Lokalize'' немно­го от­ли­ча­ет­ся от дру­гих про­грамм. Спи­сок ис­ход­ных строк и пе­ре­во­дов по­ка­зы­ва­ет­ся в ле­вом верхнем уг­лу ок­на, в ко­то­ром есть и удоб­ная стро­ка по­иска, а вы­бран­ные стро­ка и пе­ре­вод по­ка­зы­ва­ют­ся спра­ва. Ком­мен­та­рии по­ка­зы­ва­ют­ся в ле­вом нижнем уг­лу эк­ра­на со ссыл­кой на фай­лы ис­ход­но­го ко­да. ''Lokalize'' – мощ­ный ре­дак­тор, но его ин­тер­фейс – не са­мый по­нят­ный или удач­ный с точ­ки зрения ис­поль­зуе­мо­го эк­ран­но­го про­стран­ства.&lt;br /&gt;
&lt;br /&gt;
===Про­сто­та — это пре­крас­но===&lt;br /&gt;
&lt;br /&gt;
''Virtaal'' под­дер­жи­ва­ет не толь­ко фай­лы '''.po''', но и дру­гие фор­ма­ты лока­ли­за­ции, но здесь мы бу­дем го­во­рить толь­ко о фай­лах '''.po'''. При от­кры­тии фай­ла '''.po''' сра­зу ста­но­вит­ся по­нят­но, что ин­тер­фейс ''Virtaal'' го­раз­до беднее по сравнению с дру­ги­ми про­грам­ма­ми. Пе­ред ва­ми спи­сок с дву­мя столб­ца­ми: ис­ход­ны­ми стро­ка­ми и их пе­ре­во­да­ми. Вы­бран­ная стро­ка пре­вра­ща­ет­ся в по­ле вво­да, где мож­но из­менить пе­ре­вод, и со­дер­жит до­полнитель­ную га­лоч­ку, с по­мо­щью ко­то­рой мож­но обозвать пе­ре­вод «неяс­ным». Так­же по­ка­зы­ва­ют­ся ком­мен­та­рии. На пер­вый взгляд это ка­жет­ся бед­но­ва­тым, но с за­да­чей справ­ля­ет­ся бле­стя­ще. Так­же мож­но вы­брать на­ви­га­цию толь­ко по непе­ре­ве­ден­ным стро­кам – ''Virtaal'' не со­всем кор­рект­но на­зы­ва­ет их «Неза­вер­шен­ны­ми» (‘Incom­plete’) – или на­хо­дить нуж­ные стро­ки с по­мо­щью по­иска.&lt;br /&gt;
&lt;br /&gt;
Хо­тя минима­ли­стич­ный ин­тер­фейс прост, про­грам­ме не хва­та­ет мас­сы воз­мож­но­стей, имею­щих­ся в дру­гих при­ло­жениях. На­при­мер, в ней нет го­ря­чих кла­виш, что за­мед­ля­ет ра­бо­ту. В стро­ке со­стояния не по­ка­зы­ва­ет­ся ста­ти­сти­ка – вме­сто нее там по­ка­зы­ва­ют­ся язы­ки ори­ги­на­ла и пе­ре­во­да, ко­то­рые вы и так знае­те. На­строй­ки ''Virtaal'' так­же до­воль­но спар­тан­ские.&lt;br /&gt;
&lt;br /&gt;
По­ка мы го­во­ри­ли толь­ко о техниче­ских де­та­лях, и здесь лег­ко за­быть, что ин­тер­на­цио­на­ли­за­ция про­грам­мы по боль­шей части ка­са­ет­ся язы­ка. Ес­ли у вас нела­ды с пра­вопи­санием и вас не за­де­ва­ет непра­виль­но напи­сан­ное сло­во, не бе­ри­тесь за пе­ре­вод. От про­грам­ми­стов мы все ждем про­грамм без оши­бок, и вам то­же нуж­но дер­жать план­ку и пре­достав­лять безу­преч­ный про­дукт. Конеч­но, ошиб­ки де­ла­ют все, но стре­ми­тесь к луч­ше­му, и вот вам несколь­ко со­ве­тов.&lt;br /&gt;
&lt;br /&gt;
===Это все о кон­тек­сте===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Скорая помощь|Содержание=В боль­шин­ст­ве ре­дак­то­ров '''PO''' есть воз­мож­ность «пе­ре­вес­ти стро­ки ав­то­ма­ти­че­ски». Не поль­зуй­тесь ею: вер­ный пе­ре­вод по­лу­ча­ет­ся не­час­то, и на ис­прав­ле­ние ав­то­ма­ти­че­ско­го пе­ре­во­да ухо­дит боль­ше вре­ме­ни, чем на пе­ре­вод с ну­ля.|Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Пра­виль­ный пе­ре­вод фра­зы часто за­ви­сит от кон­тек­ста. На­при­мер, в про­грам­ме есть непе­ре­ве­ден­ное со­об­щение ‘No match’ («Нет со­от­вет­ствия»), и его зна­чение труд­но по­нять без кон­тек­ста. Про­грам­ма жа­лу­ет­ся, что не мо­жет что-то за­пустить? Или некий объ­ект не со­от­вет­ству­ет шаб­ло­ну? Конеч­но, со­об­щение слиш­ком рас­плыв­ча­тое, и про­грам­ми­сту нуж­но бы­ло опи­сать си­туа­цию бо­лее под­роб­но.&lt;br /&gt;
&lt;br /&gt;
Но есть и та­кие си­туа­ции, когда у со­вер­шен­но яс­ных со­об­щений мо­жет быть раз­лич­ный смысл, и, сле­до­ва­тель­но, пе­ре­во­дить их нуж­но по-раз­но­му. И по­нять, что оз­на­ча­ет со­об­щение в кон­тек­сте про­грам­мы – за­да­ча пе­ре­во­дчи­ка. По­это­му в фай­ле '''.po''' и ука­зы­ва­ет­ся по­ло­жение со­об­щения в фай­ле ис­ход­но­го ко­да: не стес­няй­тесь за­гля­нуть ту­да! А еще луч­ше за­пустить про­грам­му и соз­дать си­туа­цию, в ко­то­рой по­яв­ля­ет­ся со­об­щение. Де­лать это луч­ше до пе­ре­во­да: это по­зво­лит вам правильнее по­нять кон­текст, в ко­то­ром по­яв­ля­ет­ся со­об­щение.&lt;br /&gt;
&lt;br /&gt;
Пре­ж­де чем брать­ся за пе­ре­вод но­вой про­грам­мы или да­же ме­нять пе­ре­вод су­ще­ствую­щей, хо­ро­шо бы всту­пить в кон­такт с коман­дой пе­ре­во­дчи­ков про­ек­та. Не толь­ко для то­го, что­бы из­бе­жать двой­ной ра­бо­ты, но и для то­го, что­бы ра­зуз­нать о ра­бо­чем ок­ру­жении коман­ды. Обыч­но спи­сок от­вет­ствен­ных за пе­ре­вод ви­сит на до­машней странице про­ек­та, но кон­такт­ные дан­ные груп­пы пе­ре­во­дчи­ков для то­го или ино­го язы­ка мож­но так­же най­ти в за­го­лов­ке фай­ла '''.po''' в по­ле '''Language-Team'''.&lt;br /&gt;
&lt;br /&gt;
И не ра­бо­тай­те в оди­ноч­ку: это источник множества про­блем. Будь­те мак­си­маль­но от­вет­ствен­ным пе­ред коман­дой и не ста­рай­тесь ре­шить все про­бле­мы са­ми. Ес­ли вы не уве­ре­ны в пе­ре­во­де, по­го­во­ри­те с партнера­ми по коман­де в рас­сыл­ке. И не счи­тай­те пе­ре­вод сво­ей соб­ствен­но­стью: ес­ли кто-то его улуч­шил, не сер­ди­тесь. Ес­ли вы не одоб­ряе­те из­менения, по­го­во­ри­те с их ав­то­ром, но де­лай­те это ци­ви­ли­зо­ван­но и поль­зуй­тесь толь­ко те­ми ар­гу­мен­та­ми, ко­то­рые обосно­ва­ны лин­гвисти­че­ски­ми или сти­ли­сти­че­ски­ми при­чи­на­ми. Пе­ре­вод от­кры­то­го ПО – как и про­грам­ми­ро­ва­ние – ко­манд­ная ра­бо­та.&lt;br /&gt;
&lt;br /&gt;
===Ре­сур­сы===&lt;br /&gt;
&lt;br /&gt;
* '''GNU Gettext''' http://www.gnu.org/software/gettext&lt;br /&gt;
* '''Ру­ко­во­дство по GNU Gettext''' http://www.gnu.org/software/gettext/manual/gettext.html&lt;br /&gt;
* '''''Poedit''''' http://www.poedit.net&lt;br /&gt;
* '''''Gtranslator''''' http://projects.gnome.org/gtranslator&lt;br /&gt;
* '''''Lokalize''''' http://userbase.kde.org/Lokalize&lt;br /&gt;
* '''''Virtaal''''' http://virtaal.org&lt;br /&gt;
&lt;br /&gt;
===Ес­ли вам не­ко­гда, за­да­вай­те при­ори­те­ты===&lt;br /&gt;
&lt;br /&gt;
Ес­ли ва­ше вре­мя ог­ра­ни­че­но, вы все рав­но мо­же­те по­мочь. Не пу­гай­тесь ко­ли­че­ст­ва пе­ре­во­ди­мых со­об­ще­ний в не­ко­то­рых про­грам­мах – про­сто за­да­вай­те при­ори­те­ты: в пер­вую оче­редь пе­ре­во­ди­те со­об­ще­ния, ко­то­рые поль­зо­ва­тель ви­дит боль­шую часть вре­ме­ни или ко­то­рые по­яв­ля­ют­ся ча­ще все­го. Ко­неч­но, эти соб­ще­ния мож­но най­ти, за­пус­тив про­грам­му и ос­мот­рев важ­ные со­об­ще­ния, ко­то­рые по­ка не пе­ре­ве­де­ны, но в ''Gettext'' есть удоб­ная ути­ли­та, по­мо­гаю­щая ре­шить эту за­да­чу. Для на­ча­ла от­крой­те тер­ми­нал и вве­ди­те сле­дую­щие ко­ман­ды:&lt;br /&gt;
&lt;br /&gt;
 $ export LD_PRELOAD=/usr/lib/preloadable_libintl.so&lt;br /&gt;
 $ export GETTEXT_LOG_UNTRANSLATED=$HOME/gettextloguntranslated&lt;br /&gt;
&lt;br /&gt;
За­тем за­пус­ти­те из это­го тер­ми­на­ла про­грам­му, со­об­ще­ния в ко­то­рой хо­ти­те пе­ре­вес­ти – на­при­мер, та­ким об­ра­зом (для иг­ры ''Battle for Wesnoth''):&lt;br /&gt;
&lt;br /&gt;
 $ wesnoth&lt;br /&gt;
&lt;br /&gt;
Не­мно­го по­ра­бо­тай­те с ней обыч­ным об­ра­зом, и по­сле ее за­кры­тия в фай­ле '''gettextloguntranslated''' до­маш­не­го ка­та­ло­га поя­вит­ся спи­сок со­об­ще­ний, ко­то­рые про­грам­ма пы­та­лась пе­ре­вес­ти, но не обна­ружила пе­ре­вод для ва­ше­го язы­ка. Это '''PO'''-файл, но до от­прав­ки в '''PO'''-ре­дак­тор его необходимо пред­ва­ри­тель­но об­ра­бо­тать. Этот про­цесс под­роб­но опи­сан в раз­де­ле 12.7 ру­ко­во­д­ства по ''Gettext''.&lt;/div&gt;</description>
			<pubDate>Thu, 10 Nov 2011 06:24:49 GMT</pubDate>			<dc:creator>Crazy Rebel</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF136:Gettext</comments>		</item>
	</channel>
</rss>