Как вы используете gettext, когда у вас есть ссылка на переведенный текст? - PullRequest
5 голосов
/ 29 июля 2010

Я использую gettext для перевода своего веб-сайта.

Было бы неплохо иметь ссылку в переведенном тексте, но я не хочу писать html-теги в файлах gettext, потому что эти переводы могут использоваться в другом месте.1003 *

Я мог бы создать текст только для веб-сайта (со ссылками) и текст для всех целей.
Мне нужно будет поддерживать 2 версии.: - (

Я также мог бы написать собственный анализатор для вставки ссылок в текст, но это кажется излишним, и я боюсь Опасность наивности

Для тех, ктобыла такая же проблема, как вы справились с этим?

Ответы [ 4 ]

4 голосов
/ 30 июля 2010

Раньше я ставил ссылки в качестве параметров. Большую часть времени весь тег <a> является параметром. Как и Please see %s this link %s for more information. Первый% s получает тег ссылки, а второй - закрывающий тег </a>.

Теперь я использую только целые фразы в качестве ссылок, когда текст ссылки должен быть переведен. Таким образом, у нас есть просто текст типа «Пожалуйста, посмотрите эту ссылку для получения дополнительной информации», переведите его и поместите теги ссылки вокруг него. Управлять переводами гораздо проще, и у вас нет запутанного переводчика или вам нужно тратить время на объяснение того, что вы пытаетесь сделать.

1 голос
/ 30 марта 2017

Другое решение здесь: https://zargony.com/2008/01/24/links-in-gettext-translated-strings.

Предлагает использовать {curly brackets} для ссылок. Как например:

_("Please click {here} or {here}")

А затем напишите свою собственную функцию linkify, которая заменяет фигурные скобки на заданные параметры.

linkify(
    _("Please click {here} or {here}"),
    "</a>",
    "<a href='www.example1.com'>", 
    "<a href='www.example2.com'>"
)

Определение в PHP:

function linkify($string, $closingTag) {
    $arguments = func_get_args();
    return preg_replace_callback(
        '/{(.*?)}/', // Ungreedy (*?)
        function($matches) use ($arguments, $closingTag) {
            static $i = 1; 
            $i++;
            return $arguments[$i] . $matches[1] . $closingTag;
        },
        $string
    );
}

PS: Вы также можете легко заменить {} на [], поскольку я заметил, что в POEdit эти фигурные скобки дают предупреждения переводчикам и рекомендуют их не переводить.

1 голос
/ 06 января 2017

В дополнение к выбранному ответу, вот практический пример:

printf( __( 'Please see %s this link %s for more information.', 'text-domain' ), '<a href="http://yolo.io" title="yolo">', '</a>' );
1 голос
/ 30 июля 2010

Честно говоря, меня не слишком беспокоит использование какого-либо базового HTML (или использование bbCode , текстиль , уценка и т. Д.) Непосредственно в вашем переводе.файлы.URL-адреса могут казаться единственной проблемой в данный момент, но как насчет другой текстовой разметки?

Не говоря уже о том, что сами URL-адреса могут потенциально отличаться в зависимости от языка.

Я согласен с тем, что файлы перевода имеют свои проблемы.

...