Czy powinienem używać t () w opisie hook_menu?


11

Zawsze używałem t () do tytułu i opisu hook_menus w następujący sposób:

$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',
);

Ma to dla mnie sens, aby w razie potrzeby użytkownicy mogli tłumaczyć tytuł i opis na różne języki.

Jednak ten komentarz do przeglądu modułu w DO mówi:

Nie, to źle, nie rób tego - opisy w hook_menu () nigdy nie powinny używać t ().

Jakie jest tego uzasadnienie i czy rzeczywiście jest to najlepsza praktyka?

A jeśli to prawda, to czy nie powinniśmy również używać t () dla tytułu?


Oczywiście nie należy tego używać, ale jeśli przeszukujesz stronę pomocy hook_menu pod kątem „opis” => t („jest 6 wystąpień, więc jest to oczywisty błąd!
Felix Eve

1
Często czy nie, to nie jest wymówka;) A te wydarzenia są w komentarzach - ludzie mogą się tam mylić.
Mołot,

1
@ Mołot Mogą się tam pomylić, jednak wielu nowych użytkowników skopiuje i wklei ten kod, więc nadal będzie to powszechny błąd. Myślę, że ktoś z uprawnieniami administratora w DO powinien edytować te komentarze, aby usunąć t ().
Felix Eve

Możesz zgłosić problem, jeśli chcesz.
Mołot,

1
Dobry pomysł. Sporządzono .
Felix Eve

Odpowiedzi:


17

Zobacz ciągi znaków w znanych miejscach: wbudowane menu, uprawnienia, komunikaty dziennika i dokumentacja społeczności plików .info :

System menu Drupal 6 i 7 przechowuje tytuły i opisy pozycji menu w języku angielskim. Pozwala to systemowi buforować dane, ale wyświetlać je użytkownikom używającym różnych języków na żądanie. Aby to zadziałało, nie należy używać t () w tytule lub opisie pozycji menu w implementacji hook_menu (). Ponadto powinieneś spróbować użyć literału (zamiast ciągu dynamicznego) dla tych dwóch kluczy, aby narzędzie do ekstrakcji szablonów tłumaczenia mogło znaleźć używany ciąg.

Podkreśl moje.


Dodałbym: Tylko jeśli title callbacknie jest ustawiony, ponieważ domyślnie title callbackjest t()funkcja
milkovsky 16.04.14

1
@milkovsky, jeśli ustawione jest wywołanie zwrotne tytułu, powinno się o niego zadbać t()i nadal nie powinno się go używać hook menu()- wiesz, buforowanie.
Mołot

11

Jeśli widzisz dokumentację argumentów hook_menu ..

  • „tytuł”: wymagane. Nieprzetłumaczony tytuł pozycji menu.
  • „callback tytuł”: Funkcja do generowania tytułu; domyślnie jest to t (). Jeśli potrzebujesz tylko surowego ciągu znaków, ustaw go na FAŁSZ.
  • „argumenty tytułu”: Argumenty wysyłane do t () lub niestandardowego wywołania zwrotnego z podstawieniem komponentu ścieżki, jak opisano powyżej.
  • „opis”: nieprzetłumaczony opis pozycji menu.

Domyślnie wywołanie zwrotne tytułu jest funkcją t. Więc zawsze jest tłumaczone ..


7

Ponieważ Drupal 6 nie jest już potrzebny.

Proszę przeczytać https://drupal.org/node/140311 . Cytując, że:

Od wersji 6.x Drupal wewnętrznie obsługuje tłumaczenie tytułów i opisów menu na lokalny język użytkownika. Opisy, jeśli są podane, są zawsze tłumaczone za pomocą t (); nie ma możliwości przekazania dodatkowych danych do podstawienia symboli zastępczych (w D5 i wcześniej, przekazywanie podstawień było odradzaną praktyką - przy tej zmianie system menu wymusza tę regułę bezpośrednio). Tytuły są domyślnie tłumaczone za pomocą t (), ale zamiana ciągów w stylu t () jest możliwa dzięki zastosowaniu nowej właściwości „argumenty tytułu”. Możesz także zastąpić t () własnym niestandardowym wywołaniem zwrotnym.


6

Nie powinieneś używać t()w hook_menu()implementacjach, ponieważ t()później jest automatycznie wywoływany, a to spowodowałoby podwójne tłumaczenie.


* Pamiętaj, że jeśli dodasz title callbackw menu hook_menu, a jeśli nie jest t, wywołanie zwrotne tytułu jest odpowiedzialne za przetłumaczenie łańcucha.
AyeshK

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.