在drupal中,并不是所有的文本都使用了t()函数,drupal中自带的一些变量,还有就是第3方模块的变量,由于是存在数据库中的,而且是可以配置的,所以很不好实现多语言支持。其实,实现起来也很简单,但是很少人用到这一点。
我在使用Ubercart建站中,就遇到了这样的问题,由uc_catalog模块创建的分类区块和导航,里面的词汇表的名称,采用的是变量的形式,我们可以看看源代码:
'title' => variable_get('uc_catalog_name', t('Catalog')),
这个变量名为uc_catalog_name,默认为'Catalog',这个时刻配置的,培植页面就在这个词汇表的编辑页面。启用了i18n模块以后,我费了很大的劲,尝试了各种方法,都没有把这个变量解决掉。后来我想了一个办法,那就是使用js对这个文中的内容进行替换。不过觉得这种方式并不正规。我找了不少的地方,差了不少的英文页面,包括ubercart.org上,有人也遇到了同样的问题,但是却没有答案,有人说这是ubercart的bug,我很沮丧,说实在的,如果这样的话,那我就惨了。
不断的翻阅翻译相关的文档,最终找到了头目,Multilingual Variables,http://drupal.org/node/313272,这篇文章很好的解决了这个问题,我看到的时候,第一个感觉就是找到了,这里面的两篇文章我读了一遍。
我的解决方案如下,在settings配置文件中,也就是内容的最下面,添加如下内容:
/**
* Multilingual settings
*
* This is a collection of variables that can be set up for each language when i18n is enabled.
* These are the basic ones for Drupal core, but you can add your own here.
*/
$conf['i18n_variables'] = array(
'uc_catalog_name',
// Site name, slogan, mission, etc..
// 'site_name',
// 'site_slogan',
// 'site_mission',
// 'site_footer',
// 'anonymous',
// Different front page for each language
// 'site_frontpage',
// Primary and secondary links
// 'menu_primary_links_source',
// 'menu_secondary_links_source',
// Contact form information
// 'contact_form_information',
);
其它的变量是我拷贝过来的,保存,当然,修改settings文件的时候,需要修改文件的权限的。
修改完以后,就是进入词汇表的切换页面,输入catalog,然后就是切换到繁体中文,在同样的页面,输入“图书目录”。现在好了。这个变量的多语言切换功能实现了。
这就是Ubercart的长处,它将自己的功能,完全架构在drupal之上,自己本身不用处理这种与业务无关的内容。
本文算是我今天在meetup上的补充吧。
相关链接: http://zhupou.cn
老葛,这个settings文件是ubercat里的还是i1
老葛,这个settings文件是ubercat里的还是i18n里的那个?是直接在这个文件里把需要翻译的变量写进去,然后在trans界面翻译吗?
settings文件只有一个阿,就是sites/default下面的
settings文件只有一个阿,就是sites/default下面的
呵呵,我看你写的”这就是Ubercart的长处“,没用过u
呵呵,我看你写的”这就是Ubercart的长处“,没用过ubercart,呵呵,对了,老葛,帮我下
function profile_user($type, &$edit, &$user, $category = NULL) {switch ($type) {case 'load':return profile_load_profile($user);case 'register':return profile_form_profile($edit, $user, $category, TRUE);case 'update':return profile_save_profile($edit, $user, $category);case 'insert':return profile_save_profile($edit, $user, $category, TRUE);case 'view':return profile_view_profile($user);case 'form':return profile_form_profile($edit, $user, $category);case 'validate':return profile_validate_profile($edit, $category);case 'categories':return profile_categories();case 'delete':db_query('DELETE FROM {profile_values} WHERE uid = %d', $user->uid);}}
在profile.module 205行左右我想把上面这个hook_user改成hook_menu,有几个问题不明白,一个是($type, &$edit, &$user, $category = NULL)这些参数怎么处理,一个是里面的$type换成menu的话应该怎么处理?麻烦你了!不好意思。
你想把user profile中的信息,放到菜单中吧?
你想把user profile中的信息,放到菜单中吧?好像不是这样实现的,
恩,是的,那怎么做呢?给我点建议把。
恩,是的,那怎么做呢?给我点建议把。
没有做过,这个功能,不过以前见过lullabot的相关文章
没有做过,这个功能,不过以前见过lullabot的相关文章,是使用panels实现的,当然它也需要具体实现个人的菜单,只有这一点印象了
老葛的文章很有启发性,不错,以前d5的localizer模
老葛的文章很有启发性,不错,以前d5的localizer模块有专门处理变量的函数。d6没用过
Andy,学学D6吧,比drupal5好多了,
Andy,学学D6吧,比drupal5好多了,不然会落伍的,localizer模块在Drupal6中已经被废弃了,全面地被i18n取代了。
我在建站的时候总结出来的,这个是,我花了一天的心血,才找到的东东,很少有人知道变量的多语言支持这样的技术了,包括drupal.org社区,还有ubercart.org社区,很多人都问这个问题,都没有人解答得了,还有人觉得这个是bug呢。与时俱进才能保持技术的领先性阿。
HOHO
HOHO
终于改回自己的名字了,会员填充的信息我是不改的
终于改回自己的名字了,会员填充的信息我是不改的,有空常交流阿,我们是同行,也是竞争对手,但是在这个drupal还没有在中国流行开来以前,我们更多的是同行.
恩。同行!
恩。同行!
老葛还是改回自己名字好 !g089h515r806
老葛还是改回自己名字好 !g089h515r806 是在太难记了,别人问你的ID是什么总不至于说这一串字符吧。哈哈!