opencart 4 Multi language Remove ?language= from Url

85 Views Asked by At

Hello Im trying to remove ?language= from my url in opencart 4
the exmpale is i Want the url change from this

exmpale.com/en?language=en-gb
exmpale.com/fr?language=fr

To

exmpale.com/en

First Step I added This code To (catalog/controller/startup/seo_url.php)

if($data['route'] === 'common/home') {
   if($data['language'] === 'fr' && $key ==='language') {
      $url = '/';
      unset($data[$key]);
   } elseif($data['language'] === 'en-gb' && $key ==='language') {
      $url = '/en';
      unset($data[$key]);
  }
}

that change worked and removed the ?language= from url but the route is giving me not found error

1

There are 1 best solutions below

0
Алексей Никитченко On

edited: oh, sorry, i simply misunderstoor your queestion. you have to use few keys in oc_seo_url table:

language_id = 1 (let's say you have en-gb as ID 1)
key = language
value = en-gb
keyword = en
sort_order = -2

language_id = 2 (lets say fr have ID 2)
key = language
value = en-gb
keyword = en
sort_order = -2

language_id = 1
key = language
value = fr 
keyword = fr
sort_order = -2

language_id = 1
key = language
value = fr 
keyword = en
sort_order = -2

P.S. In my case i added next code to remove main language from url at all

                if (empty($this->request->get['language'])) {
                    $this->request->get['language']='uk-ua';
                }

after foreach ($parts as $part) {...} (~line #20 in orig file) in catalog/controller/startup/seo_url.php

seo url for that language is set to empty string in database.

P.S. and don't forget to modify rewrite function in same file like this. replace

        foreach ($paths as $result) {
            $url .= '/' . $result['keyword'];
        }

with

foreach ($paths as $result) {
            if (!empty($result['keyword'])) {

                $url .= '/' . $result['keyword'];
            } else {
                $url .= $result['keyword'];

            }
        }