测试advanced forum模块多语言的时候遇到问题,请教老鸟如何解决

Events happening in the community are now at Drupal community events on www.drupal.org.
radarfyh's picture

加载模块:
Chaos tools
Views
Forum
Advanced Forum
Internationalization
Multilingual content
Multilingual forum

需求:
1. 用户可以选择两种语言:中文、英文
2. 选择英文的用户登录论坛,界面全是英文,只能看到的是英文帖子,能发布英文帖子
3. 选择中文的用户登录论坛,界面全是中文,只能看到的是中文帖子,能发布中文帖子

问题:
第1、2两个需求能完整实现,实现第3个需求时有个小问题:
当链接为drupal-7.15/?q=node/add/forum时,标题汉化了,是中文的,如第一个图(2012-09-14_150531.jpg);
当链接为drupal-7.15/?q=node/add/forum/20时,标题没有汉化了,,如第二个图(2012-09-14_150506.jpg);
解释下,Forum topic是默认建立的content type,Forum topic对应汉语“论坛话题”,里面的英文语句也都有对应的中文翻译语句。20是一个Forum topic的ID,也就是叫做Forums 的 vocabulary里面的一个条目,原始语言是英文,叫做Technical Discussion,对应的中文翻译为“技术讨论”。

问题是:怎么让第二个图的标题“创建 Forum topic”汉化为“创建 论坛话题”?

AttachmentSize
2012-09-14_150531.jpg23.72 KB
2012-09-14_150506.jpg25.99 KB

Comments

感觉是翻译不完整的问题吧,建议试试

biglazy's picture

感觉是翻译不完整的问题吧,建议试试 Localization client 这个模块;

用 Localization update 模块更新过官方的翻译后, advanced forum 模块还是会有一部分翻译不完整的地方,也有很多翻译不妥当的地方,要是自己要使用的话,建议使用 Localization client 模块添加自己想要的翻译吧,使用不是太麻烦。

手动制作翻译文件导入,有点麻烦。

Localization

radarfyh's picture

Localization client启用了的,查找不到Forum topic这个词。对比node/add/forum/20和node/add/forum两个链接,感觉是参数20传入后没有使用T函数导致的,但是我没有找到对应函数的入口。

radarfyh's picture

我猜测,参数20传入后,获取父节点在加上Create作为标题,由于参数20指向讨论版主题technical discussion, 其父节点就是Forum topic,如果调用T函数,应该就直接翻译为“创建 论坛话题”,而不是"创建 Forum topic"

biglazy's picture

试了一下,没有出现你这种情况,两处都是“创建 讨论版主题”。

这里20是forum的id,其实就是term的id,比如“技术论坛”;
/node/add/forum 和 /node/add/forum/%termid 这两种情况下的标题(title)是以 drupal_set_title(t('Create @name', array('@name' => $types[$type]->name)), PASS_THROUGH); 这种形式定义的,具体可看下面menu回调里:
menu生成
http://api.drupal.org/api/drupal/modules%21node%21node.module/function/n...
menu回调
http://api.drupal.org/api/drupal/modules%21node%21node.pages.inc/functio...

两种情况起码应该一直是一样的才对;我估计出现你这种情况可能是语言设置的问题吧,我把语言改为英语,两种情况都变成了“Create 讨论版主题”,挺奇怪的,还没弄明白。

根据biglazy的提示,我找到node.pages.in

radarfyh's picture

根据biglazy的提示,我找到node.pages.inc第72行:
drupal_set_title(t('Create @name', array('@name' => $types[$type]->name)), PASS_THROUGH);

实际上,我在Home » Administration » Configuration » Regional and language » Translate interface中把'Create @name'翻译为'创建 @name',我估计@name变量没有翻译过来,可能和array('@name' => $types[$type]->name)有关,是不是array的使用妨碍了t()函数的作用?而且使用translate client也不能找到Forum topic这个词。我反复实验,问题依旧。

后来,我把
drupal_set_title(t('Create @name', array('@name' => $types[$type]->name)), PASS_THROUGH);
改为
drupal_set_title(t('Create ') . t($types[$type]->name), PASS_THROUGH);

刷新后,我发现有效果,标题显示为‘Create 论坛话题’,然后使用translate client翻译‘Create ’为‘创建 ’,问题解决。

不过我担心这样修改有其他副作用!

补充: 如果我把 drupal_set_title(t('

radarfyh's picture

补充:
如果我把
drupal_set_title(t('Create @name', array('@name' => $types[$type]->name)), PASS_THROUGH);
改为
drupal_set_title(t('Create ' . $types[$type]->name), PASS_THROUGH);

刷新后,标题显示为“Create Forum topic”,然后使用translate client可以找到Create Forum topic,翻译后解决问题。

另外,我是使用语言设置为中文的用户测试的,如果使用语言设置为英文的用户测试,不会有问题,因为都是显示为英文。

中国 - China

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: