搜索
开启辅助访问

QQ登录

只需一步,快速开始

扫一扫,访问微社区

注册 找回密码

opencart做的多语言与多货币关联问题。

查看数: 12818 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2013-8-17 10:00

正文摘要:

用opencart做的双语言简体繁体和多货币人民币港币,点简体就直接显示是人民币的网站,点繁体就是港币网站。有哪位大侠会呢? 我有两个文件currency.tpl,language.tpl,现在的情况是点简体就不是自动显示是人民币的 ...

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

回复 mengwb 发表于 2013-8-24 23:44:32
不过语言设置里的区域要特别注意,要全面,才能完全兼容各种浏览器。比如目前系统默认的英文设置,对于火狐和IE都有些问题,修改如下:en_US.UTF-8,en_US,en-US,en-us,en-gb,english
中文应该为:zh_CN.UTF-8,zh_CN,zh-Hans-CN,zh-cn,china
如此设置可保证在IE和火狐下做到打开网站时,在没有cookie和session的情况下,自动根据浏览器语言设置来自动识别网站语言。不过本人在win8下最新版的ie和火狐下测试,不同版本又无区别商不得而知。
回复 mengwb 发表于 2013-8-24 23:03:36
对于根据当前系统语言打开网站自动使用对应语言和货币的功能,系统本身有类似的功能,只不过系统只是对语言有这样的功能,可以自己研究下代码,改下。
此部分代码在opencart的入口文件index.php中,代码如下:
if (isset($request->server['HTTP_ACCEPT_LANGUAGE']) && $request->server['HTTP_ACCEPT_LANGUAGE']) {
        $browser_languages = explode(',', $request->server['HTTP_ACCEPT_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;
                                }
                        }
                }
        }
}

if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']) {
        $code = $session->data['language'];
} elseif (isset($request->cookie['language']) && array_key_exists($request->cookie['language'], $languages) && $languages[$request->cookie['language']]['status']) {
        $code = $request->cookie['language'];
} elseif ($detect) {
        $code = $detect;
} else {
        $code = $config->get('config_language');
}

if (!isset($session->data['language']) || $session->data['language'] != $code) {
        $session->data['language'] = $code;
}

if (!isset($request->cookie['language']) || $request->cookie['language'] != $code) {          
        setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $request->server['HTTP_HOST']);
}                       


其中,首先以session中的设置为最优先,其次以cookie。如果没有session和cookie的设置,才取浏览器(可以认为是操作系统语言)的语言设置,来设置网站打开的语言。
对于货币可以参考语言的这种思路自己来进行修改。
回复 NICK 发表于 2013-8-19 21:01:30
顶,本人也觉得首页既然已有了多语言选择就直接可以攘括掉多货币选择 这个功能
期待有成品出现
回复 haha008 发表于 2013-8-17 16:41:11
本帖最后由 haha008 于 2013-8-17 16:43 编辑

你这需求很麻烦诶

首先,要考虑语言包和货币如何关联。

如:中文-人民币 、 中文-港币 、 中文-美元、 英文-英镑、英文-美元等等。但OC内部并没有这样的关联机制,所以要自己定义。
  1. /* 要弄成智能关联的话要改很多地方,甚至要修改数据库。具体改动得看你的需求和开发思路。下面提供个简单的硬性关联代码给你参考,若有不满,请勿拍砖! */
复制代码
好,废话不多说,首先:打开文件catalog\controller\module\language.php,找到以下代码

  1.         if (isset($this->request->post['language_code'])) {
  2.                         $this->session->data['language'] = $this->request->post['language_code'];
  3.                
  4.                         if (isset($this->request->post['redirect'])) {
  5.                                 $this->redirect($this->request->post['redirect']);
  6.                         } else {
  7.                                 $this->redirect($this->url->link('common/home'));
  8.                         }
  9.             }
复制代码
改成

  1.             if (isset($this->request->post['language_code'])) {
  2.                         $this->session->data['language'] = $this->request->post['language_code'];
  3.                        
  4.                         $currency_code = '';
  5.                        
  6.                         if ($this->request->post['language_code'] == 'en') {
  7.                                 $currency_code = 'USD';
  8.                         }
  9.                        
  10.                         if ($currency_code) {
  11.                                 $this->currency->set($currency_code);
  12.                                
  13.                                 unset($this->session->data['shipping_method']);
  14.                                 unset($this->session->data['shipping_methods']);
  15.                         }
  16.                
  17.                         if (isset($this->request->post['redirect'])) {
  18.                                 $this->redirect($this->request->post['redirect']);
  19.                         } else {
  20.                                 $this->redirect($this->url->link('common/home'));
  21.                         }
  22.             }
复制代码
其中重要部分,en 为英文包的Code,USD 为货币的Code。具体Code请参照后台 setting -> Localisation -> languages/currencys 的参数

  1.                         if ($this->request->post['language_code'] == 'en') {   // 判断接收到的语言是否是英文,对字母大小写敏感
  2.                                 $currency_code = 'USD';   // 如果是英文,就启用USD(美元)
  3.                         }


复制代码
弄好后,估计就有效果了吧。        若有BUG,请跟帖联系。
关闭

站长推荐 上一条 /1 下一条

QQ|手机版|OpenCart - 中文官方网站 ( 蜀ICP备09033774号|人工智能

GMT+8, 2024-9-28 21:01 , Processed in 0.068644 second(s), 29 queries , Gzip On.

快速回复 返回顶部 返回列表