用于存储翻译短语的XML或PHP文件?
我有大约1000个翻译短语。最好将它们存储在XML文件中,并在每个页面顶部使用PHP读取,还是将它们存储在每个页面中包含的PHP文件中的PHP变量中?什么是最好的,特别是对性能而言 备选方案1(XML文件):用于存储翻译短语的XML或PHP文件?,php,xml,performance,Php,Xml,Performance,我有大约1000个翻译短语。最好将它们存储在XML文件中,并在每个页面顶部使用PHP读取,还是将它们存储在每个页面中包含的PHP文件中的PHP变量中?什么是最好的,特别是对性能而言 备选方案1(XML文件): 家 博客 阅读更多 ... ... 备选方案2(PHP文件): 使用以下代码加载XML文件: <?php class Phrases{ //load phrases to PHP: public function load_phrases($lang_id)
家
博客
阅读更多
...
...
备选方案2(PHP文件):
使用以下代码加载XML文件:
<?php
class Phrases{
//load phrases to PHP:
public function load_phrases($lang_id) {
$xml = new DomDocument('1.0');
//path to language directory
$lang_path=("phrases/".$lang_id.'.xml');
$xml->load($lang_path);
//phrases are inside page tags, first we must get these
$page = $xml->getElementsByTagName('page');
$page_num=$page->length;
for($i = 0; $i < $page_num; $i++) {
$page=$xml->getElementsByTagName('page')->item($i);
//get phrase tags and store them into array
foreach($page->getElementsByTagName('phrase') as $phrase) {
$phrase_name = $phrase->getAttribute('name');
$phrases[$phrase_name] = $phrase->firstChild->nodeValue;
$phrases[$phrase_name] = str_replace('\n','<br/>',$phrases[$phrase_name]);
}
}
$this->phrases=$phrases;
}
//phrases are accessed
public function lang_id() {
//determine page language
$lang = 'en';
switch(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)){
case 'sv':
$lang = 'sv';
break;
case 'fr':
$lang = 'fr';
break;
case 'it':
$lang = 'it';
break;
case 'no':
$lang = 'no';
break;
default:
$lang = 'en';
}
$lang_id = isset($_COOKIE['lang']) ? $_COOKIE['lang'] : $lang;
//set the language cookie and update cookie expiration date
if(!isset($_COOKIE['lang'])) {
$expiration_date=time()+3600*24*7;
setcookie('lang',$lang_id,$expiration_date,'/');
}
if(!isset($lang_id) || $lang_id == NULL) $lang_id = 'en';
return $lang_id;
}
public function change_lang($lang_id) {
setcookie('lang',$lang_id,$expiration_date,'/');
}
//construct function
public function __construct() {
$this->load_phrases($this->lang_id());
}
}
?>
load($lang\u路径);
//短语在页面标签中,首先我们必须得到这些
$page=$xml->getElementsByTagName('page');
$page_num=$page->length;
对于($i=0;$i<$page_num;$i++){
$page=$xml->getElementsByTagName('page')->item($i);
//获取短语标记并将其存储到数组中
foreach($page->getElementsByTagName('phrase')作为$phrase){
$phrase_name=$phrase->getAttribute('name');
$phrases[$phrase\u name]=$phrase->firstChild->nodeValue;
$phrases[$phrase\u name]=str\u replace('\n','
',$phrases[$phrase\u name]);
}
}
$this->phrases=$phrases;
}
//短语被访问
公共函数lang_id(){
//确定页面语言
$lang='en';
开关(substr($\u服务器['HTTP\u接受\u语言'],0,2)){
案例“sv”:
$lang='sv';
打破
案例“fr”:
$lang='fr';
打破
案例“it”:
$lang='it';
打破
案件‘否’:
$lang='no';
打破
违约:
$lang='en';
}
$lang\u id=isset($\u COOKIE['lang'])?$\u COOKIE['lang']:$lang;
//设置语言cookie并更新cookie过期日期
如果(!isset($_COOKIE['lang'])){
$expiration_date=time()+3600*24*7;
setcookie('lang',$lang\u id,$expiration\u date',/);
}
如果(!isset($lang_id)|$lang_id==NULL)$lang_id='en';
返回$lang_id;
}
公共功能更改\u lang($lang\u id){
setcookie('lang',$lang\u id,$expiration\u date',/);
}
//构造函数
公共函数构造(){
$this->load_短语($this->lang_id());
}
}
?>
PHP文件加载了一个普通的PHP include。为了提高性能,PHP include文件不需要任何额外的外部步骤,因此与打开外部XML文件、读取和解析数据以及分配变量相比,这显然是性能上的赢家 但是,您可能需要检查性能增益在您的场景中是否重要,因为现代操作系统将小文件完全缓存在内存中,并且一千个项目不应该给整个运行时增加太多
我建议,如果您可以从Web服务器访问MySQL数据库实例,您可以考虑将这些实例存储在数据库中——性能应该大致在XML和PHP之间,但以这种方式使用数据库是一种更好的模式。
我肯定会质疑MySQL数据库实际上比读取单个xml文件慢。我见过许多人使用xml替代方案,但我从未见过PHP替代方案。为什么呢?因为你说PHP替代方案在性能上会更好,我想我会因为这个原因而改变。或者使用XML而不是PHP还有其他好处吗?我的意思是,为什么人们使用XML替代方案,而不直接使用带有变量的PHP文件?关于MySQL我不希望这样,因为这意味着每次加载页面时都需要从数据库中加载1000-1500行,我认为这不是一个好的解决方案。@Danie使用xml的一个优点是,您可以将它发送给几乎任何语言服务提供商,他们可以轻松地进行翻译,而不需要了解php。事实上,XML是像这样的翻译软件的首选文件类型之一。<?php
$header_home = "Home";
$header_blogs = "Blogs";
$header_readmore = "Read More";
...
?>
<?php
class Phrases{
//load phrases to PHP:
public function load_phrases($lang_id) {
$xml = new DomDocument('1.0');
//path to language directory
$lang_path=("phrases/".$lang_id.'.xml');
$xml->load($lang_path);
//phrases are inside page tags, first we must get these
$page = $xml->getElementsByTagName('page');
$page_num=$page->length;
for($i = 0; $i < $page_num; $i++) {
$page=$xml->getElementsByTagName('page')->item($i);
//get phrase tags and store them into array
foreach($page->getElementsByTagName('phrase') as $phrase) {
$phrase_name = $phrase->getAttribute('name');
$phrases[$phrase_name] = $phrase->firstChild->nodeValue;
$phrases[$phrase_name] = str_replace('\n','<br/>',$phrases[$phrase_name]);
}
}
$this->phrases=$phrases;
}
//phrases are accessed
public function lang_id() {
//determine page language
$lang = 'en';
switch(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)){
case 'sv':
$lang = 'sv';
break;
case 'fr':
$lang = 'fr';
break;
case 'it':
$lang = 'it';
break;
case 'no':
$lang = 'no';
break;
default:
$lang = 'en';
}
$lang_id = isset($_COOKIE['lang']) ? $_COOKIE['lang'] : $lang;
//set the language cookie and update cookie expiration date
if(!isset($_COOKIE['lang'])) {
$expiration_date=time()+3600*24*7;
setcookie('lang',$lang_id,$expiration_date,'/');
}
if(!isset($lang_id) || $lang_id == NULL) $lang_id = 'en';
return $lang_id;
}
public function change_lang($lang_id) {
setcookie('lang',$lang_id,$expiration_date,'/');
}
//construct function
public function __construct() {
$this->load_phrases($this->lang_id());
}
}
?>