(Упозорење: моје „знање“ ПХПа се своди на прочитан туторијал на В3школи...)
Пре свега, чињеница да је вебсајт у сваком тренутку под контролом аутора, тј. без захтева за разним сагласностима што би их изискивао нпр. неки кориснички програм, даје доста слободе у пројектовању и18н подсистема.
Хипотетички посматрано од нуле, нека се
сав текст који се представља корисницима провлачи кроз ПХП позив. Нпр. уместо овог:
<p>Welcome to the home page of...</p>
<p>We are leaders in design of flying toasters...</p>
...
да буде:
<?php
_("<p>Welcome to the home page of...</p>");
_("<p>We are leaders in design of flying toasters...</p>");
...
?>
У том случају био проблем био сведен на исти као и код превођења програма, за шта већ постоји читава добро утврђена техничко-организациона машинерија Геттекста и ПО формата.
С техничке стране, прва и најбитнија ствар била би та да превод одједном постаје
динамички, што значи да није потребна никаква разградња/изградња изворних докумената, већ се сваки поједини део текста вуче директно из ПО датотека. Ако неки део недостаје, корисник неће видети тај пасус преведен већ на изворном језику, али неће доћи ни до каквих других тех-орг проблема.
Аутоматски се добија могућност
правилног уметања делова текста:
<?php
_("<p>Number of messages: %d</p>", $nMsg);
?>
за разлику од лошег:
<p>Number of messages: <?php echo $nMsg ?></p>
као што је имплицирано у примерима на В3школи — тако се једноставно не ради са текстом намењеном превођењу. Даље, такође се добија могућност задавања контекста за преводиоце и множинских облика:
<?php
_c("New message", "<b>New</b>", $nMsg);
// prevodilac vidi obe niske, korisnik samo drugu
...
_n("<p>You have one new message.</p>",
"<p>You have %d new messages.</p>", $nMsg);
?>
Наравно, било би потребно написати све ове функције,
_(),
_c(),
_n(), али би то било релативно мало ко̑да који изнутра користи стандардне геттекст-позиве.
С организационе стране, главно је што се добија велика лакоћа одржавања превода. Геттекст аутоматски извлачи шаблон за превођење из ПХП датотека (колико видим, већ познаје ПХП као један извор), који преводилац попуни овако:
#: az.php:132
msgid "<p>Welcome to the home page of...</p>"
msgstr "<p>Добродошли на домаћу страну...</p>"
...
#: buki.php:456
#, php-format
msgid "<p>Number of messages: %d</p>"
msgstr "<p>Број порука: %d</p>"
...
#: vjedi.php:101
msgctxt "New message"
msgid "<b>New</b>"
msgstr "<b>Нова</b>"
...
#: vjedi.php:231
#, php-format
msgid "<p>You have one new message.</p>"
msgid_plural "<p>You have %d new messages.</p>"
msgstr[0] "<p>Имате %d нову поруку.</p>"
msgstr[1] "<p>Имате %d нове поруке.</p>"
msgstr[2] "<p>Имате %d нових порука.</p>"
msgstr[3] "<p>Имате нову поруку.</p>"
при чему су доступне разне аутоматске провере, нпр. да преводилац није изоставио форматску директиву (
%d у примерима), итд.
Друго, када се сајт измени, Геттекст стапа нове шаблоне са постојећим преводима, и преводилац тачно види нове и измењене поруке. Нпр. преправи се мало порука
<p>Welcome to the home page of...</p>, и преводилац добије „мутан“ унос:
#: vjedi.php:101
#| msgid "<p>Welcome to the home page of...</p>"
#, fuzzy
msgid "<p>Welcome to the web site of...</p>"
msgstr "<p>Добродошли на домаћу страну...</p>"
који онда може да доради како треба и уклони заставицу
fuzzy. Ово је посебно битно за дуге пасусе, где се може упоредити тренутна и претходна верзија поруке и тачно видети разлике (аутоматски у неким ПО уређивачима, а могу се и угњездити директно у ПО датотеку малом предобрадом).
Како ово ради са тим именима/адресама што корисници сајта треба да уносе? Па, никако :) Али то никако нигде и не ради... Просто, узима се што корисник унесе, и тачка; на њему је да унесе како мисли да је најбоље.
Међутим, ако је очекивани обим тих корисничких уноса мали, и одржавалац сајта нема ништа против да сваки „контролише“, онда би могло овако да се уради. Корисник унесе своје податке. Одржавалац их измени, тако да у бази буду само и једино на подразумеваном језику. Табелу на страни ствара повлачењем ових уноса из базе, али тако да их претходно провуче кроз геттекст позив:
<?php
...
echo "<td>" . _c($unos->getContext(), $unos->getName()) . "</td>";
...
?>
а некако уреди да се од уноса̑ из базе аутоматски ствара засебан ПО шаблон, где је јединствени кључ уноса и назив поља дат као контекст уз сваку поруку:
msgctxt "ad82c92a:Name"
msgid "Pera Peric"
msgstr "Пера Перић"
коју онда преводиоци обрађују као и све остало.
* * *
Е сад, то би био идеални свет. Реално је вероватно да већ има гомила тих ХТМЛ докумената који се не дају преправљати тако да сав текст иде кроз ПХП позиве. У том случају — Пеђа, нек ти је виша сила у помоћи :) Посебно када дође до питања организације и ажурирања превода...
Поред тога, поштено речено, нисам сигуран ни колико би се тој преводилачкој раји свидео ПО формат. Треба им објаснити контексте, множине, мутне заставице, упоређивање тренутног с претходним извором, шта ту треба а шта не треба преводити, итд. — професионалци се ту очас посла стумбају, то је више за аматере попут нас ;)