【发布时间】:2013-02-20 23:04:03
【问题描述】:
所以我正在制作这个必须有多种语言的网站。我四处寻找并得出结论,我应该使用 XML 文件,每种语言一个。女巫对我来说很有意义,但这是我的问题:
我制作了一个如下所示的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<translations>
<frontpage>
<!--Main translation-->
<translation string="email" value="E-mail" />
<translation string="password" value="Password" />
<translation string="createacc" value="Create account" />
<translation string="login" value="Login" />
<!--Errors-->
<translation string="erroremail1" value="E-mail not valid" />
<translation string="erroremail2" value="There's no account with that e-mail" />
<translation string="errorpass" value="Incorrect password" />
</frontpage>
</translations>
但我只是不明白 PHP 库中的 XMLReader 和 DOMDocument 是如何工作的。这是我到目前为止的代码:
public function Translate($page,$string,$variables = array()) {
$reader = new XMLReader();
$reader->open(www::findFile("lang/".$this->short.".xml"));
//Here i want to find the <translation> with the attribute string that is === $string
//With the parent of $page (fx. Translate("frontpage","erroremail1"))
$reader->close();
$find = array();
for ($x = 0; count($find) != count($variables); $x++) $find[] = "{".$x."}";
return (isset($value)) ? str_replace($find,$variables,$value) : "NOT TRANSLATED (".$string.")";
}
解决方案:
public function Translate($page,$string,$variables = array()) {
//Read from XML
$reader = simplexml_load_file(www::findFile("lang/".$this->short.".xml"));
foreach ($reader->$page->translation as $t) if ($t['string'] == $string) { $value = $t['value']; break; }
$find = array();
for ($x = 0; count($find) != count($variables); $x++) $find[] = "{".$x."}";
return (isset($value)) ? str_replace($find,$variables,$value) : "NOT TRANSLATED (".$string.")";
}
【问题讨论】:
-
simplexml_load_file 是更好的选择。 blog.teamtreehouse.com/how-to-parse-xml-with-php5
-
如果您对使 XMLReader、DOMDocument 或 SimpleXML 工作的了解不够,那么您真的确定决定使用 XML 是个好主意
-
马克贝克,是的,我是。我宁愿花几天时间学习这些东西,然后使用某种后门。 Sibiraj thx 的链接,它真的很有帮助
标签: php xml domdocument xmlreader