Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


 Share

Recommended Posts

Добрый гдень.

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

Edited by pawana
Link to comment
Share on other sites


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'). Это решит обе проблемы сразу.

 

В теории))

Link to comment
Share on other sites

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

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

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

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

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

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

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

В теории))

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

Edited by pawana
Link to comment
Share on other sites


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

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

 

Рилииет!

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites


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

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

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

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

Рилииет!

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

Edited by pawana
Link to comment
Share on other sites


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

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

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

Edited by pawana
Link to comment
Share on other sites


  • 6 months later...

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

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.