Домой Wp-Recall WP-Recall: Вопросы и ответы Корректное отображение своих Полей профиля на разных языках.
12ответ(ов) в теме
Andrew.Tikhonovsky
не в сети 4 года
На сайте с 24.09.2018
Участник
Тем 7
Сообщения 33
1
15:59
Версия WP-Recall: 16.17.8

Просмотрел

Вы не можете просматривать опубликованные ссылки

, но оказалось несколько не то, что искал.
Подскажите, пожалуйста, как для мультиязычных сайтов организовать корректный вывод своих полей профиля? К примеру, заносим в поле "Заголовок" - значение "Имя". Сейчас неважно какой язык на сайте выбран - отображаться будет то значение, которое вводится в админке. Понятное дело, что в языковых файлах для перевода (*.po) это не поправить. А хотелось бы, чтобы было красиво, и если сайт в данный момент на английском языке, то отображается "Name", соответственно в "русском режиме" - "Имя". Стандартные поля WP-Recall замечательно переведены, а как быть со своими?
В данный момент на сайте стоит WPGlobus, но он не "подхватывает" "Поля профиля" из WP-Recall. Может он "виноват", и существует правильный способ решить проблему?

P.S. Переводить "на лету", как делает GTranslate не хотелось бы...

С уважением,
Андрей.

Редакции сообщения
20.05.2019 05:02Andrew.TikhonovskyПричина: не указано
20.05.2019 05:07Andrew.TikhonovskyПричина: не указано
20.05.2019 05:08Andrew.TikhonovskyПричина: не указано
20.05.2019 09:44Andrew.TikhonovskyПричина: не указано
20.05.2019 16:34Andrew.TikhonovskyПричина: не указано
0
Andrew.Tikhonovsky
не в сети 4 года
На сайте с 24.09.2018
Участник
Тем 7
Сообщения 33
2
18:53

Кстати, еще одну особенность заметил...
Если передвинуть поля-блоки в админке в "Менеджер вкладок личного кабинета", то "мультиязычность" при переключении языков на сайте в "кабинете" слетает, и обратно уже не возвращается!..
Может, всё-таки, подскажете что делать ? 🙂

0
Андрей CS
не в сети 15 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16938
3
19:09

Все вкладки личного кабинета хранят свои данные в БД, поэтому локализовать их путем формирования файла локализации не выйдет, надо прогонять вкладки через фильтр rcl_tabs внутри своей функции и локализовать.
Для этого можно использовать такую конструкцию:

add_filter( 'rcl_tabs', 'tabs_translate', 10 );
function tabs_translate( $tabs) {
    
    $tabs['tab_id1']['name'] = __('Name tab 1');
    $tabs['tab_id2']['name'] = __('Name tab 2');
    $tabs['tab_id3']['name'] = __('Name tab 3');

    return $tabs;
}

т.е. перечисляете тут вкладки, которые вам требуется локализовать, где вместо tab_id1 указываете реальный идентификатор своей вкладки и наименование, которое будете использовать для вкладки внутри функции локализации.
Далее формируете, например, через poedit файл .po куда будут включены эти строки и переводите их на нужные вам языки, останется только подключить полученный файл локализации.
Если у текущей темы есть свой файл локализации, то можете вписать эту функцию в файл функций текущей темы и добавить эти строки заново просканировав папку темы через poedit

1
Andrew.Tikhonovsky
не в сети 4 года
На сайте с 24.09.2018
Участник
Тем 7
Сообщения 33
4
19:30

Спасибо огромное за пример! Значит я не зря стал свою обработку писать... 🙂 Кстати, я правильно понял, что если в админке в блоке надпись "Заголовок", то это соответствует 'name' из array('name'=>'Имя вкладки'), а переводить мне нужно 'Имя вкладки'?..
Меня теперь больше интересует ответ на второй вопрос.
Так как если кто-то из админов изменит порядок блоков личного кабинета, то придется все поля включать в обработку, а это уже не хорошо. 🙂
Интересно, что-то можно стандартными средствами сделать, чтобы мультиязычность не слетала после, вроде бы, стандартных манипуляций с настройками?

Редакции сообщения
20.05.2019 19:47Andrew.TikhonovskyПричина: не указано
0
Андрей CS
не в сети 15 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16938
5
20:02

Заголовок поля соответствует значению name в массиве данных вкладки.
На работоспособность примера что я прислал выше никак не могут повлиять какие либо изменения настроек через админку, там игнорируется сортировка вкладок и по сути наименования для вкладок задаются именно через php-код, который вы и будете локализовать.

0
Andrew.Tikhonovsky
не в сети 4 года
На сайте с 24.09.2018
Участник
Тем 7
Сообщения 33
6
22:45

Эх... Но спасибо! 🙂

0
Andrew.Tikhonovsky
не в сети 4 года
На сайте с 24.09.2018
Участник
Тем 7
Сообщения 33
7
16:21

