/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
gettext og printf
Fra : Jonas Koch Bentzen


Dato : 15-09-02 11:31

Hej

Jeg har lidt problemer med at bruge printf sammen med gettext: Hvis man
nummerer variablen, bliver strengen ikke oversat. Et eksempel:

<?php
echo _("This is a line.")."<br/>";

printf(_("Here is %1\$s, %2\$s, and %3\$s."), "Svend", "Knud", "Valdemar");
?>

Hvis man så kører scriptet gennem xgettext, får man følgende (uddrag):

#: ../../../index.php:8
msgid "This is a line."
msgstr ""

#: ../../../index.php:11
#, ycp-format
msgid "Here is %1\\$s, %2\\$s, and %3\\$s."
msgstr ""

Man oversætter så strengene (og bruger to omvendte skråstreger foran
dollartegnet i oversættelsen ligesom i ID-strengen), og så danner man
mo-filen og genstarter Apache for at slette gettext-cachen. Den første
linje ("This is a line.") bliver fint oversat - men linjen med de
nummerede variabler bliver ikke oversat - selv om jeg kan se, den findes
i mo-filen.

Jeg kan ikke bruge apostroffer (enkeltgnyffer) og så fjerne den omvendte
skråstreg foran dollartegnet - xgettext opfanger nemlig ikke linjen i så
fald. Men selv, hvis man manuelt kopierer linjen uden omvendte
skråstreger ind i po-filen og oversætter den, så virker det stadig ikke.
Nogen ideer?


 
 
Jonas Koch Bentzen (16-09-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 16-09-02 12:01

Jonas Koch Bentzen wrote:
>
> Jeg har lidt problemer med at bruge printf sammen med gettext: Hvis man
> nummerer variablen, bliver strengen ikke oversat. Et eksempel:
>
> <?php
> echo _("This is a line.")."<br/>";
>
> printf(_("Here is %1\$s, %2\$s, and %3\$s."), "Svend", "Knud", "Valdemar");
> ?>
>
> Hvis man så kører scriptet gennem xgettext, får man følgende (uddrag):
>
> #: ../../../index.php:8
> msgid "This is a line."
> msgstr ""
>
> #: ../../../index.php:11
> #, ycp-format
> msgid "Here is %1\\$s, %2\\$s, and %3\\$s."
> msgstr ""
>
> Man oversætter så strengene (og bruger to omvendte skråstreger foran
> dollartegnet i oversættelsen ligesom i ID-strengen), og så danner man
> mo-filen og genstarter Apache for at slette gettext-cachen. Den første
> linje ("This is a line.") bliver fint oversat - men linjen med de
> nummerede variabler bliver ikke oversat - selv om jeg kan se, den findes
> i mo-filen.

Løsningen er at fjerne alle de omvendte skråstreger i den pågældende
ID-streng og oversættelse i .po-filen (men *ikke* i selve kaldet til
_()-funktionen i PHP). Altså:


<?php
printf(_("Here is %1\$s, %2\$s, and %3\$s."), "Svend", "Knud", "Valdemar");
?>

#: ../../../index.php:11
#, ycp-format
msgid "Here is %1$s, %2$s, and %3$s."
msgstr "Her er %1$s, %2$s og %3$s."


Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste