Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


pawana

Recommended Posts

Добрый день.

Есть мультимагазин с несколькими доменами и несколькими языками. Раньше для каждого магазина гуглу скармливался один язык, но при этом, на каждом сайте пользователь мог выбрать тот язык, который ему подходит из всех доступных. Сейчас пришло время сделать каждому домену свой набор языков (на 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, либо таблицу соответствий сделать, тогда допил распространится на модель дополнительно :). И то и то - коряво как-то. 

 

Работает!

index.thumb.png.5dd086a03af644a3fb97ab381c0509ee.png

Надіслати
Поділитися на інших сайтах

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

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

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

Надіслати
Поділитися на інших сайтах


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

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

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

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

Работает!

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

Змінено користувачем pawana
Надіслати
Поділитися на інших сайтах


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

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

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

Змінено користувачем pawana
Надіслати
Поділитися на інших сайтах


  • 6 months later...

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

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.