DANFA

Как при добавлении опций создавать переменные для всех языков

Тут я уже писал: Тема: Журнал пользователя движка phpFOX 3 (Сообщение отдельно: 6388), что при добавлении какой либо опции, описание к ней добавляется только на английском языке. В том же посте есть пример решения. Тут покажу, что было изначально, и как я это исправил.

Для примера возьмем код из файла: "module/admincp/include/service/module/process.class.php":
					$sPhrase = phpfox::getService('language.phrase.process')->add(array(
							'var_name' => 'admin_menu_' . strtolower($aMenu['phrase']),
							'product_id' => $iProductId,
							'module' => $sName . '|' . $sName,
							'text' => array(
								'en' => $aMenu['phrase']
							)
						)
					);

И меняем его на:
					$langIDs = [];
					$langs = phpfox::getService('language')->get();
					foreach ($langs as $lang)
					{
						$langIDs[$lang['language_id']] = $aMenu['phrase'];
					}
		
					$sPhrase = phpfox::getService('language.phrase.process')->add(array(
							'var_name'   => 'admin_menu_' . strtolower($aMenu['phrase']),
							'product_id' => $iProductId,
							'module'     => $sName . '|' . $sName,
							'text'       => $langIDs
						)
					);

Когда я думал, как исправить проблему описанную в посте: Тема: Журнал пользователя движка phpFOX 3 (Сообщение отдельно: 6388), я думал, что это единственное место, где мне придется править, чтобы фразы были для всех языков. Оказалось таких мест хватает. Тогда я подумал - зачем везде править, если можно изменить всего в одном месте, и забыть об этом навсегда. Это место находится в файле: "module/language/include/service/phrase/process.class.php", под кодом (Метод add):
		if (isset($aVals['module']))
		{
			$aParts = explode('|', $aVals['module']);
		}

Я добавил код:
		$langs = phpfox::getService('language')->get();
		if (!is_array($aVals['text']) | count($aVals['text']) != count($langs))
		{
			if (is_array($aVals['text']))
			{
				$aVals['text'] = end($aVals['text']);
			}

			$textLang = [];
			foreach ($langs as $lang)
			{
				$textLang[$lang['language_id']] = $aVals['text'];
			}

			$aVals['text'] = $textLang;
		}

Теперь фразы будут добавляться для всех языков, везде.

Есть один недостаток: Фраза будет для всех языков на том языке, на котором Вы ее написали. Но это решается исправлением в Админ разделе > Менеджер фраз.