translate_user_role() WP 2.8.0

Перекладає назву ролі.

З того часу, як назви ролей зберігаються в БД, в код додаються рядки перекладу, що не використовуються, для того щоб вони потрапили в шаблон перекладу для po файлів і ця функція змогла їх перевести коли потрібно.

Виклик функції before_last_bar() потрібен тому, що старі установки зберігають ролі в старому контексті ‘Role name|User role’ і зберегти старий контент це простіше, ніж змінювати (виправляти його) його в БД.

Працює на основі:
translate_with_gettext_context() ,
before_last_bar()

Хуків немає.

Повертає

Строку. Перекладену роль або оригінальну назву ролі, якщо не вдалося перекласти.

Використання

translate_user_role($name, $domain);
$name
(рядок) (обов’язковий)
Назва ролі, наприклад “Administrator”.
$domain
(рядок)
Ідентифікатор файлу перекладу вказується під час реєстрації та підключення файлу перекладу. Якщо не вказати, буде використано дефолтний файл перекладу, який використовується в WordPress.


За замовчуванням: ‘default’

Приклади

0

#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.0Added the $domain parameter.

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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *