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 );
}