Продолжаем разговор... Если можно...
Ну с rcl_tabs вроде получилось у меня...
Но! Это же реально только закладки кабинета (которые, кстати, если не трогать, в настройках, замечательно работают с разными языками).
А как быть с "редактором Публикаций", к примеру (а там еще куча разных объектов у Вас)? Какие объекты надо обработать, чтобы в них языки тоже корректно отображались? Может есть документ хитрый какой?

0
Вова (Otshelnik-Fm)
не в сети 1 неделя
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18654
8
16:41

Думаю что тут найдете ответ и фильтры:

Вы не можете просматривать опубликованные ссылки

фильтр rcl_public_form_fields

0
Andrew.Tikhonovsky
не в сети 4 года
На сайте с 24.09.2018
Участник
Тем 7
Сообщения 33
9
17:08

Спасибо.
Ну, в общем-то, я раньше начал с rcl_profile_fields - из описания в этой статье я решил, что там прямо все поля можно получить...
Ну, да ладно!
А можно, Вам, в качестве хотелки, пожелать, чтобы у Вас нашлось время, средства и желание сделать стандартным функционалом, корректную работу с языками! А то - такой замечательный плагин со многих сторон, и такие мелкие пакости подкидывает. 🙂

Редакции сообщения
21.05.2019 17:15Andrew.TikhonovskyПричина: не указано
1
Вова (Otshelnik-Fm)
не в сети 1 неделя
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18654
10
17:56

Я поддерживаю ваше предложение.
Хотя бы чтобы например был общий глобальный массив $rcl_translate (или функция) и его, в зависимости от своих условий, пользователи могли бы легко перевести на нужный язык. Потому что каждый плагин транслитерации своими механизмами обладает - всем не угодишь, а так будет единая коллекция пользовательских фраз (те что задаются в менеджере вкладок, полях профиля, формах публикаций и т.д.)

0
Andrew.Tikhonovsky
не в сети 4 года
На сайте с 24.09.2018
Участник
Тем 7
Сообщения 33
11
18:06

Было бы круто! 🙂

0
Andrew.Tikhonovsky
не в сети 4 года
На сайте с 24.09.2018
Участник
Тем 7
Сообщения 33
12
13:15

В общем, если кому интересно сделал такие костыли. 🙂

//----- Translate profile fields---------------
add_filter('rcl_profile_fields', 'translate_profile_fields', 10);
function translate_profile_fields($fields){
	$local = get_bloginfo ('language');
	
	if ($local<>'ru-RU'){
		foreach ($fields as $FieldItem=>$FieldItemValue) {
			//echo $TabItem;
			//echo $TabItemValue;
  		 	foreach ($FieldItemValue as $Item=>$ItemValue ) {
			 	if ($Item == 'title'){
					$str = $ItemValue;
					switch ($ItemValue){
						case 'Имя': // Dashboard WP-Recall User string  
					 		$str = 'Name'; // Translate
							break;
						case 'День рождения':
							$str = 'Birthday';
							break;
					}						
				 	$fields[$FieldItem][$Item] =$str;
				}
			} 
		}
	}
    return $fields;
}

//----- Translate Publication fields---------------
add_filter('rcl_public_form_fields', 'translate_public_form_field', 10, 2);
function translate_public_form_field($fields, $formData){
 	$local = get_bloginfo ('language');
	if ($local<>'ru-RU'){
		foreach ($fields as $FieldItem=>$FieldItemValue) {
			//echo $TabItem;
			//echo $TabItemValue;
  		 	foreach ($FieldItemValue as $Item=>$ItemValue ) {
			 	if ($Item == 'title'){
					$str = $ItemValue;
					switch ($ItemValue){
						case 'Заголовок': // Dashboard WP-Recall User string
					 		$str = 'Header'; // Translate
							break;
						case 'Рубрики':
							$str = 'Rubrics';
							break;
						case 'Краткая запись':
							$str = 'Description';
							break;
						case 'Содержание публикации':
							$str = 'Content';
							break;
						case 'Медиа-загрузчик':
							$str = 'Media uploader';
							break;
						case 'Миниатюра публикации':
							$str = 'Publication thumbnail';
							break;
						case 'Метки':
							$str = 'Tags';
							break;	
					}						
				 	$fields[$FieldItem][$Item] =$str;
				}
			}
		}
	} 
	return $fields;
}

Добавляется в functions.php темы.
Поскольку костыли - за красотой не гнался. Работает и ладно.
Так как я особо с PHP не разбирался, а стандартный "переводчик" __() не умеет переводить значения переменных, буду признателен за подсказки, чтобы код сделать человеческим. 🙂

Редакции сообщения
22.05.2019 13:16Andrew.TikhonovskyПричина: не указано
22.05.2019 13:18Andrew.TikhonovskyПричина: не указано
1
Вы не имеете права на публикацию сообщений в этой теме