zend framework 2 перевод gettext с использованием других комментариев

Я хочу знать, возможно ли использовать уже созданные комментарии для создания других комментариев, которые содержат использованную команду в дополнение к другому тексту.

e.g.

//EN-файл

  msgid "User no logged"
  msgstr ""

  msgid "#previous commend# as participant"
  msgstr ""

//ES-файл

  msgid "User no logged"
  msgstr "Usuario no logueado"

  msgid "#previous commend# as participant"
  msgstr "#previous translation# como participante"

Я хочу использовать этот перевод:

  $this->translate('User no logged as participant');
  //I want obtain: Usuario no logueado como participante

Можно ли чем-нибудь заменить слова #.....#?

Заранее спасибо.


person josepmra    schedule 08.05.2013    source источник


Ответы (2)


Разве это не то же самое, что и ваш другой вопрос? Хотя, если я правильно понимаю, что вы пытаетесь сделать, это может быть что-то вроде этого:

echo $this->translate(sprintf(
    '%s as participant', 
    $this->translate('User no logged')
));

Но опять же, в ЭТОМ случае для меня это просто два перевода подряд, например:

echo sprintf('%s %s', 
    $this->translate('User no logged'),
    $this->translate('as participant')
);
person Sam    schedule 08.05.2013
comment
В этом вопросе я хочу использовать только один раз $this-›translate() и не хочу использовать %s, потому что у меня есть класс, который содержит все сообщения (без %s) - person josepmra; 09.05.2013
comment
Ну, я показал вам два варианта, которые я могу придумать ;) Кроме того, я на самом деле вообще не знаю, что делает ваш класс. Я не вижу в этом ни одной выгоды ^^ - person Sam; 09.05.2013

В этом вопросе я хочу использовать только один раз $this->translate() и не хочу использовать %s, потому что у меня есть класс, который содержит все сообщения (без %s). Я хотел бы связывать комментарии только в файлах .po (возможно?)

Строки.php

    class Strings {
        public static $USER_NO_LOGGED = 'El usuario no esta logueado.';
        private static $translator;
        private static $translatorTextDomain = 'default';

        public static function setTranslator(Translator $translator) {
            self::$translator = $translator;
        }
        public static function getTranslator() {
            return self::$translator;
        }   
        public static function setTranslatorTextDomain($textDomain = 'default') {
            self::$translatorTextDomain = $textDomain;
        }   
        public static function getTranslatorTextDomain() {
            return self::$translatorTextDomain;
        }   
        public static function getMessage($message) {       
            $translator = self::getTranslator();
            if (!$translator) return $message;

            return self::getTranslator()->translate($message, self::$translatorTextDomain);
        }
    }

Как видите, метод getMessage имеет только один метод translate и вызов функции выполняется следующим образом:

  echo Strings::getMessage(Strings::$USER_NO_LOGGED); 
person josepmra    schedule 09.05.2013