php smarty 国际化问题

dilitech 2009-08-24 03:03:52
smarty模板的问题,在网上找到的资料只是说:
1.在模板里面把需要国际化的串加上{t}标签,
2.然后用smarty2c.php生成.c的文件,
3.再用linux的xgettext编译成.op的文件,
可是我不知到如何生成.c的文件,smarty是否需要添加插件,如何添加。
还有在我的smarty模板里加入t标签,smarty无法辨认。

越详细越好。
小弟新手,急死人了,帮帮忙,T_T含泪谢过........
...全文
268 点赞 收藏 15
写回复
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
letian003 2009-08-25
查下这个 i18n  ,可以搞多语言化
回复
dilitech 2009-08-24
jakey9826
我可以这样理解吗:
smarty在生成缓存模板时,里面已经是国际化之后的语言,这时js里的需要国际化的语言也是国际化之后的,
比如:$('user').innerHTML='<div>Name'+name+'</div>';
这里的“Name”是国际化之后的了
所以在js再次生成局部页面时已经是国际化好的语言了????
回复
程序猿之殇 2009-08-24
其实js获取数据,生成局部页面,这部分不需要变.

只要保证数据是正确的就行了.
所谓正确,后台在返回数据的时候,要根据当前语言,从语言包和数据库里取出对应语言的数据返回就可以了.
回复
dilitech 2009-08-24
大哥们啊,php的国际化我会的啊,结合smarty模板的我也可以搞出来个Demo的,9楼谢谢了,你那个我知道

可是我现在面对这几个问题:
1.我的框架是Ajax的,页面在onload的时候发送请求,js得到数据生成页面,按照上面的方法此时也得到传过来的语言,整个网站都需要国际化的,也就是说网页全是要js生成。
2.再次提交的时候,局部生成的页面就没有国际化了。
3.太多了,现在这个网站只有我一个人,这样太慢了。
4.其实只要页面不由js生成也就没有这些问题,不过我只有这一个办法。或者说谁有个思路,把模板里面替换成国际化之后的语言这一步说的详细一些,我已经决定晚上研究ecshop的国际化了.....
回复
dilitech 2009-08-24
也对,是没什么不一样的,
我的认为是在php执行构造函数是制定语言,是不经过后台的,至少不需要后台向前台输出数据,而是smarty的gettext直接替换模板中的字符。
乱了乱了,可能是我想错了,不过我看smarty的官方网站(http://smarty.incutio.com/?page=SmartyGettext)上是这个意思,
回复
fenyao 2009-08-24
顶楼上
回复
CYBEREXP2008 2009-08-24
《一。。。》

<?php
define('PACKAGE', 'hello'); // 定义要用的mo文件名称, 常规来说, 我们都把PACKAGE
// 的名称定义和程序名称相同。
putenv('LANG=zh_CN'); //指定当前操作系统环境为简体中文
setlocale(LC_ALL, 'zh_CN'); // 指定要用的语系, 如:en_US、zh_CN、zh_TW
bindtextdomain(PACKAGE, '/apache/htdocs/locale');
textdomain(PACKAGE);
/* gettext扩展将从 /usr/local/apache/htdocs/locale/en/LC_MESSAGES/
中查找hello.mo文件*/
echo gettext("Hello World!"); //按照mo文件中的转译显示相关语言
?>


然后使用两条命令:
1.xgettext -d hello hello.php 生成点hello.po文件
2.msgfmt -o hello.mo hello.po 生成点hello.mo文件

xgettext 和 msgfmt 自己去网上下载!!!

这个基本可以完成所有软件的国际化!!

《二.......》
在使用SMARTY 时将语言显示设置为变量,读入是设置全局configure语言包,然后根据不同的国家设计部同的语言就是了!!

此方法最实用!!
回复
程序猿之殇 2009-08-24
[Quote=引用 7 楼 dilitech 的回复:]
谢谢
你是说只要传给smarty就行了嘛?
可页面好多都是js生成的,js里的smarty也能编译吗?
其实主要就是这个问题,js生成的太多了,
这篇文章的方法好就好在直接在模板里替换了,

能说的详细些吗,怎么传给smarty,又是怎么编译的,
[/Quote]
你好像不太理解smarty是用来做什么的?

smarty就是一个PHP模板类,用来实现模板与数据的分离,最终生成页面返回给浏览器.
你所说的方法,也应该是用js向后台请求数据,然后局部更新或者全部更新当前页面以显示数据吧.

如果是一样的话,哪由你所指的插件返回数据,和由smarty或者只是由php程序返回数据,有什么不一样吗?
不解.

回复
dilitech 2009-08-24
谢谢
你是说只要传给smarty就行了嘛?
可页面好多都是js生成的,js里的smarty也能编译吗?
其实主要就是这个问题,js生成的太多了,
这篇文章的方法好就好在直接在模板里替换了,

能说的详细些吗,怎么传给smarty,又是怎么编译的,
回复
程序猿之殇 2009-08-24
搞这么复杂做啥.
1 生成语言包.
将不同的语言串保存成数组或者xml的形式,注意数组的键值或者xml的节点值要一致.
2 在程序中,每次根据当前请求的语言获取语言包,然后直接传给smarty就行了.
至于编译什么的,就交给smarty来做了.

你帖的这个文章,利用smarty插件,生成.c什么文件等等,优势在哪里,我没有看出来,呵呵.
回复
dilitech 2009-08-24
I know.
php的国际化我会做,这个也是用语言包的,只不过是在后台指定语言项后由smarty直接替换到模板里面了

闷了,在百度里只有这一篇文章被转来转去的,http://blog.163.com/qj_l12@126/blog/static/3593082620092324259451/
这里说的比较详细,帮我看看,谢谢了
回复
llj480028 2009-08-24
我好像也遇到过国际化的问题呀!帮顶吧!
回复
程序猿之殇 2009-08-24
用语言包可能更好些.

后台根据所选语言读取不同的语言包,取出来直接传给smarty.

回复
dilitech 2009-08-24
网站是欧洲的,需要做英语,法语,德语,俄语....一堆的语的国际化,
我的框架是Ajax的,总不能什么都是后台穿过来的吧,太多了,
smarty的就是直接把国际化之后的字符串直接替换的模板里,省事多了,可就是不会-_-!!!
回复
babysc1 2009-08-24
本人没用过插件 这国际化?是问的什么意思

编码识别?
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告