|
| 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."
| |
|
|