Использование расширения PHP Gettext по сравнению с массивами PHP в многоязычных веб-сайтах?

До сих пор только 2 хороших вещи, что я занялся использованием gettext вместо массивов, состоят в том, что я не должен создавать "приветствие" "подмассив" (или безотносительно его названного). И я не должен создавать папку для "языка по умолчанию".

Есть ли другие профессионалы и из-за использования gettext и массивов php для многоязычных веб-сайтов?

ИСПОЛЬЗУЯ GETTEXT:

spanish/messages.po:

#: test.php:3
msgid "Hello World!"
msgstr "Hola Mundo"

index.php:

<?php echo _("Hello World!"); ?>

index.php? lang=spanish:

<?php echo _("Hello World!"); ?> turns to Hola Mundo

ИСПОЛЬЗУЯ МАССИВЫ PHP:

lang.en.php

<?php
$lang = array(
    "greeting" => "Hello World",
);
?>

lang.es.php

<?php
$lang = array(
    "greeting" => "Hola Mundo",
);
?>

index.php:

<?php echo $lang['greeting']; ?> greeting turns to Hello World

index.php? lang=spanish

<?php echo $lang['greeting']; ?> greeting turns to Hola Mundo

(Я сначала запустил с gettext, но он не поддерживался в моем общем бесплатном размещении Zymic. Я не хотел использовать Zend_translate, я нашел, что он также усложнил к моей простой задаче, таким образом, я наконец закончил тем, что использовал php define, но позже кто-то сказал мне, что я должен использовать массивы),

10
задан alexchenco 23 February 2010 в 14:58
поделиться

3 ответа

Используя GNU gettext, вы получаете поддержку для заполнители, такие как printf и международные формы множественного числа. Порядок заполнителей можно изменить при переводе или пропустить.

Пример из документации PHP:


<?php
setlocale(LC_ALL, 'cs_CZ');
printf(ngettext("%d window", "%d windows", 1), 1); // gives "1 okno"
printf(ngettext("%d window", "%d windows", 2), 2); // gives "2 okna"
printf(ngettext("%d window", "%d windows", 5), 5); // gives "5 oke"
?>

Еще одним преимуществом является то, что вы можете использовать стандартные инструменты для управления терминологией, памяти переводов и машинного перевода, как указано @middus.

Для общих сред существует отличная библиотека php-gettext от Данило Сегана.

7
ответ дан 3 December 2019 в 17:20
поделиться

На мой взгляд, не имеет особого смысла использовать двоичный формат (файлы .mo gettext) для динамического языка, такого как php.

Однако преимуществом gettext является наличие огромной экосистемы инструментов, которые переводчики вашего программного обеспечения могут использовать (например, Poedit ). Обратной стороной является то, что вам всегда нужно компилировать свой .po в .mo перед его развертыванием, в то время как вы можете просто заменить файл php, содержащий массив, на лету.

Еще один недостаток - как вы уже заметили, он доступен не во всех установках php.

4
ответ дан 3 December 2019 в 17:20
поделиться

Самым очевидным плюсом использования gettext() является, конечно, то, что исходная строка располагается там, где ей и место. Т.е. гораздо логичнее написать так

echo _("This is a string");

чем

echo $lang['a_string'];

Не говоря уже о том, что для каждого возможного перевода вам придется создавать новую переменную-заместитель. В gettext() в качестве индекса выступает сама строка перевода.

5
ответ дан 3 December 2019 в 17:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: