В чем разница между t () и @Translation ()?

При написании (переводимого) плагина в Drupal 8 вы должны use Drupal\Core\Annotation\Translation;, а затем оберните свое значение в @Translation("value"), однако при реализации FormInterface вы можете использовать ---- +: = 3 =: + ----, как и в Drupal 7.

Я нашел плагины на основе анонсов на Drupal.org, но он просто упоминает о том, что вы должны используйте ссылку Doctrine , t, похоже, включает t()

Я предполагаю, что это связано с тем, что система плагина является частью доктрины, а не частью ядра, тогда как @Translation - это правильное предположение?

В принципе, какая разница между t() и @Translation(); - это только потому, что плагины основаны на доктрине?

6 голосов | спросил Chapabu 21 PM00000020000003331 2013, 14:18:33

1 ответ


9

Короче говоря, @Translation() - это строка, используемая в аннотациях, метаданных, написанных в комментариях PHP и относящихся к классу Drupal 8.

Например, это аннотация для PathItem .

/**
 * Defines the 'path_field' entity field item.
 *
 * @DataType(
 *   id = "path_field",
 *   label = @Translation("Path field item"),
 *   description = @Translation("An entity field containing a path alias and related data."),
 *   list_class = "\Drupal\Core\Entity\Field\Field"
 * )
 */

Когда Drupal загружает аннотации классов из файла и находит в примечании @Translation("Content"), он создает экземпляр Перевод класс, конструктор получает строку "Content"; экземпляр затем используется для получения значения t("Content").

Что касается различий, они следующие:

  • @Translation() - строка , используемая в аннотациях классов: обычный текст, следующий за определенным форматом, и это написанные в комментариях PHP перед классом, который аннотируется. Вы не можете использовать его в коде, подобном приведенному ниже, за исключением случая, когда модуль определяет функцию Translation(). В этом случае @, прежде чем он будет понят с PHP как оператор контроля ошибок .

    $form['salary'] = array(
      '#type' => 'textfield',
      '#title' => @Translation('Salary'),
      '#size' => 10,
      '#maxlength' => 10,
      '#description' => @Translation('Please enter a valid number'),
    );
    
  • t() - это функция Drupal . Он не может использоваться внутри аннотаций класса, как и следующий, поскольку он не соответствует аннотациям синтаксиса. Если бы он использовался в аннотации, как в следующем, это не вызывало бы Drupal для вызова t() и использовать его возвращаемое значение.

    /**
     * Defines the 'path_field' entity field item.
     *
     * @DataType(
     *   id = "path_field",
     *   label = t("Path field item"),
     *   description = t("An entity field containing a path alias and related data."),
     *   list_class = "\Drupal\Core\Entity\Field\Field"
     * )
     */
    
ответил kiamlaluno 21 PM00000060000004331 2013, 18:51:43

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132