Перейти к публикации
  • разработка интернет магазинов на 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_LANGRUGE']) && !array_key_exists($code, $languages)) {
	$detect = '';
	
	$browser_languages = explode(',', $this->request->server['HTTP_ACCEPT_LANGRUGE']);
	
	// 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 и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.