Чи слід використовувати t () в описі гака_меню?


11

Я завжди використовував t () для заголовка_меню назви та опису, як це:

$items['some-path'] = array(
    'title' => t('My Page Title'),
    'description' => t('This is a description about what my page is for'),
    'page callback' => 'profile_user_page',
);

Це має сенс для мене, щоб користувачі могли перекласти заголовок та опис на різні мови, якщо потрібно.

Однак цей коментар до огляду модуля щодо DO говорить:

Ні, це неправильно, не робіть цього - описи в mock_menu () ніколи не повинні використовувати t ().

Які міркування для цього і чи це насправді найкраща практика?

Також якщо це правда, чи не слід також використовувати t () для заголовка?


Очевидно , що це не слід використовувати тоді , але якщо ви будете шукати hook_menu сторінки довідки для «опису» => т ( »є 6 входжень так ясно , що це загальна помилка!
Фелікс Єва

1
Поширені чи ні, це не привід;) І ці події є в коментарях - люди вільні помилитися там.
Молот

1
@ Mołot Вони вільно помиляються там, проте багато нових користувачів скопіюють і вставлять цей код, щоб це продовжувало залишатися поширеною помилкою. Я думаю, що хтось із правами адміністратора на DO повинен редагувати ці коментарі, щоб видалити t ().
Фелікс Єва

Ви можете подати проблему, якщо бажаєте.
Молот

1
Гарна пропозиція. Зроблено .
Фелікс Єва

Відповіді:


17

Див. Рядки у відомих місцях: вбудовані меню, дозволи, повідомлення журналу та документація спільноти .info файлів :

Система меню Drupal 6 та 7 зберігає заголовки та описи пунктів меню англійською мовою. Це дозволяє системі кешувати дані, але показувати користувачам, які використовують різні мови на вимогу. Щоб це не працювало, не слід використовувати t () у заголовку чи описі пунктів меню у вашій реалізації_upload_menu (). Крім того, для цих двох клавіш слід спробувати використовувати буквальний рядок (а не динамічний рядок), щоб екстрактор шаблонів перекладу міг знайти рядок, який ви використовували.

Наголос мій.


Я хотів би додати: якщо тільки title callbackне встановлено , так як за замовчуванням title callbackє t()функція
Мильковский

1
@milkovsky, якщо встановлено зворотний виклик заголовка, він повинен подбати про це, t()і ви все одно не повинні використовувати його hook menu()- ви знаєте, кешування.
Молот

11

Якщо ви звернетеся до документації по hook_menu аргументів ..

  • "назва": Обов'язкове. Неперекладена назва пункту меню.
  • "зворотний виклик заголовка": функція для створення заголовка; за замовчуванням до t (). Якщо вам потрібен лише вихідний рядок, виведіть його на FALSE.
  • "аргументи заголовка": Аргументи для надсилання до t () або власного зворотного виклику із заміною компонента контуру, як описано вище
  • "Опис": неперекладений опис пункту меню.

За замовчуванням зворотний виклик за замовчуванням - це функція .. Тому він завжди перекладається ..


7

Оскільки Drupal 6 більше не потрібен.

Прочитайте https://drupal.org/node/140311 . Цитуючи це:

Починаючи з 6.x, Drupal внутрішньо обробляє переклад заголовків меню та описів на місцеву мову користувача. Описи, якщо вони надані, завжди перекладаються за допомогою t (); немає можливості передавати додаткові дані для заміни заповнювачів (у D5 та попередньому, передача підстановок була відстороненою практикою - при цій зміні система меню застосовує це правило безпосередньо). Титули за замовчуванням переводяться за допомогою t (), але заміна рядка стилю t () можлива завдяки використанню нового властивості 'аргументи заголовка'. Ви також можете замінити t () на власний власний зворотний дзвінок.


6

Не слід використовувати t()в hook_menu()реалізаціях, оскільки t()це автоматично викликається пізніше, і це може призвести до подвійного перекладу.


* Зауважте, що якщо ви додали title callbackв гачку_меню, а якщо це не так t, зворотний виклик заголовка відповідає за переклад рядка.
АйешК

0

Це чітко прописано на сторінці документації для kuk_menu (), тобто

https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7.x

"назва": Обов'язкове. Неперекладена назва пункту меню.

"Опис": неперекладений опис пункту меню.

Тому не потрібно використовувати функцію t () для обох вище.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.