В чем разница между t () и @Translation ()?
При написании (переводимого) плагина в Drupal 8 вы должны use Drupal\Core\Annotation\Translation;
, а затем оберните свое значение в @Translation("value")
, однако при реализации FormInterface
вы можете использовать ---- +: = 3 =: + ----, как и в Drupal 7.
Я нашел плагины на основе анонсов на Drupal.org, но он просто упоминает о том, что вы должны используйте ссылку Doctrine , t, похоже, включает t()
Я предполагаю, что это связано с тем, что система плагина является частью доктрины, а не частью ядра, тогда как @Translation
- это правильное предположение?
В принципе, какая разница между t()
и @Translation();
- это только потому, что плагины основаны на доктрине?
1 ответ
Короче говоря, @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" * ) */