搜索
开启辅助访问 切换到宽版

QQ登录

只需一步,快速开始

扫一扫,访问微社区

注册 找回密码
查看: 13059|回复: 5
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-8-17 10:00:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
用opencart做的双语言简体繁体和多货币人民币港币,点简体就直接显示是人民币的网站,点繁体就是港币网站。有哪位大侠会呢? 我有两个文件currency.tpl,language.tpl,现在的情况是点简体就不是自动显示是人民币的网站,点繁体不是自动显示就是港币网站。要实现点简体就直接显示是人民币的网站,点繁体就是港币网站。请大侠帮我改改。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
沙发
发表于 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,请跟帖联系。
板凳
发表于 2013-8-19 21:01:30 | 只看该作者
顶,本人也觉得首页既然已有了多语言选择就直接可以攘括掉多货币选择 这个功能
期待有成品出现
地板
 楼主| 发表于 2013-8-24 13:04:06 | 只看该作者
haha008,

   谢谢大侠的回复。

  我按你的方法改了下,在其中加了以下代码,已实现点简体就直接显示是人民币的网站,点繁体就是港币网站。但是有个问题,就是没法识别当前电脑的语言,即当前电脑是简体,网站就显示简体版。当前电脑是繁体就显示繁体版。这个问题能帮助看看吗?

2.jpg (42.39 KB, 下载次数: 108)

2.jpg
5#
发表于 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的设置,才取浏览器(可以认为是操作系统语言)的语言设置,来设置网站打开的语言。
对于货币可以参考语言的这种思路自己来进行修改。
6#
发表于 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和火狐下测试,不同版本又无区别商不得而知。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-12-23 04:30 , Processed in 0.063070 second(s), 26 queries , Gzip On.

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