这是我能想到的最好的处理多语言网站的方法,现在(不确定)不涉及gettext、zend_translate或任何php插件或框架。
我认为这很简单:我有三种语言,我将它们的“内容”写在不同的文件中(以数组的形式),然后,我将这些内容调用到我的index.php中,如下图所示:
alt text http://img31.imageshack.us/img31/1471/codew.png
我刚开始使用php,我想知道我是否违反了php的良好实践,代码是否易受XSS攻击,或者我是否编写了更多不必要的代码。
编辑:我发布了一张图片,这样你就可以看到文件树(我不是懒惰的)
Vim :我使用EDIT2的主题是ir_black和NERDTree。
发布于 2010-02-25 05:25:25
在我看来没问题,尽管我个人更喜欢创建和使用字典助手函数:
<?php echo dictionary("showcase_li2"); ?>这将使您能够在以后轻松地切换方法,并使您能够更好地控制您的字典。同样,对于数组,你会有作用域的问题-你将不得不使用global $language;将它导入到每个函数中,这非常烦人。
当您必须向国际化字符串中插入值时,您可能还会遇到这样的情况:
You have %1 votes left in the next %2 hours.
Sie haben %1 stimmen übrig für die nächsten %2 stunden.
Sinulla on %1 ääntä jäljellä seuraavan %2 tunnin ajassa.这就是helper函数非常有用的地方:
<?php echo dictionary("xyz", $value1, $value2 ); ?> $value1和$value2将插入到字典字符串中的%1和%2中。
使用可以很容易地使用无限数量的参数来构建这样的助手函数。
发布于 2010-02-25 05:30:44
在我看来也没问题,但是
似乎你有多个模块/站点的本地化,那么为什么不把它分解成多维数组呢?
$localization = array(
'module' => (object)array(
'heading' => 'oh, no!',
'perex' => 'oh, yes!'
)
);我个人喜欢用以下命令在数组之外创建stdClass
$localization = (object)$localization;所以你可以使用
$localization->module->heading;:)我的2美分
发布于 2010-02-25 05:44:11
大体上还可以。例如,punBB的本地化工作方式是这样的。它非常快。比调用函数或对象的方法或属性更快。但我看到了这种方法的问题,因为它不容易支持语言回退。我的意思是,如果你没有中文字符串,就让它用英文显示。
当你升级你的系统,你没有时间把所有的东西都翻译成每种语言时,这个问题是非常重要的。
我最好使用像这样的东西
lang.en.php
$langs['en'] = array(
...
);lang.cn.php
$langs['cn'] = array(
...
);[prepend].php (一些通用库)
define('DEFAULT_LANG', 'en');
include_once('lang.' . DEFAULT_LANG '.php');
include_once('lang.' . $user->lang . '.php');
$lang = array_merge($langs[DEFAULT_LANG], $langs[$user->lang]);https://stackoverflow.com/questions/2329650
复制相似问题