Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Мультиязычный мультимагазин


pawana
 Поделиться

Рекомендованные сообщения

Добрый день.

Есть мультимагазин с несколькими доменами и несколькими языками. Раньше для каждого магазина гуглу скармливался один язык, но при этом, на каждом сайте пользователь мог выбрать тот язык, который ему подходит из всех доступных. Сейчас пришло время сделать каждому домену свой набор языков (на 2х доменах УА/РУ, на одном УА и на одном АНГЛ/РУ).
Ну и собственно говоря вопрос. Добавить дубли языков можно, уникализировать дескрипшн и СЕО тоже, но нужно сделать для каждого магазина выбор только "его" языков, иначе у пользователей будет по несколько вариантов УА, РУ и т.д. Как это сделать наиболее изящно я не понимаю - нужно пилить или есть другие способы? И также, не понимаю, если честно, где пилить - в контроллере языкового модуля или где-то еще и какие могут бока полезть?

Изменено пользователем pawana
Ссылка на комментарий
Поделиться на других сайтах


54 минуты назад, pawana сказал:

в контроллере языкового модуля или где-то еще и какие могут бока полезть

 

Есть еще подводный камень (бока полезли). Это автоопределение языка по locale браузера. У вас есть 3 языка Укр/Рус/Англ. Пользователь заходит на домен с единственным Укр, но заходит с английской версии браузера. OpenCart по locale браузера определит язык и переключит на Английский. Это происходит в файле catalog/controller/startup/startup.php

 

Спойлер

// Language
$code = '';

$this->load->model('localisation/language');

$languages = $this->model_localisation_language->getLanguages();

if (isset($this->session->data['language'])) {
	$code = $this->session->data['language'];
}
		
if (isset($this->request->cookie['language']) && !array_key_exists($code, $languages)) {
	$code = $this->request->cookie['language'];
}

// Language Detection
if (!empty($this->request->server['HTTP_ACCEPT_LANGUAGE']) && !array_key_exists($code, $languages)) {
	$detect = '';
	
	$browser_languages = explode(',', $this->request->server['HTTP_ACCEPT_LANGUAGE']);
	
	// Try using local to detect the language
	foreach ($browser_languages as $browser_language) {
		foreach ($languages as $key => $value) {
			if ($value['status']) {
				$locale = explode(',', $value['locale']);
				
				if (in_array($browser_language, $locale)) {
					$detect = $key;
					break 2;
				}
			}
		}	
	}			
	
	if (!$detect) { 
		// Try using language folder to detect the language
		foreach ($browser_languages as $browser_language) {
			if (array_key_exists(strtolower($browser_language), $languages)) {
				$detect = strtolower($browser_language);
				
				break;
			}
		}
	}
	
	$code = $detect ? $detect : '';
}

if (!array_key_exists($code, $languages)) {
	$code = $this->config->get('config_language');
}

if (!isset($this->session->data['language']) || $this->session->data['language'] != $code) {
	$this->session->data['language'] = $code;
}
		
if (!isset($this->request->cookie['language']) || $this->request->cookie['language'] != $code) {
	setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);
}
		
// Overwrite the default language object
$language = new Language($code);
$language->load($code);

$this->registry->set('language', $language);

// Set the config language_id
$this->config->set('config_language_id', $languages[$code]['language_id']);	
$this->config->set('config_language', $code);

 

 

Как вариант, можно в модели model/localisation/language, фильтровать все доступные языки для каждого $this->config->get('config_store_id'). Это решит обе проблемы сразу.

 

В теории))

Ссылка на комментарий
Поделиться на других сайтах

34 минуты назад, halfhope сказал:

Это происходит в файле catalog/controller/startup/startup.php

Это зло злющее, оно закоментено :)
 

34 минуты назад, halfhope сказал:

фильтровать все доступные языки для каждого $this->config->get('config_store_id')

Все языки доступны для всех store_id, по крайней мене я не нашел ничего похожего, кроме языка по умолчанию.
Т.е. нужно таблицу соответствий сделать, тогда допил модели увеличивается :). Коряво как-то. 

34 минуты назад, halfhope сказал:

В теории))

Почему меня не покидает ощущение, что где-то вылезет бок :)))

Изменено пользователем pawana
Ссылка на комментарий
Поделиться на других сайтах


2 минуты назад, pawana сказал:

Все языки доступны для всех store_id, по крайней мене я не нашел ничего похожего, кроме языка по умолчанию.
Т.е. нужно либо жестко перебор сделать в контроллере по store_id, либо таблицу соответствий сделать, тогда допил распространится на модель дополнительно :). И то и то - коряво как-то. 

 

Работает!

Ссылка на комментарий
Поделиться на других сайтах

10 минут назад, chukcha сказал:

но ПС ходит без accept language

П.С. ходит по сайтмепу, если отдавать правильные урлы, то там будет правильный язык.

Ссылка на комментарий
Поделиться на других сайтах


20 минут назад, pawana сказал:

то там будет правильный язык.

Но это не точно :)
 

21 минуту назад, chukcha сказал:

Работает!

О! Это что за зверь?

Изменено пользователем pawana
Ссылка на комментарий
Поделиться на других сайтах


Только что, pawana сказал:

О! Это что за зверь?

"модулечек" - окмодик

Ссылка на комментарий
Поделиться на других сайтах

1 минуту назад, pawana сказал:

Секретный, небось? :)

будет несекретный, если станет вашим

Ссылка на комментарий
Поделиться на других сайтах

10 минут назад, chukcha сказал:

будет несекретный, если станет вашим

Черный ящик в студию! :)) Ну или подробности в личку :) Мне так или иначе все равно нужно будет эту проблему решать.

Изменено пользователем pawana
Ссылка на комментарий
Поделиться на других сайтах


Только что, pawana сказал:

Ну или подробности в личку

Вам треба? Пишить у особисті.

Ссылка на комментарий
Поделиться на других сайтах

  • 6 месяцев спустя...

Добрый день!
После установки модулей мультиязычности, все отлично работает, но страницы основного языка отдают код http 200, а второго языка 302, соответсвенно Гугл не хочет видеть альтернативную страницу...кто-то сталкивался?

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.