translate_user_role()
Перекладає назву ролі.
З того часу, як назви ролей зберігаються в БД, в код додаються рядки перекладу, що не використовуються, для того щоб вони потрапили в шаблон перекладу для po файлів і ця функція змогла їх перевести коли потрібно.
Виклик функції before_last_bar() потрібен тому, що старі установки зберігають ролі в старому контексті ‘Role name|User role’ і зберегти старий контент це простіше, ніж змінювати (виправляти його) його в БД.
Хуків немає.
Повертає
Строку
. Перекладену роль або оригінальну назву ролі, якщо не вдалося перекласти.
Використання
translate_user_role($name, $domain);
-
$name
(рядок) (обов’язковий) - Назва ролі, наприклад “Administrator”.
-
$domain
(рядок) -
Ідентифікатор файлу перекладу вказується під час реєстрації та підключення файлу перекладу. Якщо не вказати, буде використано дефолтний файл перекладу, який використовується в WordPress.
За замовчуванням: ‘default’
Приклади
#1 Перекладемо всі ролі
Щоб зрозуміти, навіщо потрібна функція translate_user_role() , подивимося у вигляді зберігаються системні ролі WordPress.
$ roles = []; foreach ( wp_roles()->roles as $role_name => $role_details ) { $roles[ $role_name ] = $role_details['name']; } print_r ($ roles);
Вміст змінної $roles буде:
Array ( // Системні ролі [administrator] => Administrator [editor] => Editor [author] => Author [contributor] => Contributor [subscriber] => Subscriber // Користувальницькі ролі [project_expert] => Експерт [project_moderator] => Модератор [project_tracker] => Трекер [project_tracker_fake] => Трекер (непідтверджений) [project_leader] => Керівник [test_role] => Тестова роль )
Для прикладу ролі користувача були створені плагінами і темою за допомогою функції populate_roles_160() ), але назви ролей передаються англійською мовою, а потім при необхідності перекладаються на основі файлів перекладу.
Найчастіше для отримання списку ролей та їх можливостей використовується клас wp_roles() , які повертають дані, і в них назви ролей не перекладено, крім моментів коли назву туди поміщено відразу переведене, як у нашому прикладі зроблено з користувальницькими ролями.
Спробуємо перекласти назву традиційних ролей __()
$ roles = []; foreach ( wp_roles()->roles as $role_name => $role_details ) { //$roles[ $role_name ] = translate_user_role( $role_details['name'] ); $roles[ $role_name ] = __( $role_details['name'] ); } print_r ($ roles); /* Array ( // Системні ролі [administrator] => Administrator [editor] => Редактор [author] => Автор [contributor] => Contributor [subscriber] => Subscriber // Користувальницькі ролі [project_expert] => Експерт [project_moderator] => Модератор [project_tracker] => Трекер [project_tracker_fake] => Трекер (непідтверджений) [project_leader] => Керівник [test_role] => Тестова роль ) */
Чому частина системних ролей не перевелася? Тому що у них є контекст, ось так це виглядає у файлі po :
msgctxt "User role" msgid "Administrator" msgstr "Адміністратор"
Щоб коректно перекласти такі рядки, потрібно використовувати функцію _x() , для якої вказати контекст User role
:
$ roles = []; foreach ( wp_roles()->roles as $role_name => $role_details ) { $roles[ $role_name ] = _x( $role_details['name'], 'User role' ); } print_r ($ roles); /* Array ( // Системні ролі [administrator] => Адміністратор [editor] => Редактор [author] => Автор [contributor] => Учасник [subscriber] => Передплатник // Користувальницькі ролі [project_expert] => Експерт [project_moderator] => Модератор [project_tracker] => Трекер [project_tracker_fake] => Трекер (непідтверджений) [project_leader] => Керівник [test_role] => Тестова роль ) */
Ми отримали правильні переклади. Але навіщо потрібна функція translate_user_role()? Вона не тільки робить те саме, що в останньому прикладі, але і враховує старі варіанти використання назви ролей, а також сама підставляє потрібний контекст, що позбавляє потенційних помилок.
Фінальний варіант:
$ roles = []; foreach ( wp_roles()->roles as $role_name => $role_details ) { $roles[ $role_name ] = translate_user_role( $role_details['name'] ); } print_r ($ roles); /* Array ( // Системні ролі [administrator] => Адміністратор [editor] => Редактор [author] => Автор [contributor] => Учасник [subscriber] => Передплатник // Користувальницькі ролі [project_expert] => Експерт [project_moderator] => Модератор [project_tracker] => Трекер [project_tracker_fake] => Трекер (непідтверджений) [project_leader] => Керівник [test_role] => Тестова роль ) */
список змін
З версії 2.8.0 | Введено. |
З версії 5.2.0 | Added the $domain parameter. |
translate_user_role () translate user role WP 6.0.2
function translate_user_role( $name, $domain = 'default' ) { return translate_with_gettext_context( before_last_bar( $name ), 'User role', $domain ); }